一.DOM型xss
1.low
(1)我们知道最基础的xss攻击就是<script>alert(/xss/)</script>
(2)我们看到english直接按select,可以看到?default=English,我们知道在?default后面进行xss攻击
(3)我们直接输入<script>alert(/xss/)</script>,可以看到弹窗
(4)因为low比较简单所以我把分析源代码放在了最后。可以看到没有如何防御
2.medium
(1)我们先输入<script>alert(/xss/)</script>,可以看到没有任何反应
(2)我们查看源代码看到 stripos函数,对stripos() 函数进行解释是查找字符串在另一字符串中第一次出现的位置。此处过滤了<script ,使用我们使用不了<script>alert(/xss/)</script>
(3)我们使用<img src=1 οnerrοr=alert("xss")>发现没有任何弹窗,发现已经插入了value属性中。我们需要插入到值中,那么可以闭合select标签来插入。
(4)我们使用</select>标签进行闭合,然后使<img src=1 οnerrοr=alert("xss")>成一个独立的整体
3.high
(1)我们输入<img src=1 οnerrοr=alert(/xss/)>,没有反应。
(2)我们查看源代码,可以知道此处使用了白名单过滤,只允许 传的 default值 为 French English German Spanish 其中一个
(3)我们可以使用#,#号之后的内容,不会被提交到服务器,可以直接与浏览器进行交互
二.反射型xss
1.low
我们知道low级别,没有任何防御,所以我们直接输入<script>alert(/xss/)</script>
2.medium
(1)我们直接输入基础的xss攻击,可以看到alert(/xss/)
(2)我们查看源代码,可以知道把<script>过滤了,str_replace() 函数替换字符串中的一些字符(区分大小写)。
(3)所以我们可以进行大小写混合绕过,<sCRIpt>alert(/xss/)<scRIPT>
3.high
(1)我们输入<scriPt>alert("xss")</scRipt>,看到显示了>
(2)我们查看源代码,看到了preg_replace 函数,它是执行一个正则表达式的搜索和替换。
看到把script直接过滤了
(3)所以我们使用<img src=οnerrοr=alert("xss")> 进行xss攻击
三.存储型xss
1.low
(1) 打开之后可以看到是一个留言板
(2)我们直接进行xss攻击
2.medium
(1)我们xss攻击,过滤了<script>
(2)我们查看源代码
(3)可以知道addslashes(string) :函数返回在预定义字符之前添加反斜杠的字符串,预定义字符 ’ 、" 、\ 、NULL。
strip_tags(string) :函数剥去string字符串中的 HTML、XML 以及 PHP 的标签。
htmlspecialchars(string): 把预定义的字符 “<” (小于)、 “>” (大于)、& 、‘’、“” 转换为 HTML 实体,防止浏览器将其作为HTML元素。
可以看到,$message已经被过滤了xss,但是name只是过滤了<script>,没有进行严格过滤。可以利用大小写绕过
(4)我们在nam输入发现输入的数字不多,我们打开 开发者工具,修改 maxlength=100即可
3.high
(1)我们查看源代码知道直接把<script>过滤了。
(2)所以我们使用<img src=1 οnerrοr=alert("xss")> ,记得修改name的maxlength=100即可
DVWA的xss类型攻击到这里就全部结束了。