profile image

L o a d i n g . . .

1. 문제

파일들을 확인한 모습이다.

 

바이너리를 실행하니 입력을 받고 "Hello there!" 을 출력한다.

 

힌트를 확인한 모습이다.

소스 코드를 간단하게 분석해보면 다음과 같다.

 

1. 입력 시 bof 발생

2. 함수 포인터를 통해 call() -> printit() 실행

3. shell 함수를 직접 실행하는 부분이 없음. 어떻게 shell 함수를 실행시킬 수 있을까?

-> shell 함수를 실행하는 것이 문제의 목표임.

 

고민해보다가 다음의 아이디어가 떠올랐다.

bof 를 통해 함수 포인터에 printit() 대신 shell() 을 넣어주면

그 뒤에 call이 실행되며 shell()을 실행할 것이다.

 

 

2. 문제 해결 과정

필요한 것들을 구해보자!

 

1. 함수 포인터의 위치

main을 디스어셈블한 모습이다.

mov DWORD PTR [ebp-16], 0x8048500이

void (*call)() = printit 부분 같아서 printit 함수를 디스어셈블 해보았다.

그 결과 0x8048500이 printit 함수의 시작부분으로, 함수 포인터 *call의 위치는 ebp-16이다.

 

printit을 디스어셈블한 모습이다.

*call = ebp-16

buf = ebp-56

40만큼 차이남 -> overwrite 가능함.

 

 

 

2. shell()의 시작 주소

shell() 시작 주소 : 0x80484d0

따라서 payload는 다음과 같을 것이다.

payload = "A"*40 + 0x80484d0

 

 

3. 익스플로잇

 

위의 논리대로 페이로드를 작성해보았다.

 

Level17 password : "king poetic"

'Wargame > Hackerschool FTZ' 카테고리의 다른 글

[FTZ] 해커스쿨 FTZ level 18  (0) 2021.04.13
[FTZ] 해커스쿨 FTZ level 17  (0) 2021.04.13
[FTZ] 해커스쿨 FTZ level 15  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 14  (0) 2021.04.12
[FTZ] 해커스쿨 FTZ level 13  (0) 2021.04.12
복사했습니다!