
침투 테스터를 위한 다중 홉 프록시 도구로, 여러 노드를 통한 트래픽 라우팅, SOCKS5/SSH 터널링, 포트 포워딩, 원격 셸 및 암호화된 노드 통신을 지원합니다.

Stowaway는 Go 언어로 작성된, 침투 테스트 작업자를 위해 제작된 다중 계층 프록시 도구입니다.
사용자는 이 프로그램을 사용하여 외부 트래픽을 여러 노드를 통해 내부 네트워크로 프록시하고, 내부 네트워크 접근 제한을 우회하며, 트리 형태의 노드 네트워크를 구성하고 손쉽게 관리 기능을 구현할 수 있습니다.
별 눌러주셔서 감사합니다. 사용 후 문제점이나 버그를 제보해 주시면 감사하겠습니다. 😘
또한 사용 전에 반드시 사용 방법과 문서 끝부분의 주의사항을 자세히 읽어주시기 바랍니다.
본 프로젝트는 오직 네트워크 보안 연구 및 교육 목적으로만 제공되며, 불법적인 목적으로 사용하는 것을 엄격히 금지합니다. 본 도구를 사용하여 테스트를 수행하기 전에 반드시 대상 시스템의 명시적인 승인을 받고, 해당 국가/지역의 관련 법률 및 규정을 엄격히 준수하시기 바랍니다. 본 도구 사용으로 인해 발생하는 모든 직간접적 결과(데이터 손실, 시스템 손상, 법적 책임 등 포함)는 사용자 본인에게 있으며, 본 프로젝트 제작자는 어떠한 오용이나 이로 인한 법적 책임도 지지 않습니다. 본 도구를 사용함으로써 귀하는 본 면책 조항의 전체 내용을 읽고, 이해하고, 동의한 것으로 간주됩니다.
make를 사용하여 바로 다중 플랫폼 전체 프로그램을 컴파일하거나, Makefile을 확인하여 특정 프로그램을 컴파일하세요.Stowaway는 두 가지 역할이 있습니다.
admin 침투 테스터가 사용하는 메인 컨트롤러agent 침투 테스터가 배포하는 피제어단다음 명령어로 가장 간단한 Stowaway 인스턴스를 빠르게 시작할 수 있습니다.
./stowaway_admin -l 9999./stowaway_agent -c <stowaway_admin's IP>:9999인자:
-l 수동 모드의 리스닝 주소 [ip]:<port>
-s 노드 통신 암호화 키, 모든 노드(admin&&agent)가 일치해야 함
-c 능동 모드의 대상 노드 주소
--socks5-proxy socks5 프록시 서버 주소
--socks5-proxyu socks5 프록시 서버 사용자명 (선택)
--socks5-proxyp socks5 프록시 서버 비밀번호 (선택)
--http-proxy HTTP 프록시 서버 주소
--down 하위 프로토콜 유형, 기본값은 Raw TCP 트래픽, HTTP/WS 선택 가능
--tls-enable 노드 통신에 TLS 활성화, TLS 활성화 시 AES 암호화는 비활성화됨
--domain TLS SNI/WebSocket 도메인 지정, 비어 있으면 기본값은 대상 노드 주소
--heartbeat 하트비트 패킷 활성화
인자:
-l 수동 모드의 리스닝 주소 [ip]:<port>
-s 노드 통신 암호화 키
-c 능동 모드의 대상 노드 주소
--socks5-proxy socks5 프록시 서버 주소
--socks5-proxyu socks5 프록시 서버 사용자명 (선택)
--socks5-proxyp socks5 프록시 서버 비밀번호 (선택)
--http-proxy HTTP 프록시 서버 주소
--reconnect 재연결 시간 간격
--rehost 포트 재사용 시 재사용할 IP 주소
--report 포트 재사용 시 재사용할 포트 번호
--up 상위 프로토콜 유형, 기본값은 Raw TCP 트래픽, HTTP/WS 선택 가능
--down 하위 프로토콜 유형, 기본값은 Raw TCP 트래픽, HTTP/WS 선택 가능
--cs 실행 중인 플랫폼의 쉘 인코딩 유형, 기본값 utf-8, gbk 선택 가능
--tls-enable 노드 통신에 TLS 활성화, TLS 활성화 시 AES 암호화는 비활성화됨
--domain TLS SNI/WebSocket 도메인 지정, 비어 있으면 기본값은 대상 노드 주소
이 인자는 admin과 agent 모두 동일하게 사용되며, 수동 모드에서만 사용됩니다.
IP 주소를 지정하지 않으면 기본적으로 0.0.0.0에서 리스닝합니다.
admin: ./stowaway_admin -l 9999 또는 ./stowaway_admin -l 127.0.0.1:9999
agent: ./stowaway_agent -l 9999 또는 ./stowaway_agent -l 127.0.0.1:9999
이 인자는 admin과 agent 모두 동일하게 사용되며, 능동 및 수동 모드에서 사용 가능합니다.
선택 사항이며, 비어 있으면 통신이 암호화되지 않음을 의미하고, 그렇지 않으면 사용자가 제공한 키를 기반으로 통신이 암호화됩니다.
admin: ./stowaway_admin -l 9999 -s 123
agent: ./stowaway_agent -l 9999 -s 123
이 인자는 admin과 agent 모두 동일하게 사용되며, 능동 모드에서만 사용됩니다.
연결하려는 노드의 주소를 나타냅니다.
admin: ./stowaway_admin -c 127.0.0.1:9999
agent: ./stowaway_agent -c 127.0.0.1:9999
이 네 가지 인자는 admin과 agent 모두 동일하게 사용되며, 능동 모드에서만 사용됩니다.
--socks5-proxy는 socks5 프록시 서버 주소, --socks5-proxyu 및 --socks5-proxyp는 선택 사항입니다.
--http-proxy는 HTTP 프록시 서버 주소이며, socks5와 동일한 방식으로 사용됩니다.
사용자명/비밀번호 없음:
admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx
agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx
사용자명/비밀번호 있음:
admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx
agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx
이 두 인자는 admin과 agent 모두 동일하게 사용되며, 능동 및 수동 모드에서 사용 가능합니다.
단, admin에는 --up 인자가 없습니다.
이 인자들은 선택 사항이며, 비어 있으면 상위/하위 트래픽이 Raw TCP 트래픽임을 의미합니다.
상위/하위 트래픽을 HTTP/WS 트래픽으로 설정하려면 이 두 인자를 http 또는 ws로 설정하면 됩니다.
admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
agent: ./stowaway_agent -c 127.0.0.1:9999 --up ws 또는 ./stowaway_agent -c 127.0.0.1:9999 --up ws --down ws
또한 두 가지 주의할 점이 있습니다.
첫째, 특정 노드의 상위/하위를 TCP/HTTP/WS 트래픽으로 설정한 경우, 연결된 부모/자식 노드의 하위/상위 트래픽도 일치해야 합니다. 예시:
admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
agent: ./stowaway_agent -l 9999 --up ws
위의 경우, agent는 --up을 ws로 설정해야 하며, 그렇지 않으면 네트워크 오류가 발생합니다.
agent 간에도 동일합니다.
agent-1이 127.0.0.1:10000 포트에서 자식 노드의 연결을 기다리면서 --down ws를 설정했다고 가정합니다.
그러면 agent-2도 --up을 ws로 설정해야 하며, 그렇지 않으면 네트워크 오류가 발생합니다.
./stowaway_agent -c 127.0.0.1:10000 --up ws둘째, HTTP는 반이중 프로토콜이므로 Stowaway의 전이중 통신 특성에 적합하지 않습니다. 따라서 여기서 HTTP 프로토콜은 HTTP 메시지 형식만 구현했을 뿐 완전한 기능의 HTTP 워크플로는 아닙니다. 따라서 이 프로토콜을 여전히 사용할 수는 있지만, Stowaway 간 트래픽이 HTTP 메시지 형식으로 전송될 경우 nginx를 통해 전달할 수 없습니다. 이 코드와 기능의 일부는 특정 상황에서 HTTP 프로토콜을 사용하기 위해 유지되었으며, 다른 한편으로는 사용자 정의 프로토콜을 참조할 수 있는 사용자 정의 트래픽 템플릿을 제공하기 위함입니다.
nginx 등의 리버스 프록시를 통해 통신해야 하는 경우 ws 프로토콜을 사용하고 TLS와 함께 사용하시기 바랍니다.
이 인자는 agent에서만, 그리고 능동 모드에서만 사용됩니다.
선택 사항이며, 설정하지 않으면 노드는 네트워크 연결이 끊어져도 자동으로 재연결을 시도하지 않습니다. 설정하면 노드는 설정된 x초마다 부모 노드에 재연결을 시도합니다.
admin: ./stowaway_admin -l 9999
agent: ./stowaway_agent -c 127.0.0.1:9999 --reconnect 10
위의 경우, agent와 admin 간의 연결이 끊어지면 agent는 10초마다 admin에 재연결을 시도합니다.
agent 간에도 위와 동일합니다.
그리고 --reconnect 인자는 --socks5-proxy/--socks5-proxyu/--socks5-proxyp/--http-proxy와 함께 사용할 수 있으며, agent는 시작 시 설정된 구성을 참조하여 프록시를 통해 재연결을 시도합니다.
이 두 인자는 특별하며, agent에서만 사용됩니다. 자세한 내용은 아래의 포트 재사용 메커니즘을 참조하세요.
이 인자는 agent에서만 사용되며, 능동 및 수동 모드에서 사용 가능합니다.
주로 'shell' 기능의 글자 깨짐 문제를 해결하기 위한 것입니다. 사용자가 agent를 콘솔 인코딩이 gbk인 플랫폼(예: 일반적인 Windows)에서 실행하고 동시에 admin을 콘솔 인코딩이 utf-8인 플랫폼에서 실행하는 경우, 이 인자를 반드시 'gbk'로 설정해야 합니다.
./stowaway_agent -c 127.0.0.1:9999 -s 123 --cs gbk이 두 인자는 admin과 agent 모두 동일하게 사용되며, 능동 및 수동 모드에서 사용 가능합니다.
이 옵션을 설정하면 노드 간 트래픽을 TLS로 암호화할 수 있습니다.
예시:
./stowaway_admin -l 10000 --tls-enable -s 123./stowaway_agent -c localhost:10000 --tls-enable -s 123참고: 이 인자를 활성화하면 AES 암호화는 기본적으로 비활성화되며, -s 인자는 노드 간 상호 인증 및 포트 재사용 기능에만 사용됩니다.
또한 이 인자를 활성화할 경우, 네트워크 내의 모든 노드(admin 포함)가 이 인자를 활성화해야 합니다.
이 두 인자는 admin과 agent 모두 동일하게 사용되며, 능동 모드에서만 사용 가능합니다.
이 옵션을 설정하면 현재 노드의 TLS 협상 시 SNI 옵션 또는 WebSocket의 대상 Host를 설정할 수 있습니다.
예시:
./stowaway_admin -l 10000 --tls-enable -s 123./stowaway_agent -c xxx.xxx.xxx.xxx:10000 --tls-enable -s 123 --domain xxx.com이 인자는 admin에서만 사용되며, 능동 및 수동 모드에서 사용 가능합니다.
이 옵션을 설정하면 admin이 첫 번째 노드에 지속적으로 하트비트 패킷을 전송하여 중간에 리버스 프록시가 있는 경우에도 긴 연결을 유지할 수 있습니다.
admin과 agent 사이에 nginx와 같은 리버스 프록시 장치가 8080 포트를 8000 포트로 프록시하는 경우를 가정합니다. 예시:
./stowaway_admin -l 8000 --tls-enable -s 123 --down ws --heartbeat./stowaway_agent -c xxx.xxx.xxx.xxx:8080 --tls-enable -s 123 --domain xxx.com --up ws현재 Stowaway는 SO_REUSEPORT 및 SO_REUSEADDR 특성을 기반으로 한 포트 재사용 기능과 IPTABLES 기반의 포트 재사용 기능을 제공합니다.
SO_REUSEPORT 및 SO_REUSEADDR 모드
agent가 포트 재사용 메커니즘을 사용하여 80 포트를 재사용한다고 가정합니다.
이 경우 agent는 반드시 --rehost, --report, -s 인자를 설정해야 합니다.
--rehost: 재사용하려는 IP 주소를 나타내며, 0.0.0.0이 될 수 없고 일반적으로 네트워크 카드의 외부 주소여야 합니다.--report: 재사용하려는 포트를 나타냅니다.-s: 통신 키를 나타냅니다.주로 Windows, Mac 환경에서의 재사용을 지원하며, Linux에서도 가능하지만 제한이 많습니다.
./stowaway_admin -c 192.168.0.105:80 -s 123./stowaway_agent --report 80 --rehost 192.168.0.105 -s 123IPTABLES 모드
agent가 포트 재사용 메커니즘을 사용하여 22 포트를 재사용한다고 가정합니다.
이 경우 agent는 반드시 -l, --report, -s 인자를 설정해야 합니다.
-l: 정상적으로 접근할 수 없는 포트, 즉 agent가 실제로 리스닝하고 연결을 수락하길 원하는 포트를 나타냅니다.위의 예시는 admin과 agent 간의 연결만 나열한 것이며, agent 간의 연결도 동일하게 차이가 없습니다.
agent가 ctrl-c 또는 kill 명령으로 종료되면 프로그램이 자동으로 iptables 규칙을 정리합니다. 그러나 kill -9로 종료되면 자동으로 정리할 수 없습니다.
따라서 agent가 비정상적으로 종료되어 iptables 규칙이 정리되지 않고 재사용된 서비스에 접근할 수 없게 되는 것을 방지하기 위해,
종료가 필요할 때는 다음 명령을 실행하십시오: python reuse.py --stop --rhost xxx.xxx.xxx.xxx --rport xxx
그러면 전달 규칙이 비활성화되어 원래 서비스에 정상적으로 접근할 수 있습니다.
IPTABLES 모드의 포트 재사용을 사용하면 강제로 0.0.0.0에서 리스닝하게 되며, -l 인자로 IP를 지정할 수 없습니다.
위의 예시에서는 admin과 agent 하나만 등장했습니다.
그러나 다중 계층 네트워크가 핵심입니다.
Stowaway에서 다중 계층 네트워크를 구성하려면 admin의 listen, connect, sshtunnel 명령을 사용해야 합니다.
간단한 예를 들어 보겠습니다.
./stowaway_admin -l 9999 -s 123이제 agent-1이 admin에 연결되었습니다.
agent-1: ./stowaway_agent -c 127.0.0.1:9999 -s 123
이제 사용자가 agent-2도 연결하려고 합니다.
agent-2: ./stowaway_agent -l 10000 -s 123
그러면 사용자는 admin에서 use 0 -> connect agent-2의 IP:10000을 입력하여 agent-2를 네트워크에 추가하고 agent-1의 자식 노드로 만들 수 있습니다.
만약 사용자가 agent-3이라는 노드를 더 연결하고 싶지만 agent-1을 통해 agent-3에 접근할 수 없는 경우,
그러면 사용자는 admin에서 use 0 -> listen -> 1.Normal Passive 선택 -> 10001 입력하여 agent-1이 10001 포트에서 리스닝하고 자식 노드의 연결을 기다리도록 할 수 있습니다.
admin 작업이 완료되면 agent-3을 다음과 같이 시작합니다.
./stowaway_agent -c 127.0.0.1:10001 -s 123그러면 agent-3을 agent-1의 또 다른 자식 노드로 네트워크에 추가할 수 있습니다.
listen 및 sshtunnel에 대한 자세한 설명은 아래의 명령어 설명을 참조하십시오.
Stowaway는 현재 여러 가지 방식의 재연결을 지원합니다. 간단히 요약하면 다음과 같습니다.
먼저, 부모 노드가 연결이 끊어지면 오직 한 가지 유형의 노드만 자동으로 종료됩니다. 바로 시작 시 능동 모드였고 재연결이 설정되지 않은 노드입니다.
재연결이 설정된 경우, 노드는 지정된 시간 간격으로 재연결을 시도합니다.
또한, 수동 모드로 시작된 모든 노드는 자동으로 종료되지 않고 시작 시의 인자를 기반으로 지정된 포트에서 다시 리스닝합니다. 이때 사용자는 여전히 connect, sshtunnel을 사용하여 이러한 노드를 네트워크에 다시 연결할 수 있습니다.
네트워크 변동이나 중간 노드의 연결 끊김으로 인해 특정 분기가 끊어진 경우, 능동 재연결 시 반드시 누락된 체인의 헤드 노드에 연결해야 합니다. 예를 들어, admin 다음에 node1이 있고, node1에서 두 개의 분기(node1->node2->node3->node4, node1->node5->node6)가 있다고 가정합니다. node2가 연결이 끊어지면 node3과 node4는 연결이 끊어지지 않고 계속 살아 있습니다. 이때 사용자가 node3과 node4를 다시 네트워크에 추가하려면 두 가지 선택지가 있습니다. 하나는 node1이 node3에 직접 접근할 수 있다면, 사용자는 언제든지 node1에서 connect 또는 sshtunnel 명령을 사용하여 node3을 다시 네트워크에 추가할 수 있습니다(기억하세요, node1이 node4에도 직접 접근할 수 있더라도 node4에 직접 연결하지 말고, 전체 누락된 체인(node3->node4)의 헤드 노드인 node3에 연결하십시오). 그러면 node3과 node4를 다시 네트워크에 추가할 수 있습니다. 다른 선택지는 node1이 node3에 직접 접근할 수 없는 경우(즉, node2를 거쳐야 하는 경우) 먼저 node2를 재시작하여 네트워크에 추가한 후, node2에서 connect 또는 sshtunnel 명령을 사용하여 node3에 연결하여 node3과 node4를 네트워크에 추가합니다.
노드가 연결이 끊어지면, 해당 노드 및 그 자식 노드와 관련된 모든 socks, backward, forward 서비스가 강제로 중지됩니다.
admin 콘솔에서 사용자는 Tab 키를 사용하여 명령어를 자동 완성할 수 있고, 방향키(위, 아래, 왼쪽, 오른쪽)를 사용하여 히스토리를 검색하거나 커서를 이동할 수 있습니다.
admin 콘솔은 두 가지 레벨로 나뉩니다. 첫 번째 레벨은 메인 패널이며, 다음 명령어를 포함합니다.
help: 메인 패널의 도움말 정보 표시(admin) >> help
help 도움말 정보 표시
detail 연결된 노드의 상세 정보 표시
topo 노드 토폴로지 표시
use <id> 사용하려는 대상 노드 선택
exit Stowaway 종료
detail: 온라인 노드의 상세 정보 표시(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000 Hostname: ph4ntoms-MBP.lan User: ph4ntom
Memo:
topo: 온라인 노드의 부모-자식 관계 표시(admin) >> topo
Node[0]'s children ->
Node[1]
Node[1]'s children ->
use: 특정 agent 사용(admin) >> use 0
(node 0) >>
exit: Stowaway 종료(admin) >> exit
[*] Do you really want to exit stowaway?(y/n): y
[*] BYE!
사용자가 use 명령어로 agent를 선택하면 두 번째 레벨인 node 패널로 진입하며, 다음 명령어를 포함합니다.
help: node 패널의 도움말 정보 표시(node 0) >> help
help 도움말 정보 표시
status 노드 상태 표시 (socks/forward/backward 포함)
listen 현재 노드에서 포트 리스닝 시작
addmemo <string> 현재 노드에 메모 추가
delmemo 현재 노드의 메모 삭제
ssh <ip:port> 현재 노드를 통해 SSH 시작
shell 현재 노드에서 대화형 쉘 시작
socks <lport> [username] [pass] socks5 서버 시작
stopsocks socks 서비스 종료
connect <ip:port> 새 노드에 연결
sshtunnel <ip:sshport> <agent port> SSH 터널을 사용하여 노드를 토폴로지에 추가
upload <local filename> <remote filename> 현재 노드에 파일 업로드
download <remote filename> <local filename> 현재 노드에서 파일 다운로드
forward <lport> <ip:port> 로컬 포트를 특정 원격 ip:port로 전달
stopforward 포워드 서비스 종료
backward <rport> <lport> 원격 포트(agent)를 로컬 포트(admin)로 역방향 전달
stopbackward 백워드 서비스 종료
shutdown 현재 노드 종료
back 상위 패널로 돌아가기
exit Stowaway 종료
status: 현재 노드의 socks/forward/backward 상태 표시(node 0) >> status
Socks status:
ListenAddr: 0.0.0.0:10000 Username: Password:
-------------------------------------------------------------------------------------------
Forward status:
[1] Listening Addr: [::]:20000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
[2] Listening Addr: [::]:30000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
-------------------------------------------------------------------------------------------
Backward status:
[1] Remote Port: 40000 , Local Port: 50000 , Active Connections: 0
listen: agent가 특정 포트를 리스닝하고 자식 노드의 연결을 기다리도록 명령(node 0) >> listen
[*] MENTION! If you choose IPTables Reuse or SOReuse, you MUST CONFIRM that the node was initially started in the corresponding way!
[*] When you choose IPTables Reuse or SOReuse, the node will use the initial config(when node started) to reuse port!
[*] Please choose the mode(1.Normal passive / 2.IPTables Reuse / 3.SOReuse): 1
[*] Please input the [ip:]<port> : 10001
[*] Waiting for response......
[*] Node is listening on 10001
참고: listen은 특별한 명령어입니다. listen에는 세 가지 모드가 있습니다.
Normal passive: 이 옵션은 agent가 일반적인 방식으로 대상 포트에서 리스닝하고 자식 노드의 연결을 기다리는 것을 의미합니다.IPTables Reuse: 이 옵션은 agent가 IPTables Reuse 방식으로 포트를 재사용하고 자식 노드의 연결을 기다리는 것을 의미합니다.SOReuse: 이 옵션은 agent가 SOReuse 방식으로 포트를 재사용하고 자식 노드의 연결을 기다리는 것을 의미합니다.첫 번째 모드는 가장 일반적으로 사용됩니다. 부모 노드가 이 방식으로 리스닝하는 경우, 자식 노드는 단순히 -c 부모노드IP:port만 입력하면 네트워크에 참여할 수 있습니다.
두 번째와 세 번째 모드는 특별합니다. 사용자가 두 번째 또는 세 번째 모드를 선택하는 경우, 현재 조작 중인 노드가 포트 재사용 방식으로 시작되었는지 반드시 확인해야 합니다. 그렇지 않으면 이 두 모드를 사용할 수 없습니다.
두 번째와 세 번째 모드는 사용자가 어떤 정보도 입력할 필요가 없으며, 노드는 자동으로 시작 시의 인자를 사용하여 포트를 재사용하고 자식 노드의 연결을 받을 준비를 합니다.
또한, listen은 한 번에 하나의 자식 노드만 연결을 받을 수 있습니다. 여러 자식 노드가 연결되어야 하는 경우, 적절한 횟수의 listen 명령을 실행하십시오.
addmemo: 현재 노드에 메모 추가(node 0) >> addmemo test
[*] Memo added!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000 Hostname: ph4ntoms-MBP.lan User: ph4ntom
Memo: test
delmemo: 현재 노드의 메모 삭제(node 0) >> delmemo
[*] Memo deleted!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000 Hostname: ph4ntoms-MBP.lan User: ph4ntom
Memo:
ssh: 노드에 SSH 방식으로 대상 머신에 연결하도록 명령(node 0) >> ssh 127.0.0.1:22
[*] Please choose the auth method(1.username&&password / 2.certificate): 1
[*] Please enter the username: ph4ntom
[*] Please enter the password: *****
[*] Waiting for response.....
[*] Connect to target host via ssh successfully!
# ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:03:56]
$ whoami
ph4ntom
# ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:04:16]
$
이 모드에서는 Tab 키가 비활성화됩니다.
shell: 현재 노드의 쉘 획득(node 0) >> shell
[*] Waiting for response.....
[*] Shell is started successfully!
bash: no job control in this shell
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ whoami
ph4ntom
bash-3.2$
이 모드에서는 Tab 키가 비활성화됩니다.
socks: 현재 노드에서 socks5 서비스 시작(node 0) >> socks 7777
[*] Trying to listen on 0.0.0.0:7777......
[*] Waiting for response......
[*] Socks start successfully!
(node 0) >>
한 가지 주의할 점은, 여기서 7777 포트는 agent가 아니라 admin에서 열립니다.
사용자명과 비밀번호를 설정해야 하는 경우 위 명령을 socks 7777 <your username> <your password>로 변경할 수 있습니다.
리스닝 인터페이스를 지정해야 하는 경우 위 명령을 socks xxx.xxx.xxx.xxx:7777로 변경할 수 있습니다.
stopsocks: 현재 노드의 socks5 서비스 중지(node 0) >> stopsocks
Socks Info ---> ListenAddr: 0.0.0.0:7777 Username: <null> Password: <null>
[*] Do you really want to shut down socks?(yes/no): yes
[*] Closing......
[*] Socks service has been closed successfully!
(node 0) >>
connect: 현재 노드에 다른 자식 노드로 연결하도록 명령agent-1: ./stowaway_agent -l 10002
(node 0) >> connect 127.0.0.1:10002
[*] Waiting for response......
[*] New node online! Node id is 1
(node 0) >>
sshtunnel: 현재 노드에 SSH 터널 방식으로 다른 자식 노드로 연결하도록 명령agent-2: ./stowaway_agent -l 10003
(node 0) >> sshtunnel 127.0.0.1:22 10003
[*] Please choose the auth method(1.username&&password / 2.certificate): 1
[*] Please enter the username: ph4ntom
[*] Please enter the password: ******
[*] Waiting for response.....
[*] New node online! Node id is 2
(node 0) >>
엄격히 제한된 네트워크 환경에서는 SSH 터널 방식을 사용하여 Stowaway 트래픽을 SSH 트래픽으로 위장하여 방화벽 제한을 우회할 수 있습니다.
upload: 현재 노드에 파일 업로드(node 0) >> upload test.7z test.xxx
[*] File transmitting, please wait...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
download: 현재 노드의 파일 다운로드(node 0) >> download test.xxx test.xxxx
[*] File transmitting, please wait...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
forward: admin의 포트를 원격 포트로 매핑(node 0) >> forward 9000 127.0.0.1:22
[*] Trying to listen on 0.0.0.0:9000......
[*] Waiting for response......
[*] Forward start successfully!
(node 0) >>
$ ssh 127.0.0.1 -p 9000
Password:
# ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:19:51]
$
stopforward: 현재 노드의 원격 매핑 종료(node 0) >> stopforward
[0] All
[1] Listening Addr : [::]:9000 , Remote Addr : 127.0.0.1:22 , Active Connections : 1
[*] Do you really want to shut down forward?(yes/no): yes
[*] Please choose one to close: 1
[*] Closing......
[*] Forward service has been closed successfully!
backward: 현재 agent의 포트를 admin의 로컬 포트로 역방향 매핑(node 0) >> backward 9001 22
[*] Trying to ask node to listen on 0.0.0.0:9001......
[*] Waiting for response......
[*] Backward start successfully!
(node 0) >>
$ ssh 127.0.0.1 -p 9001
Password:
# ph4ntom @ ph4ntoms-MBP in ~ 🌈 [17:22:14]
$
stopbackward: 현재 노드의 역방향 매핑 종료(node 0) >> stopbackward
[0] All
[1] Remote Port : 9001 , Local Port : 22 , Active Connections : 1
[*] Do you really want to shut down backward?(yes/no): yes
[*] Please choose one to close: 1
[*] Closing......
[*] Backward service has been closed successfully!
shutdown: 현재 노드를 오프라인으로 전환(node 1) >> shutdown
(node 1) >>
[*] Node 1 is offline!
back: 메인 패널로 돌아가기(node 1) >> back
(admin) >>
exit: Stowaway 종료(node 1) >> exit
[*] Do you really want to exit stowaway?(y/n): y
[*] BYE!
ansicon.exe -i를 실행하십시오. 그렇지 않으면 admin에서 글자가 깨질 수 있습니다.UDP ASSOCIATE만 지원합니다. socks5 UDP 프록시를 사용할 때는 사용하는 프로그램(예: 스캐너 등)이 표준 RFC1928을 준수하여 패킷을 구성해야 하며, 패킷 손실 상황은 직접 처리해야 합니다.
Stowaway는 이제 404星链计划에 합류했습니다.
Stowaway 개발 과정에서 도움을 주신 다음 분들과 프로젝트에 감사드립니다.
--report: 재사용하려는 포트를 나타냅니다.-s: 통신 키를 나타냅니다.Linux 환경에서만 재사용을 지원하며, agent가 자동으로 IPTABLES를 수정하므로 root 권한이 필요합니다.
agent: ./stowaway_agent --report 22 -l 10000 -s 123
agent가 시작된 후, script 디렉토리의 reuse.py를 사용하세요.
먼저 SECRET 값을 설정합니다(SECRET 값은 각 노드를 시작할 때 설정한 통신 키입니다).
그런 다음 다음을 실행합니다: python reuse.py --start --rhost xxx.xxx.xxx.xxx --rport xxx
--rhost: agent의 주소를 나타냅니다.--rport: 재사용되는 포트를 나타내며, 이 예에서는 22여야 합니다.이제 admin에서 연결할 수 있습니다: ./stowaway_admin -c 192.168.0.105:22 -s 123