【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

admin 2024年6月3日09:57:26评论27 views字数 6949阅读23分9秒阅读模式

前言

以下实例讲解仅作技术分享,无教唆指导任何网络犯罪行为,因为传播利用本文所提供信息造成的任何结果,均由使用者本人承担责任,公众号作者不为此承担任何责任!

架构

初步了解完整的javafx架构,因为之前学过javaweb,所以javafx摸起来轻车熟路。按个人理解写了个思维导图如下:

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

架构思路上和javaweb是差不多的,甚至比javaweb还要简单一些(因为他不像javaweb分那么多的层:controller->service->model->dbutil(mybatis封装)->databse字段映射类)。这里的架构思路则轻松的多: 分为两类逻辑,一类是一键检查,一类是根据用户选择和填入参数进行检查攻击。

一键检查:

  1.主类加载Main.fxml后将后端接口映射到gui界面,当用户选择一键检查则传递vulname=ALL,触发的是MainControler从Util工具包中取出HashMap进行遍历取出相应的名字的值,也就是映射的Check接口实现类的check重写方法,每种漏洞的check根据自身校验流程不同需要重写。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

有点绕,我这里用一句话阐述下: 用户填入的参数传递->存储到.properties文件中->MainControlle读入->Util中的相关其他Check类(比如UrlCheck)进行参数校验->传给Tools类调用Check方法new一个exp类实例->交由实例对象进行check调用校验。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

用户选择漏洞验证模式:

流程跟上方的差不多,不同的是他不用遍历所有的HashMap,而是进行匹配用户选择的漏洞模型就好。

我这里还是画个总的一个架构图方便说清楚,项目架构如下。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

--根目录    -exp       --各种exp实现类(每一种类对应一个poc验证)    -util        --Config        --Tools        --urlCheck        --CheckVul    -MainApplication    -MainController-module-info.java    -resource        -Main.fxml        -my.png

以下的讲解可能要涉及到一定的java基础和javaweb的一种分层mvc理念,不太了解的师傅们可以通过菜鸟教程去学,网上很多教程。

我这里从一个流程,两组架构,三个层面来讲解:

一个流程:

Main.fxml由主类MainApplication启动->生成前端gui->用户进行交互传参指定动作->参数交付给.properties配置文件->动作映射MainController中的对应处理函数->处理函数提取配置文件中传参进行行为动作->根据行为动作指定不同的Tools类->根据不同的Tools类返回实现CheckVul接口的exp类实例—>函数调用验证漏洞->反馈结果

两组架构:

     --gui前端:

        ---Main.fxml作为根生成模板文件->参数传递给.properties配置文件存储->后端多层处理->反馈结果

    --后端:

       ---Maincontroller获悉动作,从配置文件读入参数->根据Tools类映射攻击模式返回对应实例化类->实例化攻击类进行载荷攻击

三个层面:

主类:Config、MainController、MainApplicaton贯穿整个gui生命周期,各司其职,Config起一个参数传递与存储功能,MainApplicaton渲染模板,MainController映射动作

Exp类: 各司其职,一个类对应一个poc校验

Util类: 抽象接口用于类多态化,参数校验过滤,参数处理,漏洞映射模式

上手实践

前端ui设计

这个需要去下载一个SceneBuilder ,网上IDEA配置SceneBuilder的教程很多,新建一个项目,社区版的idea可能需要自己手动配置,网上也有教程。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

组织架构如下。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

运行完主类长这样。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

继续使用SceneBuilder进行前端界面设计。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

这里先加一块画布,方便我们gui工具前端页面绘制。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

我们先绘制完了再来逐一讲解,它是个树形结构。

层次结构(最简单的)    -画布 AnchorPane       -MenuBar(用于用户点击介绍)       -TabPane(类型HTML中iframe)          -Tab1(功能点1)             -Text(说明)              -TextFiled(参数传递框)              -Button(动作触发器)              -Textarea(结果回显)

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

绘制好后我们进入MainApp运行一下,这里漏洞选择之所以没下拉列表是因为我们还没去写入(这个需要后端代码来完成)。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

这里下拉列表不能直接在.fxml中去添加,我们需要去Controller控制器去写。首先.fxml中增加fx:id="随便写个名字",方便辨识。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

此时回到控制器MainController。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

别忘记给Main.fxml匹配controller。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

这时候就很帅了。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

CheckVul接口

