前言
DVWA代表Damn Vulnerable Web Application,是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序,旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。
DVWA提供了一系列的漏洞场景和练习环境,用户可以通过攻击这些漏洞场景来学习和实践漏洞利用技术。这些漏洞包括常见的安全问题,如SQL注入、跨站脚本攻击(XSS)、文件包含漏洞等。通过攻击这些漏洞,用户可以了解漏洞的原理、影响和防御方法。
DVWA提供了不同的安全级别,从低到高,以满足不同技能水平的用户需求。用户可以根据自己的能力选择适当的安全级别,并进行相应的练习和挑战。
DVWA还提供了一些额外的功能和工具,如Web代理、密码破解、弱密码检测等,以帮助用户更好地理解和处理漏洞问题。
总之,DVWA是一个用于学习和练习Web应用程序漏洞的开源应用程序。它提供了一系列的漏洞场景和练习环境,帮助安全专业人员和爱好者提高对Web应用程序安全的理解和实践能力。通过使用DVWA,用户可以加深对Web应用程序漏洞的认识,并学习如何有效地保护Web应用程序免受攻击。
介绍
DOM(Document Object Model)型 XSS(Cross-Site Scripting)攻击是一种 Web 应用程序中的安全漏洞,其特点是攻击者成功地注入了恶意脚本,这些脚本在用户的浏览器中执行,从而导致恶意行为。DOM 型 XSS 攻击不同于传统的存储型 XSS,它发生在客户端,通过操作 DOM 实现攻击。
攻击步骤和原理:
恶意输入注入:
攻击者通过输入框、URL 参数等渠道将包含恶意脚本的输入数据提交到 Web 应用程序。
客户端DOM解析:
用户访问包含恶意输入的页面时,浏览器会解析 HTML 并构建 DOM 树。
DOM修改:
恶意脚本通过 JavaScrip t等方式对 DOM 进行修改。
脚本执行:
由于恶意脚本被插入到 DOM 中,浏览器在解析和执行 DOM 时会执行这些脚本,导致攻击成功。
防范措施:
输入验证和过滤:
对用户输入进行验证,仅接受合法和预期的输入。
输出转义:
在将用户输入嵌入到 DOM 中之前,对其进行适当的输出编码,防止执行恶意脚本。
安全的DOM操作:
避免使用容易受到攻击的 DOM 操作方法,如 innerHTML
,而是使用更安全的 API。
Content Security Policy(CSP):
使用 CSP 头来限制允许加载和执行的脚本资源,减少 XSS 攻击的风险。
环境准备
测试
打开 DVWA 靶场并登录,找到 DOM 型 XSS 页面(笔者这里是 Low 级别)
检查其标签属性
// 在上述代码中,首先通过document.location.href.indexOf("default=")判断当前页面URL中是否包含字符串"default="。如果包含,那么会执行条件语句中的代码块。
// 在条件语句的代码块中,首先使用document.location.href.indexOf("default=")+8来获取"default="后面的值的起始位置,并将这个位置传递给substring()方法来获取"default="后面的值。这个值被赋给变量"lang"。
// 然后,通过document.write()方法将一个新的选项添加到下拉菜单中。这个选项的值是通过将"lang"变量插入到字符串中得到的,同时也使用decodeURI()函数对"lang"进行解码。这样做是为了确保在选项中显示的文本是解码后的值,以避免任何可能的编码问题。
// 接下来,通过document.write()方法添加一个禁用的选项,显示文本为"----"。
// 最后,通过document.write()方法添加四个固定的选项,分别为"English"、"French"、"Spanish"、"German"。
// 总结起来,上述代码的目的是动态生成一个下拉菜单,其中的选项根据URL中的参数"default"来确定。如果URL中存在"default"参数,则将其作为一个选项添加到下拉菜单中,并在选项中显示解码后的值。然后,添加一个禁用的选项和四个固定的选项。最终生成的下拉菜单将显示URL中的"default"参数(如果存在)作为默认选项,否则默认选项
<form name="XSS" method="GET">
<select name="default">
<option value="English">English</option>
<option value="French">French</option>
<option value="Spanish">Spanish</option>
<option value="German">German</option>
</select>
<input type="submit" value="Select">
</form>
直接点击图中 Select
发现 URL 参数发生变化,English 作为参数
页面标签也发生变化
根据 JS 代码推测是将 URL 后的参数直接拼接到 HTML 标签中
输入 script 试试
符合预期,没有设置过滤,开始攻击
攻击
<script>alert(/xss/)</script>
攻击成功