如何编写POC-基础篇

WordPress Automatic Plugin 任意文件下载漏洞(CVE-2024-27954)(含批量验证poc) WordPress Automatic Plugin 任意文件下载漏洞(CVE-2024-27954) 阅读详情

在开始编写 PoC 之前,深入了解漏洞的特性、触发条件以及潜在影响是至关重要的。只有对漏洞有全面的理解,才能编写出准确率更高的 PoC。

其次,应该充分测试和验证编写的 PoC。确保 PoC 在目标环境中能够可靠地重现漏洞,并产生一致的结果。

此外,及时更新和维护 PoC。随着时间的推移,漏洞的修复和新的检测方式可能会出现,因此,定期检查和更新编写的 PoC,以确保其仍然有效是很有必要的。

在编写 PoC 进行漏洞检测时,难免会遇到误报和漏报的情况,然而,我们可以通过下面的一些有效的方式来降低误报和漏报的发生。

1 . 准确性

对一个确定存在漏洞的网站或靶场编写的 PoC 往往十分容易忽略一些误报场景。编写 PoC 时应该不止局限于只对靶场的测试。

确保 PoC 能够通过唯一确定的标识来判断漏洞是否存在是非常重要的。以下是几种常见的方式来实现这一目标:

  • 关键字匹配:在响应数据包中搜索特定的关键字或字符串,这些关键字通常与漏洞的存在相关。例如,特定错误消息、异常行为或系统返回的特定标识符。如果关键字存在于响应中,可以判断漏洞存在。

  • 特征码识别:根据漏洞的特征码或指纹来识别漏洞。漏洞通常会导致特定的响应模式或标识符,如特定的HTTP响应状态码、HTTP头部。通过匹配这些特征码,可以确定漏洞是否存在。

  • 可预测的变化检测:某些漏洞可能会导致响应数据包中的可预测变化。例如,通过在请求中使用不同的参数值来检测是否存在注入漏洞。通过观察响应数据包的变化,可以确定漏洞是否存在。

一个合理的PoC不应当只使用上面中的一种方法进行判断,应当合理地结合多个条件来进行是否存在漏洞的断言,现在我们就以上的一些判断方式进行展开说明。

关键字匹配

关键字匹配在 PoC 的检测中是十分常见的,但是关键字匹配可能会存在一些问题,我们以 ThinkPHP 为例,使用如下 payload进行检测,随后通过匹配一些 phpinfo页面的关键字来断言漏洞是否存在:

# ThinkPHP5 RCE PoC
s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1

但是如果目标网站的页面本身就是一个打印phpinfo的页面,那么此时就会产生误报。

同样的,很多使用 echo {{randstr(16)}} 随后匹配这串随机字符串也同样会有很大的误报问题,最为常见的情况就是,目标网站将你的输入,原样的输出在返回的body中,此时就会产生一条误报

我们使用 httpbin.org 来进行演示:

图片

和 echo同理的还有一些各种语言的一些打印函数,如 print 等等

特征码识别

特征码识别则更为简单,比如通过判断HTTP响应状态码这种方式是极其不建议的行为,必然会产生误报,十分不建议在 PoC 中只使用状态码进行漏洞是否存在的依据

可预测的变化检测

通过预测结果的方式进行检测,是相对推荐的做法。比如我们已经知道了 123 md5 后的值,那么我们可以通过 echo md5({{randstr(16)}}) 的方式进行漏洞的判断

在这里给出一些有回显可预测变化的一些检测方法

  • 代码执行

  • print({{randint(8)}} * {{randint(8)}}),匹配相乘后的结果

  • print("{{randstr(8)}}" + "{{randstr(8)}}" ),匹配字符串拼接后的结果

  • print(md5({{randstr(16)}})),匹配 md5 后的结果

  • printf("{{randstr(16)}}%%{{randstr(16)}}")实际输出会少一个百分号,检出时只需要匹配 {{randstr(16)}}%{{randstr(16)}}即可

  • 命令执行

  • Linux 下可以使用

  • expr {{randint(8)}} - {{randint(7)}},匹配相减后的数字即可

  • echo aaaa""bbbb,echo aaaa''bbbb,匹配 aaaabbbb 即可

  • echo aaaa\bbbb,匹配 aaaabbbb 即可

  • Windows 下可以使用

  • set /a result={{randint(8)}}-{{randint(7)}} && call echo %result%,匹配相减后的数字即可

  • SQL 注入类型

  • select md5({{randstr(16)}}),匹配 md5 后的结果

  • select concat('{{randstr(8)}}','{{randstr(8)}}'),匹配字符串拼接后的结果

  • 文件读取

  • Linux 下

  • root:.*:0:0:,使用正则进行匹配

