OKLite 1.2.25 几处getshell审计分析
字数 1649 2025-08-26 22:11:22

OKLite 1.2.25 多处Getshell漏洞审计分析报告

系统概述

OKLite是一套极简企业站系统,主要面向展示型企业网站用户。该系统最初是从PHPOK程序精简而来,在同等配置下,OKLite速度优于PHPOK达30%以上。需要注意的是,此版本在2018年已停止维护。

系统链接:https://www.phpok.com/oklite.html

系统架构分析

路由机制

  • 系统有三个入口(前端、接口、后台),都是通过action()方法进行初始化
  • 不同入口传入指定方法中执行动作
  • 示例:访问http://127.0.0.1/admin.php?c=upload&f=save会调用framework\admin\upload_control.php中的save_f方法

输入过滤机制

  • 获取GET、POST和COOKIE数据都通过get()方法进行过滤处理
  • 主要过滤逻辑:
    • 对所有内容进行addslashes()处理
    • 调用format()方法对\ ' " < >进行实体化转换
    • 使用stripslashes()xss_clean()进行XSS防护

漏洞分析

1. 后台任意文件上传漏洞(module_control.php)

漏洞验证步骤

  1. 在模块管理处导入模块,上传包含恶意文件的ZIP压缩包
  2. 上传后访问另一个地址完成解压
  3. 恶意文件会被解压到data\cache目录

漏洞分析

  • 处理文件:framework\admin\upload_control.php
  • 关键方法:zip_f()调用zipfile()方法
  • 默认解压路径:data/cache/
  • 漏洞点:
    • 上传ZIP文件时未对压缩包内容进行安全检查
    • 解压操作直接使用ZipArchivezip_open,未过滤恶意文件

相关代码

public function zip_f() {
    $rs = $this->lib('upload')->zipfile('upfile');
    if($rs['status'] != 'ok'){
        $this->json($rs['error']);
    }
    $this->json($rs['filename'],true);
}

2. 后台任意文件上传漏洞(plugin_control.php)

与module_control.php的区别

  • ZIP压缩包必须包含一个文件夹,文件夹中再包含恶意文件
  • 解压路径为WWW\plugins

漏洞验证步骤

  1. 在插件中心上传符合格式的ZIP文件
  2. 上传后访问另一个地址完成解压

漏洞分析

  • 处理文件:framework\admin\plugin_control.php
  • 关键方法:unzip_f()
  • 漏洞点:
    • 虽然检查了ZIP包结构,但仍未对文件内容进行安全检查
    • 解压操作同样直接使用系统函数

相关代码

public function unzip_f() {
    // 检查ZIP文件结构
    if(!$info[1]){
        $this->json(P_Lang('插件打包模式有问题'));
    }
    // 直接解压到plugins目录
    $this->lib('phpzip')->unzip($this->dir_root.$rs['filename'],$this->dir_root.'plugins/');
}

3. 前台SQL注入导致Getshell

漏洞验证步骤

  1. 在在线留言处上传图片并抓包
  2. 修改文件名为注入payload:
    1','pf3qm0js3gb2s5f33r7lf14vl3','30'),('1',0x7265732f3230313931302f30342f,'shell.jpg','jpg',0x7265732f3230313931302f30352f7368656c6c2e706870,'1570161575','abc
    
  3. 上传成功后获取图片ID和路径
  4. 再次上传图片,使用replace功能替换指定ID的文件
  5. 恶意PHP文件会被写入res\201910\05目录

漏洞分析

  • 处理文件:framework\www\upload_control.php
  • 关键方法:save_f()replace_f()
  • 漏洞点:
    • 文件名未经过滤直接用于SQL语句,导致INSERT型注入
    • 通过注入可以控制数据库中的文件路径和名称
    • replace_f()方法信任数据库中的文件路径,导致任意文件写入

相关代码

// 文件名直接用于SQL
$tmpname = $_FILES[$input]["name"];
$title = str_replace(".".$ext,'',$tmpname);

// replace_f方法信任数据库记录
$this->lib('file')->mv($rs["filename"],$old_rs["filename"]);

