通过代码审计找出网站中的XSS漏洞实战
字数 1175 2025-08-18 11:37:41
XSS漏洞代码审计实战教学文档
一、背景与概述
本教学文档基于对渗透测试系统的代码审计实践,详细讲解如何通过代码审计方式挖掘XSS漏洞。XSS(跨站脚本攻击)是一种常见的Web安全漏洞,攻击者能够将恶意脚本注入到其他用户浏览的网页中。
二、审计准备工作
1. 目标系统
- 审计系统:permeate渗透测试系统
- 系统架构:基于MVC模式
2. 关键位置定位
审计XSS漏洞需要首先定位系统中的关键位置:
2.1 控制器定位
- 通过URL分析入口文件:
home/index.php - 分析主入口文件发现控制器加载逻辑:
<?php require_once "../core/common.php"; include "./public/header.php"; includeAction("$model","$action"); include "./public/footer.php"; - 在
common.php中找到控制器存放路径:home/action/
2.2 模板定位
- 通过控制器中的
displayTpl函数定位模板路径 - 模板存放于:
home/tpl/目录下
三、正向审计方法
1. 审计流程
- 从参数接收位置开始审计
- 追踪参数传递过程
- 检查最终输出位置是否过滤
2. 实例分析
案例1:反射型XSS漏洞
-
参数接收位置:
tiezi.php控制器中的index方法public function index() { $id = $_GET['bk']; $bk = &$id; // ...其他代码... $data['bk'] = $bk; displayTpl('tiezi/index', $data); }- 直接接收
$_GET['bk']参数,未做任何过滤
- 直接接收
-
模板输出位置:
tiezi/index.php<a class="btn btn-primary" href="fatie.php?bk=<?php echo $bk ?>">发帖</a>- 直接输出变量,未做HTML编码
-
漏洞验证:
http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6"><script>alert(123)</script>
四、反向审计方法
1. 审计流程
- 从模板中的变量输出点开始
- 反向追踪变量来源
- 检查输入是否经过过滤
2. 实例分析
案例2:搜索型XSS漏洞
-
模板输出点:
search.phpecho $keyword;- 直接输出搜索关键词
-
变量来源追踪:
$keywords = $_REQUEST['keywords']; if (!empty($keywords)) { $where = " where title like '%$keywords%' "; }- 直接接收用户输入,未做过滤
-
漏洞验证:
http://permeate.songboy.net/home/search.php?keywords=测试<script>alert(123)</script>
五、审计技巧总结
1. 关键搜索技巧
- 控制器中搜索:
$_GET、$_POST、$_REQUEST - 模板中搜索:
echo、print等输出函数 - 使用正则表达式匹配变量输出:
echo \$([a-z]*)
2. 常见危险模式
- 直接输出用户输入:
echo $_GET['param']; - 在HTML属性中直接使用变量:
<a href="<?php echo $url ?>"> - 在JavaScript中直接拼接用户输入:
var userInput = '<?php echo $input ?>';
3. 安全建议
- 所有输出到HTML的内容都应进行HTML实体编码:
htmlspecialchars($output, ENT_QUOTES, 'UTF-8'); - 输出到JavaScript的内容应使用
json_encode:var data = <?php echo json_encode($data); ?>; - 使用内容安全策略(CSP)作为额外防护层
六、扩展审计思路
-
存储型XSS审计:
- 追踪用户输入->数据库存储->输出的完整流程
- 检查数据存储前后是否进行过滤
-
DOM型XSS审计:
- 检查前端JavaScript中动态操作DOM的部分
- 关注
innerHTML、document.write等危险API的使用
-
框架特定审计:
- 不同框架有各自的XSS防护机制
- 检查是否正确使用框架提供的安全功能
通过本教学文档的系统学习,您应该已经掌握了通过代码审计挖掘XSS漏洞的核心方法和技巧。实际审计中需要结合多种方法,全面检查系统的输入输出处理流程。