环境准备
测试
打开 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>
成功