PHP代码审计-eyoucms
字数 1714 2025-08-10 23:41:56
eyoucms PHP代码审计报告与漏洞分析
一、环境搭建
- 进入安装页面
- 输入数据库用户名和密码
- 完成安装后成功登录系统
二、漏洞分析
1. 命令执行漏洞
漏洞位置:更多功能处
漏洞原理:
- 系统对content参数进行了过滤,但过滤规则存在缺陷:
- 内容中不能有
<?php - 内容中不能同时有
<?和?> - 内容中不能有
{eyou:phpxxx - 内容中不能有
{php xxx
- 内容中不能有
绕过方法:
使用<?=短标签形式可绕过过滤
过滤代码:
if (preg_match('#php#i', $content) ||
(preg_match('#<\?#i', $content) && preg_match('#\?>#i', $content)) ||
preg_match('#\{eyou\:php#i', $content) ||
preg_match('#\{php#i', $content)) {
return "模板里不允许有php语法,为了安全考虑,请通过FTP工具进行编辑上传。";
}
漏洞复现:
- 在代码底部插入payload:
<?=exec('whoami'); - 访问该html文件
- 系统将执行whoami命令
2. URL跳转漏洞
漏洞位置:referurl参数
漏洞原理:
- referurl参数通过input()函数过滤后传入redirect()函数
- 未对跳转目标进行严格限制
漏洞复现:
- 进入user目录下功能点
- 登录普通用户后退出
- 将重定向地址设为baidu
- 系统将跳转到百度页面
3. XXE漏洞
漏洞位置:application/home/controller/Index.php中的wechat_return()函数
关键函数:simplexml_load_string()
漏洞原理:
$InputXml参数通过php://input传入- 代码96行、98行存在限制条件,但可绕过:
- 94行不为空
$pay_info['appid']字段不为空$pay_info['appid']的值在payload中
漏洞复现:
- 构造路由:
m=home,c=Index,a=wechat_return - 通过POST传入XML payload
- 设置
$pay_info['appid']的值为1 - DNSlog收到回显,验证漏洞存在
4. 任意文件删除
漏洞位置:del_local()函数中的unlink()
过滤条件:
- 不能删除.php文件
- 删除的文件中不能有phar协议
- 必须为uploads路径
漏洞复现:
- 构造路由:
m=user,c=Uploadify,a=del_local - 传入参数
filenames - 创建测试文件1.txt
- 成功删除该文件
5. SSRF漏洞
漏洞位置:/application/user/controller/Uploadify.php
关键函数:get_headers()
漏洞原理:
$fieldName参数调用saveRemote()函数saveRemote私有函数调用get_headers()获取HTTP主机头信息
漏洞复现:
POST /index.php?m=user&c=Uploadify&a=index&action=catchimage HTTP/1.1
Host: 172.16.0.12:3333
...
Content-Type: multipart/form-data; boundary=182578234523129615573520929892
--182578234523129615573520929892
Content-Disposition: form-data; name="source[]"
Content-Type: image/png
http://hptcybersec.com/ssrf_PoC.jpg
--182578234523129615573520929892--
影响:允许远程攻击者进行信息检测、内网服务器攻击
6. Session泄露
漏洞位置:application/api/controller/Ajax.php:219的get_token函数
漏洞原理:
get_token函数可前台随意调用- 形参中的
$name变量通过HTTP传递 - 涉及两个关键session:
admin_id(存在即可,不验证值)admin_login_expire(需满足减法校验条件)
漏洞复现:
- 前台设置管理员session
- 后台远程插件下载文件包含getshell
- 设置
admin_info.role_id使其小于0 - 设置完三个session后即可进入后台
三、修复建议
-
命令执行漏洞:
- 禁用PHP短标签
- 增加更严格的代码过滤
-
URL跳转漏洞:
- 实现白名单机制限制跳转目标
- 对referurl参数进行严格校验
-
XXE漏洞:
- 禁用外部实体加载
- 对XML输入进行严格过滤
-
任意文件删除:
- 限制文件删除权限
- 实现更严格的路径检查
-
SSRF漏洞:
- 限制访问的内网地址
- 实现URL白名单机制
-
Session泄露:
- 加强session验证机制
- 实现更严格的权限校验
四、总结
eyoucms存在多处安全漏洞,包括命令执行、URL跳转、XXE、任意文件删除、SSRF和Session泄露等高风险漏洞。建议开发者及时修复,用户应及时更新到最新安全版本。