API渗透测试的一般步骤

针对API的渗透测试一般分为7个步骤,分别是:

  1. 前期交互
  2. 信息收集
  3. 威胁建模
  4. 漏洞发现
  5. 漏洞利用
  6. 后渗透或横向移动
  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更容易发现漏洞。

API安全系列——API安全测试31个Tips(三)

tip21:

在API测试期间卡住了?

扩大攻击面! 使用http://archive.com,找到旧版本的web应用程序,探索新的API endpoints。

不能使用客户端? 扫描.js文件寻找url。其中一些是API endpoints。

tip22:

api从设计上倾向于泄漏PII。BE工程师返回原始JSON对象,并依赖FE工程师过滤敏感数据。发现敏感资源(如收据)?找到所有返回它的EPs: /download_receipt,/export_receipt,等等。

有些端点可能会泄漏用户无法访问的过多数据。

这是 OWASP api 前10名的一个例子-# 3-过度的数据曝光

tip23:

找到从网络服务器下载任意文件的方法?将测试从黑盒测试转为白盒测试。下载app的源代码(DLL files: use IL-spy; Compiled Java – use Luyten)阅读代码并发现新的问题!

tip24:

在API测试期间卡住了? 扩大你的攻击面! 记住开发人员经常在非生产环境中禁用安全机制(qa/staging/etc);

利用这一事实来绕过AuthZ, AuthN,速率限制和输入验证。

tip25:

发现“export to PDF”功能? 开发者很有可能使用外部库在后台来转换HTML——>PDF。尝试注入HTML元素并导致Export Injection

导出注入: Export Injection

这篇文章,后面也会翻译出来,链接为:

tip26:

在api中寻找BOLA (IDOR) ?有401/403的错误吗? AuthZ绕过技巧:

  • Wrap ID with an array{“id”:111} –> {“id”:[111]}
  • JSON wrap {“id”:111} –> {“id”:{“id”:111}}
  • Send ID twice URL?id=<LEGIT>&id=<VICTIM>
  • Send wildcard {"user_id":"*"}

在某些情况下,AuthZ机制需要一个普通字符串(在本例中是一个ID),如果它接收到一个JSON,它就不会执行AuthZ检查。然后,当输入到数据获取组件时,使用JSON而不是字符串(e。g:它扁平化了JSON)

tip27:

BE服务器不再负责保护XSS攻击。api不返回HTML,而是返回JSON。如果API返回XSS payload?

例子:

{"name":"In<script>alert(21)</script>on},所以在用户侧永远都需要做XSS保护。

这个思路确实猥琐。

tip28:

如果我们在渗透的是一个.net编写的app应用。

找到一个包含文件路径/名称的参数? 开发人员有时使用path.combine (path_1,path_2)来创建完整路径。如果param#2是绝对路径,那么param#1被忽略。

关于控制path: Path.Combine Security Issues in ASP.NET Applications

tip29:

API暴露了应用程序的底层实现。渗透者应该利用这一事实来更好地了解用户、角色、资源和它们之间的相关性,并发现很酷的漏洞和漏洞。始终对API响应保持好奇。

tip30:

在API测试期间卡住了?扩大你的攻击面!

如果API有移动客户端,请下载APK文件的旧版本,以探索旧/遗留的功能,并发现新的API端点。

请记住: 公司并不总是从一开始就实现安全机制,而且DevOps工程师也不会经常弃用旧的api。利用这些事实来发现没有实现安全机制(授权、输入过滤和速率限制)的影子API端点

Download old APK versions of android apps: https://apkpure.com

tip31:

发现一个limit / page参数?

(例如: /api/news?limit=100)它可能容易受到7层DoS的攻击。尝试发送一个长值(例如:limit=999999999),看看会发生什么.

API安全系列——API安全测试31个Tips(二)

tip11:

检查API 是否使用授权头?忘了 CSRF 吧!如果身份验证机制不支持 cookie,则这个 API 就被设计为了防止 CSRF 的攻击。

tip12:

对 BOLA (IDOR)的测试?即使ID是GUID或非数字类型的值,渗透测试人员也要尝试发送一个数字值。

例如: / ?user_id=111 使用 user_id=inon@traceable.ai 代替

有时身份认证机制同时支持这两种方式,而且暴力破解数字更容易。

tip13:

使用大量分配绕过安全机制。例如,“输入密码”机制:

  • POST /api/reset_pass requires old password.
  • PUT /api/update_user is vulnerable to MA == can be used to update pass without sending the old one (For CSRF)*

比如 上面的重设密码需要旧密码,但是更新用户的API 就不需要发送旧密码

tip14:

在API测试期间卡住了?

扩大你的攻击面!

查找同级域名或者子域名 使用http://Virustotal.comhttp://Censys.io。其中一些域可能使用不同的配置/版本公开相同的api。

tip15:

静态资源包括照片、视频等等,Web服务器(IIS、Apache)在授权时对静态资源的方式是不同的。即使开发人员实现了良好的授权,也有很好的机会访问其他用户的静态资源。

tip16:

即使您使用另一个web代理,始终在后台使用Burp。@PortSwigger的人在帮助你管理测试用例方面做得非常好。使用“树视图”(免费版本)功能查看您访问过的所有API端点。

tip17:

移动证书锁定?在你开始逆向工程和修补客户端应用程序之前,检查iOS和Android客户端以及它们的旧版本。很有可能其中一个没有启用证书锁定。 这样可以节约时间。

tip18:

公司和开发人员倾向于将更多的资源(包括安全性)投入到主要的api中。那些很少被人们使用过的API 接口可以发掘一些有趣的漏洞。

POST /api/profile/upload_christmas_voice_greeting

tip19:

你觉得哪些功能更容易受到攻击?

  • Organization’s user management
  • Export to CSV/HTML/PDF
  • Custom views of dashboards
  • Sub user creation&management
  • Object sharing (photos, posts,etc)

上面的都容易被攻击吧,最容易的就是有权限访问的。像组织用户管理,子用户创建和管理。

对象共享,也有权限问题,输出CSV/HTML/PDF 这个功能可能比前面的要好一点。

tip20:

测试AuthN api ? 如果您在生产环境中进行测试,那么很有可能AuthN端点具有抗暴力破解保护。无论如何,DevOps工程师倾向于在非生产环境中禁用速率限制。不要忘记测试它们:)

更多的例子: WHY FACEBOOK HACKERS ARE A REAL THREAT AND HOW TO PROTECT YOURSELF

这个例子也会写一篇文章,链接后面发。