[Pwnable] 내 버퍼가 흘러넘친다!!!
Wargame/HackCTF

[Pwnable] 내 버퍼가 흘러넘친다!!!

 

오늘은 내 버퍼가 흘러넘친다!!!를 정리하겠습니다

 

먼저 Mitigration을 먼저 체크하겠습니다 👀

빨갛게 물들ㄹ었다...

 

확실히 기초적인 문제여서 그런지 Mitigation이 깔끔합니다.

바로 IDA로 까보겠습니다.

 

name은 전역변수로써 bss 영역에 위치해 있으므로

read에서 BOF가 터지지는 않을거 같습니다.

 

하지만 변수 s는 0x14만큼 Buffer가 할당되어 있지만

gets로 입력을 받게 되면 Buffer length check를 해주지 않아

BOF가 터질 것 같습니다👏

 

일단 리눅스에서 Binary를 실행시켜 보겠습니다.

 

세...그..ㅍ...ㅗㄹ...트...

아까 예상했던 것처럼 input을 입력받을때 변수 S에 할당되어 있는

Buffer보다 입력을 더 받을 때 Segmentation Fault가 뜨는 것을

볼 수 있습니다 👍

 

그럼 우리는 어떻게 쉘을 따야할까요

 

일단 위에서 말했듯 bss 영역에 있는 name을 활용해야 할 것 같습니다.

 

처음 name을 입력 받을때 쉘코드를 넣고

그 후 S의 Buffer을 Dummy값으로 채운 후 

name의 주소 값을 호출 한다면 쉘이 따일거 같습니다😀

 

그럼 name의 bss 주소를 구해야겠죠?

이 부분이 name을 입력받는 곳입니다.

 

그럼 main + 53에 Break Point를 걸어 name의 주소를 알 수 있을거 같습니다.

 

main + 53에 Break Point를 걸어 실행시켰습니다.

 

Register 목록을 보면 ECX에 A가 들어간것을 볼 수 있습니다.

그렇다면 Name의 주소는 0x804a060이 될것입니다.

 

이제 구할 거는 다 구했습니다

바로 페이로드 작성하겠습니다👋

 

깔끔하게 쉘이 따지는 모습을 볼 수 있습니다.

너무 기초적인 문제라 다행히 아직까지 쉽습니다...👀

 

FLAG = HackCTF{1_l0v3_70p_pwn3r_m4lhyuk}

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

[Pwnable] x64 Simple_size_BOF  (0) 2020.09.19
[Pwnable] x64 Buffer Overflow  (0) 2020.09.16
[Pwnable] Basic_FSB  (0) 2020.09.06
[Pwnable] Basic_BOF #1 & Basic_BOF #2  (0) 2020.09.02
[Forensics] So easy?  (0) 2020.09.02