Nginx解析漏洞复现以及哥斯拉连接Webshell实践
Nginx解析漏洞复现以及哥斯拉连接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可以查看容器信息

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

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

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

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

添加/.php后会被解析成php文件,漏洞的成因下面会说,到这里的话vulhub官网上的漏洞已经复现完成了,下面的内容主要是使用哥斯拉连接Webshell。
2.3 webshell上传
哥斯拉地址:https://github.com/BeichenDream/Godzilla/releases/tag/v1.00-godzilla
这里就不多介绍了,主要功能就是生成Webshell,连接Webshell(废话),流量加密通信,以及后续的Shell管理。
点击管理-生成就可以生成Shell,密码的话就是通信时候的参数名称,密钥的话就是加密通信的密钥,这两个参数可以自定义,需要记好,后续连接webshell时需要提供。有效载荷的话就选择PHP。

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

生成结果如下

查看Webshell内容

Webshell生成好了之后下面就是上传了
①首先直接修改文件后缀上传

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

生成图片内容如下

直接上传图片,返回路径

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

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

成功界面如下

到这里的话流程就走完了,拿到了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

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

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

(修改完之后准备开心连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安装一下,如果是在容器外部执行命令的话应该没这个问题

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

到这里的话配置就更新完毕
再次返回Bursuite发包查看返回信息,发现之前的WARNING变成了NOTICE

再次使用哥斯拉就可以连上Webshell了
Nginx解析漏洞复现以及哥斯拉连接Webshell实践的更多相关文章
- 15.Nginx 解析漏洞复现
Nginx 解析漏洞复现 Nginx解析漏洞复现. 版本信息: Nginx 1.x 最新版 PHP 7.x最新版 由此可知,该漏洞与Nginx.php版本无关,属于用户配置不当造成的解析漏洞. 使用d ...
- nginx解析漏洞复现
nginx解析漏洞复现 一.漏洞描述 该漏洞与nginx.php版本无关,属于用户配置不当造成的解析漏洞 二.漏洞原理 1. 由于nginx.conf的如下配置导致nginx把以’.php’结尾的文件 ...
- Nginx 解析漏洞复现
一.漏洞描述 该漏洞与nginx.php版本无关,属于用户配置不当造成的解析漏洞 二.漏洞原理 1.由于nginx.conf的如下配置导致nginx把以'.php'结尾的文件交给fastcgi处理,为 ...
- nginx解析漏洞,配置不当,目录遍历漏洞环境搭建、漏洞复现
nginx解析漏洞,配置不当,目录遍历漏洞复现 1.Ubuntu14.04安装nginx-php5-fpm 安装了nginx,需要安装以下依赖 sudo apt-get install libpcre ...
- Nginx 解析漏洞
目录 漏洞复现 漏洞成因 修复方案 参考链接 该漏洞与Nginx.php版本无关,属于用户配置不当造成的解析漏洞. 漏洞复现 访问http://172.17.0.1/uploadfiles/nginx ...
- apache httpd多后缀解析漏洞复现
apache httpd多后缀解析漏洞复现 一.漏洞描述 Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析 ...
- Apache解析漏洞复现(CVE-2017-15715),可以绕过黑名单
照着P神的文章准备复现一下(总结一下经验) 环境的安装 这里面直接使用的vulhub里面的环境来进行安装的(为了方便吗) 基础环境如下  实际上Apache版本在2.4.0~2.4.29即可 i ...
- nginx解析漏洞
一个比较老的漏洞了,但是今天在一个交流群里大佬们有那么一个案例.就深入学习了一下其原理. Nginx当检查url最后的文件名为脚本的时候,他就会把整个程序当作脚本来执行,否则就当作非脚本执行. 正确上 ...
- nginx文件名逻辑漏洞_CVE-2013-4547漏洞复现
nginx文件名逻辑漏洞_CVE-2013-4547漏洞复现 一.漏洞描述 这个漏洞其实和代码执行没有太大的关系,主要原因是错误地解析了请求的URL,错误地获取到用户请求的文件名,导致出现权限绕过.代 ...
随机推荐
- 【uva 12174】Shuffle(算法效率--滑动窗口)
题意:假设一种音乐播放器有一个乱序的功能,设定每播放S首歌为一个周期,随机播放编号为1~S的歌曲.现在给一个长度为N的部分播放记录,请统计下次随机排序所发生的时间的可能性种数.(1≤S,N≤10000 ...
- HDU 2176 取(m堆)石子游戏 && HDU1850 Being a Good Boy in Spring Festivaly
HDU2176题意: m堆石子,两人轮流取.只能在1堆中取.取完者胜.先取者负输出No.先取者胜输出Yes,然后输出怎样取子. 通过 SG定理 我们可以知道每一个数的SG值,等于这个数到达不了的前面数 ...
- Chrome Switchs & Chrome Pref
Chrome Switchs: https://chromium.googlesource.com/chromium/src/+/master/chrome/common/chrome_switche ...
- CF1459-C. Row GCD
CF1459-C. Row GCD 题意: 给出两个整数序列\(a.b\),他们的长度分别为\(n,m\).对于数组\(b\)中的每个数字,让你求出\(gcd(a_1+b_j,a_2+b_j,..., ...
- Chapter Zero 0.2.3 显示适配器
显示适配器(Video Graphics Array,VGA) 不看后悔!!深入了解显卡!!!走你! 我们常常会调试显示器的分辨率,一般对于图像的显示重点在于分辨率与颜色深度, 每个图像显示的颜色会占 ...
- 线程池原理讲解——ThreadPoolExecutor
[这是前几天的存货,留着没发表,今天又复习一遍,润化了部分内容,继续干] 说线程池前,先简单回顾一下线程的状态吧: 1.线程状态转换 线程的五种状态,及其转换关系: 2.线程创建方式 三种:两个接口一 ...
- C++11特性-右值引用
什么是左值,什么是右值 常见的误区有 = 左边的是左值,右边的是右值. 左值:具有存储性质的对象,即lvalue对象,是指要实际占用内存空间.有内存地址的那些实体对象,例如:变量(variables) ...
- Windows下TeamViewer远程控制的安装与使用
Windows下远程控制的安装与使用 由于疫情,在家里写论文,资料数据都在学校,只能远程控制了,选的是TeamViewer. 分为控制机和被控制机,安装使用略有不同. 从该网址安装:https://w ...
- 334A Candy Bags
A. Candy Bags time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Spring(一)概述
Spring 的前世今生 相信经历过不使用框架开发 Web 项目的 70 后.80 后都会有如此感触,如今的程序员开发项目太轻松 了,基本只需要关心业务如何实现,通用技术问题只需要集成框架便可.早在 ...