某知名OA高版本getshell思路(附部分脚本) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

某知名OA高版本getshell思路(附部分脚本)

盛邦安全 行业 2022-07-26 13:57:10
99031
收藏

导语:本文以曾经研究过的通达OA11.9版本为例,阐述在高版本通达中如何利用通达自身的特性来getshell。文中涉及的所有漏洞都是笔者自研和首发,大多数已在最新版的通达OA12.0中修复,本文只是分享一下挖掘这些漏洞的思路和过程。很多时候我们想拿到权限,不一定非要通过某个牛逼的漏洞,组合利用一些特性也能带来意想不到的效果。

0x01 前言

通达OA作为国内最主流的三大OA之一,经常参攻防演练的小伙伴一定非常喜欢这套系统的漏洞。历史上通达OA报出过很多高危漏洞,也曾经被人吐槽安全水平不高。但是经过这么多年的沉淀,现在通达OA的安全水平已经有了显著的提高。

本文以曾经研究过的通达OA11.9版本为例,阐述在高版本通达中如何利用通达自身的特性来getshell。文中涉及的所有漏洞都是笔者自研和首发,大多数已在最新版的通达OA12.0中修复,本文只是分享一下挖掘这些漏洞的思路和过程。很多时候我们想拿到权限,不一定非要通过某个牛逼的漏洞,组合利用一些特性也能带来意想不到的效果。

0x02 获取普通用户权限

历史很多通达OA的漏洞都是未授权或者越权,包括高危的SQL注入或者文件上传。目前较新版本的通达对于越权的问题处理的比较好,绝大多数文件都是需要登陆之后才能访问的。所以我们不再局限于寻找未授权访问的文件,而是寻找方便的用户口令爆破方式。

第一个很重要的tips是,通达OA安装之后的默认密码是空,这一点尤其重要。实战环境中能遇到的通达OA的很多弱口令都是空。如果用户要修改口令,则必须满足“8-20位,必须同时包含字母和数字”(低版本的通达OA没有复杂度限制),如图2.1所示。

1658808192130116.png

图2.1 通达OA修改口令的要求

直接从通达OA的登陆口来爆破虽然没有验证码,但是却是有登陆次数错误的限制,而且有前端的RSA加密。但是这两个限制都是可以绕过的。

1)通达OA11.9在登录处默认使用了RSA的加密传输,但是修改参数encode_type=0,就可以明文传输密码了;

2)通达OA11.8默认10分钟只能输出3次密码,但是由于获取的IP是从X-Forwarded-For中获取的,所以可以通过该字段无限制爆破。

另外,为了更好的提高爆破密码的效率,配合另一个找回密码的接口,可以用于探测用户名是否存在。如图2.2所示。


1658808461166532.png

图2.2 通过找回密码的接口判断用户名是否存在

为了更好的利用整个弱口令爆破的过程,编写了一个自动化的爆破脚本,具有下面的功能。文末附脚本下载方式,使用方式如图2.3所示。

▶自动发现系统存在的用户名

▶指定进程数,对用户名进行密码爆破

▶指定用户名,只对指定的用户名进行爆破

▶支持对中文用户名进行爆破

▶支持基于存在用户名的相关密码爆破,比如用户名张三,则密码为zhangsan123

1658808533362493.png

图2.3 通达OA自动爆破脚本

0x03 普通用户提权

通过上面的弱口令爆破的思路,我们大概率已经获取目标相关的一个普通用户权限。普通用户可以登陆系统,但是还是不能拿到服务器权限,我们需要对普通用户进行提权。

未授权的SQL注入漏洞很少,但是登陆之后的SQL注入漏洞就很多了。在通达OA11.9版本中存在很多后台的SQL注入漏洞,但是我们需要首先绕过通达的全局的安全过滤,如图3.1所示。

1658808591103287.png

图3.1 通达OA的全局SQL注入防御

这个SQL注入其实就是原来的80sec,很多其他的CMS也使用过,网上也有关于80sec的绕过方式,基本的思路就是通过特殊的方式引入单引号来进行绕过,如下所示。

id=@`'` union select 1,2,3 from user -- '

但是在11.9版本的通达中已经对响应的绕过方式进行了修复,修复代码如图3.2所示。首先会把所有转移之后的引号替换为空,然后再把反引号中的引号替换为空。这样我们就没办法再用上面的方式来绕过WAF了。

1658808631189721.png

图3.2 通达OA修复80sec的漏洞

