关于利用webrtc获取内网其他主机站点信息(favico.ico)的一些思路

Black_Hole (暂无) | 2016-03-26 03:26

之前在http://zone.wooyun.org/content/25925就说了一些思路,获取内网中其他主机的CMS信息,在http://zone.wooyun.org/content/25925一文说我提到的思路是使用xss+iframe+canvas,但是@超威蓝猫 说到canvas无法截取到iframe里的内容,后来我上网查后,确实如此(基础不牢的结果)。后来我又有了一个新的思路,使用<img src="https://xxx.xxx.xxx.xxx/favico.ico" />来获取网站的cms信息,因为不同的cms他们的ico图标也是不一样的,把img发送到服务器端后,就可以识别网站属于哪种cms类型了。但是后来和伟哥 @呆子不开口 讨论了几个小时,发现忽略了一个重要的问题,怎么把img发送到远程服务器,img图片地址不是同源的,而且怎么把图片使用JavaScript转成二进制数据。这个思路又断了。伟哥提到一个很nice的解决方案,检测js脚本,也就是<script src="http://xxx.xxx.xxx.xxx/path/cms.js" onload="xxx(this)"></script>这样的话,我就需要大量cms独立的js文件位置。工作量大。我本来都打算使用这个了,但是前几天闲的无聊翻自己的QQ日志时,发现了一段代码:

document.addEventListener("visibilitychange", function() {

  document.title = document.hidden ? '跑个蛋,回来' : '哟呵,真回来了';

});


这是HTML5推出的API,我发现我可以利用这个API来达到神不知鬼不觉的上传图片。首先当用户切换到其他浏览器标签的时候,document.hidden会为true。那么我们就可以确定用户没有访问我们XSS的网页。那么我们干什么用户都不会发现了。大致的思路如下:

document.addEventListener("visibilitychange", function() {

  if(document.hidden){

    var htmlText = $("body").html();

    $("body").empty();

    $("body").append("<img src='http://xxx.xxx.xxx.xxx/favico.ico' />");

    //canvas获取页面,懒得写,请移步:http://leobluewing.iteye.com/blog/2020145

  }else{

    $("body").empty();

    $("body").append(htmlText);

  }

});


大致思路就是这样,其中代码写的比较狗屎,看懂思路就行了。