CVE-2013-4547(文件名逻辑漏洞)
影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
影响说明:绕过服务器策略,上传webshell
环境说明:Nginx 1.4.2
环境搭建:
此次环境使用docker环境搭建,环境采用地址Vulhub
该漏洞利用了Nginx错误的解析了URL地址,导致可以绕过服务端限制,从而解析PHP文件,造成命令执行的危害。根据nginx.conf文件中location中的定义,以.php结尾的文件都解析为php。若我们访问的文件名为shell.gif[0x20][0x00].php,该文件名以.php结尾可以被FastCGI接收,FastCGI在读取文件名时被00截断,导致读取的文件名为1.gif[0x20],配合limit_extensions为空即可利用成功。该漏洞利用条件有两个:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7php-fpm.conf中的security.limit_extensions为空,也就是说任意后缀名都可以解析为PHPNginx版本范围较大,比较好匹配,但php-fpm.conf的security.limit_extensions配置默认为php,一般鲜有管理员允许所有类型都可以解析为PHP,所以该漏洞比较鸡肋,但这是在Linux的服务器中,而在Windows中便影响极大,这点我们后面再讲,先说下在Linux下的复现步骤。0x01 查看phpinfo上传一个shell.gif11,抓包后将gif后的11改为20与00,然后上传。
注意: 需要注意的是0x20,0x00是16进制,在burpsuite测试过程中需要弄成真把这两个占位的在raw中改成真的20 00