■ Wargame/- Pwnable.kr

[Pwnable.kr] BoF - 5 pt ( Write Up )

개발따 2019. 6. 9. 01:01

□ 문제를 보면 아래와 같다. Bof.c라는 소스코드와 bof 바이너리 파일이 주어졌다.

 

 Bof.c 코드를 봐본 결과 func 함수안에 있는 key 지역 변수 값이 "0cafebabe" 값이면 bof 권한으로 /bin/sh 실행시킬 있다.

 - Key 값을 "0cafebabe" 만들기 위해선 gets 함수를 이용해 overflowme[32] 배열에 입력 값을 받을 buffer overflow 일으키면 된다.

 

 

 Bof 공격 성공하기 위해선 바이너리 overflowme[32] 배열 주소의 위치와 key 주소의 위치 차이를 정확히 할아야하므로 bof 바이너리를 아래와 같이 IDA 열어보았다.

 - 해당 코드는 func() 함수의 코드이다.

 - "Cmd [ebp+arg_0], 0CAFEBABE" 코드는 key 지역 변수와 "0cafebabe" 값을 비교하는 코드이다.

 - gets 함수를 통해 [ebp+s] 주소에 문자열을 입력받고 있다.

 - 이 , [ebp+s](=ebp-2C) 임의의 입력 값을 ebp+arg_0(=ebp+8)까지 overflow 시킬 있다.

 - 따라서 gets 함수를 통해 문자열을 입력 받을 , 임의의 52(=ebp-2C ebp+8 차이) 바이트와 "0cafebabe" 값을 입력하면 "/bin/sh" 실행시킬 있다.

 

□ Python 통해 임의의 52(=ebp-2C ebp+8 차이) 바이트와 "0cafebabe" 값을 입력시킨 결과 "/bin/sh" 실행되어 bof 권한을 얻을 있게 되었다.

 - Cat 명령어를 통해 flag 값을 읽은 결과 문제가 풀리게 되었다.

'■ Wargame > - Pwnable.kr' 카테고리의 다른 글

[Pwnable.kr] flag - 7 pt ( Write Up )  (0) 2019.06.10
[Pwnable.kr] collision - 3 pt (Write Up)  (0) 2019.06.09
[Pwnable.kr] Fd - 1pt (Write up)  (0) 2019.06.09