FTZ_level15

해킹/FTZ 11~20 2016. 1. 13. 17:59


level15의 attackme 소스다.

처음에는 뭐가 바꼈는지 몰랐을 정도로 level14와 판박이다.

자세히 보니 check이 int형 포인터로 바뀌었다. 전에는 스텍에서 check의 영역에 직접 0xdeadbeef를 넣어줬지만 이제는 0xdeadbeef를 가르키는 주소를 넣어주면 되겠다.



먼저 main을 디스어셈블한 결과다. level14와 마찬가지로 ebp-56이 buf, ebp-16이 check이다.

이 check에 주소를 넣어서 0xdeadbeef를 가르키게 해야 하는데...

안타깝게도 FTZ 서버에는 aslr이 걸려있어서 0xdeadbeef를 스텍 어딘가나 환경변수에 넣어놓고 그 주소를 check에 넣어줄 수는 없다.

하지만 aslr이 걸려있어도 코드 자체의 주소는 변하지 않는다.

그러므로 0x080484b0 <main+32>에서 쓰이는 저 0xdeadbeef를 사용하면 된다.

정확한 주소를 보기위해 해당부분의 메모리를 바이트단위로 나열해봤다.




보면 세번째에 0xdeadbeef가 쓰여있는것이 보인다. 그러므로 정확한 주소는 0x080484b2가 되겠다.


페이로드는 40바이트 더미 + 0x080484b2  를 파이프로 넣어주면 된다.

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


level16의 패스워드를 얻어냈다.

끝-

'해킹 > FTZ 11~20' 카테고리의 다른 글

FTZ_level17  (0) 2016.01.13
FTZ_level16  (0) 2016.01.13
FTZ_level14  (0) 2016.01.13
FTZ_level13  (0) 2016.01.13
FTZ_level12  (0) 2016.01.13
Tags
Social