about absolroot
home
📟

Pwntools Commands

Exploit작성을 위한 파이썬 라이브러리.
pwntools is a CTF framework and exploit development library. Written in Python, it is designed for rapid prototyping and development, and intended to make exploit writing as simple as possible.
pwntools의 recv()send() 함수와 같은 함수들은 기본적으로 binary(byte열)로 작동한다.
따라서 이러한 함수를 사용할 때는 문자열을 바이트열로 인코딩해야한다.
다만 파이썬 3에서 문자열이 유니코드(Unicode)문자열이 됐기에 b' .decode()를 통해 변환을 생략해도 정상적으로 작동하는 경우가 많지만 가능하면 안정성을 위해 붙여주는 것이 좋다.

Getting Started

Import

from pwn import *
Python
복사

Making Connections

Local File Run

# p = process('path') p = process('/bin/sh')
Python
복사

Remote Connection (nc)

# p = remote ('dest_ip', dest_port) p = remote('192.168.0.1', 9002)
Python
복사

SSH Connection

#ssh(username, ip, port, password) #default port=22, password=guest p = ssh("username", "192.168.0.1", port=2222, password="example") p_proc = p.process('process name')
Python
복사
# ssh example p = ssh("username", "192.168.0.1", port=2222, password="example") p['whoami'] #shell command p.set_working_directory() p.ls() p.download_file('/etc/passwd') # file download sh = p.run('sh') sh.sendline(b'ls') sh.recvline( ) sh.close()
Python
복사

Serial Port

p = serialtube('/dev/ttyUSB0', baudrate=100000)
Python
복사
baudrate : 시리얼 통신에서 한 번에 전송할 수 있는 비트(bit) 수, 시리얼 통신에서는 송신측과 수신측의 baudrate가 동일해야한다.

Interactive

p.interactive()
Python
복사

Sending Data

p.send('y\n') # input 'y\n' p.sendline('y') # input 'y'+'\n' p.sendafter('Really?', 'YES') # input 'YES' if [p] outputs 'Really?' p.sendlineafter('Really?', 'YES') # input 'YES' + '\n' if [p] outputs
Python
복사
send : read() 함수를 통해 데이터를 수신할 때
sendline : gets() fgets() scanf() 등의 개행을 포함한 함수로 수신할 때

Receiving Data

p.recv(1024) # 1024 byte p.recvline() # receive data until meet '\n' p.recvuntil('welcome') # receive data until meet 'welcome' (int, string, ...) p.recvregex('[0-9]+') # receive data until meet regex pattern p.recvrepeat(timeout) # receive data until timeout error occour p.clear() # clear data in p
Python
복사

Packing/Unpacking

8/16/32/64 bit

p8(0) # b'\x00' u8('\x00') # 0 pack(1234) # b'\xd2\x04\x00\x00' unpack('\xd2\x04\x00\x00') # 1234 p32(0xdeadbeef) # b'\xef\xbe\xad\xde' hex(u32('\xef\xbe\xad\xde')) # 0xdeadbeef p64(1234) # b'\xd2\x04\x00\x00\x00\x00\x00\x00' u64('\xd2...') # 1234 #endian, default='litte' p32(0xdeadbeef, endian='big') # b'\xde\xad\xbe\xef' hex(u32('\xef\xbe\xad\xde', endian='big')) # 0xdeadbeef
Python
복사

Hex

hex(unpack('AAAA')) # 0x41414141 enhex(b'AAAA') # 41414141 unhex('41414141') # b'AAAA' unhex('41414141').decode() # AAAA
Python
복사

Base64

b64e(b'A') # QQ== b64d('QQ==').decode() # A
Python
복사

Hash - MD5, SHA1, SHA256

md5sum(b'AA') # b';\x98\xe2\xdf\xfcl\xb0j\x89\xdc\xb0\xd5\xc6\n\x02\x06' md5sumhex(b'AA') # 3b98e2dffc6cb06a89dcb0d5c60a0206 md5filehex('/test.php') # 51f3ef016898f79a5fce1e807dcf2be2 sha1sumhex(b'AA') # 801c34269f74ed383fc97de33604b8a905adb635 sha256sumhex(b'AA') # 58bb119c35513a451d24dc20ef0e9031ec85b35bfc919d263e7e5d9868909cb5
Python
복사

URL Encode / Decode

urlencode('\' or 1=1') # %27%20%6f%72%20%31%3d%31 urldecode('%27%20%6f%72%20%31%3d%31') # ' or 1=1 urldecode('%27%20or%201%3d1') # ' or 1=1
Python
복사

ELF / Debug

e = ELF('./test') puts_plt = e.plt['puts'] # puts() PLT address of ELF ./test read_got = e.got['read'] # read() GOT address of ELF ./test symbols = e.symbols # symbols of ELF ./test
Python
복사
p = process('./test') gdb.attach(p) # gdb (only local, not remote)
Python
복사

✓ 다른 [정리] 포스트

베트남 환전 왜 한국에서 하면 안될까? (한국 vs 공항 vs 금은방)
Travel
베트남 환전 왜 한국에서 하면 안될까? (한국 vs 공항 vs 금은방)
Travel
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2024. Absolroot all rights reserved.