본문 바로가기
System Hacking

pwntools

by zz! 2025. 1. 22.
728x90

pwntools는 Python 기반의 취약점 분석과 익스플로잇 개발을 위한 도구 모음이다. 

드림핵(dreamhack) 정리입니다. 문제가 될시 삭제하겠습니다

 

#익스플로잇(Exploit) 이란 ?

시스템, 소프트웨어 또는 네트워크의 취약점을 악용하여 비정상적인 동작을 유발하거나 권한을 얻는 행위

 

from pwn import *

 

1. process & remote

process 함수 : 로컬 바이너리를 대상으로 할 때 사용하는 함수

remote 함수 : 원격 서버를 대상으로 할 때 사용하는 함수이다. 

p = process('./test')	# 로컬 바이너리 'test'를 대상으로 익스플로잇
p = remote("example.com", 31337) # example.com의 31337 포트에서 실행 중인 프로세스를 대상

 

2. 데이터 전송 및 수신

send() : 줄 바꿈 없이 전송

sendline() : 줄 바꿈 포함 전송

sendafter() : 특정 문자열이 수신된 후 데이터를 전송

sendlineafter() : 특정 문자열이 수신된 후 데이터를 전송 후 \n 

p.send(b'hello, world')
p.sendline(b'hello, world')
p.sendafter(b'hello', b'A')
p.sendlineafter(b'hello', b'A')

sendafter 설명 : hello를 출력하면 A를 입력 

recv () : 프로세스에서 데이터를 받기 위해 사용

recv() 와 recvn()의 차이점 : recv(n)은 최대 n 바이트를 받는 것인데, 그 만큼을 받지 못해도 에러를 발생시키지 않음

반면, recvn(n)의 경우 정확히 n 바이트의 데이터를 받지 못하면 계속 기다림

data = p.recv(1024)	# 최대 1024 바이트까지 받아서 data에 저장
data = p.recvline() # 출력하는 데이터를 개행문자를 만날 때까지 저장
data = p.recvn(5)	# 최대 5바이트만 받아서 저장
data = p.recvuntil(b'hello')	# hello를 출력할 때까지 데이터를 수신
data = p.recvall()	# p가 출력하는 데이터를 프로세스가 종료될 때까지 받아서 저장

 

3. interactive

셸을 획득했거나, 익스플로잇의 특정 상황에 직접 입력을 주면서 출력을 확인하고 싶을 때 사용하는 함수

즉, 익스플로잇이 성공한 후 쉘이나 결과를 확인할 때 사용함

p.interactive()

 

728x90