Nginx解析漏洞
这个解析漏洞其实是PHP CGI的漏洞,在PHP的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的,当URL中有不存在的文件,PHP就会向前递归解析。在一个文件/xx.jpg后面加上/.php会将 /xx.jpg/xx.php 解析为 php 文件。
CVE-2013-4547
此漏洞为文件名逻辑漏洞,该漏洞在上传图片时,修改其16进制编码可使其绕过策略,导致解析为php。当Nginx得到一个用户请求时,首先对url进行解析,进行正则匹配,如果匹配到以.php后缀结尾的文件名,会将请求的PHP文件交给PHP-CGI去解析。
# 影响版本
Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
利用姿势
步骤一:使用以下命令启动靶机并通过浏览器访问靶场页面…
# 启动靶场
cd vulhub-master/nginx/CVE-2013-4547 //切换到靶机目录
vim docker-compose.yml //删除第一行代码
docker-compose build //创建环境
docker-compose up -d //打开环境
docker-compose ps -a //查看端口
# 靶场页面
http://http://192.168.66.131:8080/
# info.php
<?php phpinfo();?>
步骤二:直接上传 info.php 被拦截…修改文件后缀为.jpg进行上传且在后面添加空格;上传成功…
步骤三:在.jpg后面添加两个空格并给上 .php 后缀,在16进制修改中将原本连个空格的 0x20 0x20 修改为如下即 0x20 0x00 进行发包…
步骤四:访问上传后的文件…由于url会将其编码,需要继续抓包修改 0x20 0x20 为 0x20 0x00
http://101.42.118.221:8080/uploadfiles/info.jpg%20%20.php
备注:这里在BP中需要将原来的%20%20删除,改成两个空格方便修改
好小子,离成功又近一步!!!