概述
反射型
Low等级
1、尝试正常操作,输入XSS
输入<xss>,没有了,发现hello后面出现了一个xss标签,似乎我们可以注入HTML标签
接下来尝试进行弹窗<script>alert(/xss/)</script>
查看元素,成功注入了JS脚本,说明这个地方存在XSS漏洞
JS中的弹窗函数
XSS攻击思路
1、攻击者web 设计:新建一个cookie.php文件内容为将GET请求参数cookie存储在cookie变量里,将偷取到的cookie写到cookie文件中
2、构造攻击JS:document.location的含义是将页面的内容定位到指定的地址,参数里面写上刚刚新建的PHP文件的网址,将document.cookie 赋值给php?cookie= ,cookie值最终会出现在127.0.0.1的cookie.txt中。
3、构造攻击URL:已知DVWA网站的name 参数(蓝色字体部分)存在反射型XSS,将刚刚构造好的JS脚本写道name参数的后面。
4、这样直接访问并不会成功,还要对参数进行URL编
5、发送这个链接给用户,点击后攻击者的服务器上就会生成一个cookie.txt文件,文件内容为被攻击用户的网站登陆凭证即(即DVWA的登陆cookie信息)PHPSESSID就是被攻击用户的凭证、
6、劫持会话,攻击者访问DVWA网站,修改cookie
7、随后直接访问DVWA的index.php,成功以admin的身份登陆
Medium等级
1、尝试low等级的方法已经失效了,发现script标签已经被过滤
采用嵌套的方法,成功弹窗,大小写混合同样成功绕过
High等级
1、尝试前面的方法都失效了,尝试image标签,成功弹窗
,说明服务端只是过滤了script标签,其他的标签并没有做限制
用iframe标签,同样成功弹窗
用firebug查看元素,成功注入了iframe标签
Impossible等级
输入发现除了单引号之外,全部被HTML编码了
用查看源码的功能发现多了如下图所示的函数
该函数可以HTML编码以下五个特殊的字符,在这个函数里面默认是不编码单引号的,要加上下图红框中的参数才会对单引号进行编码,在DVWA中不编码单引号不会有危险,但是在其他的场景中,不编码单引号同样会有危险。
存储型
发现限制了输入长度,XSS代码输不完整
用firebug查看发现name限制长度为10message限制长度为50
这里可以通过改包绕过前端,发包后观察浏览器返回结果成功绕过限制
存储型和反射型利用基本一致
Low等级
通过改包输入script标签,弹了两次窗
用firebug查看元素,name和message都成功插入了JS
存储型XSS时存在数据库中的,弹窗一直存在,可以重置数据库,弹窗就消失了
Medium等级
同样改包,采用大小写绕过,查看元素,name注入成功,message注入失败,只要有一个弹窗成功我们就可以利用。
HIgh等级
同样改包,采用绕过,查看元素,name注入成功,message同样过滤了
Impossible等级
同样使用了转义的函数htmlspecialchars这个函数
修复
这些限制要在服务端做,存储型XSS的绕过就是对输入长度的限制没有在服务端做。
输出到html中进行html编码,输出到JS中进行JS转义