《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 大师的主题。

  如何解决这个漏洞?只要确保位置和别名的值有后缀/或都没有。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线