存储型XSS
存储型XSS攻击,攻击者将恶意代码上传或储存到漏洞的服务器中,存储型xss和反射性的区别就在于能存储在目标网站的服务器里。但凡受害者浏览包含此恶意代码的页面都会执行恶意代码。表示只要访问了被攻击网站就会成为攻击者的目标,都有可能执行攻击者写入的恶意脚本,而且存储型XSS的代码存在于网页的服务器中,只要不被删除就可以说是永久型的。一般这种漏洞都是出现在网站留言、评论、博客日志等交互处等可以将恶意脚本存储到客户端或者服务端的数据库中的地方。(ps:本文为学习笔记,仅供学习)
Low
在留言板留下我们的的恶意留言,用来获取cookie。提交<script>alert(document.cookie)</script>
上传成功
使用虚拟机进入dvwa,查看是否会被获取cookie
成功被攻击。再看一下数据库内容
成功被存储。以后只要没有被清除该数据,只要是浏览这个页面就会被获取cookie。经过技术手段将cookie传送到自己的邮箱且将提示页面隐藏,从而达到悄无声息的进攻。可去该网页去学习如何将获取到的cookie传到自己的邮箱:
XSS获取cookie并发送自己邮箱 - 腾讯云开发者社区-腾讯云
也可以等我出个这方面的学习博客看我的
Medium
切换等级,但是记得要清理数据库或者留言板信息哦,要不然可是会影响实验哦。
这就是不清理数据库的结果,所以记得先清理数据库或留言板。做好准备工作之后就进行留言板留言。在内容处留下<script>alert(document.cookie)</script>
发现<script>和</script>好像被过滤掉了,会不会像反射型一样,只是过滤了<script>,只要复写或者大小写可以攻击了呢?把写入内容修改成<Script>alert(document.cookie)</Script>或者<scri<script>pt>alert(document.cookie)</scri</script>pt>。
验证大小写行不通,再验证复写时发现,message 对输入长度进行了限制,所以我们f12进入到开发者界面修改页面信息,将输入长度修改得更长一些。
将原来的50修改成更长的长度。
成功写入,但还是被过滤了。但好像不止一个地方可以存储哎,咱在名字那里进行写入试试。直接上复写或大小写,因为像没有任何防护我感觉medium不可能做出来。但Name对长度有限制,所以像上面一样改一下长度,我这里改成了10000。
成功写入
进虚拟机演示我就不去了因为都是一样的。疑惑为什么Message不能写入<script>,所以查看一下源码。
果不奇然,Message使用了htmlspecialchars函数将所有的字符都转义成了html实体,所有没有办法进行攻击,但name还是除了过滤<script>以外一点防御工作都没有。所以还是有漏洞可走。
High
先删除数据库内容。然后再进行实验,像上面medium一样,先修改长度,然后写入
没想到最后就只剩下一个>,还有>说明没有使用那个转义的函数,所以还是有漏洞可循,可以尝试一些换个标签,<img src=1 οnerrοr=alert(document.cookie)>
上传成功,看看能不能触发
成功触发并攻击
查看一些源码
message没有变化,但name发生了变化,和反射性高级的防护一样,过滤了所有形式的<script>。但我们可以使用其他标签。所以还是有漏洞可循的。
Impossible
Impossible还得是你,不清理数据都没有事。
老规矩,直接看代码。学习学习怎么防护的。
加入了token,且name和message都使用了htmlspecialchars。大大的提升了安全系数。