-
FTZ 16번 Write-up표튜터와 함께하는 Pwnable/FTZ Write-up (11~20) 2019. 2. 5. 18:22
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다.
FTZ 16번 문제이다. 코드를보자!
코드를 보면 변수 선언 뒤 call이라는 포인터에 printit함수의 주소가 저장된다.
그리고나서 fgets으로 버퍼에 값을 받고 call()함수가 호출되면
printit()이 실행되는 구조이다.
main()함수에서 쓰이지 않은 함수가 있는데
바로 shell()함수이다.
이 함수의 내용을 보니 한단계 위의 권한으로 "/bin/sh"을 실행시킨다.
이 함수를 이용하여 다음 단계로 갈 수 있다는 것을 알았다.
어셈블리어 코드를 보면 어떠한 주소값을 ebp-16에 넣고 있었고
저기까지 프로그램을 실행시킨 뒤, 저 값이 의미하는 것이 무엇인지 확인했다.
(printit()라고 짐작하고 있었다)
역시 저 값은 printit()를 의미했다.
다른방법 1.
다른방법2.
하지만 다른 방법으로도 printit()과 shell(()을 찾아보았다.
fgets으로 덮어쓸 수 있나 확인해보니 충분히 48개보다 적은 수 40으로
버퍼오버플로우가 가능한 것을 확인했다.
마지막으로 printit()대신 shell()함수의 주소값을 덮어씌우도록 진행하였고
call()에 printit()대신 shell()의 주소가 넘어가면서 결과는 성공했다!!
다음단계로~
반응형'표튜터와 함께하는 Pwnable > FTZ Write-up (11~20)' 카테고리의 다른 글
FTZ 18번 Write-up (0) 2019.02.06 FTZ 17번 Write-up (0) 2019.02.05 FTZ 15번 Write-up (0) 2019.02.05 FTZ 14번 Write-up (0) 2019.02.05 FTZ 13번 Write-up (0) 2019.02.05 댓글