PHP代码审计-eyoucms
字数 1714 2025-08-10 23:41:56

eyoucms PHP代码审计报告与漏洞分析

一、环境搭建

  1. 进入安装页面
  2. 输入数据库用户名和密码
  3. 完成安装后成功登录系统

二、漏洞分析

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工具进行编辑上传。";
}

漏洞复现

  1. 在代码底部插入payload:<?=exec('whoami');
  2. 访问该html文件
  3. 系统将执行whoami命令

2. URL跳转漏洞

漏洞位置:referurl参数

漏洞原理

  • referurl参数通过input()函数过滤后传入redirect()函数
  • 未对跳转目标进行严格限制

漏洞复现

  1. 进入user目录下功能点
  2. 登录普通用户后退出
  3. 将重定向地址设为baidu
  4. 系统将跳转到百度页面

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中

漏洞复现

  1. 构造路由:m=home,c=Index,a=wechat_return
  2. 通过POST传入XML payload
  3. 设置$pay_info['appid']的值为1
  4. DNSlog收到回显,验证漏洞存在

4. 任意文件删除

漏洞位置del_local()函数中的unlink()

过滤条件

  • 不能删除.php文件
  • 删除的文件中不能有phar协议
  • 必须为uploads路径

漏洞复现

  1. 构造路由:m=user,c=Uploadify,a=del_local
  2. 传入参数filenames
  3. 创建测试文件1.txt
  4. 成功删除该文件

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:219get_token函数

漏洞原理

  • get_token函数可前台随意调用
  • 形参中的$name变量通过HTTP传递
  • 涉及两个关键session:
    • admin_id(存在即可,不验证值)
    • admin_login_expire(需满足减法校验条件)

漏洞复现

  1. 前台设置管理员session
  2. 后台远程插件下载文件包含getshell
  3. 设置admin_info.role_id使其小于0
  4. 设置完三个session后即可进入后台

三、修复建议

  1. 命令执行漏洞

    • 禁用PHP短标签
    • 增加更严格的代码过滤
  2. URL跳转漏洞

    • 实现白名单机制限制跳转目标
    • 对referurl参数进行严格校验
  3. XXE漏洞

    • 禁用外部实体加载
    • 对XML输入进行严格过滤
  4. 任意文件删除

    • 限制文件删除权限
    • 实现更严格的路径检查
  5. SSRF漏洞

    • 限制访问的内网地址
    • 实现URL白名单机制
  6. Session泄露

    • 加强session验证机制
    • 实现更严格的权限校验

四、总结

eyoucms存在多处安全漏洞,包括命令执行、URL跳转、XXE、任意文件删除、SSRF和Session泄露等高风险漏洞。建议开发者及时修复,用户应及时更新到最新安全版本。

eyoucms PHP代码审计报告与漏洞分析 一、环境搭建 进入安装页面 输入数据库用户名和密码 完成安装后成功登录系统 二、漏洞分析 1. 命令执行漏洞 漏洞位置 :更多功能处 漏洞原理 : 系统对content参数进行了过滤,但过滤规则存在缺陷: 内容中不能有 <?php 内容中不能同时有 <? 和 ?> 内容中不能有 {eyou:phpxxx 内容中不能有 {php xxx 绕过方法 : 使用 <?= 短标签形式可绕过过滤 过滤代码 : 漏洞复现 : 在代码底部插入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主机头信息 漏洞复现 : 影响 :允许远程攻击者进行信息检测、内网服务器攻击 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泄露等高风险漏洞。建议开发者及时修复,用户应及时更新到最新安全版本。