Wargame & CTF/FTZ
[FTZ] Level20 Write-up
cg10036
2019. 7. 9. 04:32
포멧 스트링 버그를 이용한 문제이다.
%x를 4번 쳤을때 방금 친 aaaa값이 나왔다.
%n은 지금까지 출력한 바이트를 쓴다.
메인이 끝날때 소멸자를 실행하게 된다.
소멸자의 주소는 0x08049594이다. 소멸자+4에 주소를 쓰게되면 main함수가 끝나면 그 주소로 점프를 뛴다.
에그쉘의 주소는 0xbffff895이다.
이거를 둘로 쪼개서 0x08049598과 0x0804959a에 넣을것이다.
(python -c 'print "\x98\x95\x04\x08\x9a\x95\x04\x08%63629x%4$n%51050x%5$n"';cat)|./attackme
일단 0x08049598과 0x0804959a를 맨 앞에 써준다.
그리고 0xf895-8=63629이므로 %63629x를 한다. x가 아니고 d, o 다 상관없다.
그리고 출력된 바이트만큼 4번째에 써준다. 아까 4번째가 제일 첫번째로 친 값이었다.
그리고 f895>bfff이므로 1bfff-f895를 한다. 51050가 나온다.
그만큼 %51050x로 써주고 %5$n을 한다. 2번째로 쓴 값이 5이기 때문이다.
그러면 지금까지 쓴 값을 보면 \x00\x00\x00\x01\xbf\xff\xf8\x95이다.
앞에 01은 상관이 없기 때문에 이렇게 쓴것이다.
만약에 01이 생기면 안됬다면, bfff를 먼저 %hn(2바이트만 덮어씀, %n은 4바이트)로 쓰고, f895를 %hn으로 덮어 써야 할것이다.
Clear Password : i will come in a minute