Nginx反向代理、负载均衡上传webshell、Apache漏洞

目录

漏洞复现: 

 实验环境:

docker-compose build 建立环境 

 打开浏览器查看

上传木马ant.jsp,这个文件是有的

 用“中国蚁剑”进行连接

 解决难点

二、Apache漏洞

 Apache HTTPD 换行解析漏洞(CVE-2017-15715)

 Apache HTTPD 多后缀解析漏洞


反向代理方式其中比较流行的方式是用 nginx 来做负载均衡。我们先简单的介绍一下 nginx 支持的几种策略:轮询、weight、ip_hash 、least_conn 、fair、url_hash 

 LBSNode1 和 LBSNode2 均存在位置相同的 Shell: ant.jspNode1 和 Node2 均是 tomcat 8 ,在内网中开放了 8080 端口,我们在外部是没法直接访问到的。 我们只能通过 nginx 这台机器访问。nginx 的配置如下:Nginx反向代理、负载均衡上传webshell、Apache漏洞_第1张图片

漏洞复现: 

假设在真实的业务系统上,存在一个RCE漏洞,可以让我们获取 WebShell。

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第2张图片

 实验环境:

docker-compose build 建立环境 

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第3张图片

docker-compose up -d 运行

docker ps -a 查看所有的进程,端口号为18080

 Nginx反向代理、负载均衡上传webshell、Apache漏洞_第4张图片

 打开浏览器查看

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第5张图片

上传木马ant.jsp,这个文件是有的

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第6张图片

 用“中国蚁剑”进行连接

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第7张图片

然后连接目标,因为两台节点都在相同的位置存在 ant.jsp,所以连接的时候也没出现什么异常。

连接后打开我们的虚拟终端:查看IP地址,发现我们的IP进行了漂移;

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第8张图片

出现了四个难点

难点一:

我们需要在每一台节点的相同位置都上传相同内容的 WebShell

一旦有一台机器上没有,那么在请求轮到这台机器上的时候,就会出现 404 错误,影响使用。是的,这就是你出现一会儿正常,一会儿错误的原因。

难点二:

我们在执行命令时,无法知道下次的请求交给哪台机器去执行。

我们执行 ip addr 查看当前执行机器的 ip 时,可以看到一直在飘,因为我们用的是轮询的方式,还算能确定,一旦涉及了权重等其它指标,就让你好好体验一波什么叫飘乎不定。

难点三:

当我们需要上传一些工具时,麻烦来了:

由于 antSword 上传文件时,采用的分片上传方式,把一个文件分成了多次HTTP请求发送给了目标,所以尴尬的事情来了,两台节点上,各一半,而且这一半到底是怎么组合的,取决于 LBS 算法


难点四: 

由于目标机器不能出外网,想进一步深入,只能使用 reGeorg/HTTPAbs 等 HTTP Tunnel,可在这个场景下,这些 tunnel 脚本全部都失灵了。

 解决难点

1.执行前先判断IP;要不要执行

  这样一来,确实是能够保证执行的命令是在我们想要的机器上了,可是这样执行命令,不够丝滑,一点美感都没有。而且HTTP 隧道的问题依旧没有解决.

2.(这里我的IP发生了变化,原因是第一次做实验失败,没有完成,于是重新做了实验 ,测试成功;大家做测试时候,按自己查询的IP做就好)在Web 层做一次 HTTP 流量转发 

用 AntSword 没法直接访问 LBSNode1 内网IP(172.24.0.3)的 8080 端口,但是有人能访问呀,除了 nginx 能访问之外,LBSNode2 这台机器也是可以访问 Node1 这台机器的 8080 端口的。 

 Nginx反向代理、负载均衡上传webshell、Apache漏洞_第9张图片

第 1 步,我们请求 /web.jsp,这个请求发给 nginx

nginx 接到数据包之后,会有两种情况:

第 2 步把请求传递给了目标机器,请求了 Node1 机器上的 /web.jsp,接着 第 3 步,/web.jsp 把请求重组之后,传给了 Node1 机器上的 /ant.jsp,成功执行。

第 3 步,Node2 机器上面的 /web.jsp 把请求重组之后,传给了 Node1 的 /ant.jsp,成功执行。

(1)创建 web.jsp 脚本

修改转发地址,转向目标 Node 的 内网IP的 目标脚本 访问地址。

注意:不仅仅是 WebShell 哟,还可以改成 reGeorg 等脚本的访问地址。

我们将 target 指向了 LBSNode1 的 ant.jsp

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第10张图片

  (2)修改 Shell 配置, 将 URL 部分填写为 web.jsp 的地址,其它配置不变

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第11张图片

 3. 测试执行命令, 查看 IP

 Nginx反向代理、负载均衡上传webshell、Apache漏洞_第12张图片

二、Apache漏洞

 Apache HTTPD 换行解析漏洞(CVE-2017-15715)

 其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第13张图片 

在1.php后面插入一个\x0A,php会解析成1.php%0a,从而成功解析 

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第14张图片 

 Apache HTTPD 多后缀解析漏洞

Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件: 

AddType text/html .html
AddLanguage zh-CN .cn

 

其给.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言,值为zh-CN。此时,如果用户请求文件index.cn.html,他将返回一个中文的html页面。

以上就是Apache多后缀的特性。如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

 

 

环境运行后,访问http://your-ip/uploadfiles/apache.php.jpeg即可发现,phpinfo被执行了,该文件被解析为php脚本。

http://your-ip/index.php中是一个白名单检查文件后缀的上传组件,上传完成后并未重命名。我们可以通过上传文件名为xxx.php.jpgxxx.php.jpeg的文件,利用Apache解析漏洞进行getshell。

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第15张图片

Nginx反向代理、负载均衡上传webshell、Apache漏洞_第16张图片 

 

你可能感兴趣的:(nginx,负载均衡,apache)