关于poc脚本的一些问题

什么是 PoC

PoC(全称: Proof of Concept), 中文译作概念验证。在安全界,你可以理解成为漏洞验证程序(本教程中,如无特别说明,默认代表漏洞验证程序),当然你要强行说我说的不对,我肯定支持你,反正我没打算反驳你。和一些应用程序相比,PoC 是一段不完整的程序,仅仅是为了证明提出者的观点的一段代码。因为是一些代码片段,所以到现在都没看到有一本书来讲怎么编写 PoC 的,因为这些东西对于会写代码的人来说,他们会很惊讶分分钟就会了的事为什么还要出本书。

什么是 Exp

Exp(全称: Exploit),中文叫漏洞利用程序。名字上说的已经很清楚了,简单讲,就是一段可以发挥漏洞价值的程序,这话感觉和没说一样。想象一下这样的场景,目标存在一个 SQL 注入漏洞,然后被你知道了,然后你编写了一个程序,通过这个 SQL 注入漏洞,拿到了目标的权限,那么这个程序就是所谓的 Exp 了,当然,如果你没有使用这个漏洞,它就这么放着,那么这个漏洞,对你来说可以认为是没有价值的。

关于 PoC/Exp 的几个误区

  1. 写 PoC 要会 Python.

    这句话,毒害了很多人。PoC 的存在,只有一个目的:证明漏洞存在。而关于 PoC 的形式,或者说代码实现方式,你想用什么方式,就用什么方式。我们推荐 Python, 只是说安全界用 Python 的人居多,你写的东西能被更多人看懂,还有 Python 这门语言的灵活,类库强大等特性,给编写的人提供了很大便利。

    你可以这么理解啊,你要找工作了,你爸妈都推荐你去考公务员,你能说要工作就只能考公务员这种话吗?

  2. PoC 就是 Exp.

    这话也不知道是谁第一个说的。其实严格来讲,PoC 和 Exp 是两个东西,你要强行说两个是一个,那你当我没说好了。在我看来,PoC 就是用来证明漏洞存在的,而 Exp 是用来利用这个漏洞的,在很多情况下,我们知道了漏洞存在,却不知道具体怎么利用,编写一个 PoC 非常简单,而编写一个 Exp 是相当有挑战性的。

    PoC 和 Exp 的区别就有点像你发现了家门口的超市的锁有问题,你给人家证明锁有问题和通过锁有问题这个现象偷到超市的钱 这是两码事。

什么是漏洞靶场

漏洞靶场(Vulnerability Firing Range), 就是跑着有漏洞的程序的测试机器。一般用虚拟机来实现,当然现在也有用 Docker 来实现的,反正就是给你一个已经复现了漏洞的环境让你测试漏洞的东西。

我们在学习 PoC 编写的时候,推荐自己搭建靶场来测试,不推荐直接使用互联网上跑着业务的机器,因为现实环境安全配置情况往往要比靶场复杂的多,不利于新手学习,这些都不是重点,重点是万一你不小心把人家机器搞坏了,你说这锅谁来背?你背的起吗?

PoC 编写流程

这里我们不讨论未公开的漏洞,对于一个已经公开的漏洞,PoC 的编写流程是这样的:

  1. 根据漏洞详情,寻找受影响版本程序。

    如果是一些 CMS, 可以去 对应的官网下载历史版本程序,有些漏洞作者不会提具体版本号,那你就要根据漏洞作者提交的时间来判断了。当然除了官方网站之外,还可以去 github 上寻找源码,这些个官网都喜欢把历史版本的程序删除掉,善用 github 上的 tag, branch, release 功能,上面有你要的所有版本。

  2. 搭建对应漏洞靶场

    这里其实没什么好说的,下载了人家的源码之后,在你的虚拟机里面配置好环境就行了,还能顺便学一下运维的一些皮毛知识。

  3. 手动复现漏洞

    根据漏洞详情,手动将整个流程走一遍,熟悉下复现条件,比如使用 GET 还是 POST 请求,需不需要登陆,返回的页面会是什么样子的,我提交不同的参数,会不会出现其它结果,如果漏洞不存在的话,会出现什么样的结果......

    磨刀不误砍柴功,熟悉了这些之后,后面编码实现简直就是分分钟的事,因为一开始我们就说过了,PoC 就是一小段代码。

  4. 写代码

    手动复现了一次漏洞之后,分析漏洞证明步骤,根据自己的实际测试情况一步一步写代码,用我的话来说,写代码,其实就是用程序模拟人工操作的每一个步骤,如果你上一步认真做了,这一步只是经验问题,本教程将在后面丰富你在这方面的阅历。

  5. 测试 PoC

    其它测试和编码基本都是在同时进行的,为什么要单独提出来讲呢,我们在写 PoC 的时候,除了在存在漏洞的靶机上测试我们的代码,还要在不存在漏洞的站点测试,一般为说,一个优秀的 PoC 在后期测试的时候要求对 10000 个目标测试,误报不能超过 10 个。

PoC 与 PoC 框架

