漏洞复现-CVE-2013-4547-Nginx 文件名逻辑漏洞
0x00 实验环境
攻击机:win10
靶机:Ubuntu18 (docker搭建的vulhub靶场)
0x01 实验引用
(1)在Windows中,文件名1.jpg 后的空格常被忽略,因而具有较大利用率
(2)Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7 为其影响版本
(3)适用于php脚本语言
0x02 实验目的
学习nginx文件上传解析漏洞,掌握文件上传更多姿势要领,文件在上传时经过如下文件进行过滤,导致在文件命令末尾使用空格等编码即可绕过:
location ~ \.php$ { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT /var/www/html; }
0x03 实验步骤
打开页面,发现为一个文件查询的页面:
当查询文件为php时,文件格式表示不支持:
此时我们结合2013年年底爆出的CVE-2013-4547漏洞进行文件上传操作:
将文件名修改为可上传或查询的文件格式,同时,在Hex一栏修改二进制编码:
将文件修改为1.jpg1后,可以发现,在67后面出现了31,此时我们可以将31修改为20,同时插入00:
修改成功,放包试试:
此时,文件上传成功,我们点击访问:
访问 http://you-ip:8080/uploadfiles/1.jpg .php 即可成功
0x04 实验原理
主要原因:错误地解析了请求的URL,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。