【vulhub】Nginx错误配置导致的漏洞

运行测试环境

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…/ ,成功穿越到根目录
在这里插入图片描述
漏洞原理:

  1. add_header是headers模块中定义的一个指令,用来添加http响应头部。格式如:add_header Cache-Control no-store

  2. nginx是分层级组织的,每层可以有自己的指令,子块继承父块的配置;但对于相同指令,子块的配置可以覆盖掉父块的配置。

  3. Content Security Policy,简称CSP,内容安全策略,来限制网站是否可以包含某些来源内容,来预防一些注入漏洞,如XSS;

  4. 在上图错误示例中,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值