环境配置
l 系统:Winserver2019
l 数据库:MySQL5.7.26
l JDK:java 1.8.0_371
l 复现版本:ecology9_V10.45
源码分析
在全增量补丁包
WEB-INF/myclasses/weaver/security/rules/ruleImp/
SecurityRuleOfcLogin.class中:
首先对路径做了判断,在38行获取transferE9文件里的secretkey的值,如果secretkey=u6skkR,就会提示密钥不安全,更改密钥。
确定漏洞在ofsLogin.jsp并进行分析:
从request中获取所需要的参数。之后调用AESCoder.encrypt()进行AES加密并赋值给loginTokenFromThird2。
该加密函数的第一个参数是recevier+timestamp,第二个参数是syscode+Prop.getPropValue();(recevier,timestamp,syscode是从请求包获取用户可控,Prop.getPropValue()参数的值在根目录下WEB-INF/prop/transferE9.properties中)
然后开始进行登录认证
判断
loginTokenFromThird与loginTokenFromThird2是否相等,
如果不相等就跳到”loginl/Login.jsp”登陆页面,否则接收syscode作为条件在表ofs_senndinfo进行SQL语句查询,查询的hrmtransrule如果为空,就将hrmtransrule的值赋为1。
当hrmtransrule=1时,rule的值就是loginid。
再往下看,来到第64行:
将rule作为条件带入表HrmResource中进行SQL语句查询。也就是查询loginid的值为前面从request中传入的receiver参数时的结果。若有结果才会进入if语句,所以在SQL查询的语句必须有结果才可以进入到if中。
将在HrmResource表中查询到的id赋给userId,根据userId生成session,此时登录认证结束。完成认证后就会成功跳到gopage(也就是自己定义)的页面。
至此分析完成。
流程最关键的条件:一是loginTokenFromThird与loginTokenFromThird2要相等。
只有
loginTokenFromThird与loginTokenFromThird2相等,才会进入else分支,执行SQL查询跳到gopage页面。二是表HrmResource里必须有数据。
漏洞复现
当直接访问时会跳转到login.jsp页面
分享文章,私信获取相关代码学习资料
公众号:
刑天攻防实验室
扫码关注 了解更多内容
原文始发于微信公众号(刑天攻防实验室):泛微 E-cology ofsLogin.jsp 任意用户登录漏洞分析及复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论