|
|
|
联系客服020-83701501

三个案例看Nginx配置安全

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
3个案例看Nginx配置坦然

畴昔在Sec-News中保举了1个开源步调 https://github.com/yandex/gixy ,感染是来检测Nginx配置文件中存在的题目。刚好Pwnhub上周的比赛也泛起了1道题,包括由Nginx配置差错导致的裂痕。

以是我筛选我感应比较风趣,并且颇有也许或许犯差错的3个类型案例,来讲说Nginx配置文件的坦然。

另外,本文所涉及的3个案例,均已上线到Vulhub(https://github.com/phith0n/vulhub/tree/master/nginx/insecure-configuration ),浏览本文的同时也许自己出手测试。

$uri导致的CRLF注入裂痕

下面两种气象很是常见:

  1. 用户接见会见http://example.com/aabbcc,自动跳转到https://example.com/aabbcc
  2. 用户接见会见http://example.com/aabbcc,自动跳转到http://www.example.com/aabbcc

比如我的博客,接见会见http://www.leavesongs.com/other/tinger.html,将会301跳转到https://www.leavesongs.com/other/tinger.html。随着现在https的普及,不少web都逼迫应用https接见会见,何等的跳转非每每见。

第2个场景次假如为了统1用户接见会见的域名,更加不利于SEO优化。

在跳转的过程中,咱们需要包管用户接见会见的页面执拗,以是需要从Nginx失去用户苦求的文件门路。查抄Nginx文档,也许缔造有3个表示uri的变量:

  1. $uri
  2. $document_uri
  3. $request_uri

表达1下,1和2表示的是解码当前的苦求门路,不带参数;3表示的是残破的URI(不有解码)。那么,假如运维配置了以下的代码:

Default
123 location / {    return 302 https://$host$uri;}

因为$uri是解码当前的苦求门路,以是也许或许就会包括换行符,也就构成了1个CRLF注入裂痕。(关于CRLF注入裂痕,也许参考我的老文章 https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html )

这个CRLF注入裂痕也许导致会话静止裂痕、设置Cookie激起的CSRF裂痕也许XSS裂痕。其中,咱们经由注入两个\r\n即可管教HTTP体中断XSS,但因为浏览器以为这是1个300跳转,以是并不会默示咱们注入的形式。

这个环境下,咱们也许利用1些技术手段花式:比如应用CSP头来iframe的地点,何等浏览器就不会跳转,进而实行咱们插入的HTML:

三个案例看Nginx配置安全

关于上述利用方法,也许参考我的另1篇文章《Bottle HTTP 头注入裂痕寻找》。

如何修复这个CRLF裂痕?精确的做法理当是如下:

Default
123 location / {    return 302 https://$host$request_uri;}

另外,由$uri导致的CRLF注入裂痕不只也许或许泛起在上述两个场景中,实际上,只假如也许设置HTTP头的场景都会泛起这个题目。

目录穿越裂痕

这个常见于Nginx做反向代理的环境,消息的全数被proxy_pass通报给后端端口,而动态文件需要Nginx来处理。

假如动态文件存储在/home/目录下,而该目录在url中名字为files,那么就需要用alias设置目录的别名:

Default
123 location /files {    alias /home/;}

此时,接见会见http://example.com/files/readme.txt,就也许失去/home/readme.txt文件。

但咱们把稳到,url上/files不有加后缀/,而alias设置的/home/是有后缀/的,这个/就导致咱们也许从/home/目录穿越到他的下层目录:

14967571806301.jpg

进而咱们得到了1个随意凑合文件下载裂痕。

这个风趣的裂痕泛起在了Pwnhub上1期比赛《寻找 SNH48》中,@Ricter师傅的题目。

如何管理这个裂痕?只需要包管location和alias的值都有后缀/或都不有这个后缀。

Http Header被覆盖的题目

家喻户晓,Nginx的配置文件分为Server、Location、If等1些配置块,并且存在包括干系,和编程语言比较相反。假如在外层配置的1些选项,是也许被承继到内层的。

但这里的承继也有1些共性,比如add_header,子块中配置后将会覆盖父块中的add_header添加的部门HTTP头,构成1些坦然隐患。

如以下代码,Server块添加了CSP头:

Default
123456七891011121314 server {    ...    add_header Content-Security-Policy "default-src 'self'";    add_header X-Frame-Options DENY;     location = /test1 {        rewrite ^(.*)$ /xss.html break;    }     location = /test2 {        add_header X-Content-Type-Options nosniff;        rewrite ^(.*)$ /xss.html break;    }}

但/test2的location中又添加了X-Content-Type-Options头,导致父块中的add_header全部收效:

14967575824298.jpg

此时,test2的csp就完全收效了,咱们胜利触发XSS:

14967576277243.jpg

总结

Nginx配置文件构成的裂痕毫不止这3种,比如畴昔非常火的阐发裂痕(https://github.com/phith0n/vulhub/tree/master/nginx_parsing_vulnerability ),也和Nginx的配置有1定干系。

管理这类裂痕,最底子的方法是负担负责浏览民间文档,文档里阐邃晓不少配置文件差错和精确的用法。最忌去baidu网上的1些管理方法,不少差错就是1传十十传百,末了传达开来的。

另外,本文开头提到的器材gixy,咱们也也许利用起来,网站上线前中断1下扫描,大要就能缔造1些也许或许存在的题目。

参考文章:

  • http://blog.volema.com/nginx-insecurities.html
  • https://github.com/phith0n/vulhub/tree/master/nginx/insecure-configuration
  • https://hackerone.com/reports/252七5

 

文章作者:别离歌

数安新闻+更多

证书相关+更多