ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 16번 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

    댓글 0

Designed by Tistory.