泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

admin 2023年5月22日11:16:11评论161 views字数 2252阅读7分30秒阅读模式


起因

长亭最近发了一个漏洞预警《在野1day风险提示|泛微Ecology信息泄露&前台任意用户登录漏洞》,预警文章链接为https://mp.weixin.qq.com/s/ZvbXbtcpq8EslNKZ2hHW_w,本着学习研究的态度,对漏洞可能涉及的逻辑进行了粗略研究。



分析
长亭在预警文章中放出了最新版本的xray,更新后的xray可以对该漏洞进行远程检测,检测命令如下
./xray ws --poc poc-yaml-ecology-ofslogin-aul --url http://example.com
在本地运行上述命令

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

通过wireshark即可抓取到xray验证该漏洞所发出的请求数据

/mobile/plugin/1/ofsLogin.jsp?syscode=syscode&timestamp=2&gopage=3&receiver=test&loginTokenFromThird=

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

既然定位到了具体文件,那么接下来就可以进行分析了

打开泛微ecology9 安装目录下的mobile/plugin/1/ofsLogin.jsp文件,如下

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

首先在19-23行,在访问该mobile/plugin/1/ofsLogin.jsp这个url时,会首先接收传输过来的syscode、receiver、timestamp、loginTokenFromThird、gopage这几个参数

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

然后在26行,调用AESCoder.encrypt方法对参数进行AES加密,AESCoder.encrypt方法的第一个参数为receiver+timestamp,调用一个Prop.getPropValue方法获得一个返回值并与接收到的syscode值进行拼接,得到的返回值作为第二个参数,AES加密得到的数据赋值给loginTokenFromThird2变量

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

接下来从36行开始进行登录逻辑的验证,在36-39行,判断接收到的loginTokenFromThird与生成的loginTokenFromThird2值是否相等,如果不相等,则登录失败,并调转到/login/Login.jsp。只有loginTokenFromThird与loginTokenFromThird2相等才能继续执行下面的登录逻辑。

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

继续往下,当loginTokenFromThird与loginTokenFromThird2相等时,首先会将接收到的syscode值作为条件参数在数据表ofs_sendinfo中进行查询,查询的字段为hrmtransrule。当查询到的hrmtransrule为空时(也就是查询条件syscode值在ofs_sendinfo表中不存在),将hrmtransrule赋值为“1”;当查询到的hrmtransrule不为空时,进行52-63行的判断。定义了一个变量rule,默认值为"loginid",若hrmtransrule为"0",则将rule赋值为"id";若hrmtransrule为"1",则rule赋值为"loginid",后面的逻辑同理。

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

将上述判断逻辑执行过后,rule变量的值作为条件字段在数据表HrmResource中查询,而条件参数则为接收到的receiver值

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

此时笔者直接在本地测试环境数据库中执行select * from HrmResource;SQL语句查了一下,发现笔者的环境中HrmResource是个空表

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

也就是说在笔者的环境中,后面的逻辑是无法继续执行的

接下来到人事->新建人员中新建一个人员

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

新建完成后,再次查询,可以看到HrmResource表中已经有数据

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

故笔者猜测,只有HrmResource用户表中存在数据时,该漏洞才有可能被利用。

继续后面的逻辑,后面的逻辑就比较简单了,从查询到的结果中获取id并赋值给userid,然后根据userid生成认证凭证,也就是session,完成认证后就跳转到用户指定的页面,也就是接收到的gopage参数

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

分析到这里,整个登录逻辑已经非常清晰了,关键在两个条件:

1.loginTokenFromThird需要与loginTokenFromThird2相等,loginTokenFromThird可控,loginTokenFromThird2则是根据可控的参数调用内部加密函数生成,且加密函数的入参不变时,loginTokenFromThird2也是固定的;

2.HrmResource用户信息表中必须要有数据。



测试

在HrmResource表中loginid其实就是登录用户名,比如默认系统管理员的loginid就是sysadmin,想要接近loginid的判断逻辑有两个方法,第一种是syscode值在表中不存在,第二种是根据syscode查到的hrmtransrule必须"1",显然第一种更好利用一些。接下来就可以构造参数生成loginTokenFromThird2,然后将得到的loginTokenFromThird2值原封不动作为loginTokenFromThird参数值即可完成任意用户登录的利用。

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

美创科技旗下第59号实验室,专注于数据安全技术领域研究,聚焦于安全防御理念、攻防技术、威胁情报等专业研究,进行知识产权转化并赋能于产品。累计向CNVD、CNNVD等平台提报数百个高质量原创漏洞,发明专利数十篇,团队著有《数据安全实践指南》


原文始发于微信公众号(第59号):泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月22日11:16:11
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   泛微ecology9 ofsLogin.jsp 信息泄露与前台任意用户登录漏洞分析https://cn-sec.com/archives/1746476.html

发表评论

匿名网友 填写信息