Wargame/FTZ
FTZ level9 Write-Up
0xe82de_
2019. 7. 23. 20:25
728x90
728x90
728x90
FTZ level9 풀어보자.
hint의 코드를 보면 buf2, buf 변수 2개를 선언하고 fgets 함수를 사용해 40bytes를 입력받는다.
그리고 buf2 변수의 값이 "go"라면 setreuid 함수로 level10 계정의 권한을 획득한 후 bash 쉘을 실행한다.
gdb로 해당 파일을 디버깅하려 했지만 권한이 없다.
따라서 hint를 /home/level9/tmp에 복사해주고 위와 같이 내용을 수정해주자.
중간에 printf 함수를 두번 호출하여 변수 buf, buf2의 주소를 출력하는 코드를 추가하였다.
수정한 bof 파일을 실행하면 buf 변수와 buf2 변수의 주소 값 차이가 0x10인 것을 알 수 있다.
즉, 스택에서 변수 buf의 주소가 변수 buf2의 주소보다 0x10만큼 작으므로 buf 변수에 임의의 16bytes의 값을 입력하고 "go"를 입력해주면 buf2 변수에 "go" 값이 저장될 것이다.
따라서 "AAAABBBBCCCCDDDD" 16bytes와 "go"를 입력해보자.
"Good Skill!"이 출력되었으니 /usr/bin/bof 파일에도 똑같이 입력해보자.
python을 활용하여 "A" 문자를 16번, "go"의 ASCII 값인 0x67, 0x6f를 bof 파일에 전달하면 된다.
그리고 my-pass 명령어를 통해 level10 계정의 password를 확인할 수 있다.
728x90
728x90