漏洞修复建议

  1. 文件上传漏洞修复

    • 对ZIP压缩包内容进行严格检查
    • 限制解压文件类型,禁止解压PHP等可执行文件
    • 使用白名单机制限制解压路径
  2. SQL注入漏洞修复

    • 对文件名进行严格过滤
    • 使用参数化查询替代字符串拼接
    • 对数据库中的文件路径进行二次验证
  3. 通用建议

    • 更新到最新版本或更换其他维护中的系统
    • 实施严格的文件上传策略
    • 对后台操作进行权限强化

总结

OKLite 1.2.25存在多处严重安全漏洞,攻击者可通过:

  1. 后台模块/插件管理功能上传恶意ZIP文件getshell
  2. 前台留言板结合SQL注入和文件替换功能getshell

这些漏洞都源于对用户输入过度信任和缺乏必要的安全检查,建议用户立即采取防护措施。

OKLite 1.2.25 多处Getshell漏洞审计分析报告 系统概述 OKLite是一套极简企业站系统,主要面向展示型企业网站用户。该系统最初是从PHPOK程序精简而来,在同等配置下,OKLite速度优于PHPOK达30%以上。需要注意的是,此版本在2018年已停止维护。 系统链接:https://www.phpok.com/oklite.html 系统架构分析 路由机制 系统有三个入口(前端、接口、后台),都是通过 action() 方法进行初始化 不同入口传入指定方法中执行动作 示例:访问 http://127.0.0.1/admin.php?c=upload&f=save 会调用 framework\admin\upload_control.php 中的 save_f 方法 输入过滤机制 获取GET、POST和COOKIE数据都通过 get() 方法进行过滤处理 主要过滤逻辑: 对所有内容进行 addslashes() 处理 调用 format() 方法对 \ ' " < > 进行实体化转换 使用 stripslashes() 和 xss_clean() 进行XSS防护 漏洞分析 1. 后台任意文件上传漏洞(module_ control.php) 漏洞验证步骤 在模块管理处导入模块,上传包含恶意文件的ZIP压缩包 上传后访问另一个地址完成解压 恶意文件会被解压到 data\cache 目录 漏洞分析 处理文件: framework\admin\upload_control.php 关键方法: zip_f() 调用 zipfile() 方法 默认解压路径: data/cache/ 漏洞点: 上传ZIP文件时未对压缩包内容进行安全检查 解压操作直接使用 ZipArchive 或 zip_open ,未过滤恶意文件 相关代码 2. 后台任意文件上传漏洞(plugin_ control.php) 与module_ control.php的区别 ZIP压缩包必须包含一个文件夹,文件夹中再包含恶意文件 解压路径为 WWW\plugins 漏洞验证步骤 在插件中心上传符合格式的ZIP文件 上传后访问另一个地址完成解压 漏洞分析 处理文件: framework\admin\plugin_control.php 关键方法: unzip_f() 漏洞点: 虽然检查了ZIP包结构,但仍未对文件内容进行安全检查 解压操作同样直接使用系统函数 相关代码 3. 前台SQL注入导致Getshell 漏洞验证步骤 在在线留言处上传图片并抓包 修改文件名为注入payload: 上传成功后获取图片ID和路径 再次上传图片,使用 replace 功能替换指定ID的文件 恶意PHP文件会被写入 res\201910\05 目录 漏洞分析 处理文件: framework\www\upload_control.php 关键方法: save_f() 和 replace_f() 漏洞点: 文件名未经过滤直接用于SQL语句,导致INSERT型注入 通过注入可以控制数据库中的文件路径和名称 replace_f() 方法信任数据库中的文件路径,导致任意文件写入 相关代码 漏洞修复建议 文件上传漏洞修复 : 对ZIP压缩包内容进行严格检查 限制解压文件类型,禁止解压PHP等可执行文件 使用白名单机制限制解压路径 SQL注入漏洞修复 : 对文件名进行严格过滤 使用参数化查询替代字符串拼接 对数据库中的文件路径进行二次验证 通用建议 : 更新到最新版本或更换其他维护中的系统 实施严格的文件上传策略 对后台操作进行权限强化 总结 OKLite 1.2.25存在多处严重安全漏洞,攻击者可通过: 后台模块/插件管理功能上传恶意ZIP文件getshell 前台留言板结合SQL注入和文件替换功能getshell 这些漏洞都源于对用户输入过度信任和缺乏必要的安全检查,建议用户立即采取防护措施。