什么是 PoC
PoC(全称: Proof of Concept), 中文译作概念验证。在安全界,你可以理解成为漏洞验证程序,和一些应用程序相比,PoC 是一段不完整的程序,仅仅是为了证明提出者的观点的一段代码
什么是 Exp
Exp(全称: Exploit),中文叫漏洞利用程序。名字上说的已经很清楚了,简单讲,就是一段可以发挥漏洞价值的程序,这话感觉和没说一样。想象一下这样的场景,目标存在一个 SQL 注入漏洞,然后被你知道了,然后你编写了一个程序,通过这个 SQL 注入漏洞,拿到了目标的权限,那么这个程序就是所谓的 Exp 了.
POC与EXP的区别
PoC 和 Exp 是两个东西,PoC 就是用来证明漏洞存在的,而 Exp 是用来利用这个漏洞的,在很多情况下,我们知道了漏洞存在,却不知道具体怎么利用,编写一个 PoC 非常简单,而编写一个 Exp 是相当有挑战性的。
PoC 编写流程
根据漏洞详情,寻找受影响版本程序
如果是一些 CMS, 可以去 对应的官网下载历史版本程序,有些漏洞作者不会提具体版本号,那你就要根据漏洞作者提交的时间来判断了。当然除了官方网站之外,还可以去 github 上寻找源码,这些个官网都喜欢把历史版本的程序删除掉,善用 github 上的 tag, branch, release 功能,上面有你要的所有版本
搭建对应漏洞靶场
这里其实没什么好说的,下载了人家的源码之后,在你的虚拟机里面配置好环境就行了,还能顺便学一下运维的一些皮毛知识。
手动复现漏洞
根据漏洞详情,手动将整个流程走一遍,熟悉下复现条件,比如使用 GET 还是 POST 请求,需不需要登陆,返回的页面会是什么样子的,我提交不同的参数,会不会出现其它结果,如果漏洞不存在的话,会出现什么样的结果
写代码
手动复现了一次漏洞之后,分析漏洞证明步骤,根据自己的实际测试情况一步一步写代码,用我的话来说,写代码,其实就是用程序模拟人工操作的每一个步骤,如果你上一步认真做了,这一步只是经验问题
编写POC,首推语言当然是Python了,原因很简单——好用,Python提供的强大类库可以让我们将主要精力都放在具体漏洞研究上,而不用去纠结诸如如何去实现HTML解析、HTTP发送等辅助功能。常用到的Python库如下:
urllib2: 发送HTTP/HTTPS请求
requests:更“高级”的urllib2库
re:正则表达式
random:生成随机数
base64:base64编码
hashlib:常用来计算md5值
time:用来统计访问时间延迟
……
当然语言只是工具载体,并不局限于Python。原则上你想用什么语言都可以,建议首选那种外部条件依赖少、简单好用而且自己也比较熟悉的语言
测试 PoC
其它测试和编码基本都是在同时进行的,为什么要单独提出来讲呢,我们在写 PoC 的时候,除了在存在漏洞的靶机上测试我们的代码,还要在不存在漏洞的站点测试,一般为说,一个优秀的 PoC 在后期测试的时候要求对 10000 个目标测试,误报不能超过 10 个
国内 PoC 框架简介
POC框架可以对大量POC进行管理与调度,提供了统一的编程规范与接口,是编写POC很好的帮手。我们只需要按照框架自定义的格式写好POC,然后放在框架中运行即可。目前国内有很多非常优秀框架,这里就介绍其中的几款
1.Pocsuite
Pocsuite框架现为知道创宇Seebug平台通用的漏洞验证框架,使用Python编写POC。可以提交POC换kb,kb可以用来兑换现金,挣点零花钱还是相当不错的。老司机们可能听过Sebug,那是Seebug的前身,2016年Sebug收购了另一个优秀框架Beebeeto后,更名为Seebug
github地址:https://github.com/knownsec/Pocsuite
2.Bugscan
Bugscan是四叶草的官方框架,使用Python编写POC。提交POC插件获取rank 奖励,可兑换实物奖励,奖品还是蛮丰富的
BugScan SDK:http://doc.bugscan.net/
Tangscan
Tangscan(唐朝扫描器)是wooyun社区的官方框架,使用Python编写POC。可以提交POC换汤圆,参与现金分红。Tangscan社区已经关闭,不知道还会不会开,里面的汤圆还没取出来呢。
github地址:https://github.com/WooYun/TangScan