ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [System] Level 20 [233pt]
    $ Wargame $/$ Suninatas $ 2019. 9. 17. 14:38

     

    문제를 열어보겠습니다. 

     

    해당 파일은 ELF 파일입니다.

    그래서 일단 Ghidra를 이용해서 한번 디컴파일 해보겠습니다.

     

    main 코드를 확인해 보면 일단 if문을 확인해 보겠습니다.

     

    main의 if문을 보면 param_2가 ./suninatas 이여야 합니다.

     

    이는 파일명이 suninatas 이어야 합니다.

     

    그리고 아래의 루프에서도 중요한 역할을 합니다.

     

    12크기 만큼 입력을 받고 base64decode함수가 있는 것으로 보아 입력을 할때 base64encode로 넣어야 할것 같습니다.

     

    decode한 데이터의 길이가 12이하여야 auth함수에 들어갈 수 있습니다.

     

    auth 함수를 확인해 보겠습니다.

     

    파라미터로 디코드된 입력값이 들어갔습니다.

    calc_md5함수를 통해서 나온 hash 값이 strcmp를 통해서 비교를 합니다.

     

    값이 같으면 1을 반환해서 correct함수를 들어갈 수있습니다.

     

     

    input의 첫 4바이트의 값이 0xdeadbeef 이어야 클리어 되는 것입니다.

     

    그렇다면 풀이를 위한 익스 페이로드는 아래와 같습니다.

     

    (python -c 'import base64;print base64.encodestring("[ 0xdeadbeef의 값 ]"+"[ correct함수 시작 주소 ]"+"[ input의 주소 ]")'; cat) | ./suninatas 을 넣어주면 다음과 같이 클리어가 됩니다.

     

    완벽한 페이로드는 아래와 같습니다!

    (python -c 'import base64;print base64.encodestring("\xef\xbe\xad\xde"+"\x5f\x92\x04\x08"+"\xec\xc9\x11\x08")'; cat) | ./suninatas

     

     

    이제 진짜 Authenticate 값을 찾아 보겠습니다.

     

    위의 코드를 python으로 실행해 보겠습니다.

     

     

     

    '$ Wargame $ > $ Suninatas $' 카테고리의 다른 글

    [System] Level 25 [555pt]  (0) 2019.09.17
    [System] Level 24 [333pt]  (0) 2019.09.17
    [Reversing] Level 11 [198pt]  (0) 2019.09.17
    [Reversing] Level 10 [150pt]  (0) 2019.09.17
    [Reversing] level 9 [144pt]  (0) 2019.08.19

    댓글

Designed by Tistory.