当前位置: 首页 > news >正文

企业微信iPad协议端强制拉群漏洞深度分析

正常一次最多邀请40人进群在这里插入图片描述
超过40人的拉群,会变成邀请,需要对方同意在这里插入图片描述
新版本修复了漏洞,但还是可以用老版本进行强制拉群

虽然官方也做了版本过低的限制,但还是有办法绕过

要么修改版本号或者登录几天新版本,之后就可以登录老版本

关键是,新版本的修复漏洞的方案并不彻底

深入研究发现更严重的漏洞,最新版本也能强制拉群

而且这个漏洞是Duilib框架层面的,影响的不只是拉群老版本强制拉群漏洞
1、正常情况

点击主界面的添加群成员在这里插入图片描述
会弹出一个选择用户的界面

再去点主界面的添加群成员

选择用户的界面还是同一个在这里插入图片描述
2、异常情况

工作台-客户群-前往查看客户群-添加群成员

点多少次就会出现多少个选择用户的界面在这里插入图片描述
分析漏洞背后的原因
父界面的句柄
企业微信的界面框架是Duilib

弹出子界面之后,还能点击父界面

第一反应是创建子界面没有传父界面的句柄

拦截创建界面的函数Create,发现都有传父界面的句柄

1、正常情况在这里插入图片描述
2、异常情况在这里插入图片描述
好玩的是,正常和异常情况的两个选择用户界面可以同时出现

因为“工作台-客户群-前往查看客户群”这一步,创造新界面的时候没有传父窗口句柄在这里插入图片描述
调用堆栈
既然都传了父界面的句柄,那差异可能是代码逻辑不一样

继续拦截创建界面的函数Create,看调用堆栈有什么差异

1、正常情况

调用堆栈有DispatchMessageW,并且窗口事件是0x403

0x403代表的是自定义消息,说明创建子界面的异步的在这里插入图片描述
2、异常情况

调用堆栈有WndProc,并且窗口事件是0x202

说明是鼠标弹起之后,直接同步地创建子界面在这里插入图片描述
窗口属性
正常情况异步创建子界面,但父界面没响应

异常情况同步创建子界面,但父界面有响应

都有父窗口句柄,说明正常情况额外加了逻辑

用spy++看一下父界面窗口的样式属性

1、正常情况

创建子窗口之前在这里插入图片描述
创建子窗口之后

多了WS_DISABLED,因此父界面没响应在这里插入图片描述
2、异常情况

创建子窗口之前在这里插入图片描述
创建子窗口之后

没有WS_DISABLED,因此父界面有响应在这里插入图片描述
漏洞的原因就定位到了:异常情况,父窗口的样式因为没有WS_DISABLED导致能被点击多次

最新版本利用这个原理,正常情况点击添加群成员,代码去掉WS_DISABLED,可以被点击多次在这里插入图片描述
没有WS_DISABLED是最终结果,好奇代码层面到底是哪里出问题

对SetWindowLong下断点,看下是不是异常情况少了这个逻辑

发现正常情况和异常情况都没有命中SetWindowLong这个函数

影响WS_DISABLED的API还有EnableWindow,继续下断点

确实正常情况会调用EnableWindow,异常情况则不会

EnableWindow对应在Duilib里面是ShowModal在这里插入图片描述
问题就出在:异常情况没有调用ShowModal,导致父窗口没有锁定

但因为异常情况是同步创建子窗口,如果直接调用ShowModal会进入新的消息循环,同一线程的父窗口消息循环会被阻塞,自己维护一下EnableWindow会好一些

不过就像前面说的,正常情况有调用ShowModal,去掉WS_DISABLED还是能强制拉群

想要保证窗口的唯一性,还是得在逻辑代码上加判断,不能只是依赖Duilib框架本身的限制

http://www.dtcms.com/a/267228.html

相关文章:

  • Scrapy进阶封装(第四阶段:中间件设置,动态UA,ip代理池)
  • 【STM32实践篇】:GPIO 详解
  • 【深度学习新浪潮】基于扩散模型的图像编辑加速方法
  • 传输层 udptcp
  • 【性能优化与架构调优(二)】高性能数据库设计与优化
  • 【科普】Keil5软件使用教程、小技巧学习笔记:11个知识点。DIY机器人工房
  • 【数据结构】排序算法:归并与堆
  • Python入门Day4
  • Cortex-M 异常处理的 C 实现、栈帧以及 EXC_RETURN
  • 操作符详解(上)
  • 深入解析Redis 7.0中每种数据类型的底层实现
  • 【Qt】QStringLiteral 介绍
  • 2025最新Telegram快读助手:一款智能Telegram链接摘要机器人
  • 深入理解微服务中的服务注册与发现
  • 《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
  • 云原生微服务间的异步消息通信:最终一致性与系统容错的架构实战
  • 供应链管理学习笔记4-供应链网络设计
  • 前端-CSS-day1
  • QT中的网络通信
  • LLM:位置编码详解与实现
  • 深层神经网络:原理与传播机制详解
  • java的注解和反射
  • JVM的位置和JVM的结构体系
  • 交互式剖腹产手术模拟系统开发方案
  • 【openp2p】学习3:【专利分析】一种基于混合网络的自适应切换方法、装 置、设备及介质
  • C# 事件(事件访问器)
  • vue中添加原生右键菜单
  • [特殊字符]全面解锁远程运维新时代:CRaxsRat v7.4 工具实用指南(附推荐资源)
  • Oracle 高级 SQL 查询与函数详解:多表连接、子查询、聚合、分析函数
  • 冒泡和快速排序的区别