profile image

L o a d i n g . . .

1. 문제

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

 

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

 

Hint를 확인한 모습이다.

앞의 16번 문제와 유사한 모습이다.

1. 입력 시 bof 가 발생함.

2. level 18로 권한을 상승함. 

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

 

다만, 여기선 쉘을 실행하는 부분이 없다.

-> 우리가 직접 쉘을 실행시켜줘야 한다.

 

처음에 system 함수를 통해 "binsh" 실행시키고자 했으나, 바이트도 부족하고 해서 안되었다.

그래서 환경변수를 통해 쉘을 실행시키는 방법을 썼다.

 

 

2. 문제 해결 과정

환경 변수란?

OS가 필요한 정보를 메모리에 등록해 놓고 필요할 때마다 참조하는 영역으로, 일반 사용자도 필요하다면 여기 등록해서 사용할 수 있다.

 

환경변수는 고정된 메모리 주소를 가진다는 장점이 있기에, 환경 변수에 쉘코드를 등록하고 그 환경 변수 주소를 알아낼 수만 있다면 익스에 잘 이용할 수 있다.

 

그래서 다음의 순서로 문제를 해결해보았다.

1. 쉘코드를 환경 변수에 등록

2. 환경 변수 주소 알아내기

3. bof 를 통해 함수 포인터 call에 환경 변수 주소를 overwrite 시킴.

-> 뒤에서 call이 실행되며 쉘을 획득할 수 있었다.

 

 

1. 쉘코드를 환경 변수에 등록

export 명령어 : 현재 등록된 환경변수에 대한 정보 출력

 

쉘코드를 환경 변수에 등록

export [환경변수명]=`python -c 'print "쉘코드"'`

 

env 명령어를 통해 잘 등록되었는지 확인

 

 

2. 환경 변수 주소 구하기

getenv() 함수를 통해 환경 변수의 주소를 얻을 수 있다.

간단한 코딩을 통해 getit.c 소스 파일을 만들고 gcc로 컴파일 해준다.

 

getit 을 실행시켜 쉘을 등록한 환경 변수의 주소를 얻는다.

환경 변수 주소 : 0xbffffc19

 

 

3. buf 와 call 간 offset

main 을 디스어셈블한 모습

buf : ebp - 56

call : ebp - 16

offset : 40

 

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

"A" + 0xbffffc19

 

 

3. 익스플로잇

 

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

 

Level 18 Password : "why did you do it"

 

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

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