针对API的渗透测试一般分为7个步骤,分别是:
- 前期交互
- 信息收集
- 威胁建模
- 漏洞发现
- 漏洞利用
- 后渗透或横向移动
- 报告撰写
这里主要介绍信息收集和漏洞发现。
API渗透的信息收集
信息收集是API渗透的入口,非常的重要。
1.自动化的收集
使用自动化工具收集相关对象的信息。 包括域名,子域名,IP,端口,DNS,路径,参数等等
2.手工收集
手工整理业务流程,组织架构和人员职能等
3.情报收集
通过其他渠道获取关键信息。
注意的事项:
API是否存在接口定义的规范描述文件?
- 如果存在,遵循的规范是什么?
- API 依赖什么语言实现?
- API 运行所依赖的组件是什么版本?是否存在已知的漏洞
- 互联网上是否存在其泄露的API key 或者证书
- API 是否存在多个版本?多个接入端?
API 渗透的漏洞发现
1.自动化检测
和对象进行交互,根据应答的响应情况来判断是否存在漏洞。
特点: 耗时短,速度快,但是存在误报
2.手工挖掘
人工方式验证,使用辅助的工具
特点: 耗时长,速度慢,但准确性高
实际工作,往往两种方式混用。 先使用自动化监测工具全量扫一遍,再根据高风险业务场景进行人工测试或者复核。
注意的事项:
API渗透测试多为手工挖掘
- 认证和授权。 对于API的认证鉴权机制,设计人员和研发往往认识不足,甚至缺少认证和授权机制。 比如 令牌,HTTP方法在进入服务器之前是否都经过了严重,OAuth协议使用的正确性,无认证和授权的API 是否可以任意调用。
- 输入验证。 研发人员通常对输入缺少有效的验证,比如XML实体注入的类型攻击,不同的响应类型application/josn和application/xml
- 数据编码。 包含JSON格式的数据,容易导致反序列化漏洞或者远程代码执行
- API版本和影子API。 同一个API的不同版本活未在API规范文件描述的API更容易发现漏洞。