ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • level 20. 풀이
    System hacking training/Hackerschool F.T.Z 2018. 1. 20. 23:02

    F.T.Z 올클했습니다.


    계속 bof 문제가 나오다가 FSB가 나와 고생했습니다.



    먼저 로그인 후 hint 파일을 확인해보니 bof 공격이 먹지 않습니다.


    이유는 fgets 함수를 보면 알 수 있습니다.


    이 프로그램은 간단히 입력한 값을 다시 출력해 주는 기능을 합니다.


    하지만 이 문제는 format string bug 가 존재하는데


    개발자의 실수 혹은 편의에 의해 생겨난 취약점입니다.


    setuid는 걸려있으니 메모리를 조작하여 쉘을 띄우면 될것같습니다.


    [과정]


    입력값을 그대로 출력해주지만 여기에 %x 라는 형식지정자를 넣어보면..!



    이런식으로 AAAA 의 값을 다시 한번 출력해주는 것을 확인함으로서 더미값이 3개가 들어가 있는것과 포맷스트링 공격 가능성을 확인할 수 있습니다.



    FSB또한 memory corruption 즉, 메모리의 값을 변경하여 공격할 수 있는 취약점이므로


    gdb를 통해 ret주소를 확인하려 하였으나 심볼을 다 지워놓았기 때문에 ret주소를 찾을 수가 없습니다.



    ret주소를 바꿀 수 없다면 다른 방법이 있죠..


    .dtors의 주소를 바꾸는 방법이 있습니다.


    .dtors의 주소를 확인하는 방법은 위와 같이 objdump 로 확인 할 수 있습니다.



    이제 쉘코드를 환경변수에 올려주고



    환경변수의 주소를 구해주는 프로그램을 만들어줍니다.



    그리고 쉘코드의 주소를 확인해보면 0xbffffc31이네요.


    이제 페이로드를 작성해주면 되는데


    shellcode 주소 : bffffc31

    dtors 주소 :  08049594 + 4 -> 08049598    //.dtors의 시작주소에 +4한 값에 쉘 코드의 주소를 write해야 합니다.



    페이로드입니다.


    AAAA+[.dtors의 주소(낮은주소)]+AAAA+[.dtors의 주소(높은주소)] + %8x%8x%8x(dummy) + %(쉘코드의 10진수 주소(fc31) - (현재까지 쓴 바이트길이))c%n%(쉘코드의 10진수 주소(bfff) - (현재까지 쓴 바이트 길이))c%n


    설명을 잘하고 싶은데 FSB에 대한 전반적인 지식이 없는 분들은 이해못하실겁니다..


    이상입니다.

    반응형

    'System hacking training > Hackerschool F.T.Z' 카테고리의 다른 글

    level 19. 풀이  (0) 2018.01.06
    level 18. 풀이  (0) 2017.12.24
    level 17. 풀이  (0) 2017.12.03
    level 16. 풀이  (0) 2017.12.03
    level 15. 풀이  (2) 2017.11.26
Designed by Tistory.