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.phpunserialize/index.php/upload/index.phpwrapper/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.php 2. 对输入参数进行严格验证 3. 设置配置文件权限为644 4. 使用更安全的序列化方式存储配置

修复建议汇总

紧急(严重)

  1. VULN-001, VULN-010:立即移除或严格限制命令执行和eval功能
  2. VULN-004, VULN-008, VULN-012:修复文件包含、变量覆盖和反序列化漏洞
  3. VULN-011:使用参数化查询修复SQL注入
  4. VULN-015:立即禁用任意文件写入功能

重要(高危)

  1. VULN-002, VULN-007:修复HTTP头注入和邮件注入
  2. VULN-003, VULN-009:加强文件访问控制
  3. VULN-013:加强文件上传验证机制
  4. VULN-014:修复任意文件读取漏洞
  5. VULN-017:加固安装脚本安全性

常规(中危)

  1. VULN-005, VULN-006:实现输出编码,防止XSS攻击
  2. VULN-016:修复反射型XSS漏洞

整体风险评估

风险极高 - 该项目存在严重的安全问题,多个漏洞可导致服务器被完全控制。建议立即停止生产环境使用,完成所有高危漏洞修复后再重新部署,(但用于学习熟练操作为主)。