ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [HackCTF] Basic_BOF#2 Write-up
    표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 17. 22:43

    이번 문제는 Basic_BOF#2이다.





    문제를 실행시켜보도록 하자!!

    입력했더니 뭔가 이상한 값이 출력되었다.





    IDA를 이용해서 코드를 보도록 하겠다ㅎㅎ

    음.. 값을 입력받고 v5( )를 호출한다.




    어셈블리어 코드도 보도록 하자!!

    0x80484b4라는 주소를 ebp-0xc가 4바이트만큼 참조하는 값으로 

    mov해주고 있다. 그리고나서 그 값을 eax에 넣고 call 하고 있는 것으로 보아

    이 부분이 v5함수를 호출하는 것이라는 것을 알 수 있다.




    처음에는 shellcode를 이용해서 ret를 덮으면 되나? 길이가 덮을 수 있는

    길이가 아니였기 때문에 다른 방법을 사용해야했다.

    무슨 함수가 쓰이나 한번 보도록 하겠다.

    또잉 shell이라는 함수가 보였다. 그렇다면??

    ebp-0xc에 있는 주소가 호출되는 것 대신에 shell함수의 주소를 넣어서

    shell 함수를 호출시키면 될 것이다. ㅎㅎ 함수가 존재해서 수고를 덜었다ㅎㅎ




    그렇다면 어느정도를 덮어야하는지 확인해보도록 하겠다.

    "a"를 120개를 넣어보았다. 참고로 우리가 fgets으로 넣을 수 있는 길이는 133이다.

    호출되는 eax가 0x80484b4인데 120개 이후 129번째에 등장하는 것으로 보아

    우리는 128개의 쓰레기값에 shell 함수의 주소를 쓰게되면 0x80484b4를 덮을 수 있다.

    길이도 132개이기 때문에 충분히 덮을 수 있다~~ㅎㅎ 그럼 진행해보자~



    깔끔하게 FLAG를 볼 수 있었다~~






    * Thanks to Py0zz1 *

    처음에 이 문제를 풀다가 shell함수가 있다고 생각하지 못해서 있는지도 몰랐는데 꿀팁이 있다~

    당연한 말이 겠지만 바로 plt에 system이 있는지 확인하는 것이다.

    system 함수가 있다는 것은 바이너리에서 system함수를 참조하는 것이기 때문에

    저러한 함수가 혹시 있나 하고 한번 생각해보는 것이 좋다~ (다음엔 함수도 잘봐야겠다 ㅎㅎ)




    반응형

    댓글

Designed by Tistory.