大约
“跨站点脚本 (XSS)”攻击是一种注入问题,其中恶意脚本被注入到原本良性和受信任的网站上。 当攻击者使用 Web 应用程序发送恶意代码(通常以浏览器端脚本的形式)时,就会发生 XSS 攻击, 给其他最终用户。允许这些攻击成功的缺陷非常普遍,并且发生在使用输出中用户输入的Web应用程序的任何地方, 无需验证或编码。
攻击者可以使用 XSS 向毫无戒心的用户发送恶意脚本。最终用户的浏览器无法知道脚本不应该被信任, 并将执行 JavaScript。由于恶意脚本认为脚本来自受信任的来源,因此可以访问任何 Cookie、会话令牌或其他 您的浏览器保留并与该网站一起使用的敏感信息。这些脚本甚至可以重写 HTML 页面的内容。
基于 DOM 的 XSS 是一种特殊情况,其中 JavaScript 隐藏在 URL 中,并在呈现时由 JavaScript 在页面中拉出,而不是在提供时嵌入到页面中。这可能使其比其他攻击更隐蔽,并且读取页面正文的 WAF 或其他保护措施看不到任何恶意内容。
目的
在其他用户的浏览器中运行您自己的JavaScript,使用它来窃取登录用户的cookie。
(实验目标,在对应水平下,用怎么样的js可以让网站显示alert,如果显示了,说明攻击有效。如果不显示,说明攻击无效。)
低水平
在将请求的输入包含在输出文本中之前,低级别不会检查该输入。
Spoiler: /vulnerabilities/xss_d/?default=English<script>alert(1)</script>.
访问:http://127.0.0.1/vulnerabilities/xss_d/?default=English<script>alert(1)</script>
发现显示了弹窗
中级
开发人员尝试添加一个简单的模式匹配,以删除对“<script”的任何引用以禁用任何JavaScript。找到一种在不使用脚本标签的情况下运行 JavaScript 的方法。
Spoiler: You must first break out of the select block then you can add an image with an onerror event: /vulnerabilities/xss_d/?default=English>/option></select><img src='x' οnerrοr='alert(1)'>
浏览器输入http://127.0.0.1/vulnerabilities/xss_d/?default=English<script>alert(1)</script>
再回车,发现已经不显示alert。
使用/vulnerabilities/xss_d/?default=English>/option></select><img src='x' οnerrοr='alert(1)'>访问,发现仍显示了alert
高水平
开发人员现在只将允许的语言列入白名单,您必须找到一种方法来运行您的代码而不会进入服务器。
Spoiler: The fragment section of a URL (anything after the # symbol) does not get sent to the server and so cannot be blocked. The bad JavaScript being used to render the page reads the content from it when creating the page. /vulnerabilities/xss_d/?default=English#<script>alert(1)</script>.
这种情景下,前两种攻击方式已经无效。
但是使用/vulnerabilities/xss_d/?default=English#<script>alert(1)</script> 回车仍可以显示alert
不可能的水平
默认情况下,大多数浏览器都会对从URL中获取的内容进行编码,从而阻止执行任何注入的JavaScript。
url地址输入高水平下可攻击的url,发现已经不显示alert。
说明防御有效。