DVWA 之 XSS(Stored) - 存储型XSS

XSS(Stored) - 存储型XSS#

原理#

存储型 XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方。

如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发执行代码,这种 XSS 比较危险,容易造成蠕虫,盗窃 cookie 等。

1. Low#

Low 级别源码中相关函数介绍

trim(string, charlist)
函数移除字符串两侧的空白字符或其他预定义字符,可选参数 charlist 支持添加额外需要删除的字符,如果被省略,则移除以下所有字符
"\0"-NULL "\t"-制表符 "\n"-换行	"\x0B"-垂直制表符 "\r"-回车 " "-空格

mysql_real_escape_string(string, connection)
函数会对字符串中的特殊符号(\x00,\n,\r,\,',",\x1a)进行转义

stripslashes(string)
删除字符串中的反斜杠

漏洞利用

Low 级别的代码对输入的 message 和name 没有做 XSS 方面的过滤与检查,且存储在数据库中,因此存在明显的存储型 XSS 漏洞

输入 1 和 <script>alert('xss')</script>,代码成功执行

2. Medium#

strip_tags():剥去字符串中的 HTML、XML、以及 PHP 的标签
addslashes():在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串
htmlspecialchars():把预定义的字符转换为 HTML 实体

Medium 级别的代码对 message 参数使用了 htmlspecialchars() 函数进行编码,因此无法通过 message 参数注入 XSS 代码,但是对于 name 参数,只是简单过滤了 <script>,可以使用大写或者双写绕过

漏洞利用

  • 大写绕过:抓包,将 name 参数值改为 <SCRIPT>alert('xss')</SCRIPT>
  • 双写绕过:抓包,将 name 参数值改为 <sc<script>ript>alert('xss')</script>

3. High#

High 级别的代码使用正则表达式过滤了 <script> 标签,但是却忽略了 img、iframe 等其他危险的标签,因此 name 参数依旧存在存储型 XSS

漏洞利用

抓包,将 name 参数值改为 <img src=1 onerror=alert('xss')>,成功执行

防护方法#

  1. HttpOnly 属性
  2. 输入检查,检查特殊字符,XSS 特征等
  3. 输出检查,对输出进行编码

作者:augustine0654

出处:https://www.cnblogs.com/augustine0654/p/17180840.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   紫曜花  阅读(161)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示