Poc编写
0x01 PoC
PoC(全称: Proof of Concept), 又叫概念验证。作为我们的漏洞验证程序,他可能是一段不完整的程序,仅仅是为了证明我们提出漏洞的观点。
推荐使用Python编写PoC,因为安全界用 Python 的人居多,写的东西能被更多人看懂,并且 Python 这门语言的灵活,类库强大等特性,给编写的人提供了很大便利。
Exp(全称: Exploit),又叫漏洞利用程序。比如目标存在一个 SQL 注入漏洞,我们分析到了该漏洞,然后我们编写一个程序,通过这个sql注入漏洞,最终拿到目标的权限,那么这个程序就是Exp。
编写一个 PoC 相对简单,而编写一个 Exp 是相当有挑战性的。
0x02 PoC与PoC框架
PoC 框架就是一个批量管理,调度 PoC 的程序。因为是框架,要批量调度,那就要求 PoC 在编写的时候要遵守一些规范,这些规范常见的有:
入口规范
考虑到批量使用 PoC 的调度情况,统一入口框架调用该 PoC 的时候会非常之方便。这个就需要根据具体的框架的调度要求来看了,都有文档的,看一下就会了。
API规范
API 是该框架对一些基础类库的封装,比如说框架提供了一些网络请求工具。这些封装有什么好处呢?我还是举例子来说明,比如某次扫描,调用了 1000 个 PoC 去扫描目标主机了,假设这个扫描任务中有一部分是需要登录的,而有一些的作者在编写的时候忘记在 PoC 中接收用户自定义的 Cookie 了,那么此时就会因为接收不到 Cookie 而导致请求不成功。那么在使用了框架的情况下,即使在忘记了添加这些字段的情况下,框架也会自动将 Cookie 添加进请求中,为 PoC 开发者提供了极大的便利。
常见PoC框架
Beebeeto
Seebug
Bugscan
Tangscan
0x03 PoC编写
网络基础:
请求响应配对
域名系统
IP 地址
TCP/IP协议
HTTP 协议(重点)
编码基础:
HTML(更重要了解浏览器)
Javascript(XSS、CSRF必备技能)
Python(了解常用语法和功能库)
SQL(sql注入的基础知识,增删改查必须掌握)
正则表达式(自动化过程中经常用于匹配,能够起到事半功倍的效果)
常用Python库编写##
urllib、urllib2、requests # 发送 HTTP 请求的
urlparse # 处理 url
re # 正则表达式
random # 生成随机数的
hashlib # 集成md5算法
base64 # base64编码
socket # 套接字
os/sys ......
PoC编写 - 复现漏洞环境,将漏洞复现流程代码化的过程
漏洞检测 - 使用编写好的 PoC 去验证测试目标是否存在着漏洞,需要注意的是在这个过程(或者说是在编写 PoC 的时候)需要做到安全、有效和无害,尽可能或者避免扫描过程对目标主机产生不可恢复的影响
遵循三个标准:
随机性、确定性、通用性
随机性:涉及的关键变量或数据应该具有随机性,不要使用固定的变量值生成Payload
确定性:通过测试内容找到唯一确定的标识来说明该漏洞是否存在,并且这个标识要具有针对性
通用性:Poc中所使用的Payload或包含的检测代码应该兼顾各个测试环境或平台
漏洞检测方法
直接判断、间接判断
直接判断:通过发送具有Payload的请求,从返回的内容匹配相应状态进行判断
间接判断:借助其他工具间接反应漏洞是否触发