API 渗透测试从入门到精通系列文章(上)

news2024/11/23 18:57:07

导语:这是关于使用 Postman 进行渗透测试系列文章的第一部分。

这是关于使用 Postman 进行渗透测试系列文章的第一部分。我原本计划只发布一篇文章,但最后发现内容太多了,如果不把它分成几个部分的话,很可能会让读者不知所措。 所以我的计划是这样的: 在这篇文章中,我将向你介绍如何设置 Postman 并使用它来发出常规请求。 在第2部分,我会让你通过 Burp Suite 代理 Postman 的网络流量。 在第3部分中,我们将介绍 Postman 的更高级的用法,包括更优雅地处理无记名令牌(Bearer Token)和环境变量。 在第4部分中,我将介绍一两个能够真正增强 Postman 渗透测试效果的 Burp 插件。

在这个时代,Web 和移动应用程序通常是由 RESTful 网络服务提供支持的。 公共和私有 API 在互联网上非常普遍,测试这些 API 绝非易事,但有一些工具可以帮助你。 虽然(通常用与渗透测试)工具不能代替技能,但即使是最熟练的木匠也能用锤子比用鞋子更有效地钉钉子。

Postman 就是这样一个工具,它在开发者中已经流行了很多年。 在我们进入如何设置它的主题之前,我们先来快速介绍一下这个工具是什么以及可以做什么。 Postman 是一个商业桌面应用程序,可用于 Windows、 Mac OS 和 Linux。 它的大部分功能是免费的,也有付费的功能,比如提供协作和文档功能。 与渗透测试人员相比,这些特性对开发人员更有意义。 它用于管理测试各种 API 调用的 HTTP 请求集合,以及包含变量的环境。 它并不能替代你的代理(如:Burp,ZAP,Mitmproxy 等等) ,但是实际上弥补了浏览器和客户端应用程序层缺失的功能。 对于这款工具主要的替代方案是开源工具 Insomnia 和高级 REST 客户端,商业产品 SoapUI,或建立在 Swagger/Swagger UI 或 curl 的自定义工具。

设置 Postman

