某国外旅游cms代码审计——适合初学者练手
字数 1000 2025-08-09 22:00:34
某国外旅游CMS代码审计教学文档
0x00 概述
本文档针对某国外旅游CMS系统进行代码审计教学,适合初学者学习常见的Web漏洞原理及审计方法。该系统存在多种安全漏洞,包括SQL注入、XSS(跨站脚本攻击)和文件操作相关漏洞。
0x01 环境准备
-
代码下载:
- 地址:https://wwe.lanzoui.com/iShKJqualmj
- 密码:9d1b
-
测试环境:
- Web服务器(如Apache/Nginx)
- PHP环境
- 数据库(如MySQL)
0x02 SQL注入漏洞
0x02.1 漏洞位置
/view_package.php 文件
0x02.2 漏洞分析
// 示例代码(推测)
$id = $_GET['id'];
$sql = "SELECT * FROM packages WHERE id='$id'";
// 直接拼接用户输入到SQL语句中,未做任何过滤或预处理
0x02.3 漏洞验证POC
http://192.168.10.248/?page=view_package&id=c4ca4238a0b923820dcc509a6f75849b' AND 5829=5829-- aaa
0x02.4 修复建议
- 使用预处理语句(PDO或mysqli)
- 对输入进行严格过滤
- 使用最小权限原则设置数据库账户
0x03 XSS漏洞
0x03.1 反射型XSS
漏洞位置
/admin/index.php
漏洞分析
// 示例代码(推测)
$page = $_GET['page'];
$page = str_replace(['/', '_'], '', $page); // 仅替换/和_
echo $page; // 直接输出未过滤的用户输入
漏洞验证POC
'-prompt(1)-'
0x03.2 存储型XSS
漏洞位置
/classes/Master.php- 数据存储/admin/inquiries/index.php- 数据展示
漏洞分析
// Master.php中
$date = $_POST['date']; // 未过滤直接存储
// inquiries/index.php中
echo $inquiry['date']; // 从数据库取出后直接输出
漏洞验证POC
<script>alert(document.cookie)</script>
0x03.3 修复建议
- 对所有输出进行HTML实体编码
- 使用Content Security Policy (CSP)
- 设置HttpOnly标志的cookie
- 输入验证和过滤
0x04 文件操作漏洞
0x04.1 任意文件删除
漏洞位置
/classes/Master.php
漏洞分析
// 示例代码(推测)
$path = $_GET['path'];
unlink($path); // 直接使用用户提供的路径删除文件
漏洞验证
返回"success"即表示成功
0x04.2 任意文件上传
漏洞位置
/classes/Users.php
漏洞分析
// 示例代码(推测)
// 无任何文件类型、内容检查
move_uploaded_file($_FILES['file']['tmp_name'], $target_path);
0x04.3 修复建议
-
文件删除:
- 限制可删除的目录范围
- 验证用户权限
- 使用白名单机制
-
文件上传:
- 检查文件类型(MIME类型和扩展名)
- 重命名上传文件
- 存储在非Web可访问目录
- 设置文件大小限制
- 扫描文件内容
0x05 综合防护建议
- 实施输入验证和输出编码
- 使用预处理语句防止SQL注入
- 实施最小权限原则
- 定期进行安全审计
- 保持系统和组件更新
- 实施日志记录和监控
0x06 总结
本CMS系统存在典型的安全漏洞,适合初学者学习代码审计的基本方法。通过分析这些漏洞,可以理解常见Web安全问题的成因和防护措施。建议开发者遵循安全编码规范,实施纵深防御策略。