我发现这个网站讨论了通过利用相同的漏洞来修复 Redis 漏洞。
有问题的网站有一个“给我打补丁”按钮,如果你的机器上运行着无密码的 Redis 服务器,它会打补丁。
也就是说,网站本身连接到你电脑中的 Redis Server并执行一些命令。
如果您查看您发现的网站代码,可以预见的是:
var text = "the code to run";
var bad = "EVAL " + JSON.stringify(text) + " 0\r\n";
var x = new XMLHttpRequest();
x.open("POST", "http://localhost:6379");
x.send(bad);
令我惊讶的是,这行得通!
我认为跨域策略会阻止它运行,但事实并非如此。
为什么这行得通,我现在怎么能不偏执于我进入的每个网站都在读取我的 Redis 服务器的全部内容?
是因为只写不读吗?尽管如此,世界上的任何网站都可以清空我的本地 Redis 服务器/写入任何其他监听我机器中端口的东西,而无需身份验证。
我在这里错过了什么吗?