在这里插入图片描述
在其官方网站上(https://www.getpostman.com,)可以找到 Postman,提供 Windows 和 MacOS 的安装程序,以及 Linux 的 tar 包。 它也可以在 Ubuntu 的 Snap for Ubuntu ( HTTPs://snapcraft.io/postman )和其他社区维护的 repos 中找到,比如 Arch Linux 的 AUR。 设置它的第一步当然是程序安装。

在第一次启动 Postman 时,你会看到一个屏幕,提示你创建一个帐户,注册谷歌,或者用现有的凭证进行登录。 然而, Postman 并不需要一个帐户来执行后续的使用。

登录的帐户用于协作/同步/等; 这些是付费的功能。正如我前面提到的,这几个功能对于开发人员来说很棒,但对你来说,可能并不关心。 事实上,如果你通常需要对你的客户端机械能保密,就像我们在 Secure Ideas 所做的事情,那么你可能明确地不希望将你的项目同步到另一个第三方服务器。

如果你低头看窗口的底部,你会看到一些浅灰色的文字,上面写着跳过登录,直接把我带到了应用程序界面。 点击这个灰色的链接,你将移动到下一个屏幕——一个提示你创建东西的对话框。
在这里插入图片描述
有几个部分你不会在这里使用到,所以让我们看看你真正关心的三个功能:

· 集合(Collection)——一个你可以用请求填充的通用容器。 它还可以作为一些配置选择的顶级对象,比如身份验证规则(Authentication rules) ,我们稍后将对其进行详细说明。

· 请求(Request)——这个是最主要的功能。 这些是你将要构建的 HTTP 请求,使用你想要使用的任何方法、HTTP Body等。 这些必须始终在一个集合中。

· 环境(Environment) ——这里可以保存你希望在某个地方控制并发出跨请求甚至跨集合所使用的变量。

使用 Postman 的基本知识

是时候创建我们的第一个 Postman 集合并发出 HTTP 请求。
在这里插入图片描述
左上角的 New 按钮通常用于创建集合和请求。 让我们首先创建一个集合。 这有点像一个单独的应用程序。 你将用于对相关请求进行分组。

集合还可以作为具有身份验证指令的顶级项,这些身份验证指令将对单个请求进行继承。 现在,只要给它起个名字,然后点击创建按钮就行了。 这里,我起的名字是“测试集合”。
在这里插入图片描述
默认情况下,你已经打开了一个未命名的请求选项卡。 让我们来看看 UI 的这一部分。

  1. 活动选项卡

  2. 此请求的名称。 这只是一些描述性的名称,你可以写也可以不写。

  3. HTTP 方法。 这个下拉控件允许你更改此请求的方法。

  4. 请求的 URL。 这是完整的路径,就像在你的浏览器的地址栏一样。

  5. 用于设置请求的各种属性的选项卡式界面,包括参数、HTTP 头、HTTP 主体等。

  6. 发送按钮。 这实际上是将请求提交到指定的 URL。

  7. 保存按钮。 第一次单击此选项时,你需要指定你的集合,因为请求必须属于某个集合。

我在 HTTP://localhost:4000 上设置了一个示例目标,所以我将从填写这个请求并保存到我的某个集合作为开始。我将发出一个 POST 请求,到 HTTP://localhost:4000/legacy/auth ,没有任何参数(这是一个测试 API。 任何人都可以通过身份验证)。 当我点击保存按钮时,我将命名请求并为它选择一个集合,如下图所示:
在这里插入图片描述
然后单击"保存到测试集合"(根据你的集合名称进行调整)按钮来保存我的请求。 现在,单击 Send 按钮将发出请求。 然后我将看到响应填充在窗口的下窗格中,如下图所示:
在这里插入图片描述

  1. 选项卡界面有 Body , Cookies , Headers 及测试结果。 我们还没有编写任何测试,但是请注意图中标出的响应返回的cookie ,headers。

  2. 实际响应的 HTTP Body 位于较大的文本窗格中。

  3. 我们有可读性较好的打印方法或原始的响应主体的选项,以及不同类型的下拉列表(我相信这是预填充的响应头 content-type)。这里还有一个自定义包装按钮,以防你有其他特殊的操作。

  4. 关于响应的衡量标准包括 HTTP状态码、响应时间和响应大小。

关于 Cookies 的一个旁注

现在,如果我们使用 Postman 重新发出请求,我们将注意到一个重要的事情: 之前在响应中设置的 cookie 会被自动包含。 它模仿了浏览器通常为你做的事情。 正如你对浏览器的期望一样,在这个 cookie 范围内发出的任何请求,Postman 都将自动包含该 cookie。

如果你想移除某个 cookie 该怎么做呢? 这很简单。 在 Postman 的发送按钮下面,有一个类似链接的按钮,上面写着 Cookies。 点击这个按钮,会打开一个对话框,在那里你可以删除或编辑任何你需要的 cookies。

这就是基于 cookie 的 API。 但是让我们面对现实: 现在我们常见的 API 都会使用无记名令牌(Bearer Token)这比使用 Cookies 更为普遍。 我们将在下一节讨论这个问题,以及其他一些更高级的概念。

在上面的几个章节中,我介绍了 API 开发人员最常用的工具——Postman ,它可以更容易地测试 API 的调用。之后,我们创建了一个集合,并向其添加了一个请求。 我们还讨论了 Postman 如何处理 cookies ——这基本上与浏览器的处理方式相同。 在下面的章节中,我们将通过 Burp 代理 Postman 的流量以便对渗透测试的工作做一些调整。

为什么要设置代理?

通过使用 Postman,我们可以将其作为一个优秀的工具,从零开始制作请求并管理这些请求。 通过 Burp 代理 Postman 的流量,我们可以得到这些好处: 我们可以与Burp 的 intruder 功能结合进行模糊测试,我们也可以利用 Burp 的被动扫描器检测突出的安全问题,我们也可以利用 Burp 的扩展插件,这一部分我们将在本系列文章的后续章节中看到。 而且我们可以使用Burp 的 Repeater 篡改请求。 或许你会说,我们也可以在 Postman 里面进行篡改啊。 但是我要说的是使用 Repeater 有两个重要的原因: 1) Postman 的设计是用于发出正确、有效的请求。 在某些情况下,它会尝试纠正格式不正确的语法。 而在测试安全问题时,我们可能不希望它纠正我们篡改的错误。 2)通过使用 Repeater,我们保持了在 Postman 中的请求的干净状态以及在 Repeater 中已篡改的请求这两者之间的分离。

