漏洞介绍
此漏洞为文件名逻辑漏洞,该漏洞在上传图片时,修改其16进制编码可使其绕过策略,导致解析为php。
当Nginx得到一个用户请求时,首先对url进行解析,进行正则匹配,如果匹配到以.php后缀结尾的文件名,会将请求的PHP文件交给PHP-CGI去解析。当php-fpm处理时碰到0x00截断,则图片会当作php文件解析,触发图片马。
影响版本:
Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
漏洞复现
- 搭建的vulhub漏洞环境,启动漏洞环境, 访问http://your-ip:8080/,确认是否搭建好环境
- 查看源代码,查看过滤的文件格式
- 上传一个图片格式的木马文件名字为phpinfo.png
<?php phpinfo();?>
- burp 拦截后需要在文件名后面加两个空格,发现上传成功
构造phpinfo.png[0x20][0x00].php 来造成Nginx 解析漏洞使我们的phpinfo.png解析成php
上传phpinfo.png .php 文件(注意jpg后面有两个空格)
然后在burp中抓取数据包把phpinfo.png后面的两个空格 [20][20] --> [20][00] ,发现成功上传
- 访问192.168.0.128:8080/uploadfiles/phpinfo.png .php,burp抓包拦截,
把phpinfo.png后面的两个空格 [20][20] ---> [20][00] ,发现成功访问文件