CVE-2013-4547(Nginx文件名逻辑漏洞)

发布于:2022-10-14 ⋅ 阅读:(540) ⋅ 点赞:(0)

漏洞原理

此漏洞是利用了Nginx解析了错误的URl地址,使得绕过服务端限制解析了php文件,造成命令执行的危害
php-fpm.conf中的security.limit_extensions为空使得任意后缀都可以被解析
Nginx服务器将名为ggbond.php[0x20][0x00].php文件发给fastCGI,然而fastcgi在接受此文件时候只读取到ggbond.php[0x20][0x00];最后因为php-fpm.conf中的security.limit_extensions为空使得任意后缀都可以被解析;利用此漏洞的另一个前提是在Nginx0.8.41~1.4.3/1.5.0~1.5.7版本里

漏洞复现

[root@localhost ~]# cd vulhub/nginx/CVE-2013-4547/   # 进入相关的漏洞环境
[root@localhost CVE-2013-4547]# ls
01.png  02.png  docker-compose.yml  nginx.conf  php-fpm  README.md  www
[root@localhost CVE-2013-4547]# setenforce 0 # 关闭selinux
[root@localhost CVE-2013-4547]# docker-compose up -d     # 启动容器
[root@localhost CVE-2013-4547]# docker ps -a             # 查看容器是否启动成功

# 浏览器访问,如下图环境正常
http://10.10.10.133:8080/

抓包通过空格绕过前端规则;文件后缀的后面加空格

浏览器访问上传的文件;但是我们发现文件被下载到了本地;然而却没有执行ggbond文件中的php内置函数代码

接下来抓取http://10.10.10.133:8080/uploadfiles/ggbond.php%20的请求包将其发送到repeater模块;进行改包
将后缀的%20修改为两个空格;之后进入到HEX十六进制代码中修改第二个空格为00空字符;意思是当服务器的fastCGI程序解析到00这个空字符时会终止解析后面的字符
实际cgi程序得到的文件名为ggbond.php[0x20]  # 即为ggbond.php[0x20][0x00].php被识别为ggbond.php[0x20]
由于在Nginx0.8.41~1.4.3/1.5.0~1.5.7版本中存在一个漏洞
php-fpm.conf中的security.limit_extensions为空使得任意后缀都可以被解析

修改完00空字符之后返回Raw代码中在空字符后面再加一个.php ;之后放行数据包查看回显是否成功读取php内置函数文件

防御方法

1、给其配置文件php-fpm中的security.limit_extesions添加相应过滤参数,如下例子
security.limit_extesions=.php             # 意思 只有后缀为.php的文件才会解析它
2、设置白名单

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到