◈ 渗透任务
企业论坛留言板安全评估
任务中
你的身份
「暗影安全公司」渗透测试工程师
目标网站
CloudForum 企业内部论坛 (forum.cloudcorp.example.com)
委托方
CloudCorp IT 部门 — 管理员发现留言板出现奇怪弹窗,所有访问者都中招
任务目标
验证留言板是否存在存储型 XSS 漏洞,注入持久化 payload
- 在留言中注入 JavaScript,使其对所有访问者自动执行
- 证明可以窃取所有用户的 Cookie
◈ 教程:什么是存储型 XSS?
原理
存储型 XSS(Stored XSS)是最危险的 XSS 类型。攻击者的 payload 被永久存储在目标服务器上(数据库、文件、Session 等), 每个访问受影响页面的用户都会自动执行恶意代码。
关键特征:持久化。payload 存储在服务器端,无需诱导用户点击特定链接,任何访问者都会中招。
与反射型 XSS 的区别
- 反射型:payload 在 URL 中,需要用户点击恶意链接
- 存储型:payload 存在服务器上,用户正常访问即触发
- 危害范围:存储型影响所有访问者,反射型只影响点击链接的人
攻击流程
- 攻击者在留言板/评论区提交包含恶意代码的内容
- 服务器将恶意内容存储到数据库/文件
- 其他用户访问该页面,服务器返回包含恶意代码的 HTML
- 浏览器解析 HTML,执行嵌入的 JavaScript
漏洞代码分析
<?php
// 存储用户消息
$_SESSION['messages'][] = [
'name' => $_POST['name'],
'message' => $_POST['message'] // 原样存储
];
// 输出消息 — 漏洞所在
foreach ($_SESSION['messages'] as $msg) {
// 危险:直接输出,未使用 htmlspecialchars()
echo $msg['message'];
}
?>
常见攻击场景
- 论坛/留言板评论注入
- 用户资料(昵称、签名、简介)注入
- Web 邮件系统邮件内容注入
- CMS 后台内容注入
◈ 练习:触发存储型 XSS
目标:CloudForum 企业内部论坛 (forum.cloudcorp.example.com) 的留言板功能。你提交的消息会被保存并展示给所有访问者。你的任务是在留言中注入 JavaScript 代码。
留言板(所有留言对每个访问者可见):
暂无留言,成为第一个留言的人吧...
暂无留言,成为第一个留言的人吧...
过滤状态:无任何过滤 — 名字和留言内容被原样存储并输出到 HTML
查看漏洞源码 (PHP)
<?php
session_start();
// 存储消息到 session 数组
if ($_POST['name'] && $_POST['message']) {
$_SESSION['messages'][] = [
'name' => $_POST['name'],
'message' => $_POST['message'],
'time' => date('H:i:s')
];
}
// 输出所有消息 — 危险:直接输出,无任何转义
foreach ($_SESSION['messages'] as $msg) {
echo "<div class=\"msg\">";
echo "<strong>" . $msg['name'] . "</strong>: ";
echo $msg['message']; // 漏洞:未转义
echo "</div>";
}
?>