【DVWA】--- 十、存储型XSS(XSS Stored)

XSS Stored


目录

一、low级别

二、Medium级别

三、High级别

四、Impossible级别

五、预防方法


一、low级别

不多说直接尝试写入
【DVWA】--- 十、存储型XSS(XSS Stored)_第1张图片
弹窗成功
【DVWA】--- 十、存储型XSS(XSS Stored)_第2张图片
由于他是存储型的只要我们点击该模块就会引发弹窗,可以看到我们的JS代码是写入了数据库的,只要不清除他就会一直存在.
【DVWA】--- 十、存储型XSS(XSS Stored)_第3张图片
代码审计
【DVWA】--- 十、存储型XSS(XSS Stored)_第4张图片
相关函数

  • trim(string,charlist)函数: 移除字符串两侧的空白字符或其他预定义字符。string—必需, 规定要检查的字符串。charlist—可选, 规定从字符串中删除哪些字符。如果被省略,则移除以下所有字符:"\0" - NULL; “\t” - 制表符; “\n” - 换行; “\x0B” - 垂直制表符; “\r” - 回车; " " - 空格 .
  • stripslashes() 函数: 删除由 addslashes() 函数添加的反斜杠。
  • addslashes() 函数: 返回在预定义字符之前添加反斜杠的字符串。预定义字符是:单引号(’); 双引号("); 反斜杠(\); NULL.

虽说对消息内容和消息名进行了杀毒但是并没有对XSS进行防御


二、Medium级别

代码审计
【DVWA】--- 十、存储型XSS(XSS Stored)_第5张图片
相关函数

  • strip_tags() 函数: 剥去字符串中的 HTML、XML 以及 PHP 的标签。
  • htmlspecialchars() 函数: 把预定义的字符转换为 HTML 实体。
    被转换的预定义的字符有:
& (& 符号)	&
" (双引号)	",除非设置了 ENT_NOQUOTES
' (单引号)	设置了 ENT_QUOTES 后, ' (如果是 ENT_HTML401) ,或者 ' (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。
< (小于)	&lt;
> (大于)	&gt;      

通过观察代码可知message中已经是无法进行注入了,可以在name中进行注入,但是name中的内容在前端的输入长度是有限制的,有两个方法可以解决,一个是用bp抓包修改name中的内容,一个是Fn+F12直接修改前端的代码.这里用BP进行修改, 这里script不能是小写因为会被过滤.
【DVWA】--- 十、存储型XSS(XSS Stored)_第6张图片
弹窗成功
【DVWA】--- 十、存储型XSS(XSS Stored)_第7张图片
【DVWA】--- 十、存储型XSS(XSS Stored)_第8张图片


三、High级别

代码审计
【DVWA】--- 十、存储型XSS(XSS Stored)_第9张图片
相关函数

  • preg_replace(pattern,replacement,subject,limit,count) 函数: 执行一个正则表达式的搜索和替换。
    pattern—要搜索的模式,可以是字符串或一个字符串数组。
    replacement— 用于替换的字符串或字符串数组。
    subject—要搜索替换的目标字符串或字符串数组。
    limit—可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
    count—可选,为替换执行的次数。

任何与script标签有关的内容都会被过滤掉,但是我们可以使用其他标签产生事件来完成弹窗:

  • ----产生一个输入框,输入任意内容之前产生弹窗
  • ----产生一个输入框,输入任意内容之后产生弹窗
  • ----产生一个输入框,当光标聚焦到输入框中产生弹窗
  • ----产生一个按钮,点击按钮,产生弹窗
  • ----一个图片标签,当它src中的路径不是一个图片时或不是一个路径时产生弹窗

用bp抓包修改消息名为我们构建的事件
【DVWA】--- 十、存储型XSS(XSS Stored)_第10张图片
弹窗成功
【DVWA】--- 十、存储型XSS(XSS Stored)_第11张图片


四、Impossible级别

代码审计【DVWA】--- 十、存储型XSS(XSS Stored)_第12张图片
相关函数

  • prepare():准备要执行的SQL语句并返回一个 PDOStatement 对象。
  • bindParam():绑定一个参数到指定的变量名。
  • execute():执行一条预处理语句。

五、预防方法

采用htmlspecialchars()函数对用户的输入进行过滤,或者设置严格的白名单过滤用户输入的内容.

你可能感兴趣的:(dvwa,xss,安全)