profile image

L o a d i n g . . .

1. 문제

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

 

attackme 를 실행하니 입력을 받고 입력받은 것을 출력한다.

 

Hint 를 확인한 모습이다.

소스코드가 상당히 심플하다.

gets() 를 통해 입력을 받고, printf() 를 통해 입력 받은 것을 출력한다.

 

그런데 gets 를 통해서 입력을 받을 때, 입력값 검증을 하지 않기에 bof 가 발생한다.

따라서 ret를 변경해주면 될 것 같다.

1. 환경 변수에 등록한 걸 이용

2. nop을 줘서 풀어도 될 듯함.

 

이번엔 환경 변수를 이용해 풀어보겠다. 

이때, 코드에 권한을 상승하는 부분이 없기에 setruid 함수를 포함하는 41byte shellcode 를 환경변수에 등록해줘야한다.

 

 

 

2. 문제 해결 과정

환경 변수에 41 byte 쉘코드 등록

환경 변수를 등록할 때 앞에 nop을 적당히 주는 것을 추천한다!

처음에 nop 을 주지 않았는데, 쉘이 잘 따지지 않았다.

 

환경 변수의 주소를 알기 위해 getit.c 를 만든다.

컴파일 한 후 실행하면 환경 변수의 주소가 출력된다.

 

환경 변수의 주소 : 0xbffffc5a

 

buf 위치 : ebp-40

페이로드는 다음과 같을 것이다.

"A"*44 + 0xbffffc5a

 

 

3. 익스플로잇

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

 

Level 20 Password : we are just regular guys

 

 

다음과 같은 방법으로 쉘을 따도 된다.

ret( setruid 시작 주소 ) + ret (쉘 코드가 등록된 환경 변수) + 인자(3100) + 인자 (3100)

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

[FTZ] 해커스쿨 FTZ level 18  (0) 2021.04.13
[FTZ] 해커스쿨 FTZ level 17  (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
복사했습니다!