ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • dreamhack stage 3 - Tool:pwntools
    보안/SYSTEM HACKING 2024. 3. 15. 14:04

    1. pwntools 의 등장 배경

    1. 초기: 파이썬으로 공격 페이로드를 생성하고 파이프를 통해 프로그램에 전달하는 방식으로 익스플로잇 수행

    2. 익스플로잇 수행에 있어서의 단점 발견

    익스플로잇이 조금만 복잡해져도 파이썬으로 공격 페이로드를 생성하고 파이프를 통해 프로그램에 전달하는

    방식은 사용하기 어려워졌다. 페이로드를 생성하기 위해 복잡한 연산/프로세스와 반복적으로 데이터를 주고받

    아야 할 수도 있게 되었다. 또한 파이썬으로 여러 개의 익스플로잇 스크립트를 작성하면 자주 사용하는 함수

    (패킹함수, 언패킹 함수)가 많다.

    3. pwntools의 등장

    이 함수들을 계속 구현하는 것은 비효율적이므로 시스템 해커들은 집대성하여 pwntools 라는 파이썬 모듈을

    제작했다. pwntools로 익스플로잇 제작을 더 쉽게 할 수 있게 되었다.

    초기

     

    2. pwntools 설치

    깃헙에 있는 오픈소스를 이용해 설치한다. 설치 후 pwntools를 임포트했을 떄 에러가 발생하지 않으면 된다.


    3. pwntools API 사용법

    1. process & remote

    - process 함수 : 익스플로잇을 로컬 바이너리를 대상으로 할 때 사용하는 함수

    목적: 익스플로잇 테스트, 디버깅하기 위해

    - remote 함수 : 원격 서버를 대상으로 할 때 사용하는 함수

    목적: 대상 서버를 실제로 공격하기 위해

    2. send

    : 데이터를 프로세스에 전송하기 위해 사용

     

    3. recv

    : 프로세스에서 데이터를 받기 위해 사용한다.

    - recv(n): 최대 n 바이트를 받는 것으로 그만큼을 받지 못해도 에러를 발생시키지 않는다.

    - recvn(n): 정확히 n 바이트의 데이터를 받지 못하면 계속 기다린다.

    4. packing & unpacking

    : 어떤 값을 리틀 엔디언의 바이터 배열로 변경하거나 역의 과정을 거치기 위해 사용한다.

     

    5. interactive

    : 셸을 획득했거나 익스플로잇의 특정 상황에 직접 입력을 주면서 출력을 확인하고

    싶을 때 사용하는 함수 / 호출한후 터미널로 프로세스에 데이터를 입력하고 프로세스의 출력을 확인할 수 있다.

    6. ELF

    ELF 헤더 - 익스플로잇에 사용될 수 있는 각종 정보가 기록되어 있다.

     

    7. context.log

    : 익스플로잇에 버그 발생 시 익스플로잇도 디버깅해야 한다.

    디버그의 편의를 돕는 로깅 기능이다.

    로그 레벨은 context.log_level 변수로 조절한다.

    8. context.arch

    pwntools는 셸코드 생성/코드 어셈블, 디스어셈블하는 기능을 가진다. 공격 대상의 아키텍처에 영향을 받는다.

    pwntools는 아키텍처 정보를 프로그래머가 지정할 수 있게 해서 몇 가지의 함수의 동작은 달라진다.

     

    9. shellcraft

    pwntools에 자주 사용되는 셸 코드가 저장되어 있어 공격에 필요한 셸코드를 쉽게 꺼내 쓸 수 있다.

    그러나 정적으로 생성되었기 때문에 셸 코드가 실해오딜 떄의 메모리 상태를 반영하지 못하고 구성 가능한 문자의

    종류 제한 관련 조건 반영이 어렵다.

    --> 제약 조건이 존재하는 상황에서 직접 셸 코드를 작성하는 것이 좋다.

    10. asm

    pwntools는 어셈블 기능을 제공한다. 대상 아키텍처가 중요하기 때문에 아키텍처를 미리 지정해야 한다.

     


    3. pwntools 실습

    • rao 익스플로잇
     

    4. 결론

    • process & remote: 로컬 프로세스 또는 원격 서버의 서비스를 대상으로 익스플로잇 수행
    • send & recv: 데이터 송수신
    • packing & unpacking: 정수를 바이트 배열로, 또는 바이트 배열을 정수로 변환
    • interactive: 프로세스 또는 서버와 터미널로 직접 통신
    • context.arch: 익스플로잇 대상의 아키텍처
    • context.log_level: 익스플로잇 과정에서 출력할 정보의 중요도
    • ELF: ELF헤더의 여러 중요 정보 수집
    • shellcraft: 다양한 셸 코드를 제공
    • asm: 어셈블리 코드를 기계어로 어셈블
Designed by Tistory.