DOM型XSS详解

前言:

  • 什么是DOM?
    通过JS,可以重构整个HTML文档,可以添加,移除或者改变等页面上的项目。

    要改变页面的某个东西,JS就需要获得对html文档中所有元素进行访问的入口,这个入口连同对html元素进行添加.移动.改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)

    所以,我们可以把DOM理解为一个访问HTML的标准接口

可以去菜鸟教程或者W3SCHOOL查看下相关的解释

演示:

首先随意输入提交

图片

弹出一what do u see

图片

查看前端源码,可以看到有一串JS代码

图片

首先用DOM里的getid这个方法获取id=text的标签,也就是我们输入的内容赋值给str然后又把str用字符串拼接的方式写到了a标签里,然后a标签会写入到id=dom这个标签里,以上就是JS的代码

如何测试?

实际上思路跟我们测反射型与存储型的操作一样,先确定输入点,输入点很明显就是这个input里。反射型和存储型都是通过后端代码echo到前端的,但是DOM型是纯前端输出,通过上述解释的JS代码就输出了,且没有做任何的过滤和转义操作

1
<a href='"+str+"'>what do u see?</a>

对以上代码构造闭合,首先先把单引号闭合,然后选择一个能触发弹窗的属性,随后把前面第一个尖括号闭合,后面就可以不管了。
payload:

1
<a href='#' onclick='alert(111)"> 

尝试一下,弹窗成功图片

以上就是简单的DOM型利用(刷新一下就没效果而且也没存进数据库,危害比较鸡肋)

其他案例:

随意输入点击提交,弹了句话,查看前端代码图片

可以看到也有个JS代码

图片

首先采用window.location.search这个DOM方法获取浏览器传参的参数,然后下一行的方法对参数进行url的解码并用字符串进行分割

,然后获取到对应内容,其实就是从在这个输入框中获取输入的完整内容,然后把最后的内容复制给xss这个变量,然后把xss写入到a这个标签,由此可见形成这个漏洞主要是由于url的参数

把上一个例子的payload继续尝试,成功弹窗

图片

over.