(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 파일명 : 실행파일의 보호기법을 출력한다.
'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 |