Nginx 文件名逻辑漏洞(CVE-2013-4547)复现。 新手向。小白也能听得懂的。面向小白详细讲解。配合BurpSuite新老版本抓包。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Nginx 文件名逻辑漏洞(CVE-2013-4547) ,记录一下我的学习过程,总结一下经验,希望能给后面的人提供帮助,为了复现和成功解析PHP网页我搞了很久.我这里使用了新老版本的BurpSuite去抓包,详细过程请见下文.
使用的BurpSuite版本: BurpSuite Free Edition v1.5BurpSuite Community Edition v2021.2.1
靶机:CentOS 7 IP:192.168.254.128
攻击机:Kali Linux 2021.2Kali 1.0.5
使用的靶场:Vulhub


漏洞原理

这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。

举个例子,比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法如下:

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

正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。

而存在CVE-2013-4547的情况下,我们请求1.gif[0x20][0x00].php,这个URI可以匹配上正则.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。

fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。

所以,我们只需要上传一个空格结尾的文件,即可使PHP解析之。

再举个例子,比如很多网站限制了允许访问后台的IP:

location /admin/ { 
    allow 127.0.0.1; 
    deny all; 
} 

我们可以请求如下URI:/test[0x20]/…/admin/index.php,这个URI不会匹配上location后面的/admin/,也就绕过了其中的IP验证;但最后请求的是/test[0x20]/…/admin/index.php文件,也就是/admin/index.php,成功访问到后台。(这个前提是需要有一个目录叫“test ”:这是Linux系统的特点,如果有一个不存在的目录,则即使跳转到上一层,也会爆文件不存在的错误,Windows下没有这个限制)

漏洞复现

1.启动漏洞环境:

#在CentOS 7上进入Vulhub的漏洞目录
cd 桌面/vulhub/nginx/CVE-2013-4547/

#启动环境
sudo docker compose up -d 

#查看漏洞运行的端口
sudo docker-compose ps 

环境启动后,可以在Kali Linux上访问http://your-ip:8080/即可看到一个上传页面。
在这里插入图片描述

2.上传文件并抓包

新建一个txt文本并写:

 <?php phpinfo(); ?>

保存为1.php文件。然后在网页上进行上传1.php文件,并提交。在BurpSuite上点击Forward进行转发,实现文件上传

在这里插入图片描述
在这里插入图片描述

请添加图片描述
可以发现文件上传失败,并且提示无法支持的文件类型上传。

请添加图片描述
这个环境是黑名单验证,我们无法上传php后缀的文件,需要利用CVE-2013-4547。我们上传一个“1.gif”

修改”1.php”文件为”1.gif”,并再次上传文件。
1.gif

注意:在BurpSuite里面记得要给"1.gif "后面添加一个空格。

请添加图片描述

请添加图片描述

点击Forward,进行转发,回到浏览器上,会发现上传文件成功。在BurpSuite的HTTP history上也能同样看到 File uploaded successfully: /var/www/html/uploadfiles/1.gif .说明文件上传成功。
请添加图片描述

请添加图片描述

上传后,因为这个文件后缀名含有空格,在url中需要加入%20访问该文件,测试该文件是否上传成功(这部分可以忽略,不是必须项。只是为了查看是否上传了文件)。
请添加图片描述

3.修改Hex值并解析PHP网页

可以新开一个标签页。访问http://your-ip:8080/uploadfiles/1.gif.php
请添加图片描述

此时,BurpSuite再次抓包,这回修改抓包的URL地址。

这里新老版本的BurpSutie操作有些不一样,因为新版的BurpSuite里面的Hex功能被删除了。但是我们要利用Hex功能来对其进行修改。

1.先说说BurpSuite v1.5版本的方法。

在Intercept界面可以看到我们抓包的网页代码。点击Action,选择Send to Repeater,或者直接快捷键Ctrl + R
请添加图片描述

点击Repeater界面,会看到我们刚刚发送的抓包页面。
请添加图片描述

选择Request项的Hex功能。在这里进行修改。对这里的2e进行插入一个字节操作。右键选择Insert byte进行一个字节的插入,如果插入错了。可以选择Delete byte进行一个字节的删除。添加2个字节分别为“20”“00”。
请添加图片描述

修改完会发现右边的URL变成了1.gif .php.

点击Go,就可以发送请求,在Responsed项的Render功能上就成功解析了PHP网页了。
请添加图片描述

复制粘贴一下这里Repeater>Request>Raw的uploadfiles/1.gif .php到Proxy>Intercept>Raw里面的GET请求。
请添加图片描述
请添加图片描述
点击Forward转发,可以发现浏览器上实现了对PHP网页的解析。
请添加图片描述

2.新版本的BurpSuite Community Edition v2021.2.1

先同老版本一样,抓包,然后发送到Repeater.
请添加图片描述

