ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [F.T.Z] Level 11
    Wargame/F.T.Z 2022. 9. 25. 11:06
    반응형

    Level 11을 풀어보자.

    Level 9부터 overflow 문제가 나오는 줄 알았지만, 그건 맛보기에 불과했다..

    이제부터 진짜 시작인 것 같다.

     

    Level 11에 접속해 hint를 살펴보려는데 attackme라는 실행 파일도 함께 있다.

    그래도 역시 hint부터 보도록 하자.

    아무래도 hint의 내용은 attackme의 소스 코드인 듯하다.

    간단하게 분석해보자면, str에 256의 크기를 가진 char형 배열을 선언한다.

    그 후 setreuid로 Level 12의 권한을 가질 수 있도록 하고, strcpy로 argv[1]의 내용을 str에 복사 후 출력한다.

    여기서 strcpy 함수로 인해 overflow 공격이 가능할 것이라고 생각할 수 있다.

    <hint의 내용>

     

    소스 코드의 내용을 간략하게 알 수 있었으니 attackme 파일을 분석해보자.

    strcpy 함수를 call하는 main+48의 윗부분을 보면 eax가 ebp와 264만큼 떨어진 것을 알 수 있다.

    str의 크기는 256이지만, 더미 값 8이 더해져 264의 크기가 되었다.

    그리고 이전 함수의 base pointer인 sfp가 저장되는 4 바이트를 추가한다.

    그렇다면 우리는 총 268 바이트의 크기를 채워야 return address에 도달할 수 있다.

    <attackme 파일 분석>

     

    우선 환경변수를 만들도록 하자.

    환경변수를 만드는 이유는 환경변수는 고정된 메모리 주소값을 가지기 때문이다.

    그 주소값을 return address에 넣으면, 환경변수를 만들 때의 쉘 코드를 return address에서 실행할 수 있다.

     

    'export 환경변수=수행명령'으로 전역 환경변수를 생성하자.

    쉘 코드는 구글링을 통해 알아낸 것으로, 기본적인 쉘 코드를 사용해도 된다.

    생성 후 env 명령어로 환경변수가 선언되었는지 확인한다. (export, echo $환경변수 명령어로도 알 수 있다.)

    <환경변수 생성>

     

    환경변수의 주소를 출력하는 소스 코드이다.

    /tmp 디렉터리에서 파일을 작성해 컴파일 시키도록 하자.

    <환경변수의 주소 출력 코드>

     

    컴파일 후 환경변수의 주소를 출력하는 프로그램을 실행하면, 그 환경변수의 주소가 나타난다.

    <나타난 환경변수의 주소>

     

    다시 홈디렉터리로 돌아와, attackme 파일을 실행한다.

    ``(backtick) 안에 명령어를 입력해 명령어 수행 후 출력하도록 한다. (작은 따옴표와 비슷하지만 다르다.)

    268바이트의 크기만큼 NOP로 채우고, 그 뒤에 환경변수의 주소를 little endian 방식으로 넣어준다.

    그렇게 하면 uid가 Level 12인 쉘이 실행되고, my-pass 명령어를 입력하면 비밀번호가 나타난다.

    <나타난 비밀번호>

     

    이제 본격적으로 overflow 문제가 시작된다고 생각한다.

    아직 많이 부족한 부분들이 많아 대부분의 시간은 구글링에 보내고 있다.

    물론 이런 과정은 당연히 보내야 하는 것이고, 필요한 것이기 때문에 더 노력을 하는 것이 중요하다.

    반응형

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

    [F.T.Z] Level 13  (1) 2022.09.26
    [F.T.Z] Level 12  (1) 2022.09.25
    [F.T.Z] Level 10  (0) 2022.09.24
    [F.T.Z] Level 9  (1) 2022.09.21
    [F.T.Z] Level 8  (0) 2022.09.21

    댓글

Designed by Tistory.