《seo关键解码:网站营销与搜索引擎优化》下载( $uri导致的CRLF注入漏洞,你知道吗?!)
优采云 发布时间: 2022-03-19 17:01《seo关键解码:网站营销与搜索引擎优化》下载(
$uri导致的CRLF注入漏洞,你知道吗?!)
之前在Sec-News推荐了一个开源程序,用来检测Nginx配置文件的问题。恰巧上周Pwnhub的比赛也出现了问题,包括Nginx配置错误导致的漏洞。
所以我选择了三个我认为有趣且容易出错的典型案例,来谈谈 Nginx 配置文件的安全性。
另外,本文涉及的三个案例已经在Vulhub( )上上线,大家可以边看本文边自己测试。
$uri 引起的 CRLF 注入漏洞
以下两种情况很常见:
用户访问,自动跳转
用户访问,自动跳转
比如我的博客,访问,会跳转到301。随着现在https的流行,很多网站都被迫使用https访问,这样的跳转很常见。
第二种场景主要是统一用户访问的域名,更有利于SEO优化。
在跳转的过程中,我们需要保证用户访问的页面不变,所以需要从Nginx获取用户请求的文件路径。查看Nginx文档,可以看到代表uri的变量有3个:
$uri
$document_uri
$request_uri
说明一下,1和2代表解码后的请求路径,不带参数;3 代表完整的 URI(没有解码)。那么,如果运维配置如下代码:
默认
1
2
3
地点/{
返回302$host$uri;
}
因为$uri是解码后的请求路径,可能收录换行符,导致CRLF注入漏洞。(CRLF注入漏洞可以参考我的老文章)
此CRLF注入漏洞可能导致会话固定漏洞、设置cookie引起的CSRF漏洞或XSS漏洞。其中,我们可以通过注入两个\r\n来控制XSS的HTTP body,但是因为浏览器认为这是300跳转,所以不会显示我们注入的内容。
在这种情况下,我们可以使用一些技巧:比如使用CSP头到iframe的地址,这样浏览器就不会跳转,然后执行我们插入的HTML:
上述的利用方法可以参考我的另一篇文章文章《Bottle HTTP Header Injection Vulnerability Research》。
如何修复这个 CRLF 漏洞?正确的做法应该如下:
默认
1
2
3
地点/{
return302$host$request_uri;
}
另外,$uri导致的CRLF注入漏洞可能不仅仅出现在以上两种场景中,理论上只要能设置HTTP头就会出现这个问题。
目录遍历漏洞
这在 Nginx 作为反向代理的情况下很常见。动态部分通过proxy_pass传给后端端口,静态文件需要Nginx处理。
假设静态文件存放在/home/目录下,并且该目录在url中命名为files,则需要使用alias来设置目录的别名:
默认
1
2
3
位置/文件{
别名/家/;
}
此时,您可以访问 /home/readme.txt 文件。
但是我们注意到/files的url没有后缀/,而别名设置的/home/有后缀/,这个/可以让我们从/home/目录遍历到他的上层目录:
反过来,我们获得了一个任意文件下载漏洞。
这个有趣的漏洞出现在上届 Pwnhub 比赛“寻找 SNH48”中,@Ricter 大师的主题。
如何解决这个漏洞?只要确保位置和别名的值有后缀/或都没有。