Pwntools (Python3)
※ 절대 허용되지 않은 사이트나 서버에 해킹 및 공격은 범죄이므로 이점 명심해야 한다.
파이썬 Pwntools 이란?
- CTF(Capture The Flag) 및 시스템 해킹(Pwnable)에서 익스플로잇 코드 작성할때 가장 많이 사용되는 라이브러리다.
1. Basic Settings and Import Modules
Attacker (Python3)
from pwn import * # 1. 로컬 바이너리 실행 p = process('./execute_file'); """ 실행파일 (바이너리 파일) """ # 2. 원격 서버 접속 (netcat) p = remote('ctf.server.org', 3000); """ 서버 호스트 네임, 접근포트 넘버 """
process: 로컬 바이너리를 실행하여 공격할 때 사용.remote: 원격 서버 소켓에 연결할 때 사용.
2. Data Sending
Attacker (Python3)
data = b'data' p.send(data) """ 데이터 전송 """ p.sendline(data) """ 데이터 전송 + 개행(\n) """ p.sendafter(str, data) """ str(문자열)이 올 때까지 기다린 후 데이터 전송 """ p.sendlineafter(str, data) """ str(문자열)이 올 때까지 기다린 후 데이터 전송 + 개행(\n) """
3. Data Receiving
Attacker (Python3)
data = p.recv(1024) """ 1024바이트 수신 """ data = p.recvline() """ 한 줄 수신 개행(\n)까지 """ data = p.recvuntil(">") """ '>' 문자가 나올 때까지 수신 """ data = p.recvall() """ 연결이 닫힐 때까지 전체 수신 """
4. Packing & Structuring
Attacker (Python3)
addr = 0x400500 packed_addr = p64(addr) """ 64비트 리틀 엔디안으로 팩킹 (Address 변환) """ packed_addr32 = p32(0x08048000) """ 32비트 리틀 엔디안으로 팩킹 """ unpacked_addr = u64(packed_addr) """ 64비트 언팩킹 (숫자로 변환) """ shellcode = asm(shellcraft.sh()) """ Shell code 생성 """
5. Logging & Debugging
Attacker (Python3)
log.info("Message") """ 일반 정보 """ log.success("PWN!") """ 성공 메시지 """ log.info(f"Address: {hex(addr)}") """ 주소 출력 """ gdb.attach(p) """ GDB 디버깅 (로컬에서 process 실행 시 사용) """
6. ELF File Processing (Find address)
Attacker (Python3)
elf = ELF('./execute_file') main_addr = elf.symbols['main'] """ 함수 주소 """ printf_got = elf.got['printf'] """ GOT 주소 """ printf_plt = elf.plt['printf'] """ PLT 주소 """
7. Pipeline (Interactive)
Attacker (Python3)
p.interactive() """ Shell 획득 후 상호작용 """
8. Example Exploit Code
Attacker (Python3)
from pwn import * p = process('./execute_file') p.recvuntil('Input: ') """ 'Input: ' 나올때까지 기다림 """ payload = b"A" * 64 """ 페이로드 작성 (Dummy 데이터) """ payload += p64(0xdeadbeef) """ 페이로드 작성 (Address) """ p.sendline(payload) """ 데이터 전송 + 개행(\n) 포함 """ p.interactive() """ Shell 획득 """