chipkkang9's story

[Whois 정보보안교육] Part-time Job 문제풀이 본문

CTF/Pwnable

[Whois 정보보안교육] Part-time Job 문제풀이

chipkkang 2021. 12. 6. 17:01

준비물


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

 

문제소개


[DoPwn] Part-time Job

 

문제풀이


포너블 교육 마지막 3주차 2번째 문제

Part-time Job이라는 문제이다.

 

C언어에서의 Integer Issue,

int 정수형 자료형의 Overflow, Underflow를 사용하는 문제였다.

IDA를 통해 문제 파일을 열어보면 다음과 같다.

 

IDA를 통해 part-time 파일을 열어본 모습

 

첨부해놓은 코드 맨 아래쪽에 else 이후 부분은

이전에 나왔던 "You earn # points!"와 같은 부분이 반복되는 코드였다.

 

문제를 해결하기 위해 주목해야 하는 부분은 system("/bin/sh");

함수가 들어가 있는 while문 부분이다.

 

while문 속에 있는 if문을 보면

v3에 999를 넣어주어야 하고,

이와 동시에 v4에는 4억이 넘는 값을 넣어주어야

system함수가 실행되어 쉘 권한을 가져온다고 말하는 코드이다.

 

일단 리눅스에서 프로그램을 실행시켜보았다.

 

nc ip주소를 통해 프로그램에 접근한 화면

 

처음에 주어진 포인트는 30으로, v4를 출력한 것이다.

1. PC방 알바

2. 레스토랑 알바

3. 학교 근로 알바

4. 쉼

 

방법은 두 가지가 있을 것이다.

하나는 알바를 4억번 정도 해서 point 4억을 넘겨주는 것이고

다른 하나는 극단적으로 쉬어서 Integer Underflow를 발생시켜 4억을 넘겨주는 방법이다.

 

아무래도 후자가 똑똑한 방법일 것이다.

한 번 극단적으로 동면을 취해보겠다.

 

극단적으로 쉰 후의 화면

 

쉬기만 했는데 4억이 들어오다니,,, 이런 개꿀이 없다.

 

우선 v4의 조건을 만족시켜줬으니, 뒤의 scanf에 v3의 값을 999로 넣어주면

 

성공적으로 shell을 얻어낸 모습

 

shell을 성공적으로 얻어낸 것을 볼 수 있다.

 

그럼 곧바로 cat flag를 입력해주면?

 

성공적으로 flag가 출력된 모습

 

flag가 잘 출력되는 것을 확인할 수 있다.

Comments