设置 Burp Suite

对 Burp 的实际介绍超出了这篇文章的范围。 如果你正在阅读这篇文章,很可能你已经对它很熟悉了——我们并没有为 API 测试做什么特别的或不同的事情。如果你对 Burp 不熟悉,这里有一些资源可以参考:

· Burp 官方网站——https://portswigger.net/ 提供了一个可供下载的社区版本,专业版本的价格也是相当实惠的。

· Burp 实战课程——这是我们制作的两个小时的录音课程,费用为 25 美元(退伍军人免费,点击链接获得我们的折扣代码)

· Burp Suite: Continuing the Saga ——我的队友拉里最近发表了一篇关于” Burp Suite"的文章 https://blog.secureideas.com/2018/03/burp-suite-continuing-the-saga.html

· 凯文 · 约翰逊的 Burp Suite 教程视频 ——这个视频大概有六年的历史了,虽然是一些较为基础的介绍但还是很有意义。
在这里插入图片描述
现在,启动 Burp,检查 Proxy 下的 Options 选项卡。 最上面的部分是代理监听器(Proxy Listeners),你应该会在127.0.0.1和端口8080上看到一个监听器。 它必须一直运行(注意复选框)。 如果它在默认情况下没有运行,那通常意味着端口不可用,你需要将监听器(以及Postman)更改为不同的监听端口。 只要将 Burp 正在监听的端口以及你在 Postman 中设置的代理的地址和端口是同一个,那么你的设置应该没什么问题。
在这里插入图片描述
同时检查 Proxy 下的 Intercept 选项卡并验证 Intercept 是否关闭。

在 Postman 中配置 Burp 代理

Postman 是代理感知的,这意味着我们要将它指向我们的中间人代理,也就是 Burp Suite (我的首选工具)。 我们将通过点击右上角的扳手图标(1)打开设置对话框,然后点击下拉菜单上的设置选项(2)。 这会打开一个比较大的设置对话框,在顶部有不同类别设置的标签。 找到"代理"选项卡并单击进行设置。
在这里插入图片描述
打开 Postman 设置面板

在这个标签页上有三件事可以做:

打开全局代理配置开关(Global Proxy Configuration)

关闭"使用系统代理(Use System Proxy)"开关

将代理服务器 IP 地址和端口设置为和你在 Burp Suite 代理中设置的一样
在这里插入图片描述
默认的代理接口是127.0.0.1,端口是8080,这里假设你的 Postman 和你的 Burp Suite 是在同一台机器上运行的。 如果你想使用不同的端口,你需要在这里指定它,并确保它被设置为与 Burp 中的代理接口一样。

现在你可以代理流量了,还有一个问题需要考虑。 如今,大多数公共 API 都使用了 SSL/TLS 。 这是一件非常好的事情,但它也意味着当 Burp 作为代理中间人在处理 Postman 的 API 请求和响应时,你会遇到证书错误的问题,除非你的系统已经信任了 Burp 的证书颁发机构。 解决这个问题有两个方法:
在这里插入图片描述

  1. 你可以关闭 Postman 中的证书验证。 在 General 设置选项卡下面有一个 SSL 认证验证选项。 设置为 关掉(Off),将使 Postman 忽略任何证书问题,包括 Burp Suite 的 PortSwigger CA 。

  2. 你可以将你的Burp Suite CA 设置到系统信任存储。 具体的设置细节和平台有关系。
    PortSwigger从官方的文档在这里:https://support.portswigger.net/customer/portal/articles/1783075-Installing_Installing%20CA%20Certificate.html

