[Pwnable] Basic_FSB
Wargame/HackCTF

[Pwnable] Basic_FSB

F...S....B...

오늘은 FSB 문제를 풀어보도록 하겠슴다.

 

일단 Binary 파일을 IDA로 까주도록 하겠습니다

 

ㅇ오잉 별게 없네요

그렇다면 vuln 함수로 들어가 보도록 하겠습니다

 

우왕ㅇ

천천히 하나씩 살펴보자면 fgets로 변수 s에 입력을 받습니다.

하지만 BOF는 터지지 않을것이고 

snprintf도 별 취약점은 존재하지 않습니다.

 

하지만 return 값으로 printf(&format)을 해줍니다.

여기서 FSB 취약점이 터집니다

 

자세한 FSB 취약점은 다른분이 설명을 아주 잘 해놓으셨으니 

다른 블로그를 참고해주세요...👀

 

일단 Mitigration을 체크해봅시다.

빨갛게 빨갛게 물들었네~

아주 바람직한 Mitigation입니다.

 

실행을 먼저 해봅시다 🙌

 

 두번째에 들어가는 포멧스트링에

AAAA가 포인팅 되는 것을 볼 수 있습니다.

 

 

일단 정리를 해봅시다.

1. Got Overwrite를 위해 printf의 Got Address 구하기

2.  /bin/sh를 띄워주는 Function Address 구하기

3. printf@Got에 /bin/sh Address 넣기

 

이렇게 정리 할 수 있겠군요!

 

일단 printf의 Got Address를 구해봅시다.

 

printf의 Got Address = 0x804a00c

 

찾았다...함수...

공교롭게도 /bin/sh를 띄워주는 함수가

존재합니다 😶!

 

FLAG Address = 0x080485b4

 

그럼 구할꺼는 다 구했으니 바로 페이로드를 짜보도록 할까요?

 

여기서 %x와 %n을 이용해서 

Got Overwrite를 해줍니다.

 

참고로 위에서 -4byte를 해준 이유는 앞에서 printf Got 주소를 4바이트를

넣어주어서 4바이트를 뺴줬습니다.

 

와! 플래그!

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

'Wargame > HackCTF' 카테고리의 다른 글

[Pwnable] x64 Buffer Overflow  (0) 2020.09.16
[Pwnable] 내 버퍼가 흘러넘친다!!!  (0) 2020.09.15
[Pwnable] Basic_BOF #1 & Basic_BOF #2  (0) 2020.09.02
[Forensics] So easy?  (0) 2020.09.02
[Forensic] Welcome_Forensics & Question?  (0) 2020.09.02