通达OA任意用户登陆分析
2020-07-03 10:52:43 Author: xz.aliyun.com(查看原文) 阅读量:520 收藏

ninefighter@猎户攻防实验室

前言
4月20日,阿里云漏洞预警,通达OA任意用户登录漏洞,链接如下:https://help.aliyun.com/noticelist/articleid/1060277736.html

准备

  • 某盘下载的TDOA11.0.exe
  • 文件对比工具(DiffMerge等)
  • zend解密小工具

部署
1.直接安装TDOA11.0.exe,版本号为11.0.190911
2.打开“通达应用服务控制中心”启动服务,测试web是否能正常访问
3.使用OfficeAuto更新程序到11.4.200323 ,备份webroot文件夹
4.更新到11.4.200417,拷贝webroot

5.原始的webroot中文件使用zend加密压缩,此处需要使用zend解密工具批量解密为正常的PHP文件

补丁对比
1.对比更新前后的webroot文件

2.如图更新对$UID进行初始化,并判断是否为0

由此可见UID是个关键参数,筛选文件对比结果,很清晰判断出更新补丁中哪些文件有相关逻辑

代码分析
重点对更新文件进行分析,使用编辑器导入web项目,分析版本11.4的代码逻辑。
一、Logincheck_code

$UID有POST请求参数获取,访问该URL共需两个参数:UID & CODEUID;
继续向下分析,中间的判断过程,仅对用户登陆安全登陆限制进行了判断,在如下位置后,直接存入对应UID的SESSION。

二、跟踪判断如何构造CODEUID参数
更新文件中,login_code去掉了一些方法,从内容看出如果login_codeuid为空,访问该php时,会有getUniqid()返回CODEUID。

三,构造Logincheck_code访问,获取登陆cookie
1.获取code_uid

2.构造POST请求,获取cookie,默认情况下,UID=1是admin账号,为系统管理员。

  1. 使用Cookie访问系统

修复建议
1.未更新补丁前,备份logincheck_code.php,将该文件移除webroot目录;或使用WAF等安全产品,禁止logincheck_code.php访问
2.更新官方补丁
总结
1.需要验证历史版本的从11.0更新时,可以逐步版本更新,备份webroot文件夹,验证对应版本是,更换webroot即可
2.第一次尝试对比补丁去验证漏洞,对于更新点比较少的应用,可以很快定位
3.登陆验证类功能点,只做状态判断,尽量不要附带其他功能


文章来源: http://xz.aliyun.com/t/7952
如有侵权请联系:admin#unsafe.sh