안 쓰던 블로그

pwntools 기본 사용법 본문

CTF/Pwnable

pwntools 기본 사용법

proqk 2020. 9. 15. 07:15
반응형

pwntools

pwntools는 CTF 프레임워크이자 익스플로잇을 쉽게 짤 수 있게 해주는 라이브러리이다

공식 깃허브: github.com/Gallopsled/pwntools

공식 문서: docs.pwntools.com/en/stable/#

 

 

설치

 

apt-get update
apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade pwntools

 

기본 사용법

from pwn import * #임포트
r = precess("파일") #파일 실행

r.sendline("hello") #stdin에 hello\n 문자열을 넣는다
r.recv(4) #stdout에서 4바이트의 문자열을 읽어와 반환한다
r.recline() #stdout에서 문자열 한 줄을 읽어와 반환한다
r.recvuntil('input:') #stdout에서 input:이라는 문자열까지를 반환

r.interactive() #유저가 직접 화면에 입출력할 수 있게 돌려준다

 

 

예제

"#i: n + m = ?"라는 계산이 20번 들어오는 프로그램을 자동으로 해결하는 코드

예) #1: 2 + 3 = ?

from pwn import *

r = process("./task") #파일 실행
#r = remote("주소", 포트) #nc접속

for i in range(20): #20번 반복
    p.recvuntil(':') #문제 숫자 앞인 :까지 읽기

	first=r.recvuntil('+')[:-1] #+앞까지 읽고 숫자 받기
    second=r.recvuntil('=')[:-1] #=앞까지 읽고 숫자 받기
    
    ans=int(first)+int(second) #계산
    r.sendline(str(ans)) #답을 프로그램에 입력
    
    #--------------
    t=r.recvline() #아니면 이런 식으로 한 줄 입력 받음
    res=eval(t) #eval()함수로 계산
    print(res) #콘솔에 답 출력
    r.recvuntil(":") #:까지 이동
    r.sendline(str(res)) #정답 입력
r.interactive() #입출력 제어를 넘겨 받음

 

반응형

'CTF > Pwnable' 카테고리의 다른 글

32bit와 64bit - x86과 x64 비교  (0) 2020.10.13
레지스터  (0) 2020.10.13
스택과 SFP와 RET  (0) 2020.10.13
pwntools을 이용한 문제 풀이-double pistol  (0) 2020.09.15
pwntool을 이용한 문제 풀이  (0) 2020.09.15
Comments