slide-image

 

FTZ

[Free Training Zone]

# level20

 

드디어...끝났다...

사실 이번 문제를 가장 못풀었는데, 내가 포맷 스트링 버그에 대한 정확한 이해를 못했기 때문이다.

가장 이해가 잘되었던 사이트를 참고 사이트란에 써놓아야겠다. 언제 다시 까먹을지 모르니..

티스토리 에디터 너무조타~!~!

 

일단 소스는 이렇다고 한다:>

뭐 그냥 대놓고 FSB를 쓰라는 문제인 것 같다.

...더보기

흠 일단 얼마나 떨어져있는지 확인해 보았다. 

(더미값이 있는지 없는지)

딱 esp에서 4*4=16바이트만큼 가야지만 0x41414141이 나오는 것으로 보아서, esp-16부분에 bleh가 있다는 것을 알 수 있다.

 

그리고 .dtors의 주소를 보니 0x08049594이므로, ret주소는 08049598이 된다.

그리고, 환경변수로 쉘코드를 등록해준다.

사실 cat hint 부분을 보면 메인함수 리턴값도 없고, 메인함수 자체도 멀쩡하지 않아서 gdb가 cp를 해도 뭐 뜯어볼 수가 없다.

브레이크도 못 걸고,, 그래서 그냥 하나 만들었다.

내용은 별거 없음 걍 메인함수에 return 0;만 시켰다. gdb 해서 환경변수 주소 구하려고 임시로 만든 것이다. 

만든 파일을 gdb 시켜서 b *main 하고 r 해서 메모리를 뜯어보았다. 저기 있다! 대충 쉘코드 주소를 0xbffffbc3으로 잡았다.

 

FSB에 대한 내용을 여기서 일일이 설명하진 않겠지만, 아까 %x을 3번했더니 비로소 A의 값이 나오는 것으로 보아 16바이트 떨어진 곳까지 가야하므로 마지막에 %08x%08x%08x을 해주었다.(esp를 bleh가 있는 곳까지 옮겨야 하기 때문이다.)

쉘코드의 주소가 0xbfffffbc3이었으니 두 개로 나누어서 bfff fbc3로 하였는데, 리턴어드레스가 0x08049598이니 처음에 \x98\x95\x04\x08에 fbc3를 저장해야 했다. fbc3는 십진수로 64451이었고, 앞에 40개의 문자가 있으니 64411 바이트를 입력하여 \x98\x95\x04x08주소에 들어가게 한다. AAAA들은 %n을 만나면 4바이트 올라가므로 그냥 아무거나 넣어준 것이다. 

뒤에도 마찬가지로 2바이트 써준거니 이제 ret에서 2바이트 더한 0x0804959a에 bfff를 써주어야 하는데, 1bfff-fbc3해주면 십진수로 50236이 나온다. 그리고 gets 함수니까 그에 맞에 페이로드를 써줘야 했다.

성공 :D



 

 

 

참고 :

https://geundi.tistory.com/124

https://bbolmin.tistory.com/34https://wisetrue.tistory.com/122

 

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

[FTZ] level19->level20  (0) 2019.03.27
[FTZ] level18->level19  (0) 2019.03.27
[FTZ] level17->level18  (0) 2019.03.23
[FTZ] level16->level17  (0) 2019.03.23
[FTZ] level15->level16  (0) 2019.03.23