在开发中我们常常用到接口类,这样方便进行每个实现类重写塑形,漏洞Check同样如此,有RCE、文件上传、文件任意下载、重置密码等等那么多接口,难道我们需要一个漏洞对应一个类吗?那样太麻烦,JAVA的面向对象优势此时凸显出来了。。。

这里先写个CheckVul接口,放到Util工具软件包(根据个人习惯)

package com.seeyon.seeyonexploit.util;import java.net.URL;public interface CheckVul {    boolean isVul=false;    boolean checkTarget(String protocol,String host,int port,String path) throws Exception;    boolean checkUrl(URL url) throws Exception;    String getFile(URL url,String filepath) throws Exception;    String upLoadFile(URL url,String Cookie,String filepath,String fileContent) throws Exception;    String remoteCmdExec(URL url ,String VPS ,String cmd)throws Exception;    String printInfo();}

上面定义了一个布尔属性isVul来回返是否存在漏洞,这里初始化0,同时定义了各种漏洞校验利用抽象方法,checkTarget用于实现校验漏洞(针对重置漏洞因为只用发一次包即可知道成功与否,所以合并)。其他的抽象方法就是RCE、文件上传、文件下载等,最后printInfo方法打印相关利用和回返结果信息。

Exp类

接着新建一个exp软件包,用于写exp漏洞验证类,exp里面的类都要去implements CheckVul接口重写实现其底层方法。需要注意的是因为是从config文件中获取的,我们要先把Config类写好。Config类中的核心方法为init,用于初始化一个配置文件的读取和处理机制,保存相关.properties文件后让PropertiesConfiguration类propConfig实例读取。

private static void init(String propertiesFile) {try {    File f = new File(propertiesFile);    if (!f.exists())        f.createNewFile();    propConfig = new PropertiesConfiguration(propertiesFile);    propConfig.setReloadingStrategy((ReloadingStrategy)new FileChangedReloadingStrategy());    propConfig.setAutoSave(autoSave);} catch (ConfigurationException | java.io.IOException e) {    e.printStackTrace();}}

接着写exp类,其实和写python脚本发包过程是差不多的,只是这里用的是读入.properties文件获取参数。

private static final Config config=Config.getInstance("config.properties");String loginName=config.getStringValue("loginName");String loginPass=config.getStringValue("password");

模拟发包的代码简单抓个图,因为和python的代码逻辑没啥区别。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

Tools包

写Tools包是为了联动exp类还有就是参数过滤,以及封装我们的业务调用逻辑。

urlCheck

用于校验用户目标输入的协议、ip、端口校验,毕竟OA部署在web服务上,我们去校验http和https协议即可,并提取相关信息。

