Tool : pwntools

·2023년 3월 3일
0

System Hacking

목록 보기
10/10

파이썬 모듈, pwntools
: pwntools를 설치하고, 기본적인 사용법을 알기

pwntools

여러 개의 익스플로잇 스크립트 작성할 때마다 함수들을 반복 구현하는 것은 비효율적이기 때문에 이를 간단하고 쉽게 제작하기 위하여 만든 파이썬 모듈

pwntools API 사용법
manual : https://docs.pwntools.com/en/latest/

1. process & remote

: 로컬 프로세스 또는 원격 서버의 서비스를 대상으로 익스플로잇 수행

  • process : 익스플로잇을 로컬 바이너리를 대상으로 할 때 사용하는 함수
    -> 익스플로잇을 테스트하고 디버깅하기 위해 사용
  • remote : 원격 서버를 대상으로 할 때 사용하는 함수
    -> 대상 서버를 실제로 공격하기 위해 사용

2. send

: 데이터 송수신

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

3. recv

: 데이터 송수신

  • 프로세스에서 데이터를 받기 위해 사용
recv()와 recvn()의 차이
recv(n) : 최대 n 바이트를 받는 것, 그만큼을 받지 못해도 에러를 발생시키지 않음
recvn(n) : 정확히 n 바이트의 데이터를 받지 못하면 계속 대기

4. packing & unpacking

: 정수를 바이트 배열로, 또는 바이트 배열을 정수로 변환

  • 어떤 값을 리틀 엔디언의 바이트 배열로 변경하거나, 또는 역의 과정 거치기 위하여 사용

5. interactive

: 프로세스 또는 서버와 터미널로 직접 통신

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

6. ELF

: ELF헤더의 여러 중요 정보 수집

  • ELF 헤더에는 익스플로잇에 사용될 수 있는 각종 정보가 기록

7. context.log

: 익스플로잇 과정에서 출력할 정보의 중요도

  • 버그가 발생 시 익스플로잇도 디버깅해야 하기 때문에 디버그의 편의를 돕는 로깅 기능 사용
  • 로그 레벨은 context.log_level 변수로 조절 가능

8. context.arch

: 익스플로잇 대상의 아키텍처

  • pwntools는 셸코드를 생성하거나, 코드를 어셈블, 디스어셈블하는 기능 등을 가지고 있는데, 이들은 공격 대상의 아키텍처에 영향을 받음
  • 아키텍처 정보를 프로그래머가 지정할 수 있게 하며, 이 값에 따라 몇몇 함수들의 동작이 달라짐

9. shellcraft

: 다양한 셸 코드를 제공

  • pwntools 에는 자주 사용되는 셸 코드들이 저장되어 있어서, 공격에 필요한 셸 코드를 쉽게 꺼내 쓸 수 있게 함
  • 매우 편리한 기능이지만 정적으로 생성된 셸 코드는 셸 코드가 실행될 때의 메모리 상태를 반영하지 못함 / 프로그램에 따라 입력할 수 있는 셸 코드의 길이나, 구성 가능한 문자의 종류에 제한이 있을 수 있는데, 이런 조건들도 반영하기 어려움
  • 따라서 제약 조건이 존재하는 상황에서는 직접 셸 코드를 작성하는 것이 좋음

10. asm

: 어셈블리 코드를 기계어로 어셈블

  • 어셈블 기능을 제공
  • 대상 아키텍처가 중요하므로, 아키텍처를 미리 지정해야 함

0개의 댓글