[System Hacking][DreamHack][Stage3] Tool: pwntool

marceline·2023년 5월 7일
0

[System Hacking]

목록 보기
12/17

introduction

pwntools 의 등장 배경

간단한 프로그램에 대해서는 Figure1 과 괕이 파이썬으로 공격 페이로드를 생성하고, 파이프를 통해 이를 프로그램에 전달하는 방식으로 익스플로잇을 수행 할 수 있다.

Payload

사용에 있어서 전송되는 데이터를 뜻한다.
멀웨어 (악성 소프트웨어, 유해한 소프트웨어) 의 일부이다.

그러나 공격방법이 조금만 복잡해져도 Figure1 과 같은 방법 사용하기 어려워진다. 따라서 해커들은 펄, 파이썬 C 언어 등으로 익스플로잇 스크립트, 또는 바이너리를 제작하여 사용.
Figure2 는 socket 모듈을 사용한 초기 파이썬 expoit Script 의 예시이다.

pwntools: python module

자주 사용하는 함수를 반복적으로 구현하는 것이 비효율 적이기 때문에 탄생하였다

pwntool 설치하기!

pwntool 설치
다음 github Page 의 Read me 를 읽어보면 다음과 같은 명령어를 치라고 말한다.

apt-get update
apt-get install python3 python3-pip python3-dev libssl-dev libffi-dev build-essential
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade pwhtools

위 명령어 모두 실행 후

python3

명령어 실행시 다음과 같은 결과가 나온다면 성공한 것이다.

pwntools API 사용법

pwntools 공식 manual

pwntools manual

1. process & remote

  • process 함수
    : exploit 을 local binary 를 대상으로 할 때 사용하는 함수이다.
    : 보통 exploit 을 test 하고 debugging 하기 위해 사용
  • remote 함수
    : exploit dmf 원격 서버를 대상으로 할 때 사용하는 함수
    : 대상 서버를 실제로 공격하기 위해서 사용

2. send

  • senc
    : 데이터를 process 에 전송하기 위해서 사용한다.

3. recv

  • recv
    : process 에서 데이터를 받기 위해 사용된다.

recv() recvn() 의 차이점

  • revc(n): 은 최대 n 바이트를 받는 것. 그 이하를 받아도 error X
  • recvn(): 정확히 n바이트의 데이터를 받아야한다.

4. packing & unpacking

어떤 값을 리틀 엔디언의 바이트 배열로 변경하거나, 또는 역의 과정을 거쳐야하는 경우에 사용한다.

리틀 엔디언 (Little-endian)

낮은 주소에 데이터의 낮은 바이트 (LSB, Least Significant Bit) 부터 저장하는 방식
(반대: 빅 엔디안 Big-endian)

5. interative

  • interactice
    : 셸을 획득했거나, 익스플로잇의 특정 상황에 직접 입력을 주면서 출력을 확인하고 싶을 때 사용하는 함수
    : 호출 이후 터미널로 프로세스에 데이터를 입력하고, 프로세스의 출력 확인 가능하다

6. ELF

  • ELF header
    : exploit 에 사용될 수 있는 각종 정보 기록

7. context.log

  • context.log
    : exploit 에 버그 발생시 exploit 디버깅 하기 위한 로깅 기능
    : 로그 레벨은 context.log_level 변수로 조절가능

8. context.arch

pwntools 는 셸코드를 생성하거나, 코드를 assemble, disassemble 하는 기능 등을 가지고 있는데, 이들은 공격 대상의 아키텍처에 영향을 받는다.

  • context.arch
    : 아키텍처 정보를 프로그래머가 지정할 수 있게 한다.

9. shellcraft

pwntools 에는 자주 사용되는 셸 코드들이 저장되어있다. (따라서 공격에 필요한 셸 코드 쉽게 꺼내 쓰기 가능)
그러나 정적으로 생성된 셸 코드는 셸 코드가 실행 될 떄으 ㅣ메모리 상태 반영 불가
또한, 프로그램에 따라 셸 코드의 제한이 있는 등의 제약 조건이 발생하는 상황에서는 직접 셸 코드를 작성하는 것이 좋다.

  • shellcraft
    : 공격에 필요한 셸 코드를 쉽게 꺼내 쓸 수 있게 해준다.

x-86-64 를 대상으로 생성 할 수 있는 여러종류의 셸 코드

pwnlib.shellcraft

10. asm

대상 아키텍처를 미리 지정해야한다.

pwntools 실습

rao exploit

위의 C 언어로 작성된 코드를 pwntools 로 rao exploit 하기

코드 작성하기

vi rao.c

컴파일하기

gcc -o rao rao.c

pwntools 로 rao exploit 하기

pythonb3 rao.py
id

요약

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

0개의 댓글