IMyoungho 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함수를 참조하는 것이기 때문에

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




반응형