Postman是一款商业化软件,在API的研发管理中被广泛使用于API设计、API构建、API测试等工作环节。当然,它也同样适用于API安全测试和管理。
Postman是由Postman公司开发的界面友好的API开发协作软件,不同的使用者通过简单的配置即可开展工作,并且其具备的自动化集成、批量操作、脚本定制等功能,使得其在API软件市场占有很大的比重。
其功能特点主要如下。
- 多平台的客户端支持,读者可以从其官网下载macOS、Windows(32位/64位)、Linux(32位/64位)不同平台的客户端软件,通过简单的安装即可使用。目前,Postman提供免费版和企业版两种版本,大多数情况下,免费版即可满足读者的日常使用。
- 方便的自动化集成,Postman支持命令行调用和API调用的方式,与CI/CD管道工具进行集成。比如在CI中安装Newman工具,即可以调用本地或服务器端的API集合。
- 丰富的管理功能,Postman提供个人空间管理、团队协作API管理、SAAS服务与SSO集成管理等,加上其完善的在线文档,为用户的使用提供了极大的帮助。
- 友好的脚本定制,Postman支持多种形式的脚本定制功能,比如pre-request脚本、多语言编码,这些功能为不同场景下的API测试提供了批量操作、自动化操作的入口。
在理解Postman的工作原理之前,先来了解一些基本的概念,这样便于更好的理解Postman安全测试的过程。
- Collections(集合):集合是Postman采用分组的方式,将一组相似的API请求归类,但每一个API请求可以设置相应的header、body、URL参数、授权方式及配置。
- Runner(运行器):Runner是Postman特有的模块,当读者使用Runner时,其实是执行集合中的每一个API请求。Runner充当管理者的角色,对所有的API请求进行调度、编排,达到流程化的目的。
- Variables(变量):Postman中的变量和软件开发中变量类似,它也有不同的作用域,比如全局变量、集合变量、环境变量、本地变量等,这些变量的值,读者可以采用程序编码的方式,通过读取URL参数、HTTP请求、本地文件等操作进行赋值。
- Environments(环境):Postman中的环境是指API请求的上下文,通常以键值对的方式存储数据。
- Pre-Request Script(预请求脚本):预请求脚本主要用于设置API请求中的数据、变量,比如通过预请求脚本可以获取Environments中的数据,设置各种Variables变量值。
- Test Script(测试脚本):测试脚本在从服务器收到Response后才开始执行,其主要用来设置变量值、判断响应是否符合预期。比如检查Response的body中是否包含payload返回的字符串、HTTP状态码,HTTP Header是否包含关键字等。
当Postman以Runner方式运行后,首先从预定义的集合中获取API列表,按照Runner编排的顺序(如果没有编排,则默认顺序)分别发起API请求。在请求发起前,加载预请求脚本。预请求脚本中,通过编码的方式,获取全局变量、集合变量、环境变量、本地变量等变量值进行赋值,再发送请求到服务器端。
服务器端接受请求,反馈应答响应。Postman接收到响应报文后,调用测试脚本,验证响应的准确性,并给出结果判断,最终形成报告。
Postman主要以功能测试为主,安全人员之所以使用它进行安全测试,是因为它支持REST API、SOAP API、GraphQL等多种API协议,并集成了API KEY、HTTP Basic、Digest、OAuth多种认证形式,使用它来做安全测试可以帮忙安全人员解决很多其他工具软件无法解决的问题。
但因为Postman的主要功能不是做安全测试,所以需要在理解Postman使用方式的基础上,将常用的安全攻击手法融入其中,才能达到安全测试的效果。例如,最常见的用户和口令暴力破解场景,安全人员需要自己准备攻击向量或字典,再使用其提供的Runner collections方式,设置字典值payload,进行安全测试验证。字典的选择可以使用FuzzDB中的wordlists-user-passwd,然后再使用Postman的Runner进行Fuzz测试。
也可以通过Postman支持代理的方式,将Postman与Burp Suite联合使用,这样就可以省略动手编写脚本获取参数的步骤,将payload的设置在Burp Suite中来做。