PoC 框架就是一个批量管理,调度 PoC 的程序。因为是框架,要批量调度,那就要求 PoC 在编写的时候要遵守一些规范,这些规范常见的有:

  1. 入口规范

    考虑到批量使用 PoC 的调度情况,统一入口框架调用该 PoC 的时候会非常之方便。这个就需要根据具体的框架的调度要求来看了,都有文档的,看一下就会了。

  2. API 规范

    API 是该框架对一些基础类库的封装,比如说框架提供了一些网络请求工具。这些封装有什么好处呢?我还是举例子来说明,比如某次扫描,调用了 1000 个 PoC 去扫描目标主机了,假设这个扫描任务中有一部分是需要登录的,而有一些的作者在编写的时候忘记在 PoC 中接收用户自定义的 Cookie 了,那么此时就会因为接收不到 Cookie 而导致请求不成功。那么在使用了框架的情况下,即使在忘记了添加这些字段的情况下,框架也会自动将 Cookie 添加进请求中,为 PoC 开发者提供了极大的便利。

原文地址:https://www.cnblogs.com/rab3it/p/11610501.html

时间: 2024-11-08 13:53:55

关于poc脚本的一些问题的相关文章

解决POC脚本对多种URL的自适应问题

在批量POC的过程中,我们采集到的URL状态往往是不同的. 因此我们需要对URL进行统一处理,从而确保POC脚本能够准确的验证每个URL 我们以实际漏洞举例说明,并给出我的批量POC解决方案. 漏洞示例 Atlassian Confluence 5.8.17 之前版本中存在漏洞,该漏洞源于spaces/viewdefaultdecorator.action和admin/viewdefaultdecorator.action文件没有充分过滤'decoratorName'参数.远程攻击者可利用该漏洞

漏洞应急响应之批量poc验证

1.文章难易度 [★★★] 2.文章知识点: python,poc验证; 3.文章作者: 野驴 4.本文参与 i春秋学院原创文章奖励计划,未经许可禁止转载! 0x01前言 当互联网爆出高危漏洞,或者团队内部挖到0day,无论甲方还是乙方都需要了解漏洞的影响面,这个时候就需要poc批量验证,包括网络安全爱好者对"批量"这个词一定不会陌生,我们今天就来聊聊"批量"那些事.目前,有很多优秀的poc批量验证工具,比如我之前的帖子(https://bbs.ichunqiu.c

CVE2016-8863libupnp缓冲区溢出漏洞原理分析及Poc

1.libupnp问题分析: (1)问题简述: 根据客户给出的报告,通过设备安装的libupnp软件版本来判断,存在缓冲区溢出漏洞:CVE-2016-8863. (2)漏洞原理分析: 该漏洞发生在upnpSDK库中,upnp/src/gena/gena_device.c.文件的create_url_list函数中,由于对输入数据未进行有效检验,造成对缓冲区溢出,可以导致服务器拒绝服务或崩溃:攻击者也可以精心制造一个攻击URL,通过subscribe request的callback header

【漏洞分析】Heartbleed 2014-0160漏洞Poc及规则分析

HeartBleed Poc脚本 1.发送client hello接收serverhello 之后发送心跳再解析获取的数据信息 2.发送client hello时直接带上心跳消息,然后解析服务器返回信息 #!/usr/bin/python # Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford ([email protected]) # Modified by Derek Callaway ([email protec

libUpnp缓冲区溢出、拒绝服务等漏洞分析

该漏洞存在于UPnP?设备的便携式SDK中,也叫做 libupnp.这个库是用来实现媒体播放(DLAN)或者NAT地址转换(UPnP IGD).智能手机上的应用程序可用这些功能播放媒体文件或者利用用户的家庭网络连接到其他的设备. 事实上,这些漏洞早在2012年12月份就已经修复了,然而仍然有很多app在使用存在漏洞的老版本SDK.统计发现有547个应用还在使用老版本的 libupnp,其中326个可从谷歌Play store中下载到,包括Netflix和腾讯QQ音乐.这些都是非常流行的应用,用户

【转】linux /centos 中OpenSSL升级方法详解

相关软件下载地址 Apache:http://httpd.apache.org/ Nginx:http://nginx.org/en/download.html OpenSSL:http://www.openssl.org/ openssl-poc 附件说明 PoC.py : 漏洞利用测试PoC脚本 showssl.pl:OpenSSL动态库版本检测脚本 安装OpenSSL步骤 由于运营环境不同,以下过程仅供参考.openssl属于系统应用,被较多应用依赖,由于环境不同等因素,请先在测试环境进行

Q&A丨关于 Python 入门的一些问题

Q:用 python 能够做什么?解决什么问题? A1:理论上来说,计算机能做什么,python 语言就能让它做什么,也即 python能做什么. 数值计算.机器学习.爬虫.云相关开发.自动化测试.运维自动化.web开发.poc脚本.网络编程等 A2:根据TIOBE的公开资料,Python 作为世界上第五大编程语言,应用十分广泛. 从Web后台开发到大数据处理:从自动化测试到运维开发Python都是兵器谱的前三名. Web开发:国内著名的豆瓣.知乎都是用 Python 作为主力语言编写的网站,在

Python——简介

1.Python社区 Pypi:https://pypi.org/GitHub:https://github.com/StackOverFolw:https://stackoverflow.com/开源中国:https://www.oschina.net/TIBOE编程语言社区:http://www.tiobe.com/tiobe-index// 2.Python历史 Python第一个公开发行版发行于1991年. 3.Python应用 * Web编程 * 系统管理任务 * 数学处理(数据分析.

OpenSSL重大漏洞-Heartbleed之漏洞利用脚本POC讲解

OpenSSL Security Advisory [07 Apr 2014] ======================================== TLS heartbeat read overrun (CVE-2014-0160) ========================================== A missing bounds check in the handling of the TLS heartbeat extension can be used t