Stored Cross Site Scripting(XSS)存储型跨站脚本攻击会把用户输入的数据存储在服务器端。如果web应用程序从恶意用户处收集了输入数据并将这些数据存储在数据库中以供以后使用,就会发生储存式跨站点脚本。
源码:
trim函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。mysqli_real_escape_string对字符串特殊符号(\x00,\n,\r,\,‘,“,\x1a)等进行转义。stripslashes函数删除字符串中的反斜杠。未对输入数据进行xss检测编码,直接写入到数据库中,存在存储型xss漏洞。
漏洞利用:
Name一栏前端有字数限制,可通过burpsuite抓包改包绕过。
源码:
strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签,但允许使用标签。
addslashes() 函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。可以看到,由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码,但是对于name参数,只是简单过滤了字符串,仍然存在存储型的XSS。
漏洞利用:
由于name字段对长度有限制,可通过抓包改包方式修改参数值。
源码:
通过使用htmlspecialchars函数,解决了XSS。
更多dvwa的使用及漏洞利用:https://blog.csdn.net/zjw0411/article/category/7542496