문제를 어찌 풀긴 풀었는데... 궁금한게 있습니다.

처음에는 "%1$hn" 2바이트 방식으로 접근해서 풀려고하는데 도저히 쉘을 획득할 수 없었기에 (제가 지식이 너무 짧아서...)
"%1$hhn"으로 1바이트로 했더니 되었습니다..이유가 있나요??

첫 번째 %hn 페이로드 : \x12\xa0\x04\x08\x10\xa0\x04\x08%2044c%1$hn%32357c%2$hn
두 번째 %hhn 페이로드 : \x10\xa0\x04\x08\x11\xa0\x04\x08%97c%1$hhn%29c%2$hhn

#pwnable
작성자 정보
답변 2
avatar
연주
2023 Christmas CTF 참여

sprintf 로 스택 위의 변수에 쓰고 있으므로 32357바이트나 쓰면 스택 범위를 넘어가서 segmentation fault로 죽는 것이 아닐까 싶네요

2020.07.28. 16:19
avatar
GB
강의 수강: 10

sprintf함수에서 stack_buf에 출력값이 저장되는데 stack_buf변수의 크기가 0x90입니다.
즉, 0x90크기만큼만 출력을 할 수 있고 %hn서식 문자를 사용하면 출력범위를 넘어서기 때문에 이 경우에 문제가 안 풀리는 것 같습니다.

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