2019. 2. 22. 18:46ㆍpwnable
pwntools 설치
- pip install pwntools
* apt-get install libcapstone-dev도 해줘야 한다.
사용하기
from pwn import *
연결 방법
- nc : remote
r = remote( ip 또는 localhost, port )
- local : process
p = process( path )
데이터 받기
r = remote( localhoat, 7777 )
- recv() : 데이터 받기
data = r.recv()
tmp = r.recv(4) // 4바이트만큼 받겠다는 의미
- recvline() : 1줄 받기
data = r.recvline()
- recvuntil(value) : value 부분까지 데이터 받기
ex) recvuntil(abcd)이면 ~abcd까지 데이터를 받는다.
data = r.recvline(abcd)
데이터 보내기
r = remote( localhoat, 7777 )
- send(value) : value를 보낸다.
read()함수로 입력값을 받을 때 사용한다.
r.send("abcd")
- sendline(value) : 데이터 한줄을 보낸다.
* (아직 사용해보지 않았다. )
r.sendline(value)
packing 함수
- p32(value) : 32bit 리틀 엔디안 방식으로 패킹
1. p32(ABCD) = \x68\x67\x66\x65
2. p32(0x804832c) = \x2c\x83\x04\x08
- p64(value) : 64bit 리틀 엔디안 방식으로 패킹
unpacking 함수
- u32(str) : 32bit 리틀 엔디안 방식으로 언패킹
반환값은 int, str은 패킹된 string
- u64(str) : 64bit 리틀 엔디안 방식으로 언패킹
interactive 함수
r = remote( localhoat, 7777 )
- interactive() : 쉘과 직접적으로 명령을 전송, 수신할 수 있는 함수
r.interactive()
ELF 함수
: 바이너리에 적용되어있는 보호기법을 보여주고, plt, got 등의 정보를 가져올 수 있다.
elf = ELF("./(파일 이름)")
r = remote( localhoat, 7777 )
- plt , got 정보 가져오기
read_plt = elf.plt['read'] // read 함수의 plt
read_got = elf.got['read'] // read 함수의 got