CSP-XSS Bypass

参考链接:
https://www.zhihu.com/question/21979782
https://xz.aliyun.com/t/5084#toc-2
https://www.cnblogs.com/thenbz3/p/11863641.html

CSP的概念

CSP 是 Content Security Policy 的缩写,即内容安全策略。CSP旨在减少XSS攻击,具体原理是通过设置response header或者在页面中使用meta标签规定受信任的、可执行的JS、图片、iframe、style来源。
任何不符合CSP规则的资源都将无法被加载。

CSP示例

1
2
Content-Security-Policy: script-src 'self'; object-src 'none'; 
style-src cdn.example.org third-party.org; child-src https:

资源限制类型(引用):
script-src:外部脚本 指定了允许从哪里加载JS脚本
style-src:样式表
img-src:图像
media-src:媒体文件(音频和视频)
font-src:字体文件
object-src:插件(比如 Flash)
child-src:框架
frame-ancestors:嵌入的外部资源
connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)
worker-src:worker脚本
manifest-src:manifest 文件
default-src ‘self’ 该属性值为self时只允许本站资源加载。设置了这个就为上述属性设置了默认值‘self’
上述属性如果不明确指定的话则默认范围是*,即允许所有。
script-src属性里面 设置unsafe-inline 允许内嵌的脚本及样式 不写这个默认不允许。
script-src属性里面 设置unsafe-eval 允许通过字符串动态创建的脚本执行,比如 eval,setTimeout 等。不写这个默认不允许。
script-src ‘nonce-EDNnf03nceIOfn39fn3e9h3sdfa’ 这句话的意思是说只允许nonce值为EDNnf03nceIOfn39fn3e9h3sdfa的脚本执行。() 同理也可以设置hash值。

CSP绕过

CSP绕过我只使用过一种方法,就是Location.href,其他的方法暂时没有尝试过,在 https://xz.aliyun.com/t/5084#toc-2 这篇文章里面写的挺多的,可以仔细阅读。
另外一种我感觉有意思的绕过就是CRLF注入绕过,在CSP之前找到CRLF注入点来两个CRLF把CSP挤到body里面。。高,实在是高

CSP BYPASS实例

这道题是CSICN_华东北赛区_WEB2 在buuoj有复现。
其他的点我看网上都说的差不多了 唯独CSP Bypass说的不详细,这里我详细说一下CSP绕过,其他的不仔细说,就简要说一下如何成功拿到flag。
有个投稿和反馈,说了管理员会查看,猜测XSS拿cookie。提交申请时需要爆破md5,好说,写脚本即可。
先尝试随便投稿
投稿后查看页面,发现存在CSP,所以需要绕过csp。
接下来进行XSS,由于过滤了很多关键字,所以考虑HTML实体编码—把字母转ascii并在前面加上&#后面加上;
标签可以嵌入JS代码。
直接用XSS平台的payload的话会这样:

接下来使用location.href绕过。
爆破完md5后管理员点击完在XSS平台就收到cookie啦。
接下来是联合注入,最后一句话是-1 union select 1,2,flagg from ciscn.flag,得到flag

总结

这道题时隔一年才弄明白CSP是怎么回事,属实我的问题,继续学习,继续努力。