ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Toddler's Bottle] 3번.[bof]
    $ 시스템 해킹 $/pwnable.kr 2018. 12. 1. 23:17

    이번에 풀어볼 문제는 pwnable.kr 3번문제인 [bof] 문제 입니다.

    문제를 보니까 download 있으니 한번 다운 받아 보겠습니다.

    URL 있기 때문에 wget 사용했습니다.


    파일을 한번 확인 보겠습니다


    .. 일반폴더 하나와 c언어로 작성된 코드가 하나 있네요


    내용을 확인해보면 func함수로 들어가서 값을 출력하는거 같은데..

    Key 값과 0xcafebabe 일치해야 /bin/sh 있는 flag 나오는 코드인거 같네요

     

    Key값은 func 있는 0xdeadbeef 인거 같은데… 실행을 한번 해보겠습니다.

     


    실행권한을 부여해주고 실행을 해보니 값을 입력 받으려고 하는거 같네요

    저기에있는 0xcafebabe 입력해보겠습니다.


    안나오는 보니 gdb 이용해서 한번 리버싱 해보겠습니다.


    Intel형식으로 나오도록 설정을 하고 main 함수부터 보도록 하겠습니다.

    음… 저기 <+9> 보시면 mov    DWORD PTR [esp], 0xdeadbeef 라고 되어있는데

    0xdeadbeef [esp] 넣어주는데 이는 파라미터를 뜻합니다.

    그리고나서 바로 func 함수로 call 해서 들어가는데

    이번엔 func 함수를 한번 리버싱 해보도록 하겠습니다.

    여기서 주의깊게 봐야하는 명령은 cmp입니다

    cmp 명령은 비교하는 명령이기때문에 c언어에서 if문을 뜻합니다.

    <+40> 있는 0xcafebabe 비교하는 [ebp+0x8] 아마 key일것입니다.

    그러면 overflowme 시작 주소 부분이 있을텐데 그부분은 lea명령을 사용한 <+29>입니다.

    lea명령은 주소를  불러와서 연산을 하는 명령입니다.

    그래서 [ebp-0x2c] overflowme 시작 주소 입니다.

     

    key-overflowme = ebp+0x8 - (ebp - 0x2c) = 0x8 + 0x2c 인데, 0x8 10진수로 8 0x2c 10진수로 44이기 때문에 8+44 52 입니다.

     

    그렇다면 52바이트 만큼을 아무런 문자를 넣고 그다음에 key값인 0xcafebabe 넣어주면 될거 같습니다.

     

    리틀 엔디언 방식으로 넣어야 하기 때문에 0xcafebabe 값을 거꾸로 넣으시면됩니다.


    파이썬을 이용해서 a 52 넣고 뒤에 리틀 엔디언 방식으로 넣으면 되요

    그리고 입력을 받으려고 할테니 ls 들어있는 파일을 확인하고 flag파일이 있으니까 한번 확인해 볼게요


    Flag 나왔습니다.


    '$ 시스템 해킹 $ > pwnable.kr' 카테고리의 다른 글

    [Toddler's Bottle] 5번.[passcode]  (0) 2018.12.02
    [Toddler's Bottle] 4번.[flag]  (0) 2018.11.30
    [Toddler's Bottle] 2번.[collision]  (0) 2018.11.29
    [Toddler's Bottle] 1번.[fd]  (0) 2018.11.29

    댓글

Designed by Tistory.