DOM:通过JavaScript,可以重构整个HTML文档,就是说可以添加,移除等等,对页面的某个东西进行操作时,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口就是DOM,所以在DOM型的xss漏洞利用中,DOM可以看成是一个访问HTML的标准程序接口。
特征:整个过程都是在前端完成的,没有后端的参与(纯前端的操作!)
原理:
上图var str = document.getElementById(“text”).value;和 <input id=“text” name=“text” type=“text” value="" / > 意思是把我们输入的东西(字符串)赋值给str,然后document.getElementById(“dom”).innerHTML = “< a href=’”+str+"’>what do you see?< /a > "; 把这个字符串整合到a这个标签中的href(属性)里再把a标签写到dom这个标签中。最后< div id=“dom” >< /div > 执行这个dom标签
实例:
上图可以看到我们输入的东西会被拼接到a这个标签的href属性中:
< a href='"+str+"'>what do you see?</a>
所以我们可以构造对应的payload让它执行我们想让它做的事,比如输入:
' "alert('hello world!')">
于是在前端就变成了这个:
<a href='' "alert('hello world!')">'>what do you see?</a>
执行效果如下:
DOM型xss-x:
页面源代码:
<script>
function domxss(){
var str = window.location.search;
var txss = decodeURIComponent(str.split("text=")[1]);
var xss = txss.replace(/\+/g,' ');
document.getElementById("dom").innerHTML = "<a href='"+xss+"'>就让往事都随风,都随风吧</a>";
}
</script>
从上面可以看出,它同样也是输入到a标签的href属性中,但是,它的输入是从页面的URL中获取的,所以它的危害是比较大的,原理和反射型的xss一样,我们可以发送这个含有我们构造的payload的URL给想要攻击的用户,就可以进行相应的行动。