Python 익스플로잇 코드 작성 (Pwntools 문법 정리)

마지막 수정일: 2026년 05월 03일

Pwntools (Python3)

※ 절대 허용되지 않은 사이트나 서버에 해킹 및 공격은 범죄이므로 이점 명심해야 한다.

파이썬 Pwntools 이란?


1. Basic Settings and Import Modules

Attacker (Python3)

from pwn import *
# 1. 로컬 바이너리 실행
p = process('./execute_file'); """ 실행파일 (바이너리 파일) """
# 2. 원격 서버 접속 (netcat)
p = remote('ctf.server.org', 3000); """ 서버 호스트 네임, 접근포트 넘버 """

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 획득 """