最后更新于2023年12月12日星期二19:11:10 GMT

有许多不同的方法可以使用InsightAppSec来验证web应用程序, 但有时你需要更深入的高级设置来完全自动化你的登录, 特别是API扫描. 今天,我们将介绍其中一个高级设置:令牌替换.

InsightAppSec令牌替换可用于捕获和重放承载身份验证令牌, JWT身份验证令牌, 或任何其他类型的会话令牌.

The token replacement values are under your scan configs in the following location: Custom Options > Advanced > AuthConfig > TokenReplacementList

按“Add”键可以设置以下值.

Name Description 可能的值
ExtractionTokenLocation 要提取的令牌位于何处. URLResponse HeadersResponse Body
ExtractionTokenRegex 用于提取令牌的正则表达式. 括号中的任何内容都可以在InjectionTokenRegex中使用@token@返回. 任何正则表达式,如:"token": ?“^”(*)“access_token”: ?"([-a-f0-9]+)"[?]sessionId=([^&]*)
InjectionTokenLocation 捕获的令牌应该注入到哪里. 请求URLRequest header Request Body
InjectionTokenRegex 令牌应该发送到web应用程序的格式. @token@被ExtractionTokenLocation捕获的值所替换. Any string. @token@被捕获的值替换. 例如:授权:承载人@token@Authorization:令牌@ Token @&sessionId = @token@


为什么要替换令牌?

Under Custom Options > HTTP Headers > Extra Header, 你可以手动将一个身份验证令牌传递给你的web应用. 虽然这是设置这种身份验证形式的最简单方法, 除非您生成的令牌不会过期, 您必须在每次扫描时替换此令牌. 从长远来看,使用令牌替换自动化此过程将节省您的时间和精力, 尤其是当你需要为多个应用生成令牌时.

对于本例,我们将使用Rapid7 Hackazon web app. 如果您想配置自己的Hackazon实例, 可以找到有关安装和设置的详细信息 here.

另外,您也可以使用免费的公共测试站点,例如 this one.

在使用Hackazon web应用程序时,您将遇到的主要区别是API身份验证没有UI, 因此,我们必须记录并传递一个流量文件,以便InsightAppSec进行身份验证.

We will use Postman 发送API请求到web应用程序和 Burp Suite 记录交通. 你也可以交替使用 Rapid7 Insight AppSec工具包,以记录交通情况. Here is a video 使用InsightAppSec工具包运行设置.

第一步是设置代理设置. In Postman, 单击右上角的齿轮图标进入“设置”界面, 然后点击进入代理设置. 我们将代理服务器设置为“localhost”并将端口更改为“5000”.


在Postman中设置代理之后,您必须在Burp Suite中设置它. 在Burp中,转到代理选项卡,然后单击代理设置. 接下来,添加一个代理侦听器,指定端口5000以匹配Postman中的设置. 然后将接口配置为“Loopback Only”.


返回到Postman,添加基本身份验证,然后发送流量. 在Burp中,单击HTTP History选项卡,右键单击捕获的流量,然后单击“Save Item”。. 确保将流量保存为xml文件.


也可以使用 Rapid7 Insight AppSec插件,或从Chrome浏览器内. 如何做到这一点的说明位于流量身份验证或可以找到 here.


录制时使用Rapid7 Appsec插件, 确保记录在记录的详细信息中包含承载认证或令牌.


记录登录后,将流量文件上传到“局点鉴权”. 确保您也调整了登录正则表达式,以确保扫描不会失败.


在对您的web应用程序进行身份验证并获取令牌之后, 下一步是配置一个正则表达式,以确保能够提取令牌. 有各种各样的方法来测试正则表达式,但我们将使用 http://regex101.com/ 对于这个例子.

然后,我们将获取包含令牌信息的web应用响应, 将其粘贴到网站中, 并配置一个正则表达式以确保只选择令牌. 在这个用例中,表达式"token": ?([^"]*)成功地只突出显示了我们想要提取的信息. 我们可以确保在捕获组1中只选择令牌,因为当我们在InjectionTokenRegex下指定@token@时将返回该令牌.

接下来,我们要配置TokenReplacementList.

Name Value Reason
ExtractionTokenLocation Response Body 经过身份验证后,令牌出现在正文中
ExtractionTokenRegex "token": ?"([^"]*) 成功隔离验证令牌
InjectionTokenLocation Request Header web应用程序在哪里期待令牌
InjectionTokenRegex 授权:Token @token@ web应用程序期望的标头格式



确保您上传了swagger API文件. 你既可以上传文件,也可以将InsightAppSec指向特定的URL. 您可以选择将扫描限制为只扫描swagger文件,以便进行更有针对性的扫描.

为了确保成功,请单击“下载附加日志” 扫描完成后,在“扫描日志”页面打开“操作日志”文件. 您正在寻找日志条目“[good]: Added imported token from response body”。. 一旦你看到这个, 你知道照片被正确地导入到扫描中,我们可以用它来登录API.

进一步测试, 您可以查看漏洞流量请求,以确保授权:令牌标头已成功通过.


检测令牌是否已过期, you can modify the sessionLossRegex and sessionLossHeaderRegex under Authentication > Additional Settings, 或者使用CanaryPage(如果已经设置). 当配置正确时, 令牌替换将再次获取令牌, 确保我们一直登录你的API.

可以找到有关配置扫描身份验证的更多信息 here. 如果有疑问,请联系您的web应用程序开发人员和/或Rapid7支持人员寻求帮助.