python pwntools
설치방법
sudo apt-get update
sudo apt-get install python2.7-dev python-pip
sudo pip install pwntools
sudo apt-get install libcapstone-dev
pwntools 사용
- 코드 맨 위에 'from pwn import *'를 입력
from pwn import *
pwntools 연결
nc : remote("접속주소", 포트)
접속주소는 string이고, 포트는 int형식
p = remote("localhost",7777)
local : process("./파일이름")
파일이름은 string형식
p = process("./test")
ssh : ssh("사용자이름","접속주소",port=포트번호,password="비밀번호")
string : (사용자이름, 접속주소, 비밀번호)
int : 포트번호
기본값 : port=22, password="guest"
s = ssh("user","localhost",port=7777,password="guest")
p = s.run("/bin/sh")
p.sendline("./filename")
pwntools 데이터 받기
recv( int ) : int만큼 데이터를 받아옵니다.
1234567
data = p.recv(5)
data == 12345
recvline() : 1줄 받아옵니다.
1234
5678
data = p.recvline()
data == 1234
recvuntil(value) : value까지 받아옵니다.
Password : 1234
tmp = p.recvuntil("Password :")
data = p.recv(4)
tmp == Password :
data == 1234
pwntools 데이터 전송
send(value) : 데이터를 보냅니다. - read()함수
p.send("Hello")
# Hello <- 전송
sendline(value) : 데이터 한 줄을 보냅니다. - scanf(),gets() 등
p.sendline("Hello")
# Hello\n <- 전송
* sendline()은 문자열 끝에 "\n"가 추가됨
pwntools 데이터 받으면서 전송
sendinafter(str, send_str)
sendafter(str, sned_str)
Password :
p.sendinafter("Password", "1234")
# Password 받고 1234를 보냄
packing 함수
p32(value) : 32비트 리틀 엔디안 방식으로 패킹
p32(0x11223344) => \x44\x33\x22\x11
p32(ABCD) => \x68\x67\x66\x65
p64(value) : 64비트 리틀 엔디안 방식으로 패킹
p64(0x11223344) => \x00\x00\x00\x00\x44\x33\x22\x11
p64(ABCD) => \x00\x00\x00\x00\x68\x67\x66\x65
*빅 엔디안(big endian) 패킹 : p32(value,endian='big')
unpacking 함수
u32(str) : 32비트 리틀 엔디안 방식으로 언패킹
u32("\x44\x33\x22\x11") => 287454020 (0x11223344)
u64(str) : 64비트 리틀 엔디안 방식으로 언패킹
u64("\x00\x00\x00\x00\x44\x33\x22\x11") => 287454020 (0x11223344)
* str에는 패킹된 string이 들어가야 하고, 반환 값은 int형이다.
interactive 함수
- 쉘과 직접적으로 명령을 전송, 수신할 수 있는 함수
- 코드 맨 마지막에 사용
p.interactive()
ELF 함수
- ELF에 바이너리를 인식시켜 적용된 보호 기법을 확인
- plt, got가은 ELF정보 등을 가져올 수 있음
e = ELF("./filename")
puts_plt = e.plt['puts']
puts_got = e.got['puts']
응용 연습
이렇게 부분적인 설명만 보게 되면 이 모듈을 처음 다루는 사람들은 잘 이해하지 못할 것이다.
그래서 pwntools을 이용해 간단한 CTF 문제를 풀어보자.
HackCTF 달라란 침공 풀이 : she11.tistory.com/82