chipkkang9's story

[HackCTF] Basic_BOF #1 문제 풀이 본문

CTF/Pwnable

[HackCTF] Basic_BOF #1 문제 풀이

chipkkang 2021. 12. 28. 06:00

준비물


IDA Pro 7.0, Linux 작업환경 (본인은 kali linux를 사용함)

https://hex-rays.com/ida-pro/

 

IDA Pro – Hex Rays

Substantial changes Is to be expected in every release: new features, supported processors, etc which are all added after deliberation and discussion.

hex-rays.com

 

문제소개


[HackCTF] Basic_BOF #1

 

 

문제 풀이


문제를 보면 bof_basic이라는 binary파일이 주어져 있다.

 

해당 파일은 64bit가 아닌, 32bit의 파일이므로

IDA 32로 열어주었다.

 

IDA를 통해 bof_basic 파일을 열어본 화면

 

IDA로 bof_basic 파일을 열어준 화면이다.

 

main함수 외에는 특이한 함수도 존재하지 않은 것 같다.아무래도 basic 문제이기 때문에 그런 것 같다.

 

 

처음부터 파일을 해석해보자.

 

char형 변수 s가 총 40byte(2Ch - 4h)의 크기로 선언되어있다. 

직후, int형 변수 v5가 마찬가지로 선언되어있다. 아마도 4byte의 크기로 예상된다.

 

그 후에 printf문으로 s의 버퍼를 출력해주고,v5의 주소값 또한 출력해주고 있다.

 

다음으로 if문을 통해 v5의 값이 67305985나, -559038737모두 아니라면, "잘하고 있어요!"라고 출력한다.

 

하지만, 핵심 코드인 다음 문장은v5의 값이 -559038737일 경우에 /bin/dash 를 실행하는 코드로 해석된다.

 

 

그렇다면 우리는 BOF 기법으로 s를 쓰레기 값으로 덮어주고,

v5를 -559038737 즉, HEX값으로 0xDEADBEEF값으로 덮으면 풀 수 있을 것이다.

이렇게 하도록 해보자.

 

페이로드를 짜준 결과는 다음과 같다.

 

basic_bof1.py

 

그리고 이를 실행시켜주면,

 

제대로 쉘이 따지는 화면

 

이처럼 제대로 쉘이 따져서 flag가 출력되는 것을 확인할 수 있다.

Comments