公牛先生666
- 关注
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

前言
在常见的HVV项目中。通常在获取OA系统的服务器权限后,会尝试后利用。一般分为如下几个步骤:
1.通过数据库配置文件获取数据库配置信息
2.通过数据库账号密码连接数据库
3.在数据库中通过执行sql语句,获取高权限账号密码
4.将加密的账号密码进行解密,最后再登录OA系统
可以看到,一般来说,正常的后利用会经历上述四个步骤。由于每个OA产品的后利用方式不一样,因此后利用所耗费的时间也不一样。
这时,大家心里都有个需求:有没有一键后利用的插件?连上shell就可以一键利用的那种?
我的答案是:有,但需要开发。
为解决后利用的问题,本文章讲通过以哥斯拉插件的形式来开发后利用插件、
插件开发
创建模板
这里可以根据哥斯拉作者提供的插件模板作为参考,进行修改。也可以自行创建模板进行开发。
参考模板:https://github.com/BeichenDream/PostConfluence
插件开发
创建模板
这里可以根据哥斯拉作者提供的插件模板作为参考,进行修改。也可以自行创建模板进行开发。 参考模板:https://github.com/BeichenDream/PostConfluence
插件名定义
在编写代码时,需要注意填写正确的payloadName、Name、DisplayName。可根据实际开发的情况进行修改。
同时需要加入下面的代码,否则打包后的插件无法加载。
@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;
}
界面设计
哥斯拉插件的UI可以通过Swing UI设计器进行可视化设计。由于每个后利用模块的功能点不一样,因此可通过页签进行区分。设计后的界面如下图所示。
功能实现
读取数据库配置
以蓝凌为例。数据库配置文件位置为/WEB-INF/KmssConfig/kmssconfig.properties 在实战中,遇到配置文件加密算法有以下三种。
明文存储
少部分情况存在明文存储,无需解密。SM4算法
在蓝凌OA V16中,kmssconfig.properties算法调整为SM4。需要通过第三方工具解密。
DES算法
部分老版本会采用该算法。也需要第三方工具进行解密在插件中,如何精准定位配置文件位置及判断算法并解密呢?
其实可以调用蓝凌OA自带的一些方法。 通过审计,我们发现可以调用com.landray.kmss.sys.config.action#loadKmssConfigProperties方法读取蓝凌OA的配置文件通过进一步跟踪,发现该方法会自动定位配置文件位置及自动解密
最后,通过插件读取配置文件的代码如下
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。该方法可以自动定位配置进行然后进行读取但要注意的是,该方法没有解密功能,因此我们需要再调用一次解密方法进行解密。 通过进一步调查,发现com.landray.kmss.sys.config.action#doPasswordDecrypt方法可以自动判断算法然后解密。
最后。插件读取admin.do的密码代码如下
Properties p = getAdminProperties();
String password = p.getProperty("password");
try {
password = doPasswordDecrypt(password);
} catch (Exception e){
//password = p.getProperty("password");
}
插件测试
获取数据库
获取admin.do密码
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)