运行测试环境
docker-compose up -d
运行成功后,Nginx将会监听8080/8081/8082三个端口,分别对应三种漏洞。
1.CRLF注入漏洞
漏洞介绍:CRLF是“\r\n”的简称,即回车+换行的意思。在HTTP协议里,http头部和http正文是用两个CRLF分割的,恶意的注入http返回包头部,即是CRLF注入漏洞。这也叫HTTP Response Splitting ,简称HRS。
漏洞复现:这里搭建了一个简单的靶机环境,错误配置示例如下,传入的 %oa%0d 会被uri解码为 \r\n 。
location / {
return 302 https://$host$uri;
}
http://192.168.100.23:8080/%0a%0dSet-Cookie:%20hahahah_caocaocao
http://192.168.100.23:8080/%0a%0d%0a%0dxxxx2233
也可以注入%0a%0d%0a%0dxxxx,插入正文到返回正文中,但这里我没有弹框,因为环境中重定向的https://host 没有被定义。
这里有一个新浪的CRLF利用实例参见:https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html
2. 目录穿越漏洞
Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。
错误的配置文件示例(原本的目的是为了让用户访问到/home/
目录下的文件):
location /files {
alias /home/;
}
Payload: http://your-ip:8081/files…/ ,成功穿越到根目录
:
漏洞原理:
-
add_header是headers模块中定义的一个指令,用来添加http响应头部。格式如:add_header Cache-Control no-store
-
nginx是分层级组织的,每层可以有自己的指令,子块继承父块的配置;但对于相同指令,子块的配置可以覆盖掉父块的配置。
-
Content Security Policy,简称CSP,内容安全策略,来限制网站是否可以包含某些来源内容,来预防一些注入漏洞,如XSS;
-
在上图错误示例中,server块配置为:
add_header Content-Security-Policy “default-src ‘self’”; ===> 使页面只能加载同源资源,且禁止内联代码执行。
add_header X-Frame-Options DENY; ===> 使页面中不能被放在iframe框架中,避免被用作点击劫持。
但是location = /test2 子块中,add_header 被重新配置了,这个会覆盖父块的配置,所以在/test2 页面下没有做安全限制。
以上内容是提取出来与此漏洞有关的,要详细了解的请参见:
add_header :https://www.jb51.net/article/156230.htm
csp:http://www.mamicode.com/info-detail-2440203.html
x-frame-options:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options
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;
}
}
3. add_header被覆盖
Nginx配置文件子块(server、location、if)中的add_header,将会覆盖父块中的add_header添加的HTTP头,造成一些安全隐患。
如下列代码,整站(父块中)添加了CSP头:
a
dd_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全部失效:XSS可被触发。
感觉这个配置漏洞就第一点造成XSS和第二点造成目录遍历有用一点,其他感觉没啥
参考文章:
详细原理可以看这篇文章《nginx配置错误导致的漏洞》
https://www.cnblogs.com/HelloCTF/p/14096781.html
https://www.cnblogs.com/foe0/p/11393503.html