ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [F.T.Z] Level 15
    Wargame/F.T.Z 2022. 9. 29. 23:38
    반응형

    Level 15를 풀어보자.

     

    Level 15는 Level 14와 유사하기 때문에 쉽게 풀 수 있다.

    Level 15까지 오면서 하지 않은 딱 한 가지만 해주면 된다.

     

    Level 15의 hint를 살펴보자.

    Level 14의 소스 코드와 같다.

    아니, Level 14와는 다르게 if 문의 check가 포인터로 되어 있다.

    이번 문제를 해결하기 위해서는 0xdeadbeef의 주소값을 알아내 check의 포인터에 넣어야 한다.

    <Level 15의 hint>

     

    먼저 gdb를 실행해보자.

    <main+32>를 보면 eax의 주소값과 0xdeadbeef를 비교해 같은지 확인한다.

    0xdeadbeef의 주소를 알아보기 위해 cmp가 실행되는 0x080484b0 주소에 break를 걸어서 동작을 확인하자.

    그런데, 홈디렉터리에서는 break가 되지 않는다..

    <gdb로 분석한 attackme>

     

    /tmp 디렉터리에 attackme 파일을 복사하고, 그곳에서 gdb를 다시 실행시켜보자.

    <attackme 파일 복사>

     

    break 명령어로 cmp가 실행되는 0x080484b0 주소에서 실행을 멈춰보자.

    break point를 지정한 후 r 명령어로 프로그램을 시작한다.

    실행되는 것이 보이지는 않지만, enter 키를 누르면 main() 함수의 break point에서 멈췄다는 문구가 나타난다.

     

    그 뒤의 명령어를 간단히 설명하자면, / 앞의 x는 메모리를 조사하는 명령어다.

    그리고 / 뒤의 x는 16진수로 표현하라는 의미이다.

    그래서 x/x [주소값]을 쓰면 그 주소값의 내용을 16진수로 표현해준다.

    아, x/3x 정도면 한 번에 0xdeadbeef의 주소값이 나타날 줄 알았는데 값 하나당 4바이트씩 건너뛰는 것 같다.

    그래서 주소값을 1씩 올려가며 x/x 명령어로 0xdeadbeef의 주소를 알아냈다.

    <0xdeadbeef의 주소값>

     

    이제 다 해결했다.

    buf와 check 사이의 40 바이트를 NOP로 채우고, check의 주소값에 0xdeadbeef의 주소값을 넣는다.

    그렇게 하면 아래 사진처럼 비밀번호가 나타난다.

    <나타난 비밀번호>

    반응형

    'Wargame > F.T.Z' 카테고리의 다른 글

    [F.T.Z] Level 17  (0) 2022.10.01
    [F.T.Z] Level 16  (1) 2022.09.30
    [F.T.Z] Level 14  (0) 2022.09.28
    [F.T.Z] Level 13  (1) 2022.09.26
    [F.T.Z] Level 12  (1) 2022.09.25

    댓글

Designed by Tistory.