package com.seeyon.seeyonexploit.util;import java.net.MalformedURLException;import java.net.URL;public class urlCheck {    public URL urlCheck(String url){        int port = 80;        String ip = "127.0.0.1";        String protocol = "http";        String path;        //获取url        try {            URL u = new URL(url);            protocol = u.getProtocol().toLowerCase();            ip =u.getHost();            if(protocol.equals("https")){                port = 443;            }            if(u.getPort() != -1){                port = u.getPort();            }            path = u.getPath();            return u;        }catch (MalformedURLException e) {            System.out.println("error");            Tools.alert("错误","不是一个有效的url");            return null;        }    }}

这里最主要的是这两个函数:alert(),CheckVul()。

CheckVul()->根据读入的字符串匹配漏洞模式,并返回一个exp类实例-> 如果没有匹配上模式,直接返回null对象了
public static CheckVul expolit(String vulname){        CheckVul cv=null;        switch (vulname)        {            case "phoneLogin_ResetPasswd":                CheckVul payload1=new phoneLogin_ResetPasswd();                return (CheckVul)payload1;        }        return cv;    }
alert()->设置一个弹窗显示内容的函数  ->第一个是弹窗警告类型设置的标题字符串,第二个弹窗中显示的内容
public static void alert(String header_text, String content_text) {    Alert alert = new Alert(Alert.AlertType.WARNING);    // 点 x 退出    Window window = alert.getDialogPane().getScene().getWindow();    window.setOnCloseRequest((e) -> {        window.hide();    });    alert.setHeaderText(header_text);    alert.setContentText(content_text);    alert.show();}

Maincontroller联动

每个gui前端的画布都可以指定给对应的controller进行交付参数和动作。使用fx:controller="controller包路径"进行指定。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

然后来到前端的交互界面我们可以看到有很多的标签。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

fxml标签中<button>表示动作交互,需要用onAction进行指定激活函数(我这里是resetAttack,当然是指定Controller类中的函数)。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

其他标签就是获取用户输入的,要与main.fxml文件中的fx:id名称保持一致。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

核心就是tools类实例化exp类,并向实例对象传递相关参数。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

成果展示

这里的工具预计会在我们的公开交流群开始内测,V1.0版本我已经写好了,内测时间大概在八月份。

关于运行

需jdk17环境,项目以及依赖全部打包完成,只需点击start.bat即可运行。

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

漏洞归纳总览

工具整合的漏洞共计21个,各个模块如下:

用户操作:        "phoneLogin_ResetPasswd任意用户密码重置",        "thirdpartyController.do管理员cookie获取",        "M1-server index管理员身份访问",        "M3-mobile_server用户session获取",        "rest_token接口相关漏洞"       "ucplogin audit-admin管理员登录" 文件上传操作:        "致远A6 uploadForm任意文件上传",        "致远互联FE协作办公平台uploadAccessory任意文件上传",        "致远OA ajaxdo_post_saveExcelInBase(新)任意文件上传",        "致远OA ajaxdo_post_formulaManager(老)任意文件上传",        "致远OA v8.0sp2 wpsAssistServlet任意文件上传"信息泄露操作:        "致远OA A6 DownExcelBeanServlet敏感信息泄露",        "致远OA A6 initDataAssess敏感信息泄露",        "致远互联FE协作办公平台GUID sql注入",        "致远A8-V5协同管理软件 V6.1  ReportServer目录遍历",        "致远OA A8-V5 Webmaildo任意文件读取",        "致远 A6 operaFileActionController任意文件读取"        "致远OA getAjaxDataServlet XXE任意文件读取"远程命令执行操作:        "M1-Server RCE(仅作whoami验证)",        "致远OA maindo-fastjson反序列化(支持dnslog验证,低版本漏洞)",        "M3-Mobile fastjson反序列化(仅支持whoami验证)"

Tips

文件上传操作漏洞,工具内置了哥斯拉免杀马以及冰蝎子免杀马上线,对于低java版本的服务器仅作jsp解析验证。

远程命令执行部分漏洞暂不提供自主命令,payload需要经过yoserial以及其他编码脚本处理,较为复杂,仅作whoami验证。对于fastjson类型漏洞,可作dnslog解析。

信息泄露漏洞集成了各类造成直接信息泄露的漏洞,包含sql注入、任意文件读取、任意文件下载、未授权等。

验证

部分老洞互联网上已经很少有漏洞资产,如果未成功会反馈信息!

用户操作

---phoneLogin_ResetPasswd任意用户密码重置

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

--thirdpartyController.do管理员cookie获取

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

--M1-server index管理员身份访问

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

--M3-mobile_server用户session获取

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发 --rest_token接口相关漏洞

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发--ucplogin audit-admin管理员登录

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

文件上传操作

--"致远A6 uploadForm任意文件上传"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

-- "致远互联FE协作办公平台uploadAccessory任意文件上传"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

-- "致远OA ajaxdo_post_saveExcelInBase(新)任意文件上传"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

-- "致远OA ajaxdo_post_formulaManager(老)任意文件上传"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

-- "致远OA v8.0sp2 wpsAssistServlet任意文件上传"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

敏感信息获取

--- "致远OA A6 DownExcelBeanServlet敏感信息泄露"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

---"致远OA A6 initDataAssess敏感信息泄露"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

---"致远互联FE协作办公平台GUID sql注入"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

---"致远A8-V5协同管理软件 V6.1  ReportServer目录遍历

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

---"致远OA A8-V5 Webmaildo任意文件读取"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

---"致远 A6 operaFileActionController任意文件读取"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

---"致远OA getAjaxDataServlet XXE任意文件读取"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

远程命令执行

---"M1-Server RCE"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

--- "致远OA maindo-fastjson反序列化(支持dnslog验证,低版本漏洞)"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

--- "M3-Mobile fastjson反序列化"

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

空间测绘

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

密文解密

新增数据库配置文件中密文解密处理模块,能够为我们提供横向时的OA数据库连接池密码。

密文如下格式

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

解密后

【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

这里是分享干货的Gat4by,欢迎各位师傅加群一起沟通交流,分享自己的网络安全之路

原文始发于微信公众号(Gat4by):【红队基础 武器开发】一篇文章上手JAVAGUI武器开发

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月3日09:57:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【红队基础 武器开发】一篇文章上手JAVAGUI武器开发https://cn-sec.com/archives/2807276.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息