ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [F.T.Z] Level 14
    Wargame/F.T.Z 2022. 9. 28. 00:12
    반응형

    Level 14를 풀어보자.

     

    이번에는 새로운 개념을 알 필요는 없고, 앞의 Level 들에서 했던 풀이를 잘 적용하면 된다.

    먼저, hint를 살펴보자.

    Level 14부터는 mainsource에서 문제를 그대로 가져왔다는 안내 문구가 있다.

    뭔가 새로운 문제가 나오는 것 같아 떨리지만, 이번 Level은 다행히 쉬운 편이다.

     

    crap 과 check 라는 int 형의 변수가 선언된다.

    그리고 20 바이트 크기의 char 형의 buf 변수가 선언된다.

    fgets로 45 바이트 크기만큼 buf에 표준 입력을 한다. (overflow)

    그리고 선언했던 check가 0xdeadbeef 이면, Level 15의 권한을 얻은 상태로 쉘을 실행한다.

    힌트 해석은 여기까지인데, check만 변형하면 쉘이 실행되므로 쉘 코드를 작성할 필요도 없다. (직접 넣어보자.)

    <Level 14의 hint>

     

    buf와 check 사이의 거리를 알아보기 위해 gdb로 attackme 파일을 분석해보자.

    이번 Level의 풀이는 간단하기 때문에, 풀이를 위한 어셈블리어를 조금 설명하겠다.

    <main+9> 부터 <main+17> 까지 내용을 분석해보자. (<main+21>의 fgets 함수를 call 하는 것에 대한 설명)

    push는 스택에 데이터를 넣는 명령어인데, 간단하게 인자를 함수에 넣는다고 생각하자.

    0x2d는 45를, ds:0x8049664는 stdin을 의미한다.

    이 두 값은 fgets의 함수에 들어가는 인자들이다.

    lea는 우변의 주소값을 좌변에 입력하는 것이다.

    eax는 범용 레지스터로 함수의 반환값이 저장되는 레지스터다.

    여기서는 buf의 주소에 ebp-56의 주소를 입력한다는 의미이다.

    자, 이제 fgets 함수가 어떻게 표현되는지 알 수 있을 것이다.

     

    다음은, <main+29>를 분석해보자.

    분석이라고 하기는 간단한데, cmp 명령어는 좌변과 우변을 비교하는 명령어이다.

    if 문의 조건 내용이 두 변이 같은지를 비교하는건데 어셈블리어에서 바로 이 cmp 명령어가 사용된다.

    DWORD PTR은 해당 주소에서 4바이트를 읽는다는 뜻인데, check와 비교하는 0xdeadbeef가 4바이트이다.

     

    <main+17>을 보면 buf가 ebp와 56만큼 떨어진 것을 알 수 있다.

    그리고 <main+29>를 보면 check가 ebp와 16만큼 떨어진 것을 알 수 있다.

    이 두 값은 40만큼 떨어져 있는데, buf의 크기는 20이다.

    즉, 둘 사이에 20 바이트만큼의 더미값이 있다는 뜻이 된다.

    문제를 해결하기 위해 NOP을 40만큼 넣어주고, check에는 0xdeadbeef를 넣어주면 쉘이 실행될 것이다.

     

    <attackme 파일 분석>

     

    이번에는 표준입력 방식으로 페이로드를 작성해 프로그램이 동작 중에 명령을 받도록 한다.

    아래 사진처럼 명령어를 입력하고 attackme 프로그램을 실행하면 쉘이 실행된다.

    터미널에 따로 표시되는 것은 없지만, my-pass를 입력하면 비밀번호가 나타난다.

    <나타난 비밀번호>

    반응형

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

    [F.T.Z] Level 16  (1) 2022.09.30
    [F.T.Z] Level 15  (0) 2022.09.29
    [F.T.Z] Level 13  (1) 2022.09.26
    [F.T.Z] Level 12  (1) 2022.09.25
    [F.T.Z] Level 11  (0) 2022.09.25

    댓글

Designed by Tistory.