본문 바로가기

Security study/Pwnable

pwntools 사용법 및 기능

(1) pwntools란?

- 리눅스 환경에서 익스플로잇을 쉽게 짤 수 있도록 해주는 파이썬 라이브러리이다.

- 공식 Github 주소 : https://github.com/Gallopsled/pwntools

 

(2) pwntools 설치

sudo apt update

sudo apt install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential

sudo python3 -m pip install --upgrade pip "pip < 21.0"

sudo python3 -m pip install --upgrade pwntools

4줄을 차례대로 리눅스 터미널 창에 입력해주면 된다.

3번째 줄에서 "pip < 21.0" 코드를 꼭 넣어주는 걸 추천한다. 안 넣어주면 오류가 많이 발생한다...

+python --version 으로 현재 python의 버젼을 확인할 수 있다.

 

(3) 사용법

python 코드를 작성할 때 pwn 모듈을 import 시켜준다.

from pwn import *

위의 코드로 가능하다.

 

(4) 여러 가지 기능

1. 파일 연결 

 - 변수 = process("./파일이름")

  -> 로컬인 경우 해당 프로그램을 실행시키고, 입력을 기다리게 한다. 이후 실행된 프로그램에서는 변수를 통해 접근할 수 있다.

 - 변수 = remote("IP",PORT)

  -> nc 서버에 접속할 때 주로 쓰인다. 

 - 변수 = ssh( USERNAME,IP,PORT,PASSWORD)

  -> ssh 서버에 접속할 때 쓰인다.

* 변수로 'p'나 'r'을 많이 쓴다.

 

2. 데이터 수신

 - recvline() : 한 줄 받아오기

 - recvuntil(str) : str까지 받아오기

 - recv(int) : int만큼 받아오기

 

3. 데이터 전송

 - send(value) : value 값을 보내기 read에 사용한다.

 - sendline(value) : 데이터 한 줄을 보낸다. scanf, gets, fgets 등에 사용한다.

 

4. 쉘과 통신 

 - 변수.interactive() : 쉘에 명령을 직접 전송, 수신한다.

  -> 변수는 파일을 연결할 때 썼던 변수를 쓴다.

 

5. 패킹과 언패킹

 - p32(패킹할 것) : 32bit little-endian으로 패킹해준다.

 - p64(패킹할 것) : p32처럼 64bit로 패킹해준다.

+둘 다 (패킹할 것, endian='big') 으로 괄호 안에 ,로 endian='big'을 추가해주면 big endian 이 된다.

 - u32(str) : 32bit little endian을 unpack해준다. 4byte packing str을 넣어줘야한다.

 - u64(str) : 64bit little endian을 unpack해준다. 8byte packing str을 넣어줘야한다.

 

 

6. 기타

 - checksec --file 파일명 : 실행파일의 보호기법을 출력한다.

 

 

Gallopsled/pwntools

CTF framework and exploit development library. Contribute to Gallopsled/pwntools development by creating an account on GitHub.

github.com

 

'Security study > Pwnable' 카테고리의 다른 글

GDB 사용방법  (0) 2021.05.12
[pwnable.kr] collision 문제 풀이  (0) 2021.05.05
setuid 개념 정리  (0) 2021.05.05
[2주차 과제] swing_pwn_chall 풀이  (0) 2021.04.28
리눅스 메모리 구조  (0) 2021.03.31