2 . 通用性

在编写 PoC 时,确保 Payload或包含的检测代码兼顾各个环境或平台的考虑是很重要的。以下是一些关键原则:

  1. 尝试构建通用的 Payload:尽量编写通用的 Payload,可以在多个环境或平台上使用。这意味着避免使用仅适用于特定版本、配置或目标的代码。通过使用通用的技术和标准协议,可以提高 PoC 的适用性和可移植性。

  2. 考虑常见的安全防护机制:在编写 PoC 时,要考虑到目标环境可能存在的常见安全防护机制,如防火墙、入侵检测系统(IDS),语言本身的防护机制等。确保所使用的 Payload 不会被这些机制拦截或干扰,以提高漏洞检测的成功率。

  3. 无法通用检测时:考虑编写不同平台对应的 Payload分别发送检测。

现在我们就以上的一些编写原则进行展开说明。

构建通用的 Payload

在编写 PoC 时,我们要进行一点的思考,比如,能通过代码执行的漏洞,就不要再通过代码调用系统命令来执行。举例说明如图:

图片

上图是 ThinkPHP 代码执行漏洞,使用 system 去执行命令来进行检测,这种方式存在很多的弊端

  • 不够通用,Windows下和 Linux下可能没有足够通用的命令用于检测,使用 PHP 自带的输出函数加上算数运算来验证,如前文中提出的print、printf

  • 没有考虑安全防护机制,比如 PHP 经常存在的 disable_functions以及一些 WAF 之类的

推荐的检测方式:

图片

这种检测方式更加通用,同时也不容易触发防护机制。

考虑常见的安全防护机制

上一点中也提到过,对于 PoC 的编写,有别于 EXP ,建议点到即止,比如说,一个反序列化漏洞,在 PoC 中,建议选择打印随机字符串来进行检测,或其他的无害化的方式。确保能正常检出漏洞,当 PoC 的检测逻辑足够健壮时,EXP 利用失败,则只需要考虑是不是 Payload 被拦截了,尝试进行对应的一些绕过操作即可。

无法通用检测时

这种情况常见于命令执行、文件读取漏洞的情况,可以根据对应平台分别发送检测 Payload 进行检测,如发送两个检测包,第一个是针对 Windows 的,第二个是针对 Linux 的即可。

通过兼顾各个环境和平台的考虑,编写通用的 Payload 和检测代码,可以提高 PoC 的适用性、可靠性和实用性,从而更有效地进行漏洞检测和验证。

3 . 无害性

在 PoC 检测阶段,遵循无害性原则是很重要的。即使在执行一些敏感操作,如文件上传,我们希望确保这些操作是无害的并不会对目标系统产生不良影响。以下是一种方式来上传一个自删除的文件,以满足无害性要求:

  • 确保编写的PoC不会对目标造成危害。包括但不限于,插入,删除,篡改等等直接或间接产生危害的操作。

  • 对于文件上传类漏洞,请尝试清理PoC测试中产生的测试文件,即在访问该文件后删除自身,例如:

  • php:

<?php echo md5(233);unlink(__FILE__);?>
  • asp:

<%
Response.Write chr(101)&chr(49)&chr(54)&chr(53)&chr(52)&chr(50)&chr(49)&chr(49)&chr(49)&chr(48)&chr(98)&chr(97)&chr(48)&chr(51)&chr(48)&chr(57)&chr(57)&chr(97)&chr(49)&chr(99)&chr(48)&chr(51)&chr(57)&chr(51)&chr(51)&chr(55)&chr(51)&chr(99)&chr(53)&chr(98)&chr(52)&chr(51)
CreateObject("Scripting.FileSystemObject").DeleteFile(server.mappath(Request.ServerVariables("SCRIPT_NAME")))
%>
  • aspx:

<%@Page Language="C#"%>
<%
Response.Write(System.Text.Encoding.GetEncoding(65001).GetString(System.Convert.FromBase64String("ZTE2NTQyMTExMGJhMDMwOTlhMWMwMzkzMzczYzViNDM=")));System.IO.File.Delete(Request.PhysicalPath);
%>
  • jsp

<% out.println(new String(new sun.misc.BASE64Decoder().decodeBuffer("ZTE2NTQyMTExMGJhMDMwOTlhMWMwMzkzMzczYzViNDM=")));new java.io.File(application.getRealPath(request.getServletPath())).delete(); %>
  • jspx:

