DOM型xss其实是一种特殊类型的反射型xSs,已是基于DOM文档对象模型的一种漏洞。
攻击方式:用户请求一个经过专门设计的URL,它由攻击者提交 ,而且其中包含xss代码。服务器的响应不会以任何的形式包含攻击者的脚本 ,当用户的浏览器处理这个响应时,DOM对象就会处理xss代码,导致存在xss漏洞.
1.xss(DOM) 初级
打开DVWA-master点击xss(DOM),点击DVWA security设置安全等级为初级,选中下拉线随便选择一种回车,url上会看到default,要看到有default,在default=后面输入代码
在最底下View source查看程序源码,会发现没有任何过滤,并且是get的形式
(1)漏洞挖掘
先按select后在url中输入,出现xss漏洞
(2)查看cookie
再随便选择一种按select
回车,在url中输入<script>alert(document.cookie)</script>,便可以查看当前的cookie了
2.xss(DOM) 中级
点击DVWA security把安全级别设置成中级
查看源代码,会发现会含有<script的代码会出现报错,直接统一返回English,按F12查看页面的html,查看select那部分就是提交的那部分default+8,+8刚好就是等号的后面,代码会把等号后面的东西转给option,进行一系列操作,所以可以在option那里插入我们的代码,要避开被过滤可以把前面的闭合,把代码放在后面,就可以执行恶意代码了,可以看到把select和option闭合就可以了,但是不能用<script>标签了,可以用img或body标签
(1)挖掘xss漏洞
先select后在url输入></option></select><body οnlοad=alert(/xss/)>
(2)查看当前cookie
先select后在url输入></option></select><body οnlοad=alert(document.cookie)>
3.XSS(DOM)高级
查看源代码,会发现它进行了定义,只认那几种能选的,其他的一概不行
这里利用#的机制,绕过后台的过滤。
在URL中#表示的是一个锚点。在浏览器识别url的时候,会把#后的字符当做页面的定位,然后加载页面的时候,直接定位到指定的标签。因此#后面的字符是不会被浏览器发送到服务器端的。这样就实现了绕过服务器端的防御机制。而依赖DOM修改html结构执行的是js代码,这个执行过程是在客户浏览器端的,因此实现了不经过服务器就可以实现xss注入
把安全级别设置为高级
(1)挖掘xss漏洞
先select后在url输入#<script>alert(/xss/)</script>
(2)查看当前的cookie
先select后在url输入#<script>alert(document.cookie)</script>