ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [HackCTF] Simple_Overflow_ver_2 Write-up
    표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 19. 03:41

    이번 문제는 Simple_Overflow_ver_2이다!!





    문제를 실행시켜보면 "Data: " 라는 문자열이 출력되면서

    입력을 받는다. 입력한 문자열과 함께 주소값이 출력되는데

    이 주소값은 버퍼의 주소값으로 보여졌다.



    이 주소값은 프로그램이 실행될 때마다 달라진다. 또한 16자리가 넘어가면

    줄이 넘겨지면서 다음줄의 주소값이 나타나게 된다.



    "Again" 이라는 문자열이 출력되고 "y"를 입력하여 다시 진행하게되면 

    처음 입력받은 버퍼의 주소에 계속해서 입력을 받는다는 것을 알 수 있었다.



    IDA를 이용하여 소스코드를 보도록 하자

    예상했던대로의 코드 흐름임을 알 수 있었다~~



    그렇다면 Paylaod를 짜는 것은 간단해졌다. 우리가 필요한 것은

    이제 ret의 위치만 알면 Payload를 완성시킬 수 있다.

    "a"를 4개 입력한 모습이다. ret의 위치까지 140개의 dummy로

    채워서 충분히 덮을 수  있다는 것을 알 수 있었다!!



    Payload를 짤 때는 상호작용이 중요하다. 그러므로 프로그램 시작 시

    등장하는 "Data : " 까지 받아주고 의미없는 dummy값 "aaaa"를 넣어주었다.

    이렇게 하는 이유는 그저 buffer의 주소를 알아오기 위해서다.

    이제 buffer의 주소가 출력될 것이고 우리는 그 값을 받아온다~



    그 다음 "Again (y/n): "을 받아주고 다시 입력을 진행한다. 버퍼의 주소는

    프로그램이 종료되기 전까지 변함 없으므로 이점을 이용하여

    정확한 버퍼주소를 사용하는 것이다.



    다음으로 해당 바이너리가 32bit이기 때문에 32bit Shellcode(25)와 115개의 dummy를

    이용하여 ret 직전까지 채운다. 마지막으로 ret를 우리가 구한 buffer주소로 채우면된다.



    깔끔하게 FLAG를 알아낼 수 있었다!!

    반응형

    댓글

Designed by Tistory.