<jsp:root xmlns="http://www.w3.org/1999/xhtml" version="2.0" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:c="http://java.sun.com/jsp/jstl/core">
<jsp:directive.page contentType="text/html;charset=UTF-8" language="java" />
jsp:scriptlet out.println(new String(new sun.misc.BASE64Decoder().decodeBuffer("ZTE2NTQyMTExMGJhMDMwOTlhMWMwMzkzMzczYzViNDM="))); new java.io.File(application.getRealPath(request.getServletPath())).delete(); </jsp:scriptlet> </jsp:root>

通过采用以上方法,在 PoC 检测阶段,可以实现无害的文件上传,并且在访问上传后的文件时触发自删除操作,既可以验证文件是否上传成功,也可以清理测试文件,确保对目标系统的安全性和完整性没有不良影响。

4 . 随机性

Payload 中不要出现一些固定的字符或者有关任何个人、公司的信息,尽量使用一些随机字符来进行检测,例如一段随机字符串、一段随机字符串的 Hash 值等等,这样做的好处有,提高PoC检测的准确性,以及避免被安全设备特征识别。

  • 避免固定字符和个人信息:确保在编写 PoC 时避免使用固定的字符或与个人、公司相关的信息。这样可以防止泄露敏感信息或暴露特定目标的身份,同时也有助于提高 PoC 的通用性和适用性。

  • 使用随机字符串或哈希值:尽量使用随机生成的字符串或哈希值来构造 Payload。这样可以增加 Payload 的多样性和复杂性,提高对目标系统的覆盖能力,使 PoC 更具准确性。

  • 提高漏洞检测的准确性:通过使用随机字符,可以模拟真实攻击中的变化和随机性。这样可以更全面地测试目标系统的漏洞,提高检测的准确性。避免使用预测性、可被安全设备轻易识别的固定模式。

  • 规避安全设备的特征识别:某些安全设备可能会使用特征识别技术来检测和拦截恶意攻击。通过使用随机字符和随机生成的值,可以规避这些特征识别机制,增加 PoC 的检出率。

  • 增加兼容性和适用性:使用随机性可以使编写的 PoC 在不同环境、平台和版本之间具有更好的兼容性和适用性。随机生成的值可以适应各种情况和配置,从而提高 PoC 的可靠性和实用性。

@Longlone师傅

来源:https://www.freebuf.com/articles/web/386054.html

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

POC编写指南 转载自Medici.Yan,以真实案例为背景,针对当下主流的漏洞来分析漏洞,并且一步一步编写对应的 PoC。 立即下载

相关推荐

osg3.6.5---osgEarth3.2 实现数字地球的加载

目前我在网上找得比较多的是osgearth2.10及以下的版本及加载数字地球的方法,但是我使用的是osg3.6.5和osgEarth3.。但是3.x版本和2.x版本差别很大,主要区别在于2.x有7个主要库,而3.x版本只有osgEarth这一个库。所以,特别记录一下。后面我讲他集成到qt的窗体在上传更新新的代码。1.直接上源码pro文件和cpp文件。

枫影竹韵的博客 1001

如何编写优秀的 Web 漏洞 PoC

POC(Proof of Concept),直译为“概念证明”(漏洞证明)它可能仅仅只是一小段代码,功能也比较简单,只要能够用来验证某一个或者一类漏洞真实存在即可大家都很清楚,如果想要验证一个漏洞,我们需要针对这个漏洞进行一系列的探索和研究。漏洞的研究报告漏洞的 PoC(概念性验证):可以简单理解为一段可以验证一个目标是否存在这个漏洞的程序/代码/脚本漏洞的利用方式:对这个漏洞造成危害的利用和实践为了解决速度问题,可以尝试在漏洞检测之前编写简单的指纹识别,筛除一些不合理的目标POC框架?

大河之犬的博客 1951

Pixhawk RPi CM4 Baseboard 树莓派CM4安装Ubuntu20.04 server 配置ros mavros mavsdk

cm4配置ros mavros连接pixhawk4 Pixhawk RPi CM4 Baseboard

baidu_41704597的博客 2127

一篇文章教你学如何编写poc

POC 指 Proof of Concept(概念验证),是指一个可行性验证,即通过构建一个小型系统或单项功能来验证技术的可行性和正确性。POC 脚本,就是为了验证特定安全漏洞或安全问题而编写的脚本,可用于检测该漏洞是否存在,以及漏洞的利用方式和危害范围。POC 脚本可以帮助安全研究人员快速、简便地检测漏洞,而不需要手动去复现漏洞,减轻了工作难度。POC 脚本可以验证漏洞的利用方式和危害范围,帮助安全研究人员更好地了解漏洞对系统的影响,从而更好地为漏洞修复提供技术支持。

