introduction
간단한 프로그램에 대해서는 Figure1 과 괕이 파이썬으로 공격 페이로드를 생성하고, 파이프를 통해 이를 프로그램에 전달하는 방식으로 익스플로잇을 수행 할 수 있다.
Payload
사용에 있어서 전송되는 데이터를 뜻한다.
멀웨어 (악성 소프트웨어, 유해한 소프트웨어) 의 일부이다.
그러나 공격방법이 조금만 복잡해져도 Figure1 과 같은 방법 사용하기 어려워진다. 따라서 해커들은 펄, 파이썬 C 언어 등으로 익스플로잇 스크립트, 또는 바이너리를 제작하여 사용.
Figure2 는 socket 모듈을 사용한 초기 파이썬 expoit Script 의 예시이다.
자주 사용하는 함수를 반복적으로 구현하는 것이 비효율 적이기 때문에 탄생하였다
pwntool 설치
다음 github Page 의 Read me 를 읽어보면 다음과 같은 명령어를 치라고 말한다.
apt-get update
apt-get install python3 python3-pip python3-dev libssl-dev libffi-dev build-essential
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade pwhtools
위 명령어 모두 실행 후
python3
명령어 실행시 다음과 같은 결과가 나온다면 성공한 것이다.
pwntools manual
1. process & remote
- process 함수
: exploit 을 local binary 를 대상으로 할 때 사용하는 함수이다.
: 보통 exploit 을 test 하고 debugging 하기 위해 사용
- remote 함수
: exploit dmf 원격 서버를 대상으로 할 때 사용하는 함수
: 대상 서버를 실제로 공격하기 위해서 사용
2. send
- senc
: 데이터를 process 에 전송하기 위해서 사용한다.
3. recv
- recv
: process 에서 데이터를 받기 위해 사용된다.
recv() recvn() 의 차이점
- revc(n): 은 최대 n 바이트를 받는 것. 그 이하를 받아도 error X
- recvn(): 정확히 n바이트의 데이터를 받아야한다.
4. packing & unpacking
어떤 값을 리틀 엔디언의 바이트 배열로 변경하거나, 또는 역의 과정을 거쳐야하는 경우에 사용한다.
리틀 엔디언 (Little-endian)
낮은 주소에 데이터의 낮은 바이트 (LSB, Least Significant Bit) 부터 저장하는 방식
(반대: 빅 엔디안 Big-endian)
5. interative
- interactice
: 셸을 획득했거나, 익스플로잇의 특정 상황에 직접 입력을 주면서 출력을 확인하고 싶을 때 사용하는 함수
: 호출 이후 터미널로 프로세스에 데이터를 입력하고, 프로세스의 출력 확인 가능하다
6. ELF
- ELF header
: exploit 에 사용될 수 있는 각종 정보 기록
7. context.log
- context.log
: exploit 에 버그 발생시 exploit 디버깅 하기 위한 로깅 기능
: 로그 레벨은 context.log_level 변수로 조절가능
8. context.arch
pwntools 는 셸코드를 생성하거나, 코드를 assemble, disassemble 하는 기능 등을 가지고 있는데, 이들은 공격 대상의 아키텍처에 영향을 받는다.
- context.arch
: 아키텍처 정보를 프로그래머가 지정할 수 있게 한다.
9. shellcraft
pwntools 에는 자주 사용되는 셸 코드들이 저장되어있다. (따라서 공격에 필요한 셸 코드 쉽게 꺼내 쓰기 가능)
그러나 정적으로 생성된 셸 코드는 셸 코드가 실행 될 떄으 ㅣ메모리 상태 반영 불가
또한, 프로그램에 따라 셸 코드의 제한이 있는 등의 제약 조건이 발생하는 상황에서는 직접 셸 코드를 작성하는 것이 좋다.
- shellcraft
: 공격에 필요한 셸 코드를 쉽게 꺼내 쓸 수 있게 해준다.
x-86-64 를 대상으로 생성 할 수 있는 여러종류의 셸 코드
pwnlib.shellcraft
10. asm
대상 아키텍처를 미리 지정해야한다.
rao exploit
위의 C 언어로 작성된 코드를 pwntools 로 rao exploit 하기
코드 작성하기
vi rao.c
컴파일하기
gcc -o rao rao.c
pythonb3 rao.py
id
요약
- process & remote: 로컬 프로세스 또는 원격 서버의 서비스를 대상으로 익스플로잇 수행
- send & recv: 데이터 송수신
- packing & unpacking: 정수를 바이트 배열로, 또는 바이트 배열을 정수로 변환
- interactive: 프로세스 또는 서버와 터미널로 직접 통신
- context.arch: 익스플로잇 대상의 아키텍처
- context.log_level: 익스플로일 과정에서 출력할 정보의 중요도
- ELF: ELF 헤더의 여러 중요정보 수집
- shellcraft: 다양한 셸 코드를 제공
- asm: 어셈블리 코드를 기계어를 어셈블