[Pwnable] Basic_BOF #1 & Basic_BOF #2
Wargame/HackCTF

[Pwnable] Basic_BOF #1 & Basic_BOF #2

- Basic_BOF #1

 

너무나도 쉽고 기초적인 문제입니다

 

바로 IDA로 까보겠습니다 🙌

 

흥미롭다...흥미로워...

 

 

일단 코드를 대충 보자면 fgets로 s를 45byte만큼 입력받아

BOF가 터지기는 힘들어보입니다.

 

그 다음 만약 0x4030201에 위치해있는 V5가 특정 값이 된다면 쉘이 따이는군여

 

일단 GDB로 디버깅해보겠습니다

peda 아름답다..

 

잘 안보이겠지만 fgets로 입력받은 바로 다음 부분에

Break Point를 걸어준다면

S의 버퍼 크기를 알 수 있을것입니다.

 

처음 0x61616161이 있는 위치와 0x4030201의 위치를 잘 보세여

위 사진을 봄으로써 S와 0x4030201에 위치해있는 V5의 거리가

40byte라는 것을 구할 수 있게 되었습니다.

 

그럼 S에 40byte를 채워넣고 V5의 조건에 있던 값인

0xDEADBEEF를 넣어준다면 쉘이 따이는 행복한 상상을 할 수 있을거 같습니다.

 

그렇다면 바로 페이로드를 짜볼까요 👀?

 

누가 보면 맥북인줄 (‘A`)

 

와! 플래그!

FLAG = HackCTF{f1r57_574ck_buff3r_0v3rfl0w_5ucc355}

- Basic_BOF #2

 

두 번째 문제도 너무 쉽습니다...🙆‍♂️

 

바로 IDA로 까보겠습니다

 

흠ㅁ 코드를 보아하니

fgets로 S를 133byte를 입력받으니 BOF가 터지긴 힘들거 같습니다

 

그렇다면 sup함수를 Pointing하고 있는 v5를 

어떻게 하면 될거 같습니다.

 

그럼 쉘을 어떤 방식으로 띄워야할까요..??

 

IDA Function List를 잘 살펴보면 의심스러운 함수가 있습니다

 

바로 shell이라는 함수인데요

 

와! /bin/sh !

그렇다면 위에 말했듯 v5가 sup함수를 Pointing하고 있으므로

sup함수 대신 shell 함수 주소로 덮으면 되지 않을까요 ??

 

그럼 S와 v5의 거리를 구해보겠슴다.

 

S는 0x8C 버퍼가 할당되어 있고

v5는 0xC 만큼의 버퍼가 할당되어 있습니다.

 

그럼 0x8C - 0xc = ??

 

바로 128👀

 

그럼 Payload를 구상하겠슴니다.

 

A로 128 Byte를 Stack을 채우고 

Pwntools를 Import 해서 ELF로 

shell의 symbol address로 v5를 채웁니다.

 

 

 

와! 플래그!

FLAG = HackCTF{h3y_dud3_600d_f0r_y0u}

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

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