Giter Club home page Giter Club logo

candledragon's Introduction

CandleDragon

运行&打包

JDK 1.8

打包命令:mvn package

插件页面

左边会初始化显示所有的插件名字,可以根据列表上方的输入框根据:插件名字 插件作者 CNVD/CVE编号 漏洞厂商 漏洞名字 披露时间 关键字进行筛选。

鼠标放置某个插件上面会以悬浮框的形式显示插件的信息

image-20230918094808503

批量选中多个插件右键可以发送到POC页面进行扫描,批量选中不可选择发送到EXP,必须单个选中。

image-20230731113927901

POC可以批量扫描多个插件和多个URL,扫描结果会输出在右边的表格和下发的结果输出区域。

选中EXP后,如果该插件编写了EXP可以跳转到漏洞利用的界面,根据插件定义好的参数进行输入

image-20230731114232032

最后会将输出结果打印到软件结果输出区域

image-20230731125457051

设置页面

自定义代理功能

可设置HTTP代理和Socks代理方便各种网络环境使用,开启代理功能后软件左下角会有代理开启提示,同时原代理参数不可标记,可以关闭后修改参数重新启动。

image-20230918095032329

自定义编码方式

默认使用UTF-8编码,可根据目标站点自行设置,插件中使用Targetinfo#getCharset()方法获取软件设置的自定义编码

image-20230918095053003

自定义超时时间

自定义Http超时时间,默认1000毫秒,插件中使用TargetInfo#getTimeout()方法获取软件设置的自定义超时时间

image-20230918095204930

自定义User-Agent

自定义User-Agent头,默认使用这些随机的User-Agent头,插件中使用TargetInfo#getUserAgent()方法获取软件设置的自定义UserAgent头

image-20230918095219483

DNSLog

可以配合Poc插件定制需要DNSLog的场景。

image-20230918095254958

DNSLog的结果在这里显示

image-20230918095318949

插件编写

目录结构

image-20230731125758549

主要分为插件注册接口实现类 插件信息类 插件POC 插件EXP

插件注册接口实现类

类名必须为PluginRegister,并实现PluginManager接口,需要在下面一次调用doRegister方法传入自己定义好的插件信息类对象。

例:

public class PluginRegister implements PluginManager {
    @Override
    public void registerPlugin(Register register) {
        register.doRegister(new PluginDemo());      //有几个插件就注册几个以此类推
//        register.doRegister(new PluginDemo1());
//        register.doRegister(new PluginDemo2());
    }
}

插件信息

类名任意,但必须实现IPlugin接口,通过调用PluginInfo对象的多个方法自定义插件的信息,还需要关联这个插件对应的POC和多个EXP。

例:

public class PluginDemo implements IPlugin {
    @Override
    public void setPluginInfo(PluginInfo pluginInfo) {

        pluginInfo.setPluginName("插件名字");
        pluginInfo.setPluginAuthor("插件作者名");
        pluginInfo.setVulName("漏洞名");
        pluginInfo.setVulId("漏洞CNVD/cve");
        pluginInfo.setDescription("描述");
        pluginInfo.setVulCategory("漏洞类型");
        pluginInfo.setVulProduct("厂商");
        pluginInfo.setPluginVersion("插件版本");
        pluginInfo.setVulDisclosureTime("披露时间");
        pluginInfo.setVulScope("漏洞适应版本");

        List<Exploit> exploits = new ArrayList<>();     //新建一个用来存放exp的list,如果没有编写EXP可以不用创建EXP列表
        exploits.add(new EXPDEMO());        //有几个exp就添加几个
//        exploits.add(new EXPDEMO1());
//        exploits.add(new EXPDEMO2());


        pluginInfo.addPoc(new POCDEMO());   //添加这个插件的检测POC

        pluginInfo.addExploit(exploits);    //最后将所有的exp列表添加到插件信息,如果没有写EXP可以不用调用此方法
    }
}

POC

类名任意,但必须实现Poc接口,通过TargetInfo对象获取程序前端自定义的参数,通过Result对象将想要输出的信息打印到程序前端显示。

例:

public class POCDEMO implements Poc {
    @Override
    public void doPoc(TargetInfo targetInfo, Result result) {
        targetInfo.getAddress();    //获取前端输入的URL地址
        targetInfo.getCharset();    //获取获取字符编码
        targetInfo.getTimeout();    //获取自定义超时时间
        targetInfo.getUserAgent();  //获取自定义UA头,默认随机


        result.setPocVul(true);     //是否存在漏洞,最后会在扫描结果的表格中显示
        result.setPocVul(false);    
        result.setPocMsg("Poc message");    //Poc扫描结果表格中显示的提示信息
        
        
        result.printFail("");   //打印失败信息
        result.printInfo("");   //打印普通信息
        result.printRaw("");    //打印原始信息
        result.printSuccess("");    //打印成功信息
        result.printError(new Throwable());  //打印 try catch的异常信息

    }

}

EXP

类名任意,但必须实现Exploit接口,setExploitTitle()方法定义程序漏洞利用的标题

image-20230731130825643

通过HelpPlugin对象的createArgs方法创建一个参数对象,最后将多个参数添加到一个List中并返回。

最后doExploit中的argsmap参数可以通过argsmap.get("参数名字")获取上面自定义参数的输入值。

例:

public class EXPDEMO implements Exploit {
    @Override
    public String initInfo() {
        return "该漏洞需要初始化的信息";
    }

    @Override
    public String setExploitTitle() {
        return "xxx插件xxx利用方式";
    }

    @Override
    public List<ArgsInfo> setArgs(HelpPlugin helpPlugin) {
        List<ArgsInfo> argsList = new ArrayList<>();
        ArgsInfo args1 = helpPlugin.createArgs();
        args1.setArgsName("参数名字");
        args1.setDescription("参数描述");
        args1.setDefaultValue("参数默认值");

        ArgsInfo args2 = helpPlugin.createArgs();
        args2.setArgsName("参数名字2");
        args2.setDescription("参数描述2");
        args2.setDefaultValue("参数默认值2");

        argsList.add(args1);
        argsList.add(args2);

        return argsList;
    }


    @Override
    public void doExploit(TargetInfo targetInfo, Map<String, Object> argsmap, Result result) {
        targetInfo.getAddress();    //获取前端输入的URL地址
        targetInfo.getCharset();    //获取获取字符编码
        targetInfo.getTimeout();    //获取自定义超时时间
        targetInfo.getUserAgent();  //获取自定义UA头,默认随机

        argsmap.get("参数名字");    //获取上面自定义的参数名的value
        result.printFail("");   //打印失败信息
        result.printInfo("");   //打印普通信息
        result.printRaw("");    //打印原始信息
        result.printSuccess("");    //打印成功信息
        result.printError(new Throwable());  //打印 try catch的异常信息

    }
}

感谢

感谢 @V1rtu0l

感谢@c0ny1师傅的woodpecker项目https://github.com/woodpecker-framework

candledragon's People

Stargazers

Lynx-1 avatar  avatar  avatar youziyaoyao avatar Rubby avatar 1nhann avatar  avatar charonlight avatar  avatar  avatar ZFYy1 avatar wobenhuaidanyo avatar Pei4AN avatar PayNeXC avatar aGVsbG8 avatar  avatar pystudy avatar  avatar 明天会更好 avatar  avatar  avatar  avatar 痞子宇 avatar  avatar hirak0 avatar asdasd avatar KZTTTTAZ avatar  avatar  avatar  avatar xifenfen avatar Ha1ey avatar Lay0us avatar  avatar thelostworld avatar V1rtu0l avatar  avatar

Watchers

Ha1ey avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.