一、反射(reflected)型
(一)、尝试low等级
输入正常数字,返回以下内容
再输入<xss>
发现,只输出了hello
我们使用火狐的开发者工具查看下元素
发现hello的后面是一对xss标签
我们进行弹窗测试
输入<script>alert(/xss/)</script>
发现弹窗,说明存在xss注入
介绍javaScript的3个弹窗函数
alert() ,confirm() ,prompt()
攻击者思路
攻击者web设计
构造估计的js脚本
document.location就是页面的内容定位到指定的位置,他会访问参数中的地址,参数里面写上刚刚新建的php文件的网址,document.cookie就是赋值给这个php的cookie参数,这个cookie值最终会出现在网站127.0.0.1/cookie.php中
构造并发送攻击url
这样子还不行还需要url编码
最后劫持会话
修改cookie,修改为之前获取的cookie值。
(二)、尝试medium等级,
只要在<srcipt>标签中插入一个<script>即可,<src<srcipt>ipt>,
因为他过滤了<sript>
标签其他步骤与low等级一样。
(三)尝试high等级。
上面的方法都失效了,那么我们想到了img标签也是可以执行js代码的
<img src= x onerror=alert(1)>
使用iframe标签也可以成功注入<iframe onload=alert(1)>
说明只过滤了script标签
(四)impose等级
查看源码
发现htmlspecialchars函数
那么这是函数是干啥的呢?
可以把
&过滤成&
"过滤成&quto;
'过滤成'
<过滤成<
>过滤成>
二、存储型(stored)反射
(一)、尝试low等级,
使用火狐浏览器开发者工具,发现name被限制为10个字符,message被限制为50个字符.这对我们xss注入是不够的。
那么我们就抓包发送name,message参数
成功绕过了限制
存储型的数据是存在数据库里,大家可以选择
setup/resetDB重置数据库,清楚数据
(二)尝试medium等级
发现name过滤alert ,和script标签,message过滤了script标签。尝试script大小写发现无法弹窗
这个是部分源码
我们尝试iframe标签
txtName=<iframe onload=alert(/xss/)>&mtxMessage=<iframe src =1 onload=alert(/ss/)>&btnSign=Sign+Guestbook
发现name成功弹窗,但是message不行,不过没关系,可以进行xss注入
(三)、尝试high等级
和medium的方法一样,不同是high等级的message对< > “ & ‘进行了处理
(四)、尝试impose等级
查看源码
name和message都对< > \” & \’进行了过滤
三、DOM型XSS
(一)、尝试low等级
我们尝试注入
http://localhost/DVWA/vulnerabilities/xss_d/?default=<script>alert(/hack/)</script>
成功进行注入,查看源码发现,没有任何保护措施
(二)、尝试medium等级
发现low等级的方法已经失效了,经过尝试可以发现,script标签被过滤了,过滤成English。
查看源码发现只过滤了script标签
那么我们尝试 下<img src= x onerror=alert(1)>
页面没有反应
查看网页源代码,发现我们的语句被插入到了value值中,但是并没有插入到option标签的值中,使用img标签没有发挥作用
我们尝试闭合option
`http://localhost/DVWA/vulnerabilities/xss_d/?default= ></option><img src= x onerror=alert(1)`>
发现还没没有闭合成功。
我们闭合用的><被闭合到option的值当中去了
。那么我们往更高一层的select标签闭合
http://localhost/DVWA/vulnerabilities/xss_d/?default= ></option></select><img src=1 onerror=alert('hhh')>
成功注入
(三)、尝试high等级
尝试了一番之后没有结果
我们查看下源码,发现源码使用了白名单的方法,
那我们是不是可以使用#注入,第一次从本地写入,第二次刷新的时候执行我们注入的xss
http://localhost/DVWA/vulnerabilities/xss_d/?default=English#</option></select><BODY ONLOAD=alert(document.cookie)>
成功注入
(四)、impose等级
发现我们输入什么都会在客户端体现,查看源码
发现在客户端进行了保护。
这段代码的功能是
不会对URL输入进行URL编码过的内容再进行URL解码从而杜绝了DOM型XSS,这就是为什么我们输入什么就会在框中体现