main
vuln
vuln 함수를 보니 target 주소는 0x08049638인것같다.
그리고 hint에 나온 objdump 명령어 통해서도 구할 수 있다.
이제 target에 어떻게 접근할 것인지 봐야한다.
메인쉘로 돌아와 ./format $(python -c 'print "AAAA" + "%x."*200)를 입력해보니
입력한 AAAA인 41414141이 안보인다. 그래서 숫자를 조금씩 줄이며 찾아봤다.
그전까진 stack에서 깨져서 나왔지만 150까지 내려서야 완전한 414141을 찾을 수 있었다.
(깨지면 안되는 것은 AAAA 뒤에 바로 이어서 target 주소를 넣어 앞의 숫자들을 해당 주소로 넣어주기(%n) 위함이다.)
최대한 끝으로 보내 몇번째인지 세기 쉽게 했지만 안깨지고 잘 나오는건 최대가 130만큼 설정했을 때였다. 그러니까
AAAA 다음에 target 주소가 잘 들어간 것을 확인했다.
다시 숫자를 줄이면서 보니 129번째에 target 주소가 들어가있고,
값 불러오는 %x 대신 %n를 넣어 payload를 작성해보니, 성공!
payload : ./format1 $(python -c 'print "AAAA" + "\x38\x96\x04\x08" + "%x."*128 + "%n"')
'LiveOverFlow' 카테고리의 다른 글
Format 3 (0) | 2020.11.04 |
---|---|
Format 2 (0) | 2020.11.03 |
Format 0 (0) | 2020.11.01 |