freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

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

前言

在常见的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 # 哥斯拉
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 公牛先生666 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
公牛先生666 LV.3
这家伙太懒了,还未填写个人描述!
  • 6 文章数
  • 10 关注者
深信服华中天慧战队:哥斯拉二开-Websocket shell
2024-03-15
深信服华中天慧战队:哥斯拉二开-数据库管理
2024-03-12
深信服华中天慧战队:哥斯拉二开-Profile流量自定义
2023-12-11
文章目录