튜기's blogggg

LOB assassin->zombie assassin

by St1tch



문제를 보면 ret주소의 첫번째 바이트가 \x40이나 \xbf가 되지 않는다.

그리고 argv[1]에서 48바이트 만을 들고온다.

따라서 기존의 방법은 사용할 수가 없다.

근데 이전에 문제중에 함수에서 sfp의 1바이트를 수정하여 main함수가 종료될 때 ret를 바꿀수 있었다.

이 문제는 함수안에서 sfp를 수정할 수는 없지만 ret주소를 바꿀수 있기 때문에 동일한 방법으로 공격이 가능하다.


즉, sfp주소를 buf의 시작주소로 잡고 ret주소를 leave명령어가 호출되는 곳의 주소로 한다.

buf의 구조는 이전에 풀었던 문제와 거의 같다.



이와 같이 작성하면 

첫 leave가 호출될때 ebp가 buf+0주소로 된다.

그리고 ret를 할때 다시 leave로 돌아간다. 

그리고 두번째 leave에서 ebp는 buf+0의 4바이트, 즉 더미값이 되고

ret명령어에서 eip는 buf+4에 지정해놓은 system의 주소가 된다.

이 후 system함수의 인자로 /bin/sh가 들어가 쉘이 실행된다.

system함수를 사용하지 않고 buf 뒷부분의 남는공간에 쉘코드를 집어놓고 그쪽으로 ret해주어도 상관없다.





system함수 주소


/bin/sh 주소


leave 주소


gdb에서 buf의 시작주소


core파일을 통해 알아낸 buf의 시작주소


알아낸 주소를 토대로 익스플로잇을 작성했다.

`python -c 'print "A"*4 + "\xe0\x8a\x05\x40" + "A"*4 + "\xf9\xbf\x0f\x40" + "A"*24 + "\x40\xfc\xff\xbf" + "\xdf\x84\x04\x08"'`







블로그의 정보

튜기's blogg(st1tch)

St1tch

활동하기