杂记
nginx
常见漏洞解析
什么是中间件:
它是一类提供系统软件和应用软件之间连接,便于各部件之间沟通放入软件,他们借助中间件在不同技术架构之间共享信息与资源
url
导致的crlf
注入漏洞
在http
的结构中,状态行和首部中的每行以crlf
结束,首部与主体之间由一空行分隔
CRLF
指的是回车符(CR,ASCII 13,\r,%0d)
和换行符(LF,ASCII 10,\n,%0a)。
两种情景
- 用户访问
http://example.com/aabbcc
,自动跳转到https://example.com/aabbcc
- 用户访问
http://example.com/aabbcc
,自动跳转到http://www.example.com/aabbcc
location / {
return 302 https://$host$uri;
}
#因为`$uri`是解码以后的请求路径,所以可能就会包含换行符,也就造成了一个CRLF注入漏洞。
利用方式
使用vulhub
中的漏洞库,用docker
来拉取,读取文档了解8080端口对应crlf
注入漏洞
C:\Users\86198>curl -I http://192.168.218.131:8080/%0d%0aSet-Cookie:%20a=1
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.13.0
Date: Tue, 28 May 2024 16:00:18 GMT
Content-Type: text/html
Content-Length: 161
Connection: keep-alive
Location: http://192.168.218.131:8080/
Set-Cookie: a=1
通过这种注入,我们可以篡改用户的请求报文
我们使用burp抓包可以看到另一种可能性:在我们发送两个连续的换行\r\n
后,可以直接修改返回报文的返回体。插入js
代码引发xss
。
/%0d%0a%0d%0a<script>alert(1)</script>
至于为什么是两个连续的\r\n
是因为主体要和首部一行分割
预防措施
在配置中使用完整的url
不能解码
location / {
return 302 https://$host$request_uri;
}
目录穿越漏洞
这个常见于Nginx
做反向代理的情况,动态的部分被proxy_pass
传递给后端端口,而静态文件需要Nginx
来处理。
假设静态文件存储在/home/
目录下,而该目录在url
中名字为files
,那么就需要用alia
s
设置目录的别名来替换:
location /files {
alias /home/;
}
利用方式
此时,访问http://example.com/files/readme.txt
,就可以获取/home/readme.txt
文件。
但我们注意到,url
上/files
没有加后缀/
,而alias设置的/home/
是有后缀/
的,这个/
就导致我们可以从/home/
目录穿越到他的上层目录:
这样就有了一个目录穿越漏洞
预防措施
location /files/ {
alias: /home/;
}
在进行alies
配置的过程中一定保证location后的匹配路径和别名路径一致。否则就会引发这样的路径穿越漏洞。
http header
头被覆盖
在nginx
的配置文件中,分为Server,Location这些配置块,并且存在包含关系,内部是可以继承外部的一些配置,但是当子类配置后,会将覆盖掉父类配置的相同类型的头,造成漏洞
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头,nginx
仅载入模块内部的头部修改信息,则会导致在父块中配置的 add_header Content-Security-Policy "default-src 'self'"
;无法在/test2
中生效。从而使/test2
这里无法获得防御功能
Content Security Policy设置
Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com; img-src 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self' https://example.com;
Content Security Policy (CSP
) 是一种加固 Web 应用的安全性的技术,通过在网站页面中设置 CSP
Header 来限制页面中能够执行的脚本、样式、图片等资源
这个 CSP
规则禁止所有来自第三方网站的资源,只允许本网站的资源加载。其中 script-src
只允许本网站和 example.com
的脚本加载,img-src
只允许本网站和 data: URI
的图片加载,style-src
只允许本网站和内联样式加载,font-src
只允许本网站和 example.com
的字体加载
利用方式
#这是转到的JS文件,获取锚点也就是#后面的内容添加到<p>标签内部
window.onload = function() {
var m = document.getElementById('m');
m.innerHTML = location.hash.substr(1);
}
这个东西会对写入的xss进行转义。
所以可以利用写法可以写为:
http://127.0.0.:8082/test2#<script>alert(1)</script>
预防措施
配置头部信息修改时细分到最小块,这样才能最大限度的保证每一个小块的头部配置都是正确的。当然,也可以写到父块中,但是子块在进行头部个性化修改时,切记将父块中的头配置给子块复制一份。
server {
listen 8082;
root /usr/share/nginx/html;
index index.html;
server_name _;
autoindex on;
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;
add_header Content-Security-Policy "default-src 'self'";
add_header X-Frame-Options DENY;
rewrite ^(.*)$ /xss.html break;
}
}
Nginx
越界读取缓存漏洞
影响版本:Nginx
0.5.6 ~ 1.13.2
影响说明:信息泄漏
环境说明:Nginx
1.13.2
环境搭建: 此次环境使用docker
环境搭建,环境采用地址Vulhub
引发:
Nginx在反向代理站点的时候,通常会将一些文件进行缓存,特别是静态文件。缓存的部分存储在文件中,每个缓存文件包括“文件头”+“HTTP返回包头”+“HTTP返回包体”。如果二次请求命中了该缓存文件,则Nginx会直接将该文件中的“HTTP返回包体”返回给用户。
如果我的请求中包含Range头,Nginx将会根据我指定的start和end位置,返回指定长度的内容。而如果我构造了两个负的位置,如(-600, -9223372036854774591),将可能读取到负位置的数据。如果这次请求又命中了缓存文件,则可能就可以读取到缓存文件中位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。
缓存
当请求服务器的资源时,如果在缓存服务器中存在,则直接返回,不在访问应用服务器,可以降低应用服务器的负载。 例如网站的首页的缓存,nginx的默认缓存路径在/tmp/nginx下,例如:当请求服务器的资源时,如果在缓存服务器中存在,则直接返回,不在访问应用服务器,可以降低应用服务器的负载。
漏洞利用
使用curl工具测试下,命令如下,执行后发现,返回的内容是正常的。
curl -i http://127.0.0.1:8080 -r 0-612
想要读取缓存头,读取前600个字节
直接利用
本文作者:dr4w
本文链接:https://www.cnblogs.com/zMeedA/p/18223754
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步