文章目录
- 基本概念
- 什么是Poc
- 什么是Exp
- 常见问题
- Exp 和 Poc相同?
- 为什么网上大多漏洞仅公开POC?
- 为什么使用Python来编写
- 编写流程
- 获取详情
- 搭建环境
- 复现漏洞
- 编写脚本
- 测试脚本
基本概念
什么是Poc
Poc(全称: Proof Of Concept), 中文译作概念验证。在网络安全行业,理解为漏洞验证程序,类似于程序开发中的功能Demo,仅证明某功能或观点的可行性,一般不具备“破坏性”。
什么是Exp
Exp(全称: Exploit),中文叫译作漏洞利用程序,就是一段可以发挥漏洞价值的程序。比如SQL注入漏洞,运行Exp脚本可以通过漏洞获取数据库敏感数据内容或服务器权限。
常见问题
Exp 和 Poc相同?
严格来说二者并不相同。从脚本完整度来说,Exp比Poc更完整,Exp不仅具备漏洞验证功能,还具备漏洞利用功能。二者关系可以理解成数学集合中的包含关系,即Exp包含Poc。从功能角度来说,EXP不仅可以验证漏洞存在还可以通过漏洞获取想要的信息或服务器权限,一般具有一定“破坏性”。
举个例子,仓库门锁坏了,你经过推开门的方式验证了门是坏的,没法锁住,但是没有进行破坏或盗取里面的财物,这就是POC验证。反之你推了门发现门锁坏了,而且进去盗取了里面的财物,这就是EXP攻击。
为什么网上大多漏洞仅公开POC?
- 利益相关,黑产人员往往利用漏洞牟利,公开后漏洞会被更快修复,影响不当获利。
- 法律约束,随意传播漏洞细节会造成不当后果,所以大部分仅做证明。
- 理论存在,例如现在很多公司要求白帽子挖掘漏洞仅做验证不做深层次利用,为了防止业务被影响,大部分证明漏洞存在后就停止了,没有更加深入具体的漏洞利用过程,理论上是存在的。还有的“版本型”漏洞,探测到版本比较低就说明存在漏洞,但无法进一步利用,所以也没法编写Exp。
为什么使用Python来编写
从实际角度出发,Poc仅是一段验证程序,程序编写需要从编者习惯,应用环境和便捷性等角度考虑,只要能达到目的即可。选择Python,大多是因为对新手更加友好,使用门槛低且程序易读。
编写流程
获取详情
通过威胁情报网站微信公众号等获取漏洞信息,例如明确漏洞类型,作用原理、版本号和部署环境等,最低要求就是看了这些信息你能知道漏洞是怎么回事,大概为什么会产生漏洞,怎么复刻漏洞环境和怎么复现漏洞。
资源网站推荐:
https://x.threatbook.com/v5/vulIntelligence
https://www.cnvd.org.cn/
https://www.exploit-db.com/
公众号推荐:
直接搜索关键词“应急响应中心”或“Cert”即可
搭建环境
环境选择:通过虚拟机,Docker镜像和phpstudy等各类集成基础环境都可以。不论是本地还是云端根据情况决定,尽可能根据已知漏洞信息进行环境模拟,保证漏洞复现成功率较高,推荐本地Docker部署,更方便快捷。
资源推荐:
https://github.com/fofapro/vulfocus
https://github.com/vulhub/vulhub
复现漏洞
根据了解到的漏洞详情,逐步去复现漏洞。复现的时候特别留意请求方法,必要的请求头内容、参数内容和判断漏洞存在的标识(可能是某个字符串或者某个状态码)等。能了解漏洞原理和达到成功利用目的。
最终保证漏洞复现前提下尽可能缩减请求包内容,方便编写脚本。
编写脚本
复现完成后根据复现过程进行脚本编写,用脚本模拟复现过程。例如xxx.com 网站conf.ini 配置文件泄露漏洞,编写脚本基本步骤为:
1.发送请求探测到xxx.com/conf.ini
2.判断响应状态码为200
3.判断响应包内容是否为conf.ini 内容
4.得出漏洞是否存在的结论。
测试脚本
实用编写的Poc对本地模拟环境进行测试,保证脚本能运行到达检测效果,然后不断完善优化达到最近使用效果。