开发文档怎么编写_PoC 编写指南

5a23fa3acabee1ef507f7d69143760cf.png

什么是 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 开发者提供了极大的便利。

国内 PoC 框架简介

官方的可以去各自的平台看,这里只简要说一下。

  • Beebeeto
    Evi1m0 创办,民间社区。PoC 开发语言为 Python。白帽子互相学习并使用它人的 PoC。2016 年被 Sebug 收购。
    Beebeeto 开发文档地址
  • Sebug-Pocsuite
    早年学安全的人都听过 Sebug 的名号,以前的民间漏洞库,后来被知道创宇收购。Pocsuite 是 Sebug 平台上通用的远程漏洞验证框架,使用 Python 编写 PoC。写 PoC 可以直接兑换实物与现金奖励,兑换比例 1KB = ¥5(这是 RMB 不是日元)。Sebug 收购 Beebeeto 后,更名为 Seebug。
    Pocsuite 开发文档地址
  • Bugscan
    西安四叶草安全驱动的国内首个基于社区的分布式漏洞扫描平台。PoC 在这里也被称作插件。使用 Python 编写 PoC, 要求只能使用 Python2.7 的标准库。写插件有 rank 奖励,可兑换实物奖励,兑换比例 1 Rank = ¥10,商城有个比亚迪秦,看着很诱人啊。
    Bugscan 开发文档地址
  • Tangscan
    Wooyun 社区驱动的针对企业的扫描器,使用 Python 编写 PoC。写 PoC 命中后有汤圆,可参与分红。
    Tangscan 开发文档地址
  • 其它

网络基础

为什么要学网络

安全界不缺乏有一些人连计算机网络是什么都不清楚,但是拿站,渗透一搞一个准。然而像我这种整天把基础知识挂在嘴边的人,拿站的时候照样怂。基础知识在我看来,是种常识,是种工具,不能说不会基础知识的人就一定不能怎么样,我只能说,我建议,我推荐,我支持先从基础学起来,这样在后面的学习当中就会如鱼得水。

需要学什么

对于写 PoC 来说,我们需要的并不是你去把 OSI 7 层模型的每一层都精通,你要精通了所有层的东西,你就不会坐在这里了。

好了,大概说一下我们需要了解哪些,相关的专业知识你可以去百度和Goole。

  • 请求响应配对
  • 域名系统
  • IP 地址
  • TCP 是做什么的
  • HTTP 协议(请重点关注这个,后面很多地方都会用到)

编码基础

编码基础这里不要求你精通, 毕竟一开始就深化了一下 PoC 的概念,他就是一个不完整的程序,所以你只要会一些常用的就 OK, 不要说你不会这种话,不会可以花一点时间来学,放心,根本不需要你达到一个什么样的深度。

那我就大概写一下需要学什么东西了:

  • HTML
    这里不单是看 HTML 语言,更多的要去理解什么是浏览器。你看到的漂亮的不像实力派的网页,在传输的时候是什么样子的,浏览器在接收到响应之后大概做了点什么事。
  • Javascript
    想学 XSS, CSRF 不会这两个可不行。
  • Python
    我们后面写 PoC 会用到,所以这个要必会。这里只需要你会一点点 Python 的语法和一些常用的功能库就够了。
  • SQL
  • 正则表达式
    自动化过程中经常需要自动匹配,不需要精通,但是要多多少少会一些。怎么测试你会了呢?我给你任意一个 wooyun 的漏洞页面,然后你能用脚本把里面的漏洞标题,作者,漏洞提交时间等等信息能够轻松用正则表达式提取出来,呐,这样就 OK 了。

关于 Python 的一些库

  • urllib
  • urllib2
  • requests
  • httplib
  • cookielib
    发送 HTTP 请求的,当然还有一些其他的。
  • urlparse
    处理 url 的
  • re
    正则表达式
  • random
    看名字就知道是生成随机数的
  • hashlib
    md5 算法帮你集成在这里了
  • base64
    base64 编码全家福都在这里
  • socket
    如果你知道 TCP 和 HTTP 的关系的话,你就能理解 socket 和 urllib 的关系了。

文/Medici.Yan

GitHub: https://github.com/Medicean

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值