君衍.
一、应用场景
负载均衡是一种分布式计算或网络服务的技术,旨在将工作负载(请求、数据等)均匀分配到多个服务器或网络资源上,以提高整体系统的性能、可靠性和可扩展性。同时负载均衡也是如今解决Web应用承载大流量访问问题得一种普遍方案,实现负载均衡也有多种方式,比如购买负载均衡设备、Nginx实现负载均衡、DNS负载均衡以及IP散列等方式。那么今天我们主要探讨的问题便是在负载均衡环境下进行webshell连接。
首先我们可以看下基于DNS的负载均衡:
还有nginx的基于反向代理实现的负载均衡:
我们本篇重点就在反向代理方式,也就是不能直接访问到跑着具体业务的某个节点的情况。
反向代理方式最典型的也就是Nginx所实现的负载均衡,所以,我们首先来看Nginx支持的几种负载均衡方式:
名称 | 策略 |
---|---|
轮询(默认) | 按请求顺序逐一分配 |
weight | 根据权重分配 |
ip_hash | 根据客户端IP分配 |
least_conn | 根据连接数分配 |
fair (第三方) | 根据响应时间分配 |
url_hash (第三方) | 根据URL分配 |
这里典型的主要是轮询以及加权,像这种ip_hash以及url_hash这种固定访问到某个节点的情况我们就没有必要再进行讨论了,所以这里我们使用默认轮询的方式来进行演示,演示环境为AntSword-Labs。本篇我们来看在负载均衡情况下进行上传Webshell的思路,首先我们来搭建环境。
二、环境搭建
准备环境: Ubuntu虚拟机、Docker环境、蚁剑
这里我使用Ubuntu虚拟机版本为22.04版本:
apt-get install docker.io
docker -v
靶场环境我们使用蚁剑作者提供的docker镜像来演示:
https://github.com/AntSwordProject/AntSword-Labs
这里我们可以先下载到本机,然后上传至虚拟机,如果嫌配置代理麻烦的话。
unzip AntSword-Labs-master.zip
mv AntSword-Labs-master ant # 这里我改个名字
下面我们到执行目录来启动靶场环境,同时它会自动拉取镜像:
cd /root/ant/loadbalance/loadbalance-jsp
docker-compose up -d
我们拉去完毕可以进行查看下:
docker ps -a
上面三个我们可以看到创建完毕,同时最后那个是我之前进行docker环境测试时候创建的。
自此,我们的环境搭建完毕,下面我们来看负载均衡环境下webshell连接思路以及难点
三、思路以及难点
1、查看内部结构
首先这里我们可以查看下它的compose文件:
在这里我们可以看到nginx的80端口映射到了主机的18080端口上,同时我们访问your-ip:8080
就可以访问到这个环境下的web服务,也可以看到node1以及node2均是tomcat8。
同时在这个环境下已经上传好了脚本,上图我们可以假设在真实的业务系统下,这里是没有配置页面而已,同时这个业务系统存在一个RCE远程命令执行漏洞,我们已经上传好了脚本,可以获取webshell。
2、查看webshell
这里我们可以查看下上传脚本的位置:
docker ps -a
docker exec -it c995f68db10b /bin/bash
cd /usr/local/tomcat/webapps/ROOT/
ls -al
exit
docker exec -it 62fbc5b31021 /bin/bash
cd /usr/local/tomcat/webapps/ROOT/
ls -al
cat ant.jsp
exit
这里我们很明显可以看到很明显是一个webshell,因为上面有一个接收参数,通过接收参数ant,我们可以连接到上面一串木马。我们只需用蚁剑连就行。他这里我们发现每个节点都有木马,其实上传至一个节点,我们进行多次保存也可以实现多个节点都有。
3、使用蚁剑进行连接
完成后点击添加,就可以连接到我们的webshell了。
4、难点1 shell文件上传问题
这里我们以及上传完毕webshell,两台都上传了,所以我们在打开使用时不会出现任何错误,那如果我们只上传一台节点,我们可以来看下这种情况:
(这里我们可以先让一台节点的webshell失效)
root@zyan-virtual-machine:~/ant/loadbalance/loadbalance-jsp# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1be0cf1882e9 nginx:1.17 "nginx -g 'daemon of…" 31 minutes ago Up 31 minutes 0.0.0.0:18080->80/tcp, :::18080->80/tcp loadbalance-jsp-nginx-1
c995f68db10b loadbalance-jsp_lbsnode1 "catalina.sh run" 31 minutes ago Up 31 minutes 8080/tcp loadbalance-jsp-lbsnode1-1
62fbc5b31021 loadbalance-jsp_lbsnode2 "catalina.sh run" 31 minutes ago Up 31 minutes 8080/tcp loadbalance-jsp-lbsnode2-1
root@zyan-virtual-machine:~/ant/loadbalance/loadbalance-jsp# docker exec -it c995f68db10b /bin/bash
root@c995f68db10b:/usr/local/tomcat# find / -name ant.jsp
/usr/local/tomcat/webapps/ROOT/ant.jsp
root@c995f68db10b:/usr/local/tomcat# cd /usr/local/tomcat/webapps/ROOT
root@c995f68db10b:/usr/local/tomcat/webapps/ROOT# ls -al
total 12
drwxr-xr-x 2 root root 4096 Jan 29 03:46 .
drwxr-xr-x 1 root root 4096 Jan 29 03:46 ..
-rw-r--r-- 1 root root 316 May 17 2021 ant.jsp
root@c995f68db10b:/usr/local/tomcat/webapps/ROOT# mv ant.jsp ant
root@c995f68db10b:/usr/local/tomcat/webapps/ROOT# ls -al
total 20
drwxr-xr-x