那么现在的情况下,还能不能利用通达OA的SQL注入漏洞呢?答案是肯定的。仔细阅读阅读通达OA的全局注入防护函数sql_injection,函数会禁止SQL语句中使用注释,禁止使用联合查询,禁止使用常见的注入关键字。但是不会禁止使用bool盲注,如图3.3所示。

1658808668170830.png

通达OA11.9版本在普通用户权限下,还是有很多SQL注入的漏洞。这里给出一个示例,其他的注入读者可以自己再去找。定位到漏洞文件/module/appbuilder/user_select/query.php,如图3.4所示。

1658808700239207.png

图3.4 因为通达OA全局变量的特性导致SQL注入漏洞

因为这里的注入有诸多限制,所以用SQLMAP跑不出来,我自己写了一个脚本来跑这种注入(文末附脚本下载方式)。运行如图3.5所示。

8.png

图3.5 使用注入脚本注出数据

这样我们可以拿到admin对应的hash值,但是并不是所有admin的hash都可以解密。还有哪些用户是可以帮助我们拿到服务器权限的呢?要能拿到服务器权限,用户需要有硬盘管理的权限,具体到数据库中需要满足下面的条件。

select concat(byname,0x23,password) from user where user.user_id in (select byname from user_function where user_func_id_str like 0x252c37372c25 and user_id != 0x61646d696e) and user.not_login=0 order by user_id desc limit 0,1

在上面的自动化脚本中我已经实现了指定注出具有“硬盘管理”权限用户的功能,稍微改一点就可以直接用了。

0x04 获取服务器权限

登录一个刚才获取用户。来到知识管理 - 网络硬盘设置,如图4.1所示。

1658808785685122.png

图4.1 网络硬盘设置

最开始这里面是空的,新建一个共享目录。由于通达OA11.9增加了策略,不允许设置的目录中包含wwwroot所在的目录。定位文件

/general/system/netdisk/new/submit.php,如图4.2所示。

1658808801479512.png

图4.2 网络硬盘设置限制

我们不能添加带wwwroot的目录,但是我们可以添加wwwroot对应的根目录,默认情况下通达OA WEB根目录是安装在D:/myoa/wwwroot/。所以我们可以添加D:/的网络硬盘,我本地是装在C盘,所以添加对应C盘的网络硬盘,如图4.3所示。

1658808822367637.png

图4.3 添加C:///的网络硬盘

配置这个共享目录的权限,主要是自己要能上传文件,查看目录结构 权限设置 - 批量权限设置。在授权人员中加上自己。

1658808841457361.png

图4.4 为新增加的网络硬盘配置权限

现在就可以浏览C:/的根目录了。

1658808872163151.png

图4.5 网络硬盘配置中找到网站根目录

找到网站根目录,对应的wwwroot目录下面。点击单个上传。抓包。

1658808897929523.png

图4.6 通过网络硬盘上传文件

但是上传的时候还是会报错。

15.png

图4.7 网络硬盘上传文件报错

这主要是由于inc/utility_file.php文件中,对上传文件的路径做了限制。如果上传路径中包含了wwwroot,然后又没有attachment,就不允许上传,如图4.8所示。

1658808933174512.png

图4.8 上传文件要求上传文件必须在attachment目录

绕过方式就是,我们自己在某个字目录下面创建一个attachment目录。比如在inc下面创建目录attachment。

然后再到这个目录上传文件,如图4.9所示。

1658808950136766.png

图4.9 在自建的attachment目录上传文件

这是后上传抓包,直接上传1.png是可以的了。但是上传php还是不可以。修改上传的后缀为 1.php .(0x88对应的ascii)。直接在hex里面修改就可以了,如图4.10所示。 

18.png

图4.10 通过在文件名末尾增加0x88对应的ascii可以绕过上传黑名单检测

现在我们的目录文件1.php就在下面的路径了/inc/attachment/1.php

但是通达11.9版本修复了Wscript.Shell执行命令的方式,怎么执行命令是另一个问题了。这是通达11.9版本disable_functions的函数列表disable_functions = exec,shell_exec,system,passthru,proc_open,show_source,phpinfo,popen,dl,eval,proc_terminate,touch,escapeshellcmd,escapeshellarg

这里和以前第一个不同的点是没有禁用assert了,所以,我们可以构造一个一句话木马,但是这个一句话有很大的缺陷,我们并不能通过这个一句话来执行系统命令。如何执行系统命令呢?肯定是有办法的,留给大家思考一下。

0x05 总结

通达OA的代码量很大,很乱,甚至一套系统竟然是用了多个不同的开发框架,虽然最近系统修复了很多的漏洞,但是仔细分析还是有一些利用思路。一键getshell是很难的,但是组合拳getshell还是有一定的可能性。

如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务