【发布时间】:2019-06-20 04:13:39
【问题描述】:
为什么我想知道
我们需要为一个大学项目编写 XSS 蠕虫,在该项目中这些蠕虫相互对抗。目标是获得尽可能多的积分,这些积分是由带有我们团队 ID 的发布请求生成到服务器的。每个蠕虫发送的 post 请求不能超过一个,并且会自我复制一次。
为了获胜,我们可以攻击其他蠕虫。我们也被允许保护我们自己的蠕虫免受他人侵害。因此,我们希望我们的蠕虫发出比其他蠕虫更成功的发布请求。
我想过阻止或重写XMLHttpRequest 的send() 方法,以便其他蠕虫/团队的发布请求会发送我们的团队ID 或根本不会发送。但是我不熟悉 JavaScript,我不知道这样的事情是否可能......
问题
攻击
是否可以在 JavaScript 中覆盖类/对象(或该类/对象的函数)——尤其是XMLHttpRequest?如果是这样,被覆盖的类在全局上下文中是否仍然有效(从另一个 <script> 标签有效)?
假设我们有第一个 <script> 标记,其内容如下:(不确定 JavaScript 是否正确)
XMLHttpRequest = function () { // or class () ?
const originalXMLHttpRequest = XMLHttpRequest;
function send () {
alert('successful attack');
originalXMLHttpRequest.send(our_team_id);
}
};
还有第二个<script> 标记,它使用their_team_id 调用send() 方法:
const request = new XMLHttpRequest();
// ... configure request here
request.send(their_team_id);
来自第二个<script> 标签的调用现在会触发警报并将our_team_id 发送到服务器吗?
防守
是否可以检测到覆盖的类/对象?如果是这样,我可以以某种方式撤消更改或访问原始功能吗?
假设我们只能在第二个 <script> 标记内编写代码,而第一个已经覆盖了 XMLHttpRequest 的 send() 方法,那么原始方法仍然可以通过某种方式访问吗?
如果有人可以考虑另一种(更好的)攻击或防御向量,我想听听。
【问题讨论】:
-
我很困惑“类”和“覆盖”这两个词在这里的含义。 编辑好的,我明白了。
-
另外请注意,这更多的是关于 JavaScript 运行时环境,而不是关于 JavaScript 本身。
window.XMLHttpRequest是浏览器环境的一部分,而不是 JavaScript 的一部分。 -
如果你的目标是装饰
XMLHttpRequest,那么确保你有大写的权利。另外,请注意fetchAPI 不会调用XMLHttpRequest#send,因此这样做并不能确保您捕获所有 HTTP 请求。 -
"现在是否有第二个脚本触发警报?" - 您肯定已经尝试过这个并发现答案是肯定的吗?!
-
如果你能描述你真正想要完成的事情,你会得到更多有用的建议。
标签: javascript