通过 JavaScript,可以重构整个 HTML 文档。可以添加、移除、改变或重排页面上的项目。
要改变页面的某个东西,JavaScript 就需要获得对HTML 文档中所有元素进行访问的入口。
这个入口,连同对 HTML 元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。
所以,可以把DOM理解为一个一个访问HTML的标准编程接口。
DOM型xss不与后台服务器产生数据交互,时一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型。
练习部分
DOM型xss
打开pikachu漏洞练习第二章节的DOM型xss部分。先输入随机数值在页面尝试,可见在点击确认后弹出一个what do you see的字符。
依旧是网页右键查看源代码,找到网页页面相关的JavaScript代码部分,可见弹出的文字利用dom方法绑定。下方的注释中留有靶场作者的提示信息。
观察可知“+str+”处是我们输入的信息,如果我们利用此处把JavaScript代码插入进去,就可以利用这个漏洞输出我们想要的结果。
新建一个文本文档把<a>标签下的字符复制下来,方便我们观察代码。再把作者给的提示
' onclick="alert('xss')">
'><img src="#" onmouseover="alert('xss')">
替换掉刚刚提到的“+str+”部分,可得到新的代码文本。
文档中的第二段代码可见我们把原来的代码替换为了一个href属性为空的a标签,转而显示img和a标签‘>what do you see?
文档中的第三段第三段代码可见我们把原来的代码替换为了一个href属性为onclick的a标签,转而显示img和a标签‘>what do you see?
我们回到网页,分别在input框中填入作者提示的代码文本,观察结果变化。
img这一段代码填入后网页在加载后自动弹出了xss提示。这是因为该代码运行后,网页加载img图片,弹出img图片规定的onmouseover 事件,onmouseover 事件发生在鼠标指针移动到元素或它的子元素上时。而具体弹出的事件就是我们规定写着xss文本的弹出框。
另一段代码填入后网页显示了新的‘>what do you see?字段,点击字段,弹出提示框xss。这是因为该代码运行后,把原本只显示字符的a标签增加了一个单击后的弹出框,弹出的内容就是我们写入的xss。完成该漏洞的利用。
DOM型xss-x
打开pikachu漏洞练习第二章节的DOM型xss-x部分。先输入随机数值在页面尝试,可见在点击确认后弹出一段字符,点击该段字符又弹出一段不同字符。
像刚刚DOM型xss步骤所做的一样查看网页的源代码,可见在function domxss下存在与之前xss问题中类似的html dom语句。在源代码函数中查询可知,text=字符来自于txss变量。查阅decodeURIcomponent函数用法为返回一个解码后的统一资源标识符(URI)字符串,处理前的 URI 经过了给定格式的编码。可知变量str为我们输入在文本框的字符,变量txss为添加给url的字符,变量xss为更新text后字符的数值。
尝试直接在输入框中输入提示文本,点击确认,再点击字符,成功弹出提示框。可见xss与xss-x的区别在于一个是直接获取输入的数值,另一个是通过url获得输入的数值。
完成该次漏洞利用。