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

FTZ level16 풀이 본문

wargame 풀이/FTZ

FTZ level16 풀이

yehey 2020. 9. 30. 16:40
id: level16
pw: about to cause mass

힌트를 읽어봅시다. (오늘은 즐거운 추석연휴♡)

이번에는 main 함수 뿐만 아니라 shell 함수와 printit 함수까지 볼 수 있다.

main함수에서는 call포인터에 printit 함수의 주소를 넣어주고, fgets 이후에 call함수를 호출하고 있다.

shell은 main함수에서는 호출되지 않았지만, setreuid와 shell을 띄워주는 기능을 한다.

그럼 fgets 취약점을 이용해 call에 printit의 주소가 아닌 shell함수의 시작주소를 넣어준다면? 

shell()함수가 호출되면서 level17 권한의 shell이 실행될 것이다!

 

스택 구조 파악을 위해 attackme 파일을 디스어셈블해주자

level14,15와 거의 비슷한 코드다. 스택 구조는 다음과 같을 듯

lv14,15와 너무 똑같지만 오히려 그게 편하다 ㅎㅎㅎ

main+6에서 ebp-16(call)에 0x08048500을 넣어주고 있는데, 이게 진짜 printit함수의 시작 주소인지 알아보기 위해 printit 함수를 디스어셈블해보았다.

예상대로 0x08048500은 printit 함수의 시작주소였다!

이제 buf를 overflow시켜서 call자리에 shell 함수 시작주소를 넣기 위해

shell 함수를 디스어셈블해서 시작주소를 얻어보자

shell 함수의 시작주소는 0x080484d0이다.

buf에서 call 전까지 40바이트를 아무 값으로 채워주고, call에 shell 함수 시작 주소를 넣어주자.

페이로드는 다음과 같다.

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

level17 권한의 쉘이 띄워졌다.

level17의 패스워드를 알아내보자

 

level17의 pw: "king poetic"

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

FTZ level18 풀이  (0) 2020.10.05
FTZ level17 풀이  (0) 2020.09.30
FTZ level15 풀이  (0) 2020.09.29
FTZ level14 풀이  (0) 2020.09.28
FTZ level13 풀이  (0) 2020.09.27
Comments