nginx负载均衡
首先安装好nginx后,修改(centos)nginx/conf下的nginx.conf文件
然后修改IP地址,第一个我设置的ubuntu虚拟机的地址192.168.106.140
第二个为本地nginx127.0.0.1,后面端口设置的8080,8090,weight为权重,一个100,一个200,数值越大权重越重,最大连接数为2,超时为30秒。
然后修改server模块下的location
这里配置的相当于反向代理给了nginx.php,然后nginx.php就代理给了上面两台服务器了
然后ubuntu作为服务器端,也需要搭建nginx服务器
没有的话可以 apt-get install nginx
直接安装
完成后看一下nginx启动没
本地测试一下 curl http://localhost
然后稍微修改一下前端页面方便区分到底请求的哪个
vi index.nginx-debian.html
再在本地搭建一台nginx服务器,
然后在192.168.106.138(centos)虚拟机下重启一下nginx
测试
我访问的地址是192.168.106.138(centos)
漂移到了140上了
正常再次刷新应该漂移到本地的,这里出现了点问题没飘移。。。
到此反向代理+负载均衡就配置好了。
漏洞复现
首先找到docker环境
然后docker-compose up -d
然后无语的给我报个啥错。。。
问了一下度娘 她说这个是我的docker版本太低了,
好,相信她,卸载旧版本docker,重新安装新版docker!!!
再重试:(度娘诚不欺我)docker环境好了
看一下18080端口,没问题
然后在docker exec -it 067382028d2f /bin/bash
下面的webapps下面的ROOT里面有一个ant.jsp文件
里面存放了一句话木马和连接密码ant
至此环境搭建好了
测试用蚁剑连接一下,连接成功了
难点一:我们需要在每一台节点的相同位置都上传相同内容的 WebShell不然刷新会出现问题
一旦有一台机器上没有,那么在请求轮到这台机器上的时候,就会出现 404 错误,影响使用
解决方案很简单,多传几次就好了,保证每台服务器都有文件就可以了
难点二:我们在执行命令时,无法知道下次的请求交给哪台机器去执行
我们执行 ip addr 查看当前执行机器的 ip 时,可以看到一直在飘,因为我们用的是轮询的方式,还算能确定,一旦涉及了权重等其它指标,就让你好好体验一波什么叫飘乎不定
可以很明显的看到ip在0.2和0.3之间来回飘移,很烦人,说明有两台服务器在处理,两台还好,假设有很多台,那我们的请求都不知道飘到哪里去了
这里很明显看到ip addr ifconfig都没有
那就去安装一下
在试一下
很奇怪为什么一次能查出来一次又不可以,这就是问题二,我们的安装请求只在一台服务器上生效了,还有一台没有生效,解决办法就是在另一台也安装,就可以了。要是有一百台,那就上脚本。。。
难点三:当我们需要上传一些工具时,麻烦来了:
假如我们上传文件,文件稍微大一点, 由于 antSword 上传文件时,采用的分片上传方式,把一个文件分成了多次HTTP请求发送给了目标,所以尴尬的事情来了,两台节点上,各一半,而且这一半到底是怎么组合的,取决于 LBS 算法
这样我们的入侵行为就很难,用一个图片演示一下
上传了一个57k的图片
但是刷新一下就没了,在刷新就出现了
但是图片过大的话,因为ip地址会漂移,上传的文件会被拆分到不同的服务器,上传了一张700多k的图片111.jpg
很明显给我拆分成了一个400kb,一个370多kb。这就是问题3所在
难点四:由于目标机器不能出外网,想进一步深入,只能使用 reGeorg/HTTPAbs 等 HTTP Tunnel,可在这个场景下,这些 tunnel 脚本全部都失灵了。
解决办法:
Plan A 关掉其中一台机器 (作死)
是的,首先想到的第一个方案是关机/停服,只保留一台机器,因为健康检查机制的存在,很快其它的节点就会被 nginx 从池子里踢出去,那么妥妥的就能继续了。
这个方案实在是「老寿星上吊——活腻了」,影响业务,还会造成灾难,直接 Pass 不考虑。(实验环境下,权限够的时候是可以测试可行性的)。
真实环境肯定不能干!!!
真实环境肯定不能干!!!
真实环境肯定不能干!!!
Plan B 执行前先判断要不要执行
既然无法预测下一次是哪台机器去执行,那我们的 Shell 在执行 Payload 之前,先判断一下要不要执行就行了
以执行命令时 Bash 为例,在执行前判断一下 IP:
给他加上权限,零时文件权限不够
、
这样就固定在172.18.0.2上了,不是就直接not found
Plan C 在Web 层做一次 HTTP 流量转发
具体操作:
创建 antproxy.jsp 脚本****多创建几次,刷新
修改转发地址,转向目标 Node 的 内网IP的 目标脚本 访问地址。
注意:不仅仅是 WebShell ,还可以改成 reGeorg 等脚本的访问地址。
我们将 target 指向了 LBSNode1 的 ant.jsp
这样就再也不会ip漂移了,永远都是172.18.0.2了,
复现完成。