javascript - 是否可以在 JavaScript 中覆盖 XMLHttpRequest.send() 然后检测并撤销覆盖?

标签 javascript

为什么我想知道

我们需要为一个大学项目编写 XSS 蠕虫,其中这些蠕虫相互攻击。目标是获得尽可能多的积分,这些积分是由带有我们的团队 ID 的 post 请求生成的。每个蠕虫发送的帖子请求不能超过一个,并且会 self 复制一次。

为了获胜,我们可以攻击其他蠕虫。我们也被允许保护我们自己的蠕虫免受他人侵害。所以我们希望我们的蠕虫比其他蠕虫发出更成功的帖子请求。

我考虑过阻止或重写 send() XMLHttpRequest的方法| ,这样来自其他蠕虫/团队的帖子请求就会发送我们的团队 ID 或者根本不会发送。但是我不熟悉 JavaScript,我不知道这样的事情是否可行......

问题

攻击

是否有可能重写一个类/对象(或该类/对象的一个​​函数)——尤其是XMLHttpRequest - 在 JavaScript 中?如果是这样,被覆盖的类在全局上下文中是否仍然有效(从另一个 <script> 标签开始有效)?

假设我们有第一个 <script>具有以下内容的标记:(不确定 JavaScript 是否正确)

XMLHttpRequest = function () { // or class () ?
    const originalXMLHttpRequest = XMLHttpRequest;

    function send () {
        alert('successful attack');
        originalXMLHttpRequest.send(our_team_id);
    }
};

第二个<script>调用 send() 的标签使用 their_team_id 的方法:

const request = new XMLHttpRequest();
// ... configure request here
request.send(their_team_id);

是否从第二个 <script> 调用标签现在触发警报并发送 our_team_id改为服务器?

防守

是否有可能检测到重写的类/对象?如果是这样,我能否以某种方式撤销更改或访问原始功能?

假设我们只能在第二个 <script> 中编写代码标签,第一个已经覆盖了 send() XMLHttpRequest的方法| , 原始方法是否仍然可以以某种方式访问​​?


如果有人可以考虑另一种(更好的)攻击或防御向量,我想听听。

最佳答案

我相信覆盖 Object/function 是可能的。但是,它只有在创建的变量/函数在当前 scope 上可见时才有效。 .请检查这个article about javascript function overriding

JavaScript supports overriding not overloading, meaning, that if you define two functions with the same name, the last one defined will override the previously defined version and every time a call will be made to the function, the last defined one will get executed.

关于javascript - 是否可以在 JavaScript 中覆盖 XMLHttpRequest.send() 然后检测并撤销覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54380316/

相关文章:

javascript - jQuery Flot 垂直条形图工具提示位置

javascript - 自定义 Electron session 路径

javascript - 背景图片占据整个屏幕

javascript - 有没有一种方法可以使用 JavaScript 返回指定元素的顶部或第二个父元素?

javascript - 重定向 url 在本地主机中不起作用 - Node js

javascript - JavaScript/谷歌地图中的磁偏 Angular

javascript - 如何在 Knockout 中将参数传递给计算函数?

Javascript 和 XML 按钮

javascript - 为什么 Firefox 有时会在服务器端打开两个不同的套接字?

javascript - Angular 选择中的按键事件?