Nginx不一样的逻辑漏洞(CVE-2013-4547)

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

漏洞说明

影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

漏洞分析

这一漏洞的原理是非法字符空格和截止符(\0)会导致Nginx解析URI时的有限状态机混乱,危害是允许攻击者通过一个非编码空格绕过后缀名限制。

正常情况下,只有.php后缀的文件才会被发送给fastcgi解析。
这里却错误地解析了请求的URI

查看其配置文件

在这里插入图片描述

当我们以1.gif[0x20][0x00].php发起请求时,nginx会接受到请求,因为nginx配置如上的配置,这个URI可以匹配上正则\.php$,入这个Location块后,由于00截断,使Nginx错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。

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

漏洞复现

`
// Check filesize
if(!is_uploaded_file($_FILES['file_upload']['tmp_name'])) {
    die('File is not uploaded file');
}

$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);
if (empty($ext) || in_array($ext, ['php', 'php3', 'php5', 'phtml'])) {
    die('Unsupported filetype uploaded.');
}
`
  • 这里对上传的文件做了黑名单限制,写一个phpinfo的函数更改文件名为"1.jpg ",注意这里有一个空格

在这里插入图片描述

接下来的问题就是如何使nginx把这个文件当作php解析执行,访问1.jpg.php时会返回No input file specified. 说明确实到了location模块但是没有解析,然后按照这个文件名解析逻辑漏洞实现解析1.jpg文件

抓包将.php前增加[20][00]两个字节,放包即返回了phpinfo的相关信息(nginx识别到.php文件----由于00截断fastcgi会解析abc.jpg[20]文件)

在这里插入图片描述

且此时图中cgi.fix_pathinfo显示为关闭状态。
注意,[0x20]是空格,[0x00]是\0,这两个字符都不需要编码。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值