PHP-Code-Sec靶场代码审计报告
PHP-Code-Sec靶场代码审计
| 项目信息 | 内容 |
|---|---|
| 报告名称 | PHP-Code-Sec靶场代码审计报告 |
| 审计对象 | PHP-Code-Sec靶场 |
| 审计日期 | 2025年11月3日 - 2025年11月11日 |
| 审计人员 | MosHSasA |
| 报告日期 | 2025年11月11日 |
1. 执行摘要
1.1 审计概述:
- 审计目的:通过此靶场进行代码审计以及相关知识的学习。
- 审计范围:主要针对靶场PHP-Code-Sec的
/modules/和/setup/目录下的文件进行审计。 - 主要方法:工具辅助(RIPS)。
1.2 漏洞统计:使用表格展示漏洞等级和数量,一目了然。
风险等级 漏洞数量 严重 7 高危 8 中危 4 低危 1 1.3 整体风险评估:项目存在多个可直接导致服务器被入侵的严重漏洞,需立即修复。
1.4 修复建议摘要:立即修复所有严重和高危漏洞,特别是命令执行和远程代码执行漏洞。
2. 审计范围与方法
- 2.1 审计范围:
/modules目录下:/command/index.php、/cors/index.php、/doubleparse/index.php、/fi/index.php、/hpp/index.php、/idor/user.php、/mail/index.php、/override/index.php、/path/index.php、/phar/index.php、/rce/eval.php、/sqli/index.php、unserialize/index.php、/upload/index.php、wrapper/index.php、/write/index.php、/xss/reflected.php。
/setup目录下:/install.php。
- 2.2 审计方法:
- 人工审计:通读关键业务逻辑代码。
- 工具辅助:使用静态代码分析工具(RIPS)
- 测试验证:对发现的疑似漏洞点进行模拟验证(在测试环境中,严禁直接对生产环境操作)。
3. 漏洞详情
VULU-001 - 命令执行 -
/modules/command/index.php风险等级:严重
项目 内容 漏洞文件 /modules/command/index.php相关代码 第6行: $host = $_GET['host'];第7行:$cmd = 'ping -n 1 ' . $host;第8行:$output = shell_exec($cmd);漏洞描述 可以看到用户输入的 host参数没有进行任何过滤直接拼接到第七行的ping命令之后,又在第八行中直接执行系统命令,这导致用户可以输入任何系统命令来获取系统信息。修复建议 使用白名单验证 host参数,或使用escapeshellarg()函数进行转义。VULN-002 - HTTP header注入 -
/modules/cors/index.php风险等级:高危
项目 内容 漏洞文件 modules/cors/index.php相关代码 第5行: header('Access-Control-Allow-Origin: ' . $_GET['origin']);漏洞描述 Origin头值直接来自用户输入,可能导致HTTP响应头注入攻击,(例如攻击者构造恶意网站,窃取用户信息。)修复建议 验证 origin是否为允许的域名,或使用白名单机制。VULN-003 - 文件读取 -
/modules/doubleparse/index.php风险等级:高危
项目 内容 漏洞文件 /modules/doubleparse/index.php相关代码 第12行: $fileParam = $_GET['file']??'';第15行:$base = __DIR__ . '/../../data/';第21行:$target = $base . $decodedTwice;第23行:$output = file_get_contents($target);漏洞描述 $_GET['file']从URL的GET参数中获取名为'file'的值,$decodedTwice变量中存储的是经过两次解码的用户输入路径,之后将基础路径$base与用户输入的文件名直接拼接,如果用户输入包含../,可能跳出限制目录。修复建议 使用白名单限制可访问的文件,加强路径遍历检查。 VULN-004 - 文件包含 -
/modules/fi/index.php风险等级:严重
项目 内容 漏洞文件 /modules/fi/index.php相关代码 第4行: $page = $_GET['page'] ?? 'home';第29行:$path = $page;第31行:@include $path;第33行:include __DIR__ . '/../../pages/' . $path . '.php';漏洞描述 从 @include $path和@include __DIR__ . '/../../pages/' . $path . '.php';我们可以知道包含文件$path是来自用户可控的输入的,这就导致任意文件包含和代码执行。修复建议 实现严格的白名单机制,禁止动态包含用户可控文件。 VULN-005 - XSS漏洞 -
/modules/hpp/index.php风险等级:中危
项目 内容 漏洞文件 /modules/hpp/index.php相关代码 第16行: print_r $msg . ' 角色列表接收为: ' . h(print_r($roles, true));漏洞描述 用户输入直接输出到页面,存在跨站脚本攻击风险。 修复建议 对所有用户输出进行HTML实体编码。 VULN-006 - XSS漏洞 -
/modules/idor/user.php风险等级:中危
项目 内容 漏洞文件 /modules/idor/user.php相关代码 第7行: $user = $pdo->query("SELECT ... WHERE id=" . $id)->fetch();存在print_r输出漏洞描述 存在SQL注入和XSS双重风险,用户数据未经验证直接输出。 修复建议 使用参数化查询,对输出进行编码。 VULN-007 - 协议注入 -
/modules/mail/index.php风险等级:高危
项目 内容 漏洞文件 /modules/mail/index.php相关代码 第11行: $ok = mail($to, $subj, $body, $headers);漏洞描述 邮件头信息直接来自用户输入,可被用于邮件头注入攻击。 修复建议 验证邮件地址格式,过滤特殊字符。 VULN-008 - extract滥用 -
/modules/override/index.php风险等级:严重
项目 内容 漏洞文件 /modules/override/index.php相关代码 第19行: extract($_GET);漏洞描述 extract()函数直接处理$_GET数组,导致变量覆盖漏洞。修复建议 避免使用 extract()函数,或使用EXTR_SKIP等安全模式。VULN-009 - 文件读取 -
/modules/path/index.php风险等级:高危
项目 内容 漏洞文件 /modules/path/index.php相关代码 第9行: $content = file_get_contents($target);漏洞描述 用户可控文件路径,可读取服务器敏感文件。 修复建议 限制文件访问范围,使用绝对路径检查。 VULN-010 - 远程代码执行 -
/modules/rce/eval.php风险等级:严重
项目 内容 漏洞文件 /modules/rce/eval.php相关代码 第13行: eval($code);漏洞描述 用户输入直接作为PHP代码执行,极度危险。 修复建议 绝对禁止在生产环境使用eval函数。 VULN-011 - SQL注入 -
/modules/sqli/index.php风险等级:严重
项目 内容 漏洞文件 /modules/sqli/index.php相关代码 第15行: $sql2 = "SELECT ... WHERE username='" . $q . "'";漏洞描述 用户输入直接拼接SQL查询,存在SQL注入漏洞。 修复建议 使用参数化查询(PDO预处理语句)。 VULN-012 - 反序列化漏洞 -
/modules/unserialize/index.php风险等级:严重
项目 内容 漏洞文件 /modules/unserialize/index.php相关代码 第17行: unserialize($data);漏洞描述 反序列化用户可控数据,可能导致对象注入攻击。 修复建议 避免反序列化用户输入,使用JSON等安全格式。 VULN-013 - 文件上传漏洞 -
/modules/upload/index.php风险等级:高危
项目 内容 漏洞文件 /modules/upload/index.php相关代码 第5行: $f = $_FILES['file'];第22行:$msg = '<span class="danger">上传错误代码:' . $f['error'] . '</span>';第38行:echo '<p>' . $msg . '</p>';存在move_uploaded_file函数调用漏洞描述 文件上传功能存在双重风险:1. 未对上传文件类型进行严格验证,可能导致恶意文件上传;2. 错误信息直接输出到页面,存在XSS漏洞。 漏洞验证 1. 上传webshell文件测试是否被拦截 2. 构造特殊文件名触发错误信息,验证XSS漏洞 修复建议 1. 限制上传文件类型(白名单机制) 2. 检查文件内容而不仅是扩展名 3. 将上传文件存储在Web目录外 4. 对错误信息进行HTML编码: echo '<p>' . htmlspecialchars($msg) . '</p>';VULN-014 - 任意文件读取 -
/modules/wrapper/index.php风险等级:高危
项目 内容 漏洞文件 /modules/wrapper/index.php相关代码 第12行: $path = $_GET['path']??'index.php';第16行:$wrapper = 'php://filter/convert.base64-encode/resource='. $path;第17行:$data = file_get_contents($wrapper);漏洞描述 通过PHP包装器漏洞,攻击者可读取服务器任意文件的base64编码内容,绕过某些文件读取限制。 漏洞验证 访问: http://target.com/wrapper/index.php?path=../../config/db.php修复建议 1. 禁用危险的PHP包装器 2. 实现严格的文件路径白名单 3. 使用 realpath()检查路径是否在允许范围内VULN-015 - 任意文件写入 -
/modules/write/index.php风险等级:严重
项目 内容 **漏洞文件 /modules/write/index.php相关代码 第8行: $path = $_POST['path']??'';第9行:$content = $_POST['content']??'';第17行:$bytes = file_put_contents($path, $content, $flags);漏洞描述 用户可完全控制写入路径和内容,可直接写入webshell到服务器。 漏洞验证 POST请求: path=shell.php&content=<?php system($_GET['cmd']);?>修复建议 1. 绝对禁止此类功能在生产环境使用 2. 如必须使用,限制路径到特定安全目录 3. 验证文件内容安全性 VULN-016 - 反射型XSS -
/modules/xss/reflected.php风险等级:中危
项目 内容 漏洞文件 modules/xss/reflected.php相关代码 第21行: echo $_GET['q'];漏洞描述 用户输入直接输出到页面,存在反射型XSS漏洞。 漏洞验证 访问: http://target.com/xss/reflected.php?q=<script>alert(1)</script>修复建议 使用 htmlspecialchars()函数编码输出:echo htmlspecialchars($_GET['q'], ENT_QUOTES, 'UTF-8');VULN-017 - 配置写入漏洞 -
/setup/install.php风险等级:高危
项目 内容 漏洞文件 /setup/install.php相关代码 第10-14行:获取数据库配置参数 第57行:拼接配置文件内容 第64行: file_put_contents(__DIR__ . '/../config/config.inc.php', $configPHP);漏洞描述 安装脚本将用户输入的数据库配置写入配置文件,虽然使用了 addslashes但保护不足,可能被用于路径遍历或配置文件污染。漏洞验证 在安装过程中注入恶意配置参数 修复建议 1. 安装完成后立即删除或禁用 install.php2. 对输入参数进行严格验证 3. 设置配置文件权限为644 4. 使用更安全的序列化方式存储配置
修复建议汇总
紧急(严重)
- VULN-001, VULN-010:立即移除或严格限制命令执行和eval功能
- VULN-004, VULN-008, VULN-012:修复文件包含、变量覆盖和反序列化漏洞
- VULN-011:使用参数化查询修复SQL注入
- VULN-015:立即禁用任意文件写入功能
重要(高危)
- VULN-002, VULN-007:修复HTTP头注入和邮件注入
- VULN-003, VULN-009:加强文件访问控制
- VULN-013:加强文件上传验证机制
- VULN-014:修复任意文件读取漏洞
- VULN-017:加固安装脚本安全性
常规(中危)
- VULN-005, VULN-006:实现输出编码,防止XSS攻击
- VULN-016:修复反射型XSS漏洞
整体风险评估
风险极高 - 该项目存在严重的安全问题,多个漏洞可导致服务器被完全控制。建议立即停止生产环境使用,完成所有高危漏洞修复后再重新部署,(但用于学习熟练操作为主)。
