ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [F.T.Z] Level 13
    Wargame/F.T.Z 2022. 9. 26. 17:42
    반응형

    Level 13을 풀어보자.

    Level 13은 앞의 문제들과 비슷한데, 한 가지 방어 개념이 추가되었다.
    책에서 설명으로만 보던 것이라 신기한 느낌이다. (유니콘..??)

    우선 Level 13의 hint를 살펴보자.
    이번에도 strcpy를 사용하고 있으니 공격이 가능할 것 같다.
    그런데 long 타입의 i라는 변수가 선언되어있다. (이것이 방어를 위한 장치이다.)
    다른 명령어들은 앞의 Level 들에서 충분히 해석을 한 것 같고, 마지막의 kill에 대해서만 알아보자.
    구글링을 해보니 Kill 시그널을 보내는 명령어이다.
    간단하게 허가되지 않은 메모리 영역으로의 접근을 종료한다고 생각하자.

    <hint의 내용>


    gdb를 이용해 attackme 파일을 분석을 해보자.
    <main+54>를 보면 ebp와 buf 사이에는 1048 바이트의 크기만큼 거리가 있다.
    여기에 sfp의 4 바이트를 합하면 ret와의 거리는 1052 바이트만큼 떨어져있다는 것을 알 수 있다.
    이렇게만 되면 문제는 참 쉽게 풀리겠지만, 위에서 언급했던 방어 장치를 생각해보아야 한다.

    <main+69>를 보면 i의 값인 0x1234567이 ebp와 12바이트만큼 떨어져 있는 것을 알 수 있다.
    이 i의 값은 buf와 ret 사이에 있으니 섣부르게 값을 변경했다가는 if 문이 실행되어 프로세스가 종료된다.
    그러므로 i의 값이 변경되지 않도록 buf와 i가 떨어진 거리를 구해야 한다.
    1048에서 12를 빼면 1036이라는 값은 쉽게 구할 수 있다.

    그렇다면 정리를 해보자.
    페이로드를 어떻게 넣으면 if 문에 걸리지 않고 공격을 진행할 수 있을까?

    1. buf와 i까지의 거리 1036에 NOP을 채운다.
    2. i에 있어야 할 값 0x1234657을 넣어준다. (long의 자료형이므로 4 바이트의 값을 가진다.)
    3. i와 ret까지의 거리 12만큼 또 NOP을 채운다.
    4. 쉘 코드를 선언한 환경변수의 주소를 넣어 쉘 코드가 실행되도록 한다.
    이 순서대로 페이로드를 작성하면 공격이 수행될 것이다.

    &lt;attackme 파일 분석&gt;


    환경변수를 선언하자.
    조회 명령은 Level 마다 다르게 해보았다.

    &lt;환경변수 선언&gt;


    환경변수의 주소를 알아낼 코드를 작성한다.

    &lt;환경변수 주소를 알아낼 코드 작성&gt;


    컴파일 후 파일을 실행하면 환경변수의 주소가 나타난다.

    &lt;환경변수 주소 확인&gt;


    그 후 공격진행 과정에 따라 페이로드를 작성해 attackme 파일을 실행하면 쉘이 실행된다.
    my-pass 명령어를 입력하면 비밀번호가 나타난다.

    &lt;나타난 비밀번호&gt;


    그런데, 한 가지 이상한 것이 있었다.
    /tmp 디렉터리에서 env 파일을 실행한 것과, 홈 디렉터리에서 env 파일을 실행했을 때 주소가 달랐다.
    앞의 Level들에서는 없었던 현상이라 왜 이러는지는 모르겠다..
    구글링을 해봐도 알 수 없지만, 더 찾아보도록 해야겠다.

    &lt;이상한 점&gt;


    위에서는 i를 방어 장치라는 이름으로 풀이를 했다.
    사실 이것은 스택 가드의 한 종류이고, 이번 풀이는 이 스택 가드를 해결해야 풀 수 있었다.

    간단하게 개념을 설명하자면, 스택 가드는 카나리라고 불리는 무결성 값을 ret와 변수 사이에 넣는다.
    이 카나리 값이 변경되는 것을 탐지하여 overflow를 방지하는 방어 장치이다.

    반응형

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

    [F.T.Z] Level 15  (0) 2022.09.29
    [F.T.Z] Level 14  (0) 2022.09.28
    [F.T.Z] Level 12  (1) 2022.09.25
    [F.T.Z] Level 11  (0) 2022.09.25
    [F.T.Z] Level 10  (0) 2022.09.24

    댓글

Designed by Tistory.