CVE-2013-4547
漏洞描述
CVE-2013-4547是Nginx文件名逻辑漏洞,在正常情况下(关闭 pathinfo 的情况下),只有.php 后缀的文件才会被发送给 fastcgi 解析。而如果空格和零截断符相邻的话ngin就不会检测到零截断并放回错误了,这是一个逻辑漏洞,所以通过这种方式我们就可以在URI中使用零截断,这就是CVE-2013-4547。
漏洞利用演示
这是vulhub的一个漏洞靶场,有一个文件上传的接口的。
从源代码中可以看到,这是一个基于黑名单的验证机制,直接上传.php文件是传不上去的。
试图上传一个1.png的图片格式的文件,文件内容为phpinfo()
发现返回内容中包含了文件上传的路径。
访问一下此路径下自己上传的1.png,抓包看一下。
发现响应体中,1.png中包含的代码被解析出来了。
接下来利用此漏洞的原理,在访问此路径下的1.png.php,用在.php前用空格和零截断,截断方法是在.php的hex之前插入两个比特,20代表空格 00代表 \0,漏洞利用成功。
流量分析
对于这种解析逻辑漏洞利用的话,第一条http流量应该是上传正常的文件,第二条是访问一下自己上传的文件看看代码是否被解析了,第三条流量就是利用阶段的流量特征了,.php后缀前的hex值会连着20 00 。
修复建议
该问题影响 nginx 0.8.41 - 1.5.6.
该问题已经在 Nginx 1.5.7 和 1.4.4 版本中修复。
补丁程序在:
http://nginx.org/download/patch.2013.space.txt
配置上临时的解决办法是:
if ($request_uri ~ " ") {
return 444;
置上临时的解决办法是:
if ($request_uri ~ " ") {
return 444;
}
|