[드림핵 -시스템] pwntools

스근한국밥한그릇·2024년 11월 23일

SYSTEM

목록 보기
8/15

1. pwntools

1-1 install

$ apt-get update
$ apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
$ python3 -m pip install --upgrade pip
$ python3 -m pip install --upgrade pwntools
  • 해당 메서드를 차례대로 실행시 3번째 줄에서 막힐수도 있을 것이다. 그럴때 해당 명령어 사용
    $ python3 -m pip config set global.break-system-packages true

1-2 instruction of pwntools API

1. process & remote

  • process : 로컬 바이너리 대상으로
    • 익스플로잇 테스트, 디버깅 목적

  • remote : 원격 서버 대상
    • 서버 실제로 공격 목적
from pwn import *
p = process("./test")
p = remote("example.com", port_num)

2. send

  • 프로세스에 데이터 전송하기 위해 사용
from pwn import *
p = process('./test')

p.send(b'A')  # ./test에 b'A'를 입력
p.sendline(b'A') # ./test에 b'A' + b'\n'을 입력
p.sendafter(b'hello', b'A')  # ./test가 b'hello'를 출력하면, b'A'를 입력
p.sendlineafter(b'hello', b'A')  # ./test가 b'hello'를 출력하면, b'A' + b'\n'을 입력

3. recv

  • 프로세스에서 데이터 받기 위해 사용
  • recv(n) : n바이트만큼 받겠다. 못받아도 error X
  • recvn(n) : 정확히 n 바이트의 데이터를 받지 못하면 계속 기다림
from pwn import *
p = process('./test')

data = p.recv(1024)  # p가 출력하는 데이터를 최대 1024바이트까지 받아서 data에 저장
data = p.recvline()  # p가 출력하는 데이터를 개행문자를 만날 때까지 받아서 data에 저장
data = p.recvn(5)  # p가 출력하는 데이터를 5바이트만 받아서 data에 저장
data = p.recvuntil(b'hello')  # p가 b'hello'를 출력할 때까지 데이터를 수신하여 data에 저장
data = p.recvall()  # p가 출력하는 데이터를 프로세스가 종료될 때까지 받아서 data에 저장

4. packing, unpacking

  • 어떤 값을 엔디언 형식으로 변경 혹은 그 반대로 변경 시 사용

    p : packing

    • p32 / p64(0x12345678) -> \0x00\0x00... \0x78\0x56\0x34\0x12
      • little(default), p64(..., endiand = 'big')

    u : unpacking

    • u32 / u64("\0x78\0x56...") -> 0x12345678

5. interactive

  • 셸 획득해 특정상황에 직접 입력 주면서 출력 확인하고 싶을때 사용
  • 터미널에 직접 데이터 입력, 프로세스 출력 확인 가능
from pwn import *
p = process('./test')
p.interactive()

6. context.arch

  • 공격 대상의 아키텍쳐 설정
from pwn import *
context.arch = "amd64" # x86-64 아키텍처
context.arch = "i386"  # x86 아키텍처
context.arch = "arm"   # arm 아키텍처

7. shellcraft

  • 공격에 필요한 셸 코드를 쉽게 꺼내 쓸수 있게 해줌
  • 단점 : 정적으로 생성된 셸코드는 셸 코드가 실행될 때의 메모리 상태 반영 못함
profile
항상 든든하게 코딩 한그릇🧑‍💻🍚

0개의 댓글