ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DreamHack 1단계 basic_exploitation_001
    DreamHack 2021. 7. 14. 14:07

    DreamHack 1단계 basic_exploitation_001 문제를 풀어보겠다.

     

    pwnable 문제

     

    문제의 환경 정보를 살펴보면, NX 보호 기법이 활성화 된 것을 볼 수 있다.

    위 그림에서 NX 보호 기법이 활성화 되어있음에 따라 쉘 코드가 실행되지 않다는 것을 알 수 있다.

     

    문제 파일

    main 함수 : buf 에 0x80만큼 사이즈가 할당되는데, 128 바이트가 할당된다.

    그리고 initialize 함수가 실행되고, gets 로 buf 를 입력을 받는다.

    initialize 함수를 보면, 실행되고 30초가 지나면 Time Out 메시지를 출력하고 프로그램을 종료한다.

     

    read_flag 함수 : system 명령어로 flag 값을 보여준다는 것을 알 수 있다.

     

    즉, 호출하는 부분이 없으므로, 강제로 호출해야 한다.

     

    스택의 기본 구조는 Buffer + SFP (4Byte) + RET (4Byte) 이다.

     

    buf 의 크기는 128 Byte 이고 SFP 의 크기는 4 Byte 이므로 RET 전까지 바이트 수는 132 바이트라는 것을 알 수 있다.

     

    즉, 132 바이트까지 gets 로 입력을 하고 RET 에 침범하여, read_flag 함수의  주소 값을 넣어주면 강제로 read_flag 함수를 호출하여 권한을 탈취할 수 있다.

     

    gdb 로 basic_exploitation_001 실행 화면

    실행을 시키고, info func 를 입력하면 함수의 정보를 출력한다.

     

    위 그림에서 read_flag 함수의 주소를 알 수 있는데, 주소 값을 넣어 호출하는데 사용될 것이기 때문에 복사를 해준다.

     

    이번에도  Pwntools 을 사용할 것이다.

     

    Pwntools 을 활용하여 작성한 페이로드

    먼저 pwn 모듈을 사용하기 위해서 import 시키고, 해당 문제가 있는 서버로 원격 접속을 하기 위해서 remote 클래스를 사용한다.

     

    그 후 , 132 바이트까지 입력할 문자열을 만든다. 이때 python2 와 python3 의 방식이 다르므로 만약 python3 를 사용하고 있다면 문자열 앞에 바이트 형식으로 변화해준다는 문자열 b 를 꼭 작성해야 한다 !!

     

    RET 전까지 바이트가 채워지면, read_flag 함수의 주소 값을 32 비트 리틀엔디안 패킹 방식으로 넣어준다.

     

    그 후, sendline 을 통해 payload 의 값을 전송하고, interactive 를 통해 쉘에 접속한다.

     

    페이로드 시킨 결과

    실행을 하면, 권한을 탈취하여 FLAG 값을 얻을 수 있다.

    'DreamHack' 카테고리의 다른 글

    DreamHack 1단계 basic_exploitation_003  (0) 2021.07.30
    DreamHack 1단계 basic_exploitation_002  (0) 2021.07.15
    DreamHack 1단계 basic_exploitation_000  (0) 2021.07.14
    DreamHack 1단계 path traversal  (0) 2021.07.11
    DreamHack 1단계 xss-1  (0) 2021.07.11

    댓글

Designed by Tistory.