완료됨
payload 구성에 관한 질문
pie의 base 주소를 얻고, changeme의 주소까지 잘 계산했습니다. 이제 FSB를 이용해 changeme의 주소값에 1337을 써넣으면 되는 단계인데, payload 구성 시
payload = b"%1337x%8$n" + b'A'*6 + p64(changeme)
이게 먹힌다는 것은
payload = p64(changeme)+ b"%1337x%6$n" + b'A'*6
이렇게 적어도 먹혀야 하는 것 아닌가요? changeme가 stack의 첫번째 인자로 쌓이면서 %6$n의 자리가 p64(changeme)를 가르키게 되는 것이니까요... 하지만 작동하지 않습니다 왜인건지 잘 모르겠어요 ㅠ
#pwnable
작성자 정보
답변
1
안녕하세요, 52pickle 님!
printf()
는 문자열의 끝을 null(0x00
)으로 간주하고, null 바이트를 만나기 직전까지의 문자열을 출력합니다.
포맷 스트링 버그가 정상적으로 작동하기 위해서는 인자로 우리가 입력한 포맷 스트링이 전달되어야 하는데,
payload = p64(changeme)+ b"%1337x%6$n" + b'A'*6
와 같이 입력하시는 경우 changeme
의 주소에 null 바이트가 포함되어 있어 뒷부분의 포맷 스트링이 인자로 들어가지 않습니다.
즉, printf()
의 인자로 changeme
의 주소 6 바이트만 전달되기 때문에 작동하지 않는 것입니다.
이해에 도움이 되었기를 바랍니다.
감사합니다.