WebGoat 风格的 XSS 攻击仍然有效吗?

信息安全 Web应用程序 网山羊
2021-08-19 14:23:13

我正在通过 WebGoat 练习来更新我对 XSS 攻击的知识。

具体来说,我正在进行第 1 阶段 XSS 练习。这个练习有一个故意不清理输入的形式。解决方案视频展示了使用 JavaScript 警报功能发出消息和会话 cookie。

Stage 3 有一个内置的 XSS 代码片段,在查看配置文件时将显示“document.cookie”的内容。

在任何现代浏览器中,都没有任何附加组件,我无法让它执行。我可以使用 JavaScript 警报生成消息,但它从不打印 document.cookie 的内容

页面上获取 cookie的教程显示可以在 JavaScript 警报消息中打印 document.cookie 的内容。

我想知道的是为什么我不能在一个非常简单、故意易受 XSS 攻击的 Web 应用程序中做同样的事情。所有现代浏览器中是否有一些 XSS 检测可以防止这种情况发生?我已经尝试使用他的选项来禁用 IE、Firefox 和 Chrome 上的网络安全,这没有任何区别。

在此处输入图像描述

编辑:我为 WebGoat 5.4 和 WebGoat 6.0.1 尝试过的东西:

  • 使用新的默认配置文件和无插件通过 Firefox 访问
  • 带有 --disable-web-security 和/或 --disable-xss-auditor 参数的 Chrome
  • 通过 Mantra 访问
  • 在我的请求中将 X-XSS-Protection 标头设置为 0。

WebGoat 是否试图教授不再构成威胁的 XSS 攻击?

第二次编辑:

根据 Martin 的回答,我尝试手动设置标题,如下面的屏幕截图所示。我修改了课程标题,因此很明显 fiddler 正确拦截了页面。

在此处输入图像描述 在此处输入图像描述

cookie 未设置为 secure3 或 httponly,但拒绝通过 JavaScript、书签或 Scratchpad 从任何浏览器读取。cookie 已在浏览器中正确设置,并可在浏览器 cookie 对话框中查看。

这个 cookie 的什么属性阻止它被读取?

3个回答

设置X-XSS-Protection: 0标头是正确的解决方案,但您必须在响应中添加此标头,而不是在您的请求中。脚步:

  • 确保您有一个不受HTTP-only 标志保护的实际 cookie。(例如,您可以编辑 JSessionID cookie)
  • 使用正确的 JS 命令来检索 cookie(首先在控制台中测试它),例如:var a=document.cookie;alert(a)(注意:如果您有多个 cookie,则必须拆分它们,我假设您只有 JSESSIONID cookie)
  • 将命令存储在 street 字段中,带有脚本标签:var a=document.cookie;alert(a)(Stackoverflow 隐藏了脚本标签,请确保添加它们)
  • 在保存之前启动 Fiddler。我们将拦截响应并在响应中添加 X-XSS-Protection:0 标头(如果您有开发者版本,您可能会在源代码中添加它)
  • 拦截响应,编辑响应标头,添加 X-XSS-Protection:0 标头,点击 CTRL+S 以确保,然后点击“运行完成”。
  • 等等瞧

更新:澄清截图。

  • 提琴手

*: 提琴手头

  • 网山羊结果 网山羊

没错,现在大多数主流浏览器都内置了 XSS 保护。关于可能的解决方法:

您可以通过使用“disable-xss-auditor”开关启动浏览器来禁用 Chrome 中的此功能。(即C:\<PATH>\chrome.exe --args --disable-xss-auditor

另一种选择是在托管网络服务器中设置一个标头以禁用此类保护(下面的 Apache 示例):

标头集 X-XSS-Protection: 0

最后,您可以使用 Web 应用程序笔测试浏览器,例如 OWASP Mantra。

https://www.owasp.org/index.php/OWASP_Mantra__-_Security_Framework

您能否提及用于打印 cookie 内容的 XSS 有效负载?
此外,一般来说,除了 X-XSS 标头之外,如果 Web 应用程序的 cookie 标志设置为仅 HTTP,则 cookie 的内容不可用于客户端脚本,例如 JavaScript 片段或您的 XSS有效负载,从而打印一个空的警报消息,就像您在上面发布的屏幕截图一样。