由于新版本的Hex功能改了。所以我们直接在gif.后面加个空格.并且你选中这个空格会发现在右边出现了Hex,并且值为20.如果你看不到Inspector,请点击它以展开选项。
请添加图片描述

在空格后面我们随便输入一个数字,我这里输入0,然后选择数字0。可以看到对应的Hex的值。
请添加图片描述
修改这个值为00,并点击Apply changes,你会发现数字0消失了。

请添加图片描述
点击Send(同Go一样)。发送修改后的请求,在Response上可以看到已经成功解析PHP网页了。
请添加图片描述

同理,复制我们修改的 uploadfiles/1.gif .php到Proxy>Intercept>Raw.点击转发。在浏览器成功了对PHP网页的解析。
请添加图片描述
请添加图片描述


总结

预防CVE-2013-4547漏洞需要从配置和安全实践上进行多方面的改进。以下是一些具体的预防措施:

1. 更新Nginx版本

最重要的措施是更新到修复了该漏洞的Nginx版本。开发团队已经在新版本中修复了此漏洞。

# For Debian/Ubuntu
sudo apt-get update
sudo apt-get upgrade nginx

# For Red Hat/CentOS
sudo yum update nginx

2. 配置文件路径安全性

确保Nginx配置文件中的文件路径和访问控制设置是正确的,避免使用容易被绕过的路径或符号链接。配置文件应该限制用户对敏感文件的访问。

3. 使用安全的文件名和路径

确保应用程序和服务器不会生成或接受含有潜在恶意字符的文件名和路径。对用户输入的文件名和路径进行严格的校验和过滤,防止包含“…/”等可能用于路径遍历的字符。

4. 限制符号链接

在Nginx配置中禁用符号链接的使用,或者限制符号链接的访问。

http {
    disable_symlinks on;
    ...
}

5. 使用Web应用防火墙(WAF)

部署Web应用防火墙,可以检测和阻止常见的攻击模式,包括路径遍历等文件名逻辑漏洞利用尝试。常见的WAF解决方案包括ModSecurity等。

6. 定期安全审计和代码审查

定期对服务器配置和应用代码进行安全审计和代码审查,及时发现并修复潜在的安全漏洞。

7. 最小化权限原则

限制Nginx运行用户的权限,只给予其最低限度的权限,确保即使发生漏洞利用,攻击者也不能对系统造成更大破坏。

8. 设置严格的访问控制

在Nginx配置中使用严格的访问控制策略,限制对敏感文件和目录的访问。

location / {
    allow 192.168.1.0/24;
    deny all;
}

通过以上措施,可以显著降低Nginx服务器受到CVE-2013-4547漏洞攻击的风险,确保服务器和应用的安全性。

### Nginx 文件名逻辑漏洞CVE-2013-4547) #### 漏洞概述 Nginx 文件名逻辑漏洞CVE-2013-4547)允许攻击者通过精心构造的 URL 请求来绕过访问控制并读取或执行受限资源。此漏洞的根本原因在于 Nginx 错误地解析了带有特定编码字符的 URL,从而导致文件路径处理不当[^1]。 #### 影响范围 该漏洞影响多个版本的 Nginx,在某些配置下可能导致未经授权的文件访问甚至远程代码执行。具体受影响的版本包括但不限于: - Nginx 1.4.x 版本系列 - Nginx 1.5.x 版本系列 (部分)Web 应用程序部署于上述版本之上时,可能存在潜在风险[^3]。 #### 复现过程 为了验证这一漏洞的存在,可以通过上传一个看似无害但实际上包含恶意 PHP 代码的图片文件 `phpinfo.jpg` 来测试。一旦成功上传,攻击者能够修改 HTTP 请求中的参数使服务器错误解释文件扩展名,进而触发命令注入行为[^4]。 ```bash curl -X POST http://example.com/upload.php \ -F "file=@/path/to/phpinfo.jpg" ``` 随后发送如下请求可尝试利用漏洞: ```http GET /uploads/phpinfo.jpg%00.php?cmd=id HTTP/1.1 Host: example.com ``` 如果存在漏洞,则返回的结果会显示当前用户的 ID 信息。 #### 安全修复措施 针对 CVE-2013-4547 的防护手段主要包括以下几个方面: - **升级至最稳定版**:官方已发布更解决此问题,建议立即应用最安全补丁以消除隐患[^2]。 - **手动修补源码**:对于无法即时升级的情况,可以从官方网站下载专门为此漏洞准备的安全补丁,并按照指引完成编译安装流程。 - **加强输入校验**:无论何时都应严格过滤用户提交的数据,特别是涉及文件操作的部分,防止非法字符进入内部处理环节。 - **启用 WAF 防护**:Web Application Firewall 能够识别异常模式并阻止可疑流量到达应用程序层面上游位置。 综上所述,及时采取适当行动可以有效降低遭受此类攻击的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值