pwntools는 리눅스에서 익스플로잇을 쉽게 짤 수 있도록 해주는 파이썬 라이브러리 이다.

리눅스에서 다음의 명령어들로 설치할 수 있다.

apt-get install python2.7-dev python-pip
pip install pwntools
apt-get install libcapstone-dev

파이썬에서 사용은 다음 코드로 시작한다.

from pwn import *

 

- NC

nc 서버는 remote("IP", port)의 형식으로 연결한다.

p = remote("100.100.100.100", 9000)

 

- Local

로컬의 프로그램에 연결할 때는 process(PATH)의 형식으로 사용한다.

p = process("./test")

 

- SSH

ssh로 연결할 때는 ssh(USERNAME, IP, PORT, PASSWORD)의 형식으로 연결한다.

p = ssh("test", "127.0.0.1", port=3000, password="test")

 

- recv

recv는 연결된 서버나 프로그램에서 출력하는 문자열을 받아오는 것이다.

 

recvline()은 출력되는 문자열 한 줄을 받아온다.

p.recvline() 와 같이 사용한다.

 

recvuntil(str)은 괄호 안에 지정한 문자열까지 받아온다. 

p.recvuntil("Hello")처럼 사용하면 서버에서 출력하는 문자열중에 Hello라는 문자열 까지 받아온다.

 

recv(int)는 int에 지정한 숫자만큼 문자열을 받아온다.

p.recv(2048) 처럼 사용한다.

 

- ELF

elf 바이너리를 넣어 elf파일에 적용되어있는 보호기법, plt, got, 아키텍쳐 등의 정보를 확인할 수 있다.

ELF(파일 이름)의 형식으로 사용한다.

.plt, .got 등으로 plt와 got 정보를 확인할 수 있다.

 

- send

send()는 괄호 안에 있는 값을 보낸다.

p.send("data")

 

sendline()은 괄호 안에 있는 값을 한 줄로 보낸다.

p.sendline("data")

 

- packing

p32()는 괄호 안의값을 32비트 리틀 엔디안 방식으로 패킹해준다.

 

p64()는 괄호 안의 값을 64비트 리틀 엔디안 방식으로 패킹해준다.

 

- interactive

remote 또는 process 등으로 생성한 연결에 쉽게 상호작용(명령어전달)을 할 수 있다.

p.interactive() 와 같이 사용한다.

 

- fmtstr_payload

fmtstr_payload()는 지정한 위치에 기존 함수 주소를 다른 함수 주소로 덮어 쓰는 payload를 자동으로 만들어준다.

fmtstr_payload(offset, {기존 함수 주소 : 덮어쓸 함수 주소}) 와 같은 형식으로 사용한다.

 

last update : 2021.03.20 (새로 알게되는 함수들이 있으면 추가할 예정)

+ Recent posts