Low
我们直接查看源码
对Low型源码中部分函数解释
trim()移除字符串两侧的空白字符或其他预定义字符 , ,x0b, ,空格 tripslashes(string)函数去除反斜杠 mysqli_real_escape_string(connection,escapestring)转义在SQL语句中使用的字符串中的特殊字符。
$GLOBALS:引用全局作用域中可用的全部变量。
我们可以从上文中看出,低级的xss存储型,是没有对<script>进行过滤的
接下来我们直接进行弹窗测试。
输入 <script>alert('xss')</script>
点sign guestbook提交之后完成弹窗,如下图所示
Medium
查看源码
str_replace( '<script>', '', $name );过滤小写的<script>
htmlspecialchars() 函数,把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体:
我们使用Burp Suite抓包改包实现弹窗
抓包准备
设置浏览器代理
Burp Suite设置
接下来我门清除一下DVWA设置
因为源码里面有htmlspecialchars() 函数,我们采用抓包改包绕过。
我们随便输入一些字符,因为我们要去抓包来修改,所以这里输入什么都不影响。
这个时候不要点提交,返回Busp Suite,依次点击,直到开启拦截请求
截取成功
在数据传输过程中会进行URL编码的转换,我们在Burp Suite里进行编码转换。
注意:我们需要转换的编码是 <SCRIPT>alert('1')</SCRIPT> ,因为源码里有$name = str_replace( '<script>', '', $name );---把小写的<script>替换为空字符串。我们采用大写=绕过
把下图标识为1的部分替换,替换完成后点击放包
完成弹窗
完成弹窗之后,记得把Burp Suite的拦截禁用关掉。方便后续操作。
High
我们查看源码,可以发现,相比前面的medium,只是加上了对<script>关键字的限制
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name ); --- 将$name变量(我们输入的Name文本框部分)中包含有script(i:不限制大小写)进行替换为空字符。
我们同样采用抓包改包绕过。---既然限制了script关键字的输入,我们可以采用别的弹窗方式 <img src=x onerror=alert('123')>
记得在提交之前,开启拦截请求。
拦截成功
将1122替换为<img src=x onerror=alert('123')>
完成弹窗