LOB darkknight->bugbear
by St1tch문제를 보면 RTL이라는 힌트가 있고, 스택에서 쉘코드를 바로 실행을 못하도록 해놓았다.
따라서 힌트에 따라 RTL기법을 이용해서 문제를 풀었다.
RTL이란, Return To Libc 라는 기법으로, 쉘코드를 실행시키는 대신, 공유라이브러리에 접근을 해서 바로 쉘을 실행시키는 방법이다.
보통 system()함수나 execl()등 함수를 사용한다.(ebp+8의 값을 인자로 사용하기 때문에 접근하기 쉬움)
더 자세한 개념은 구글에 많이 나와있다.
우선 이문제에서 RTL을 하기 위해 필요한 재료가 system()함수의 주소, /bin/sh의 주소, 버퍼크기, 등 이정도만 있으면 공격이 가능하다.
system함수의 주소는 간단히 구할 수 있다.
버퍼의 크기는 40이다.
간단히 공유라이브러리에서 /bin/sh의 주소를 찾을 수 있다.
이제 재료들을 다 구했으니 exploit을 작성하면 된다.
위 그림은 RTL이해가 되기 쉽게 그려논 것을 가져왔다.
system에서 ebp+8의 값을 인자로 사용한다고 했는데, 이 값은 main에서는 ebp+c의 값이다.
따라서 이 문제에서는 dummy(44byte) + system주소(ret) + dummy(4byte) + /bin/sh주소
이렇게 하면 system함수가 작동될 때 /bin/sh가 실행이 된다.
<exploit code>
./bugbear `python -c 'print "\x90"*44 + "\xe0\x8a\x05\x40"+ "\x90"*4 + "\xf9\xbf\x0f\x40"'`
블로그의 정보
튜기's blogg(st1tch)
St1tch