详细介绍:DVWA | XSS 跨站脚本注入
2025-10-13 19:29 tlnshuju 阅读(0) 评论(0) 收藏 举报反射型XSS(Reflected Cross Site Scripting)
反射型XSS,即非持久性XSS,这种攻击方式往往具有一次性的特点,仅通过‘用户请求-服务器反射-浏览器执行’流程触发。
攻击者通过邮件等方式将含有XSS代码的恶意链接发给目标用户,当目标用户访问改链接时,服务器接收目标用户的请求进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,在进行解析携带XSS代码的恶意脚本后就会触发XSS攻击,完成攻击者想要的效果,例如窃取敏感信息、伪造用户操作、劫持浏览器行为等。
Low
代码审计:
Hello ' . $_GET[ 'name' ] . '
';
}
?>
源代码只判断了name输入的存在(非空判断),
<script>alert('反射型xss注入')</script>
//代码执行效果如下:
Hello ' . <script>alert('反射型xss注入')</script> . '
';
}
?>
提取当前cookie,
<script>alert(document.cookie)</script>
Medium
代码审计:
Hello {$name}
";
}
?>
这次是把<script>做了置空替换。
大小写绕过:
<sCript>alert('medium反射型xss注入')</script>
*大写位置随意。
改写绕过:
<script<script>>alert('medium反射型xss注入改写绕过')</script>
High
代码审计
Hello {$name}
";
}
?>
preg_replace():执行一个正则表达式的搜索和替换,这次过滤了大小写和改写,以上方法无效。
<image src=0 οnerrοr=alert("high反射型xss")>
Impossible
代码审计:
Hello {$name}
";
}
// Generate Anti-CSRF token
generateSessionToken();
?>
仅作反射型XSS代码防护的学习。
存储型XSS
存储型XSS,即持久型XSS,攻击脚本会被永久的存放在目标服务器的数据库或文件中,且具有很高的隐蔽性,具有持久性和批量性。
多见于论坛,博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入至帖子内容中,随后被服务器存储下来。带该携带恶意脚本的帖子被浏览时,恶意脚本就会执行。常见于用户评论、内容发布功能、用户资料设置和私信等。
Low
代码审计:
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
');//mysql_close();}
?>
$GLOBALS["__mysqli_ston"]:这是一个全局变量,存储mysqli数据库连接对象。
$query:这是要执行的SQL查询语句字符串。
mysqli_query():执行SQL查询的函数吗,成功时返回结果对象集。
<script>alert('存储型xss注入')</script>
点击sign guestbook存储,此后除非删除该留言,则每次访问此页面就是弹窗,干扰正常用户使用。
Medium
代码审计
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );//mysql_close();
}
strip_tags():删除所有HTML和PHP标签(如<script>、<style>),对xss跨站脚本攻击做了防御。
addslashes():对单引号、双引号、反斜杠等特殊字符添加反斜杠转义。
htmlspecialchars():将特殊字符(如<,>,&)转化为HTML实体(如<,>,&),确保数据在HTML中安全显示。
代码对于存储的message信息输入框做了多层过滤,第一层addslashes()函数过滤,第二层strip_tags()函数过滤,第三层htmlspecialchars()函数过滤。
name输入框只做了<script>标签的过滤。
在name输入框利用大小写尝试逃逸过滤,首先利用F12查询input修改输入限制,
嵌套写法尝试逃逸过滤:
High
代码审计
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );//mysql_close();
}
?>
message和name都做了<script>标签的详细过滤,使用<img>:

和medium一一样的步骤,增加前端对name的输入字符:
Impossible
代码审计
prepare( 'INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );' );$data->bindParam( ':message', $message, PDO::PARAM_STR );$data->bindParam( ':name', $name, PDO::PARAM_STR );$data->execute();
}
// Generate Anti-CSRF token
generateSessionToken();
?>
这段代码处理了POST提交的留言和用户名,首先使用checkToken()验证user_token和会话中的session_token是否一致,防止攻击者伪造用户请求提交数据。
sql注入防护。
利用htmlspecialchars()处理输入,确保用户提交的内容中包含的HTML/JS代码不会被浏览器执行,例如<script>会被转化为<script&t,避免了存储型xss的注入攻击(当留言内容被展示时,恶意脚本不会生效。)。
XSS注入防御的简单方法:
- 验证数据类型和格式:
例如在注册表单中,邮箱字段应验证是否符合邮箱合适,手机号字段应验证是否位正确的手机号码格式等。PHP中可考虑例如filter_var()函数等验证邮箱,
过滤特殊字符:
例如htmlspecialchars()函数将HTML特殊字符转换为HTML实体,防止恶意脚本被浏览器解析执行。
- 输出编码的转义:
在将数据输出到HTML页面、Javascript代码中时,进行响应的编码处理。例如在输出HTML标签内容中时,使用htmlspecialchars()函数。
在将数据输出到Javascript代码中时,对字符串进行转义,防止恶意代码破坏Javascript语法结构。可以使用PHP中的json_encode()将数据转换为JSON格式,它可以自动对特殊字符进行转义。
- 避免使用eval函数:
eval函数会将传入的字符串作为Javascript代码执行,如果传入的字符串来自用户输入,就可能导致XSS攻击。
- 及时更新和维护web应用程序及依赖库。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/936362.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!