티스토리 뷰



FTZ level15

pw : guess what



레벨 15입니다.


먼저 힌트를 보겠습니다.


buf의 크기는 20이지만 45만큼 입력을 받으니 버퍼오버플로우가 발생합니다.


check가 포인터군요.


아까와 조금 다른데, 포인터가 가르키는 값이 0xdeadbeef이면 쉘을 실행해줍니다.


코드상에 0xdeadbeef가 있으므로 main내에서 0xdeadbeef가 값인 주소를 포인터에 넣어주면 되겠네요!


먼저 분석을 하기 위해 tmp로 옮겨주겠습니다.



보기 쉬운 intel로 보겠습니다.



어셈블리 코드 입니다.


스택프레임이 0x38만큼 배정되어있습니다.



0x38은 10진수로 56입니다.


ebp-56부터 입력을 받습니다.


ebp-16이 *check 변수임을 알 수 있습니다.


따라서 esp+40만큼을 값을 넣어주고 esp+40부터 0xdeadbeef를 가르키는 메모리 주소 즉 포인터 주소를 적어주면 될 것 같습니다.


main+32에서 0xdeadbeef를 검사하고 있으니 근처에 0xdeadbeef가 적혀있을 것 입니다.



main+34 0x8048b2가 0xdeadbeef라는 값을 가진 주소이군요.


페이로드를 짜보겠습니다.


(python -c 'print "A"*40+"\xb2\x84\x04\x08"';cat) | ./attackme


tmp파일에 공격을 해보겠습니다.



쉘을 얻었습니다.


실제 공격을 해보겠습니다.



권한을 얻었습니다.



Level16 Password is "about to cause mass".

'pwnable > FTZ' 카테고리의 다른 글

[Hackerschool FTZ] Level17 write-up  (0) 2018.01.17
[Hackerschool FTZ] Level16 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level14 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level13 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level12 write-up  (0) 2018.01.15
Comments