weixin_62369433的博客 4237

frp 内网渗透案例:端口转发 + 二级代理(深入理解 frp 在内网渗透中的技巧)

本文使用 vulnstack7 靶场作为测试环境,解释 frp 内网渗透特殊使用姿势,通过此案例来提高内网渗透能力。接下来的演示环境只做了以下修改。攻击者 vps 的 ip 修改为:192.168.72.162。DMZ 区域的 ubuntu 的 ip1 修改为:192.168.72.129。先引入问题,当我们控制了 DMZ 的 ubuntu 并且拿到第二层网络的 ubuntu 的 rce 后,会出现以下两个问题。如何搭建隧道让 ubuntu 反弹 shell 给攻击者 vps?

anddddoooo的博客 1762

将Matlab程序打包成.exe独立可执行程序

将Matlab程序打包成.exe独立可执行程序,在未安装Matlab的电脑上也能运行Matlab程序。

简简单单的学习笔记,致力于帮助更多前进路上的朋友~ 5万+

解密!第一个开源架构工作台的构建过程

构建一个架构工作台并不是一件容易的事,涉及到了一系列的编译器相关的知识,编辑器相关的知识,当然还有其核心的架构相关的知识。工作台架构图所下所示:在五月底,经历了一系列的磕磕碰碰,我们终于算是 release 了第一个 “可用” 的架构工作台的 alpha 版本(如何定义可用呢?)。在这个早期的 demo 版本里,你可以尝试一下,我们在 ArchGuard 中构建的架构即代...

Phodal's zenthink 1797

手把手教你用 Docker 构建自己的 CentOS 基础镜像

目录一、准备CentOS基础镜像二、撰写Dockerfile三、构建Docker镜像四、生成Docker容器 相信码农们经常会听说:虚拟机将成为历史,Docker才是未来 !!! 事实如此,现在大部分公司都在用 Docker 技术,想拥有自己的 Docker 专属镜像,那么 Dockerfile 就是入门,现在让我们一起来看一下 ------ 构建 Docker 镜像的全过程。 好文章 记得收藏...

Nick.Peng's Blogs 1万+

高质量POC编写指南

通过采用以上方法,在 PoC 检测阶段,可以实现无害的文件上传,并且在访问上传后的文件时触发自删除操作,既可以验证文件是否上传成功,也可以清理测试文件,确保对目标系统的安全性和完整性没有不良影响。随着时间的推移,漏洞的修复和新的检测方式可能会出现,因此,定期检查和更新编写的 PoC,以确保其仍然有效是很有必要的。在编写 PoC 进行漏洞检测时,难免会遇到误报和漏报的情况,然而,我们可以通过下面的一些有效的方式来降低误报和漏报的发生。上一点中也提到过,对于 PoC 的编写,有别于 EXP ,建议。

YakProject的博客 1478

专为AI打造的浏览器:内存占用仅为Chrome的1/9、比Chrome快11倍(Docker部署教程,支持飞牛nas等服务器部署)

🚀 专为AI打造的无头浏览器来了! 用Zig从零构建,内存仅Chrome的1/9,速度快11倍,原生CDP协议支持Docker部署,适合爬虫、自动化测试和AI代理应用。✨

XiaoqiangClub的博客 729

AI视频生成工作流开发:从产品拆解到带货视频全流程实现

本文介绍了一套完整的AI视频生成工作流开发方案,该系统能够自动分析产品素材并生成9个标准化分镜,支持白底图智能替换,最终输出专业带货视频。系统基于Coze平台搭建,整合豆包大模型及多模态生成模型,实现从产品分析、脚本生成到视频合成的全流程自动化。关键模块包括产品特征提取、智能分镜分配、视觉内容生成和用户交互调整,支持手动优化提示词和输出结果。该方案采用模块化设计,结合多种AI模型协同工作,为电商视频制作提供高效解决方案。

huanghm88的专栏 382

PHP文件包含漏洞(利用phpinfo)

漏洞描述 文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。 PHP中引发文件包含漏洞的通常是以下四个函数: 1、include()当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。 2、include_once()功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次。 3、require()只要程序一执行就

Li-D的博客 9171

使用verilog实现基于FPGA的TDC设计

