freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

深信服华中天慧战队:哥斯拉插件开发篇-OA后利用插件
2023-11-13 15:00:17

前言

在常见的HVV项目中。通常在获取OA系统的服务器权限后,会尝试后利用。一般分为如下几个步骤:

1.通过数据库配置文件获取数据库配置信息

2.通过数据库账号密码连接数据库

3.在数据库中通过执行sql语句,获取高权限账号密码

4.将加密的账号密码进行解密,最后再登录OA系统

可以看到,一般来说,正常的后利用会经历上述四个步骤。由于每个OA产品的后利用方式不一样,因此后利用所耗费的时间也不一样。

这时,大家心里都有个需求:有没有一键后利用的插件?连上shell就可以一键利用的那种?

我的答案是:有,但需要开发。

为解决后利用的问题,本文章讲通过以哥斯拉插件的形式来开发后利用插件、

插件开发

创建模板

这里可以根据哥斯拉作者提供的插件模板作为参考,进行修改。也可以自行创建模板进行开发。

参考模板:https://github.com/BeichenDream/PostConfluence

插件开发

创建模板

这里可以根据哥斯拉作者提供的插件模板作为参考,进行修改。也可以自行创建模板进行开发。 参考模板:https://github.com/BeichenDream/PostConfluence

1699858137_6551c6d97e833daa5224a.png!small?1699858137094

插件名定义

在编写代码时,需要注意填写正确的payloadName、Name、DisplayName。可根据实际开发的情况进行修改。

1699858154_6551c6ea7855e4b766fdb.png!small?1699858154063

同时需要加入下面的代码,否则打包后的插件无法加载。

@Override
public void init(ShellEntity shellEntity) {
this.shellEntity = shellEntity;
this.payload = shellEntity.getPayloadModule();
this.encoding = shellEntity.getEncodingModule();
automaticBindClick.bindJButtonClick(this,this);
}

@Override
public JPanel getView() {
return corePanel;
}

1699858235_6551c73bd6e4a79d50548.png!small?1699858235594

界面设计

哥斯拉插件的UI可以通过Swing UI设计器进行可视化设计。由于每个后利用模块的功能点不一样,因此可通过页签进行区分。设计后的界面如下图所示。

1699858252_6551c74c21ce679a44a49.png!small?1699858251685

功能实现

读取数据库配置

以蓝凌为例。数据库配置文件位置为/WEB-INF/KmssConfig/kmssconfig.properties 在实战中,遇到配置文件加密算法有以下三种。

明文存储

少部分情况存在明文存储,无需解密。1699858270_6551c75e0ace5b9327e2d.png!small?1699858269663SM4算法

在蓝凌OA V16中,kmssconfig.properties算法调整为SM4。需要通过第三方工具解密。

1699858313_6551c78921eded2ee28d3.png!small?1699858312891

1699858331_6551c79bd461515bd36e2.png!small?1699858331983

DES算法

部分老版本会采用该算法。也需要第三方工具进行解密1699858342_6551c7a650f68b9a551c2.png!small?1699858341781在插件中,如何精准定位配置文件位置及判断算法并解密呢?

其实可以调用蓝凌OA自带的一些方法。 通过审计,我们发现可以调用com.landray.kmss.sys.config.action#loadKmssConfigProperties方法读取蓝凌OA的配置文件1699858358_6551c7b682ccb2b54373a.png!small?1699858358066通过进一步跟踪,发现该方法会自动定位配置文件位置及自动解密1699858367_6551c7bf8aff86d5aa51b.png!small最后,通过插件读取配置文件的代码如下1699858379_6551c7cb440dfe7260b8e.png!small?1699858379045

Properties p = new Properties();
loadKmssConfigProperties(p);
String databaseUrl = p.getProperty("hibernate.connection.url");
String username = p.getProperty("hibernate.connection.userName");
String password = p.getProperty("hibernate.connection.password");

读取Admin.do密码

以蓝凌为例。admin.do密码文件位置为/WEB-INF/KmssConfig/admin.properties 根据上面“读取数据库配置”的思路。通过审计,定位到com.landray.kmss.sys.config.action#getAdminProperties。该方法可以自动定位配置进行然后进行读取1699858393_6551c7d9572dc044bd279.png!small?1699858393061但要注意的是,该方法没有解密功能,因此我们需要再调用一次解密方法进行解密。 通过进一步调查,发现com.landray.kmss.sys.config.action#doPasswordDecrypt方法可以自动判断算法然后解密。1699858400_6551c7e0068896a371b3e.png!small?1699858399680最后。插件读取admin.do的密码代码如下

Properties p = getAdminProperties();
String password = p.getProperty("password");
try {
password = doPasswordDecrypt(password);

} catch (Exception e){
//password = p.getProperty("password");
}

1699858438_6551c806414e115f6c4d6.png!small?1699858437783

插件测试

获取数据库

1699858452_6551c814b3096ed0a7e23.png!small?1699858452943

获取admin.do密码

1699858459_6551c81b065e5601a78f8.png!small?1699858458579


# OA # 哥斯拉
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录