CRLF注入漏洞
nginx的错误配置如下,该配置的用意是让http请求跳转到https请求。其中 u r i 就 是 我 们 的 访 问 的 地 址 , 该 变 量 可 控 。 其 中 ‘ h t t p s : / / uri就是我们的访问的地址,该变量可控。其中`https:// uri就是我们的访问的地址,该变量可控。其中‘https://host u r i ‘ 会 出 现 在 h t t p 响 应 报 文 中 , 这 样 我 们 就 可 以 通 过 改 变 ‘ uri`会出现在http响应报文中,这样我们就可以通过改变` uri‘会出现在http响应报文中,这样我们就可以通过改变‘uri`来控制http的响应报文。
location / {
return 302 https://$host$uri;
}
当我们正常访问http://192.168.119.131:8080/
时,nginx重定向后,会在http响应头中出现Location字段,如下图所示:
当我们访问http://192.168.119.131:8080/%0d%0atest
时,响应头如下图所示。 %0d%0a
即 \r\n
,也就是换行符,所以在url中加入一个换行符即可将恶意数据写入http响应头。
同理加两个换行符可以将数据写入响应体,例如访问 http://192.168.119.131:8080/%0d%0a%0d%0a<script>alert(1)</script>
后响应体如下图所示,通过这种注入可实现xss攻击。
靶场由vulhub搭建,靶场地址为
vulhub/nginx/insecure-configuration
,在该目录中执行docker-compose up -d
即可启动靶场。
目录穿越漏洞
Nginx在配置别名(Alias)的时候,如果忘记加/
,将造成一个目录穿越漏洞。在下面配置中/files
在匹配字符串的时候可以匹配到 /files..
,而 /files..
转化成别名时就会变成 /home/..
,这样就可以访问到home目录的上一级目录。
location /files {
alias /home/;
}
把 /files
改成 /files/
即可修改该漏洞。
漏洞复现
靶场环境和上一个漏洞在一个docker中,端口为8081,访问 http://IP地址:8081/files../
该漏洞可以造成任意文件下载,造成巨大的风险。