0x00 实验环境
攻击机:Win 10
靶场:docker拉的vulhub靶场
0x01 影响版本
一些配置错误的情况,与nginx版本无关。
0x02 漏洞复现
(1)CRLF注入(回车换行),反射型XSS没成功,看了下面这两篇文章也没成功,不知道是不是因为我姿势不对:
https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html
https://www.leavesongs.com/PENETRATION/bottle-crlf-cve-2016-9964.html
(2)目录穿越漏洞
这个漏洞现实中碰到的还挺少的,一般就会出现在一些CTF的web题或者杂项题里:
(3)add_header被覆盖
讲一下这个:
HTTP协议的安全头部有如下几个:
- Strict-Transport-Security
- X-Frame-Options
- X-Content-Type-Options
- X-XSS-Protection
互联网上的资源有各种类型,通常浏览器会根据响应头的Content-Type字段来分辨它们的类型。例如:”text/html”代表html文档,”image/png”是PNG图片,”text/css”是CSS样式文档。然而,有些资源的Content-Type是错的或者未定义,这时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。
从图中可以看出,这个Content-Type是没有设置的,但是输入的url也没有被成功解析,导致仅解析为了文本,网站通过 script 参考检索到的响应中接收到 "nosniff" 指令,则 Internet Explorer 不会加载“script”文件,除非 MIME 类型匹配以下值之一:
-
"application/ecmascript"
-
"application/javascript"
-
"application/x-javascript"
-
"text/ecmascript"
-
"text/javascript"
-
"text/jscript"
-
"text/x-javascript"
-
"text/vbs"
-
"text/vbscript"
但是在IE7下就会显示成一个HTML文件,因为IE7通过这个文档的数据(HTML代码)判定这是一个HTML文件。test1是做过防护的,test2是没有做过防护的,这里应该是我浏览器的问题导致xss弹不出来。详细可以查看文档:https://www.ruanyifeng.com/blog/2016/09/csp.html
0x03 漏洞原理
(1)CRLF注入 :输入的url与http响应体拼接
(2)目录穿越漏洞
这个常见于Nginx做反向代理的情况,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理。
假设静态文件存储在/home/目录下,而该目录在url中名字为files,那么就需要用alias设置目录的别名,url上/files没有加后缀/,而alias设置的/home/是有后缀/的,所以我们访问/files../,就相当于访问/home/../,因为/files等价于于/home/。这个就导致我们可以从/home/目录穿越到他的上层目录。
(3)add_header被覆盖:
Nginx配置文件子块(server、location、if)中的add_header
,将会覆盖父块中的add_header
添加的HTTP头,造成一些安全隐患。
如下列代码,整站(父块中)添加了CSP头。
0x04 修复建议
不要乱配置就可以了,一般不会出现这个问题。上面都有代码了,应该是会修复了吧。
0x05 参考文献
https://www.ruanyifeng.com/blog/2016/09/csp.html (阮一峰yyds)
https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html (这两篇看了,大体明白了但还是没复现成功,有时间再研究吧)
https://www.leavesongs.com/PENETRATION/bottle-crlf-cve-2016-9964.html
0x06 免责声明
本漏洞复现文章仅用于学习、工作与兴趣爱好,并立志为网络安全奉献一份力量,凡是利用本博客相关内容的无良hackers造成的安全事故均与本人无关!