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 (새로 알게되는 함수들이 있으면 추가할 예정)
'Project H4C Study Group' 카테고리의 다른 글
[Project H4C] SFP, RET (0) | 2021.03.21 |
---|---|
[Project H4C] Buffer Overflow (0) | 2021.03.21 |
[Project H4C][dreamhack] basic_exploitation_002 (0) | 2021.03.19 |
[Project H4C][dreamhack] basic_exploitation_001 (0) | 2021.03.19 |
[Project H4C][dreamhack] basic_exploitation_000 (0) | 2021.03.18 |