某微前台登录绕过+后台组合拳RCE
字数 1974 2025-11-21 23:31:17
某微前台登录绕过与后台RCE漏洞分析教学文档
前言
本文档详细分析某微系统存在的两个关键漏洞:前台登录绕过和后台远程代码执行(RCE)。这两个漏洞组合使用可以实现从权限绕过到完全控制系统的完整攻击链。
一、前台登录绕过漏洞
漏洞复现步骤
第一步:获取security.key
- 向系统发送一个DWR请求,目标是获取
security.key - 请求路径为
/dwr/call/plaincall/xxx形式 - 系统通过反射调用
LoadTemplateProp方法读取配置文件 - 从配置文件中获取
security.key值
第二步:加密key获取sessionKey
- 使用获取到的
security.key进行加密处理 - 访问
/mobilemode/mobile/server.jsp - 反射调用
com.api.mobilemode.web.mobile.service.MobileEntranceAction类 - 通过
@ActionMapping注解调用getAppMeta方法 - 最终调用
getTokenKey()方法返回sessionKey
第三步:获取有效会话
- 调用
ImgFileDownload这个servlet - 使用上一步获取的
sessionKey替换请求中的mToken - 获取
ecology_JSessionid - 用
ecology_JSessionid替换浏览器自动获取的会话ID - 刷新页面即可进入系统后台
漏洞分析
DWR接口处理机制
- 所有DWR接口请求都由
DWRServlet类的doPost方法处理 - 调用
handle方法处理请求 urlMapping包含以下值:call/plaincall- 其他DWR相关路径
- 匹配到
call/plaincall时调用对应的handle方法
security.key获取过程
- 调用
execute方法前security.key不存在 - 通过反射调用
loadTemplateProp方法 - 最终通过反射Filter获取配置文件内容
- 配置文件路径和内容未在文中明确给出,但包含
security.key值
会话密钥获取机制
- 利用
mobilemode/mobile下的server.jsp - 反射调用
MobileEntranceAction类(继承自BaseMobileAction) - 通过
@ActionMapping注解调用getAppMeta方法 - 最终调用
getTokenKey()方法返回sessionkey
二、后台RCE漏洞
漏洞复现步骤
第一步:添加恶意方法
- 访问
outter_encryptclassOperation.jsp - 设置
operation=add - 传递参数
encryptname=org.mvel2.sh.ShellSession - 将恶意类和方法插入数据库
第二步:获取添加方法的ID
- 查询刚刚添加的
encryptclass记录 - 通过接口获取该记录的ID
- 记录ID将用于后续执行
第三步:执行Java代码写入WebShell
- 设置
operation=test - 使用获取的ID作为参数
- 系统会反射调用之前添加的类和方法
- 注意:直接传递的payload会被转义,需要绕过RASP防护
- 最终使用byte数组方式写入文件
漏洞分析
添加恶意方法过程
operation参数为add时进入添加逻辑- 获取
encryptname参数(恶意类名) isDialog参数设为0,使datatype不为1- 进入任意反射调用分支
- 将
org.mvel2.sh.ShellSession类及其exec方法插入数据库
执行恶意代码过程
operation参数为test时进入执行逻辑- 根据ID查询之前添加的
encryptclass记录 - 从
OutterAction类获取ID datatype不为1时进入else分支- 通过反射调用添加的类和方法
- 需要绕过RASP防护(使用byte数组方式写入文件)
三、漏洞组合利用
- 首先利用登录绕过漏洞获取后台访问权限
- 然后利用后台RCE漏洞执行任意代码
- 最终实现完全控制系统
四、防御建议
- 限制DWR接口的访问权限
- 对反射调用进行严格检查和过滤
- 修复
security.key的泄露问题 - 对
outter_encryptclassOperation.jsp进行权限校验 - 实施RASP防护防止恶意代码执行
- 更新系统到最新版本
五、总结
本文详细分析了某微系统的两个高危漏洞,展示了从权限绕过到远程代码执行的完整攻击链。这两个漏洞的组合利用具有极高的危险性,可导致系统完全被控制。建议用户及时更新系统并实施相应的防护措施。