验证代理是否正常工作

用 Postman 发出一些请求。 在 Burp 的 Proxy 选项卡上检查你的 HTTP 历史记录。
在这里插入图片描述
在 Burp Suite 中的代理历史

故障排除

· 你发出的请求存在拖延和超时问题? 在 Burp 中的代理选项卡上检查"拦截"是否关闭。 检查 Postman 中的代理设置是否与 Burp 中的代理接口相匹配。

· Postman 收到了响应,但响应没有显示在 Burp 的代理历史中(等等)? 打开 Postman 的”设置"界面,检查"全局代理配置"是否打开。 确保你没有激活 Burp 历史记录的过滤器来过滤掉你所有的请求。 如果没有捕获过滤范围外的流量,模拟还要确保是否在 Burp 中设置了范围(scope)。

这部分内容说明了一些非常基本的设置操作。 现在我们已经做好了基本的工具链设置,我们准备好了一些更高级的东西。 下一篇文章我们将处理 Postman 中的变量,以及它们如何节省你的渗透测试的时间。 我们还将深入研究脚本接口,以及如何使用 Postman 来简化与常见的、现代的身份验证方法的交互操作,如无记名令牌(Bearer Token)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/489101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SMOKE Single-Stage Monocular 3D Object Detection via Keypoint Estimation 论文学习

论文地址:SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation Github 地址:https://github.com/open-mmlab/mmdetection3d/tree/main/configs/smoke 1. 解决了什么问题? 预测物体的 3D 朝向角和平移距离对于自动驾…

hive之入门配置

学习hive之路就此开启啦,让我们共同努力 目录 Hive网站: Hive的安装部署: 启动并使用Hive: 安装Mysql: 安装Mysql依赖包: 启动Mysql: 查看密码: 登录root: 密码错误报错: 元数据库配置…

信创国产中间件概览

信创国产中间件概览 中间件国内中间件市场份额第一梯队仍然是IBM> 和Oracle,市场份额合计51%。第二梯队为五大国产厂商,包括东方通、普元信息、宝兰德、中创中间件、金蝶天燕,市场份额合计15%。东方通应用服务器TongWeb对标 开源&#xf…

人脸检测和行人检测3:Android实现人脸检测和行人检测检测(含源码,可实时检测)

人脸检测和行人检测3:Android实现人脸检测和行人检测检测(含源码,可实时检测) 目录 人脸检测和行人检测3:Android实现人脸检测和行人检测(含源码,可实时检测) 1. 前言 2. 人脸检测和行人检测数据集说明 3. 基于YOLOv5的人脸检…

Databend 开源周报第 91 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 新数据类型&…

【Robot Framework】RF关键字大全

