天天看点

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

目录

  • 1. 环境
  • 2. 过程
    • 2.1 vulhub镜像拉取
    • 2.2 漏洞利用
    • 2.3 webshell上传
    • 2.4 哥斯拉Webshell连接
  • 3. 原理分析
  • 4. 踩坑
    • 4.1 Webshell连接不上

1. 环境

  kali linux

  docker+vulhub

  nginx(1.19.6)+php(7.4.15)

2. 过程

2.1 vulhub镜像拉取

  vulhub安装的话去官网上有安装教程

  https://vulhub.org/

  安装好之后进入到对应的目录下

  运行

docker-compose up -d

  完成之后

docker ps -a

可以查看容器信息

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

2.2 漏洞利用

  正常访问80端口,是一个文件上传点,后面webshell就可以走这里上传

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  再去看看官网给出的示例,访问http://192.168.197.128/uploadfiles/nginx.png

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  使用Burpsuite抓包看看返回值,发现图片后加了一句phpinfo

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  访问http://192.168.197.128/uploadfiles/nginx.png/.php

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  添加/.php后会被解析成php文件,漏洞的成因下面会说,到这里的话vulhub官网上的漏洞已经复现完成了,下面的内容主要是使用哥斯拉连接Webshell。

2.3 webshell上传

  哥斯拉地址:https://github.com/BeichenDream/Godzilla/releases/tag/v1.00-godzilla

  这里就不多介绍了,主要功能就是生成Webshell,连接Webshell(废话),流量加密通信,以及后续的Shell管理。

  点击管理-生成就可以生成Shell,密码的话就是通信时候的参数名称,密钥的话就是加密通信的密钥,这两个参数可以自定义,需要记好,后续连接webshell时需要提供。有效载荷的话就选择PHP。

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  输个文件名选择目录就可以生成了

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  生成结果如下

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  查看Webshell内容

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  Webshell生成好了之后下面就是上传了

  ①首先直接修改文件后缀上传

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  上传失败,后缀与MIME的值都没用

  ②制作图片

  既然后缀与MIME都不管用,那应该就是校验的文件头(既然存在解析漏洞,其他的各种绕过就不去试了),直接做一个图片木马

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  生成图片内容如下

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  直接上传图片,返回路径

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

2.4 哥斯拉Webshell连接

  点击目标-添加,把之前的配置再输一遍就行,注意url这里填的的存在解析漏洞的路径,也就是/.php,这里使用http代理,走8080端口,这样就可以用Burpsuite抓包了。

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  配置完之后右键点击进入,就连上了(实际情况在这里猛踩坑)

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  成功界面如下

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  到这里的话流程就走完了,拿到了Webshell,下一步就开始提权了,那就是另外的一回事了。

3. 原理分析

  这一漏洞是因为Nginx中php配置不当造成的,与Nginx版本无关

  ①

cgi.fix_pathinfo=1

  这个参数值为1,表示开启,即当解析遇到不存在的路径时,就会去掉该项,继续依次解析,所以当

aaa.jpg/.php

被解析时,便会去掉

/.php

,继续解析

aaa.jpg

  ②

security.limit_extensions = .php .jpg

  这个参数限制了可执行文件的后缀,默认只允许执行.php文件,配置不当的话就会执行jpg文件。

4. 踩坑

4.1 Webshell连接不上

  开心上传Webshell后,竟然连不上去,用Burpsuite抓包查看报了这个错误,具体的原因没有深究,百度了一下解决方法就是修改php.ini配置文件中的

session.auto_start = 1

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  之前的phpinfo内有相关路径(/usr/local/etc/php/conf.d/php.ini)

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  

docker exec -t -i nginx_parsing_vulnerability_php_1

进入php容器

  进去之后发现conf.d目录下没有php.ini文件,然后把上级目录下的php.ini-development这个文件拷贝过去

cp php.ini-development /usr/local/etc/php/conf.d/php.ini

  拷贝过去之后准备编辑文件,发现docker没有vim,然后一顿操作

apt-get update

apt-get install vim

把vim装好

  修改其中的

session.auto_start = 1

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  (修改完之后准备开心连Webshell时,突然想起来这个配置要更新一下,但是之前很少使用docker,也不晓得怎么重启容器内环境,就手贱docker restart了php容器,至此前面的所有工作全部白费,再重来一遍)

  由于安装的是php-fpm,支持USER2信号,这个信号用于重新加载配置文件

  容器内部执行

kill -USR2 10

  容器外部执行

docker exec -it nginx_parsing_vulnerability_php_1 ps aux

docker exec -it nginx_parsing_vulnerability_php_1 kill -USR2 10

  这里的

1

这个值就是进程号了,使用

ps aux|grep php

查看,这里又出现了一个问题,docker内也没有ps,所以想要在容器内部执行这条命令的话需要

apt-get install procps

安装一下,如果是在容器外部执行命令的话应该没这个问题

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  这里看到进程号就是10,然后执行

kill -USR2 10

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  到这里的话配置就更新完毕

  再次返回Bursuite发包查看返回信息,发现之前的WARNING变成了NOTICE

Nginx解析漏洞复现以及哥斯拉连接Webshell实践

  再次使用哥斯拉就可以连上Webshell了