728x90
pwntools 도구
: 시스템 해킹(pwnable)에 필요한 기능들로 커스터마이징이 된 파이써 모듈이다.
pwntools 사용법
from pwn import*
pwntools를 사용하기 위해서는 위의 코드를 통해서 import 하면 된다.
| process | 로컬 바이너리에 대해서 exploit을 실험해볼 때 사용하는 함수 |
| remote | 원격 서버를 대상으로 실제 exploit을 작동시킬때 사용하는 함수 |
| ssh | ssh를 통해서 접속하는 함수 (ssh:서로 통신할 때 보안적으로 안전하게 통시하기 위해 사용하는 프로토콜) |
pwntools을 이용해서 payload를 보내볼 건데, 예시를 다음과 같이 작성해봤다.
from pwn import *
p = process('./test')
p.send('A')
p.sendline('A')
p.sendafter('asdf', 'A')
p.sendlineafter('asdf', 'A')
위에 payload를 하나하나 설명하자면,
- p.send('A') : ./test에 'A'입력한다.
- p.sendline('A') : ./test에 'A'입력 뒤에 newline character(\n)까지 입력한다.
- p.sendafter('asdf', 'A') : ./test가 'asdf'를 출력할 시, 'A'를 입력한다.
- p.sendlineafter('asdf', 'A') : ./test가 'asdf'를 출력할 시, 'A'+'\n'를 입력한다.
pwntools 에서 파일 실행
r = process("파일이름")
process 클래스의 임의의 프로세스를 만드는 것으로 elf 파일을 실행시킬 수 있다. 위의 명령어를 실행하게 되면 해당 프로그램을 실행시키고, 입력을 대기한다. 이후 실행된 프로그램은 r 변수를 통해 접근 할 수 있다.
process()로 실행시킨 프로그램은 입출력을 직접적으로 할 수 없는 대신 r 변수를 통해 함수를 호출하면서 파이썬 코드를 통해 프로그램의 stdin에 입력을 넣고, stdput에서 출력을 받을 수 있다.
r = remote("주소", 포트)
process 대신 remote 클래스를 사용한다면 원격으로 접속 할 수 있다.
pwntools로 쉘 접속
p.interactive()
쉘을 획득한 경우나, exploit 특정 경우에는 직접 입력을 주면서 디버깅이 필요하 경우가 있다. 이때 함수 interactive가 exploit 파일과 process와의 연결을 stdin/stidout에서 process로 바꿔준다.
pwntools로 디버깅
import pwn from*
p=process('./test')
gdb.attach(p)
페이로드가 예상 외로 터질 때 유용하게 쓰이는 기능으로 페이로드를 진행하는 도중 gdb를 실행시킬 수 있느 함수로 새 창에서 해당 프로그램이 gdb로 보여지게 한다.
하지만 서버 접속는 불가능하고, process, 즉 파일 실행으로만 가능하다.
'잡다한 지식' 카테고리의 다른 글
| Colab 실행 관련 단축키 (0) | 2024.07.11 |
|---|---|
| The processor type 'metapc' is not included in the installed version of IDA. 오류 (0) | 2023.04.19 |
| GDB-PEDA 정의 및 명령어 정리 (0) | 2022.02.05 |
| GDB 도구 명령어 정리 (0) | 2022.02.04 |