收录工作当中最常用的Robot Framework关键字 内容较多,可以CtrlF快速搜索自己想要的 1. RF循环使用(FOR循环) {list1} create list LOG TXT INI INF C CPP JAVA JS CSS LRC H ASM S ASP FOR ${file_type} IN {list1} log 构造请求参数 ${t…

第二十二章 解释器模式

文章目录 前言一、解释器模式基本介绍解释器模式的原理类图 二、通过解释器模式来实现四则运算完整代码抽象表达式类 Expression变量表达式类 VarExpression抽象运算符号解析器 SymbolExpression加法解释器 AddExpression减法解释器 SubExpression计算器类 CalculatorClint 测试…

【C++】仅需一文速通继承

文章目录 1.继承的概念及定义继承的概念继承的定义定义格式:继承关系和访问限定符继承基类成员访问方式的变化 2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数题目:设计出一个类A,让这个类不能被继承(继承了也没用) 5.继承与友元6.继承与静态成员7.复杂的菱…

VK Cup 2017 - Round 1 A - Bear and Friendship Condition(并查集维护大小 + dfs 遍历图统计边数)

题目大意: 给你一些n个点m条边,如果三个点(a,b,c)是合法的,当且仅当 a-b,b-c,c-a都有一条边,问你这个图是否合法,如果有一个或两个点视为合法 思路 考虑什么图才是个合法图:除了点…

Spring 更简单的读取和存储对象

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 前面介绍了通过配置文件的方式来存储 Bean 对象,那么有没有更简单的方式去存储 Bean 对象? 有以下 2 种方…

【论文】LearningDepth from Single Monocular Images

2005 NIPS 文章目录 特征提取卷积核的使用Multiscale 多尺度提取特征特征的相对深度 模型结论特征提取数据集导致的error 文章使用了Markov 随机场(Markov Random Fields, MRF) 从单图像上直接估计出图像的深度信息。 与RGBD输入数据不同的是,文章中采用了YCbCr数据…

知识点总结-DAY1

1. 请解释OSI模型中每一层的作用 应用层:为用户提供服务,处理应用程序之间交换的数据。 表示层:处理数据在网络上的表示形式,如加密和解密、压缩和解压缩等。 会话层:建立、维护和终止两个节点之间的会话&#xff0c…

安全防御 --- IPSec理论

IPSec 1、概述: 是IETF(Internet Engineering Task Force)制定的一组开放的网络安全协议,在IP层通过数据来源认证、数据加密、数据完整性和抗重放功能来保证通信双方Internet上传输数据的安全性。 IPSec安全服务 机密性完整性…

雨季时,骑行经过泥泞路段该怎么办?

泥泞路段骑行是一项需要技巧和勇气的挑战。在泥泞路段骑行,骑友又叫玩泥巴,不仅需要良好的车技和身体素质,还需要有足够的经验和判断力,以应对各种突发情况。下面,将从多个角度介绍泥泞路段骑行的挑战和技巧&#xff0…

宏观经济笔记--社会消费品零售总额

我们讨论了GDP的三个分项:投资、消费、净出口。投资我们前面已经介绍了,消费这一个分项我们还一直没有讨论。消费最重要的数据是每个月月中统计局公布的社会消费品零售总额。 一般的论调中,认为消费是三个GDP驱动项中最健康的一项&#xff0…

2023-5-4-Lua语言学习

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

openQA----基于openQA新增指定版本的openSUSE的iso镜像进行测试

【原文链接】openQA----基于openQA新增指定版本的openSUSE的iso镜像进行测试 (1)执行如下命令下载openSUSE的测试脚本,它会从openSUSE的测试脚本github地址 /usr/share/openqa/script/fetchneedles(2)然后执行如下命…

在 SourceTree 中使用 rebase (win10)

原始状态 创建两个分支 dev1 dev2, 并且推送到远端 切换到dev1 做一些修改并提交dev1-1,注意不要推送到到远端 切换到master分支,拉取最新的代码 切换到dev1 分支,进行变基操作,右击master分支 推送dev1分支到远端 切换到master分…

如何快速获取已发表学术论文的期刊封面及目录(caj格式下载和caj转pdf)

目录 1 下载caj格式的封面和目录 2 CAJ格式的封面和目录转PDF格式 在进行职称评审或成果申报时,一般要求提交你发表的成果所在的期刊的当期封面和目录。本文就手把手带带你制作一个期刊目录。 重要提示:下载期刊封面和目录需要你有知网账号&#xff0…

iOS 17预计开放侧载,游戏安全对抗将迎来新高度

近日,据彭博社报道,iOS 17预计开放“侧载”机制。所谓的“侧载”是指:iPhone用户下载APP时,可选择不在APP store中下载,可在相关APP官网或者第三方应用市场进行下载。 众所周知,APP闭源生态是苹果公司最核…