一、环境配置
1.在Ubuntu上配置docker环境
我们选择用Xshell来将环境资源上传到Ubuntu虚拟机上(比较简单)
我们选择在root模式下进行环境配置,先将资源文件复制到root下(如果你一开始就传输到root下就不用理会这个)
2.安装docker
apt-get install docker.io
3.解压缩资源
unzip AntSword-Labs-master.zip
4.把AntSword-Labs-master 改下名(方便),进入该目录。安装Docker Compose,
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。Docker Compose将所管理的容器分为三层,分别是工程(project)、服务(service)以及容器(container)。通过Docker Compose,可以在单机上编排容器,实现多个服务的定义、依赖关系和按顺序启动服务等功能。
这里选择用使用包管理工具安装
apt-get update
apt-get install docker-compose
5.抓取docker-compose.yml
docker compose up -d
6.抓取运行成功
二、蚁剑连接
我们假定在真实的业务系统上,存在一个 RCE 漏洞,可以让我们获取 WebShell。
在蚁剑上进行连接测试
四个难点
1. 我们需要在每一台节点的相同位置都上传相同内容的 WebShell
一旦有一台机器上没有,那么在请求轮到这台机器上的时候,就会出现 404 错误,影响使用。是的,这就是你出现一会儿正常,一会儿错误的原因。
新建一个hello文件一刷新就会不再,在一刷新就会出现
解决方法:多次保存可以解决此问题
2. 我们在执行命令时,无法知道下次的请求交给哪台机器去执行。
我们执行 ip addr 查看当前执行机器的 ip 时,可以看到一直在飘,因为我们用的是轮询的方式,还算能确定,一旦涉及了权重等其它指标,就让你好好体验一波什么叫飘乎不定。
3.当我们需要上传一些工具时,麻烦来了
由于 antSword 上传文件时,采用的分片上传方式,把一个文件分成了多次HTTP请求发送给了目标,所以尴尬的事情来了,两台节点上,各一半,而且这一半到底是怎么组合的,取决于 LBS 算法。
4.由于目标机器不能出外网,想进一步深入,只能使用 reGeorg/HTTPAbs 等 HTTP Tunnel,可在这个场景下,这些 tunnel 脚本全部都失灵了。
解决方法:
1.关机
是的,首先想到的第一个方案是关机/停服,只保留一台机器,因为健康检查机制的存在,很快其它的节点就会被 nginx 从池子里踢出去,那么妥妥的就能继续了。
这个方案实在是,影响业务,还会造成灾难,直接 Pass 不考虑。(实验环境下,权限够的时候是可以测试可行性的)。
2.执行前先判断要不要执行
我们既然无法预测下一次是哪台机器去执行,那我们的 Shell 在执行 Payload 之前,先判断一下要不要执行。
3.在Web 层做一次 HTTP 流量转发
没错,我们用 AntSword 没法直接访问 LBSNode1 内网IP(172.23.0.2)的 8080 端口,但是有人能访问呀,除了 nginx 能访问之外,LBSNode2 这台机器也是可以访问 Node1 这台机器的 8080 端口的。
原理图如下:
首先创造脚本
不要使用上传功能,上传功能会分片上传,导致分散在不同 Node 上。
然后修改 Shell 配置, 将 URL 部分填写为 antproxy.jsp 的地址
查看ip
然后就解决了。