verilog实现TDC 高精度时间数字转换器概述(TDC) 简介: TDC被用于测量时间间隔,应用在物理研究、飞行时间测量领域等。 本设计使用verilog实现并在xilinx和altera的FPGA上均可实现! 设计中使用到下述几个模块,包括FIFO,COUNT等,在xilinx下也使用到了一些原语等。下面有实现的代码和仿真截图等。 顶层模块设计如下: module top( input wire start, input wire stop, input wire clk, output wire T

QQ_778132974的博客 6253

从0到1—POC编写基础篇(一)

在网络安全领域中,POC的概念是指"Proof of Concept",也被称为"攻击验证"。它是指安全研究人员或黑客用来证明某个漏洞、弱点或安全问题存在的实证或演示。网络安全研究人员经常通过开发POC来展示一个漏洞的存在和影响,从而向厂商或用户提供证据,并促使其采取必要的措施来修复或解决该问题。通过POC,研究人员可以演示如何利用漏洞来进行攻击、获取敏感信息或者破坏系统。POC通常包括漏洞的利用代码、相关的技术细节以及攻击成功的证据。

m0_69043895的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

python之poc编写——sql篇

sql注入漏洞漏扫单个网站基础sql扫描多个网站sql基础扫描 poc:即验证漏洞是否存在的脚本,也就是扫描器 兄弟们,开始写扫描器啦 sql注入漏洞漏扫 单个网站基础sql扫描 第一步,当然是写request函数啦。除了时间盲注外,1' and 1=2%23就能判断字符型的sql注入

qq_51796436的博客 6996

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

高质量POC编写指北(非常详细)从零基础到精通,收藏这篇就够了!_如何编写poc

高质量POC编写指北(非常详细)从零基础到精通,收藏这篇就够了!_如何编写poc

喜欢Python编程的程序员柚柚呀 953

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

干货 - Xray POC编写指南,从零基础到精通,收藏这篇就够了!

还在为Xray POC编写头疼?别慌!这篇“食用指南”带你,轻松编写属于你的专属POC!🚀。

Libra1313的博客 1334

从0到1—POC编写基础篇(二)

接着上一篇。

m0_69043895的博客 1030

从0到1—POC编写基础篇(三)

接着上一篇。

m0_69043895的博客 1251

【详细版】高质量POC编写指南,从零基础到进阶,收藏这篇就够了

在开始编写 PoC 之前,深入了解漏洞的特性、触发条件以及潜在影响是至关重要的。只有对漏洞有全面的理解,才能编写出准确率更高的 PoC。其次,应该充分测试和验证编写的 PoC。确保 PoC 在目标环境中能够可靠地重现漏洞,并产生一致的结果。此外,及时更新和维护 PoC。随着时间的推移,漏洞的修复和新的检测方式可能会出现,因此,定期检查和更新编写的 PoC,以确保其仍然有效是很有必要的。

Button12138的博客 845

高质量POC编写指北(非常详细)从零基础到精通,收藏这篇就够了!

在开始编写 PoC 之前,深入了解漏洞的特性、触发条件以及潜在影响是至关重要的。只有对漏洞有全面的理解,才能编写出准确率更高的 PoC。其次,应该充分测试和验证编写的 PoC。确保 PoC 在目标环境中能够可靠地重现漏洞,并产生一致的结果。此外,及时更新和维护 PoC。随着时间的推移,漏洞的修复和新的检测方式可能会出现,因此,定期检查和更新编写的 PoC,以确保其仍然有效是很有必要的。

A1_3_9_7的博客 1174

从0到1—POC编写基础篇(四)

接着上一篇。

m0_69043895的博客 873

sql注入pythonpoc_基于python编写PoC

0x02 SQL Injection poc编写已知CmsEasy 5.5 UTF-8程序存在SQL注入,乌云漏洞中的漏洞细节比较详细(由于wooyun已经暂停访问,故不上链接了)。·首先,我们需要下载其相关源码,进行本地搭建。·阅读漏洞细节,我们得知其url与payload如下:URL:http://xxx.xxx/celive/live/header.phpPayload:xajax=Live...

weixin_39746241的博客 492

简单的poc以及exp编写(入门篇)

本文中主要针对的是Web应用渗透中的漏洞,而与Web应用之间的交互大多是基于HTTP协议的。所以用到python中与HTTP协议相关的一些模块 一、何为POC和EXP POC Proof of Concept中文意思是“观点证明”,是用来检测是否存在漏洞的脚本 EXP Exploit的中文意思是“漏洞利用”,是用来利用该漏洞的脚本 二、基础环境Python3 HTTP 方法 内容 GET 获取资源 POST 传输实体主体 PUT 传输文件 HEAD 获得响应报文首部

LINGOVO的博客 1万+
上一篇: Metasploit渗透技巧---渗透Meterpreter笔记
下一篇: Linux 安全加固
普通网友
博客等级 码龄7年 3834粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值