8.5 KiB
Stowaway https://github.com/ph4ntonn/Stowaway
Stowaway是一个利用go语言编写、专为渗透测试工作者制作的多级代理工具
用户可使用此程序将外部流量通过多个节点代理至内网,突破内网访问限制,构造树状节点网络,并轻松实现管理功能
PS:谢谢大家的star,同时欢迎大家使用后提出问题&&Bug 😘。
PPS:请务必在使用前详细阅读使用方法及文末的注意事项
此工具仅限于安全研究和教学,用户承担因使用此工具而导致的所有法律和相关责任! 作者不承担任何法律和相关责任!
特性
- 管理端更加友好的交互,支持命令补全/历史
- 一目了然的节点树管理
- 丰富的节点信息展示
- 节点间正向/反向连接
- 节点间支持重连
- 节点间可通过socks5代理进行连接
- 节点间可通过ssh隧道连接
- 节点间流量可选择TCP/HTTP
- 多级socks5流量代理转发,支持UDP/TCP,IPV4/IPV6
- 节点支持ssh访问远程主机
- 远程shell
- 上传及下载文件
- 端口本地/远程映射
- 节点可端口复用
- 自由开关各类服务
- 节点间相互认证
- 节点间流量以AES-256-GCM进行加密
- 相较于v1.0,文件体积减小25%
- 支持各类平台(Linux/Mac/Windows/MIPS/ARM)
下载及演示
使用方法
角色
Stowaway一共包含两种角色,分别是:
admin
渗透测试者使用的主控端agent
渗透测试者部署的被控端
名词定义
- 节点: 指admin || agent
- 主动模式: 指当前操作的节点主动连接另一个节点
- 被动模式: 指当前操作的节点监听某个端口,等待另一个节点连接
- 上游: 指当前操作的节点与其父节点之间的流量
- 下游:指当前操作的节点与其所有子节点之间的流量
参数解析
- admin
参数:
-l 被动模式下的监听地址[ip]:<port>
-s 节点通信加密密钥,所有节点(admin&&agent)必须一致
-c 主动模式下的目标节点地址
--proxy socks5代理服务器地址
--proxyu socks5代理服务器用户名(可选)
--proxyp socks5代理服务器密码(可选)
--down 下游协议类型,默认为裸TCP流量,可选HTTP
- agent
参数:
-l 被动模式下的监听地址[ip]:<port>
-s 节点通信加密密钥
-c 主动模式下的目标节点地址
--proxy socks5代理服务器地址
--proxyu socks5代理服务器用户名(可选)
--proxyp socks5代理服务器密码(可选)
--reconnect 重连时间间隔
--rehost 端口复用时复用的IP地址
--report 端口复用时复用的端口号
--up 上游协议类型,默认为裸TCP流量,可选HTTP
--down 下游协议类型,默认为裸TCP流量,可选HTTP
参数用法
-l
此参数admin&&agent用法一致,仅用在被动模式下
若不指定IP地址,则默认监听在0.0.0.0
上
-
admin:
./stowaway_admin -l 9999
or./stowaway_admin -l 127.0.0.1:9999
-
agent:
./stowaway_agent -l 9999
or./stowaway_agent -l 127.0.0.1:9999
-s
此参数admin&&agent用法一致,可用在主动&&被动模式下
可选,若为空,则代表通信不被加密,反之则通信基于用户所给出的密钥加密
-
admin:
./stowaway_admin -l 9999 -s 123
-
agent:
./stowaway_agent -l 9999 -s 123
-c
此参数admin&&agent用法一致,仅用在主动模式下
代表了希望连接到的节点的地址
-
admin:
./stowaway_admin -c 127.0.0.1:9999
-
agent:
./stowaway_agent -c 127.0.0.1:9999
--proxy/--proxyu/--proxyp
这三个参数admin&&agent用法一致,仅用在主动模式下
--proxy
代表socks5代理服务器地址,--proxyu
以及--proxyp
可选
无用户名密码:
-
admin:
./stowaway_admin -c 127.0.0.1:9999 --proxy xxx.xxx.xxx.xxx
-
agent:
./stowaway_agent -c 127.0.0.1:9999 --proxy xxx.xxx.xxx.xxx
有用户名密码:
-
admin:
./stowaway_admin -c 127.0.0.1:9999 --proxy xxx.xxx.xxx.xxx --proxyu xxx --proxyp xxx
-
agent:
./stowaway_agent -c 127.0.0.1:9999 --proxy xxx.xxx.xxx.xxx--proxyu xxx --proxyp xxx
--up/--down
这两个参数admin&&agent用法一致,可用在主动&&被动模式下
但注意admin上没有--up
参数
这两个参数可选,若为空,则代表上/下游流量为裸TCP流量
若希望上/下游流量为HTTP流量,设置此两参数即可
-
admin:
./stowaway_admin -c 127.0.0.1:9999 --down http
-
agent:
./stowaway_agent -c 127.0.0.1:9999 --up http
or./stowaway_agent -c 127.0.0.1:9999 --up http --down http
注意一点,当你设置了某一节点上/下游为TCP/HTTP流量后,与其连接的父/子节点的下/上游流量必须设置为一致!!!
如下
-
admin:
./stowaway_admin -c 127.0.0.1:9999 --down http
-
agent:
./stowaway_agent -l 9999 --up http
上面这种情况,agent必须设置--up
为http,否则会导致网络出错
agent间也一样
假设agent-1正在127.0.0.1:10000
端口上等待子节点的连接,并且设置了--down http
那么agent-2也必须设置--up
为http,否则会导致网络出错
- agent-2:
./stowaway_agent -c 127.0.0.1:10000 --up http
--reconnect
此参数仅用在agent,且仅用在主动模式下
参数可选,若不设置,则代表节点在网络连接断开后不会主动重连,若设置,则代表节点会每隔x(你设置的秒数)秒尝试重连至父节点
-
admin:
./stowaway_admin -l 9999
-
agent:
./stowaway_agent -c 127.0.0.1:9999 --reconnect 10
上面这种情况下,代表如果agent与admin之间的连接断开,agent会每隔十秒尝试重连回admin
agent之间也与上面情况一致
并且--reconnect
参数可以与--proxy
/--proxyu
/--proxyp
一起使用,agent将会参照启动时的设置,通过代理尝试重连
--rehost/--report
这两个参数比较特别,仅用在agent端,详细请参见下方的端口复用机制
端口复用机制
当前Stowaway提供基于SO_REUSEPORT和SO_REUSEADDR特性的端口复用功能及基于IPTABLES的端口复用功能
-
在linux下可以大部分的功能端口
-
在windows下不可复用iis,rdp端口,可以复用mysql,apache服务的端口
复用方式
-
SO_REUSEPORT和SO_REUSEADDR模式
假设agent端采用端口复用机制复用80端口
此时agent端必须设置
--rehost
&&--report
&&-s
参数-
--rehost代表希望复用的IP地址,不可为0.0.0.0,普遍应当是网卡的外部地址
-
--report代表希望复用的端口
-
-s代表通信密钥
主要支持windows、mac环境下的复用,linux亦可,但限制较多
- admin端:
./stowaway_admin -c 192.168.0.105:80 -s 123
- agent端:
./stowaway_agent --report 80 --rehost 192.168.0.105 -s 123
-
-
IPTABLES模式
假设agent端采用端口复用机制复用22端口
此时agent端必须设置
-l
&&--report
&&-s
参数-
-l 代表无法被正常访问的端口,也就是你真正想让agent监听并接受连接的端口
-
--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
-