先问个扎心的问题:做接口测试或者安全评估的时候,你是不是还停留在“开Burp、挂代理、点开HTTP History看请求”这个阶段?如果是,那我要说一句可能不太中听的话——你手里的Burp Suite,至少有一半的潜力被你浪费了。经常有朋友问我,说拿到一个目标之后,手工点了一圈,感觉功能就那样,接口也就那几个,然后就没有然后了。但真实的攻击面或者测试范围,真的就是你在页面上看到的那些吗?肯定不是。很多接口藏在JavaScript文件里,藏在Swagger文档里,藏在你根本不知道的路径下面。这时候,我们需要的不是被动等流量,而是主动去“挖”出这些隐藏的API端点。我就是那个靠着APIKit和Param Miner,把看似“无懈可击”的目标,在半小时内撕开一个口子的人。今天不扯虚的,直接把我压箱底的操作流程、参数配置逻辑,还有踩过的坑,全部摊开来跟你讲清楚。这篇内容不装高深,保证你能直接照做。1. 为什么你“抓包”再多,也发现不了真正的API端点1.1 被动抓包的局限性到底在哪Burp Suite默认的“抓包”行为,本质上是被动监听。你点哪里,它就记录哪里;你不点的地方,它永远不知道。这就像你在一个黑屋子里只拿了一支手电筒,照亮哪块算哪块,但屋子里的绝大部分区域,对你来说依然是盲区。更致命的是,现代Web应用的架构早就不像十年前那么简单了。前后端分离是标配,Vue、React这类单页应用(SPA)大行其道。你看到的页面,可能只是一堆静态资源。真正的业务逻辑、数据交互,全都在后端API里,而这些API的调用逻辑,往往像蜘蛛网一样错综复杂地藏在JavaScript源码里。你靠手动点几个按钮,能触发多少API?恐怕连九牛一毛都算不上。举个例子,某次我对一个后台管理系统做评估,页面只提供了“登录”和“用户信息查询”两个功能。按常规抓包思路,最多能看到两三个接口。但后来我把它的JS文件全部拉下来,用APIKit过了一遍,结果发现了包括“批量修改用户权限”“导出全部用户明文信息”在内的几十个隐藏接口。这些接口在界面上根本没有按钮,但你只要构造好请求体,直接就能调用。这种差距,就是被动抓包和主动探测之间的鸿沟。1.2 从“被动等流量”到“主动找接口”的思维转变做安全测试或者接口梳理,最核心的转变就是从“等待”变成“寻找”。你需要像搜索引擎爬虫一样,主动去扫描目录、主动去分析JS文件、主动去爆破参数。这才是一个合格的测试人员该做的事。而APIKit和Param Miner这两个插件,恰恰就是帮我们完成这个“主动寻找”过程的利器。前者侧重快速解析和梳理API资产,后者侧重深度爆破和参数发现。两者搭配,基本上可以覆盖API发现领域的大部分需求。接下来,我把这两个工具的安装、使用、组合玩法,以及很多教程里根本不会告诉你的细节,一次性讲明白。2. 用APIKit高效梳理API资产,别让它只是个摆设2.1 APIKit到底解决了什么问题很多人下载了APIKit,但用起来只是随便扫一下,感觉“也就那样”,然后就去玩别的了。这是因为它真正的价值没有被发挥出来。APIKit的核心功能之一是自动解析HTTP请求/响应中的数据。听起来很抽象?我换个说法:它能帮你从所有的流量里,把API的URL、请求方法、参数结构、认证方式这些信息,像做体检一样,一条条给你列得明明白白。就这么说吧,它是把你的“抓包数据”变成“接口资产表”的转换器。它对Postman、Swagger、OpenAPI这类标准的API定义文件也有很好的兼容性。如果你的项目里有Swagger文档,用APIKit直接导入解析,几秒钟就能把一个项目的所有API列出来。这比你自己拿着接口文档去一个个对,效率不知道高到哪里去了。2.2 APIKit的安装配置与实操演示安装过程不复杂,在Burp的BApp Store(官方扩展商店)里搜索APIKit,点击安装就行。但重点在于装完之后,你得让它干活。第一次打开APIKit时,它的主界面会有一个“API Definitions”区域,还有“API Assets”区域。你可能会问,这俩有啥区别?简单来说,Definitions是它通过菜单“Import from”主动导入进来的项目定义;Assets则是你在代理抓包时,它被动记录下来的API资产。理解了这个区别,你就知道该怎么用它了。实操里面,我建议你新建一个目标项目后,第一时间做两件事:第一步,把代理抓到的所有流量都过一遍APIKit。在Burp Proxy的历史记录里,选中你要测试的域名或目录,右键选择“Extensions -> APIKit -> Add to APIKit”。很快,它就会自动解析选中的请求,并把去重后的API信息整理到Assets里。第二步,疯狂寻找Swagger或OpenAPI定义文件。这一步是APIKit的核心功能,一定要在Proxy History里,用搜索语法点击Filter按钮,输入swagger|openapi|json这种关键词过滤,或者直接在响应体搜索swagger字段。找到后,右键点击该请求,选择“APIKit -> Import from Swagger/OpenAPI”。它会自动解析并填充进去。2.3 APIKit表格里的隐藏信息,用好了能救命很多人把API导入之后,只会盯着URL那一列看。太浪费了。我来告诉你看什么。看状态码(Status)那一列。如果同一个URL,你导入时看到它的状态码是500或者403,这暗示后端可能处理异常,或者存在未授权访问的风险。看参数(Parameters)列,不要只关心URL上的查询参数,更要关注Authorization、Cookie这类Header参数。如果一个接口在Swagger里定义了Header带Authorization,但实际请求里又没带,这中间可能就有认证绕过逻辑。看MIME类型(MIME Type),如果返回内容是application/json,但接口又没有定义复杂的返回模型,那可能存在数据泄露或安全问题。每次测试之前,先把APIKit的资产库当成你的作战地图。你都不清楚敌人有多少条路可以走,你怎么可能找到破绽?3. Param Miner:暴力美学下的隐藏参数挖掘3.1 突破思维定式,参数才是API的灵魂参数,就是API的灵魂。有时候你找到一个接口,看起来人畜无害,但一旦你往里加一个参数,它的行为就完全不一样了。比如一个查询用户信息的接口,正常请求是/api/v1/user?id=1,返回的是当前用户信息。但你瞎猜一下,如果加上?id=1&debug=true,后端会不会把包含所有用户的原始数据结构返回回来?这不是段子,这是我实际遇到过的。此类问题也恰恰是实际渗透中容易被忽略的。Param Miner这个插件,它的核心就是帮你干这个猜参数的活。而且它不是瞎猜,是有一整套规则和字典的猜。它能把隐藏在Header、Cookie、Body里的参数挖出来。3.2 Param Miner的安装与配置参数详解在BApp Store搜索Param Miner,同样一键安装。但装完之后,你直接就点“Run”是不行的,配置才是它的核心。Param Miner提供了一个非常强大的“Config”选项卡。这里可以配置很多东西,包括自定义参数名、Header名、Cookie名,以及用于爆破的字典来源。你甚至可以把之前在APIKit里整理好的接口资产,导入进来作为爆破的目标范围。在实际配置中,我建议你在“Engine”选项卡里Spider模式下,把线程数调到中等,太高容易被WAF拦,太低太慢。最关键的步骤是选择爆破的目标参数位置。有些人喜欢只爆破URL查询串(Query String),有些人喜欢爆破POST请求的Body。我的建议是,第一次跑,先只跑Header和Query String,等你熟悉了,再跑Body参数。这样做的好处是,Header参数和Query参数相对稳定,更容易定位到鉴权逻辑,不容易把你拖进庞大的业务参数泥潭里。3.3 按“猜测”精准打击:Param Miner的实际运行流程Param Miner上手不要直接就对目标全目录跑,那样既容易触发封禁,也容易迷失方向。我的个人习惯是,先从APIKit的资产列表里,筛选出那些“不需要认证”或“弱认证”的接口,专门针对这些接口运行Param Miner。假设我们现在锁定了/api/user/info这个接口。在Param Miner里,右键请求 -> Extensions -> Param Miner -> Param Miner this request。然后去“Config”选项卡,勾选上你自定义的参数为debug、test、admin等,并把它加入爆破行列。当它跑完,返回的结果中出现了debug=true,并且响应里多出了异常数据,你的战斗就正式结束了。提示:Param Miner的结果分析,并不只是看有没有报错或超时。一定要关注响应长度和响应状态码的变化。如果某个参数加上去之后,响应长度出现骤增,那大概率就是触发了什么不得了的逻辑。4. 强强联合:手把手组合操作流程,从流量到资产全掌握4.1 组合前准备:一份小而美的目标样例场景假设:我现在拿到了某个系统的主机名target.example.com,该系统的前端是Vue写的,后端接口相当丰富,但页面功能不多。我预想的组合目标是:不放过任何一个潜在API。4.2 详细操作步骤:从Burp到APIKit再到Param Miner的无缝衔接阶段一:快速摸家底打开Burp并浏览目标站点,尽可能多地点击页面功能。此时,不要只盯着浏览器的Network面板看,所有请求都已经经过Burp代理。我打开APIKit的“API Assets”选项卡,能看到它已经自动记录了若干条API信息。此刻我并不会着急去整理,继续做下一步。阶段二:JS文件大扫荡我用Burp的搜索功能,在HTTP History中过滤出所有响应类型为JavaScript的请求。全选这些JS请求,右键发送到APIKit。这一步,APIKit会尝试从JS中解析出URL和API路径,这往往能让我们发现很多未在页面中出现的管理接口,比如/admin/reset_all_password这种看着就让人兴奋的东西。阶段三:Swagger乌托邦接着我在History里搜索关键词swagger或openapi。需要注意的是,很多系统的Swagger地址是隐藏的,但Burp的搜索不会放过它。如果找到了,右键导入APIKit。导入后,APIKit会呈现出清晰的树状结构,包含每个API对应的请求方式、参数、描述、数据类型。这就是我们的财富自由时刻,因为拿到Swagger,等于拿到了整个后端服务的说明书。阶段四:针对关键资产,执行Param Miner现在我们的APIKit里面,已经有了几十上百个API资产。我选中那些需要参数但参数又不明不白的接口,发送到Param Miner。在Param Miner的配置里,我会针对某个具体的接口,同时爆破它的Header参数和Query参数。这里有几个我吃了亏之后总结出来的独特配置技巧:配置自定义Header:我通常会在“Config”里添加X-Forwarded-For、X-Real-IP、X-Original-URL。这些Header在API网关层非常常见,一旦后端信任了这些头,就可能出现IP绕过或路径绕过。配置自定义参数:我会加入callback、jsonp、_method、debug、source。当测试JSONP接口时,callback参数能用来做数据劫持验证;当测试Restful API时,_method参数可以用来做HTTP方法覆盖;debug参数则有时能帮你开启后端调试模式,直接泄露堆栈信息。保存并启用字典:Param Miner自带了很多常用参数名,但你一定要在里面勾选上Passive和Active模式,同时把参数值爆破级别调整到Medium。不要一开始就上High,一是流量太大,容易被封;二是噪音太多,难以分辨。4.3 数据分析与实战报告结束Param Miner的扫描后,我们需要打开Burp的HTTP History,设置过滤器筛选出状态码为200、201、302且响应长度异常的请求。如果发现Param Miner在某条请求后面添加了参数后,响应包体积变大,甚至出现了500错误时携带的堆栈信息,这就说明我们挖到了宝。我会把这些结果导出,并与APIKit进行交叉核对。看这个参数是不是已经在APIKit的元数据里被定义了。如果没有被定义,那就太有意思了,说明这是一个后端悄悄实现的“隐藏开关”,基本可以判断这是一个经验丰富的开发者留下的后门或调试功能。5. 常见问题与排查技巧实录,都是真金白银的教训5.1 APIKit没自动记录流量,怎么办这是很多人问的第一个问题:安装了APIKit后,为什么在Assets里看不到请求?遇到这个问题,你先不要怀疑是插件坏了。请先检查Burp的代理监听是否正常,浏览器流量是否真的走过了Burp。其次,检查APIKit的“Settings”选项卡,看是否勾选了“Enable passive scanning from Proxy history”。如果你在抓包时用的是Repeater工具重放的数据,它是不会自动被APIKit同步的,需要你右键手动选择“Add to APIKit”。5.2 Param Miner爆破时,Burp卡死到怀疑人生Param Miner跑起来,默认可能会有几十个线程同时发包,这在目标网络状况好的时候没问题,但目标一慢,或者本地内存不足,Burp就直接“未响应”了。这个问题很好解决,我要强烈建议你在使用前,去Param Miner的配置里把“Thread Count”从默认的5改成2,把“Retry on network failure”次数调低。此外,每一次爆破的目标范围别太大,最好就针对单个接口或者单一路径,宁肯多跑几次,也别指望着一个任务跑一宿。5.3 接口发现了很多,但凡是带鉴权的参数一个都跑不出来顶级的渗透并非只攻技术,也可能体现在绕过逻辑上。很多时候,Param Miner能爆破出参数,但爆破出来的参数也不是百发百中,比如会遇到需要签名或加密的参数。但这类参数恰恰能提示你,业务系统可能会存在逻辑漏洞,因为你要始终坚信,只要逻辑是人为设计的,那逻辑背后必有可乘之机。5.4 分不清Burp Suite Community和Professional的区别好多初学者在用Burp Community版本去装这些插件的时候,发现BApp Store根本没有这些扩展。这是因为许多高级插件,包括APIKit,通常在扩展商店里要求使用专业版(Professional)。但你也不用怕,有两个替代解决方法:第一,从GitHub或可信渠道下载这些插件的JAR文件,然后通过Extensions -> Add -> Select File手动安装。APIKit和Param Miner都是开源项目,完全可以装到Community版里用。第二,用类似CaSLM、Auth Analyzer这类功能比较接近的免费插件作为平替,也能达到类似效果。注意:无论是使用任何 Burp 插件,请务必确保其来源可靠。我通常只使用官方 BApp Store 或作者的 GitHub Releases 页面下载,避免引入恶意依赖或遭遇供应链风险。6. 扩展实战:APIKit与Param Miner在不同场景下的妙用6.1 在“零点击”攻击面上的应用很多时候,我们拿到一个目标,首页就是一个普通的企业官网,看起来毫无攻击面。这时候,APIKit的作用就更加突出了。我会把首页的所有JS文件拉进APIKit,分析它的API路径。往往你会发现,官网虽然只是展示型的,但它调用的后端却是一个功能复杂的CMS系统。通过APIKit分析,你能够精准定位到/api/cms/content/list这种管理接口。然后用Param Miner去跑一下这个接口的参数项,如果你运气够好,加一个?pageIndex=1&pageSize=999,也许你就能直接把这个官网的后台文章、用户数据全量拉出来。在“零点击”的状态下实现了数据资产的转移。6.2 绕过弱认证接口的另类思路有一次测试某个系统,我在APIKit的资产列表里看到有个接口/api/v2/order/query的参数是orderId。打开请求,发现它需要携带字段access_token。但我用Param Miner直接对这个接口跑了一遍“Query String”爆破,加了一个参数debug=1。结果,它返回了整个订单信息给未登录用户。这就是参数污染导致后端鉴权逻辑被绕过的典型案例。不要总想着正面攻击,有时候利用隐形参数直接绕过拦截,是一种更具性价比的开展方式。7. 总结:建立你自己的API资产“作战地图”别把APIKit和Param Miner当两个孤立的小工具用,在实战中,把它们当成一套组合拳去练习。APIKit负责帮你发现资产、梳理清晰,Param Miner负责帮你深挖潜力、寻找突破口。两者协同,才能形成一个高效的API安全测试闭环。最后,回归正向测试的角度来说,这套方法也同样适用于全队的研发自测。很多后端开发者自己都不知道系统里暴露了多少接口,用这套方法把API资产拉出来,清理僵尸接口、收敛不需要在公网开放的API路径,对整体安全水位是一种很好的提升。这一点,算是额外的正向防御价值吧。
先问个扎心的问题:做接口测试或者安全评估的时候,你是不是还停留在“开Burp、挂代理、点开HTTP History看请求”这个阶段?如果是,那我要说一句可能不太中听的话——你手里的Burp Suite,至少有一半的潜力被你浪费了。经常有朋友问我,说拿到一个目标之后,手工点了一圈,感觉功能就那样,接口也就那几个,然后就没有然后了。但真实的攻击面或者测试范围,真的就是你在页面上看到的那些吗?肯定不是。很多接口藏在JavaScript文件里,藏在Swagger文档里,藏在你根本不知道的路径下面。这时候,我们需要的不是被动等流量,而是主动去“挖”出这些隐藏的API端点。我就是那个靠着APIKit和Param Miner,把看似“无懈可击”的目标,在半小时内撕开一个口子的人。今天不扯虚的,直接把我压箱底的操作流程、参数配置逻辑,还有踩过的坑,全部摊开来跟你讲清楚。这篇内容不装高深,保证你能直接照做。1. 为什么你“抓包”再多,也发现不了真正的API端点1.1 被动抓包的局限性到底在哪Burp Suite默认的“抓包”行为,本质上是被动监听。你点哪里,它就记录哪里;你不点的地方,它永远不知道。这就像你在一个黑屋子里只拿了一支手电筒,照亮哪块算哪块,但屋子里的绝大部分区域,对你来说依然是盲区。更致命的是,现代Web应用的架构早就不像十年前那么简单了。前后端分离是标配,Vue、React这类单页应用(SPA)大行其道。你看到的页面,可能只是一堆静态资源。真正的业务逻辑、数据交互,全都在后端API里,而这些API的调用逻辑,往往像蜘蛛网一样错综复杂地藏在JavaScript源码里。你靠手动点几个按钮,能触发多少API?恐怕连九牛一毛都算不上。举个例子,某次我对一个后台管理系统做评估,页面只提供了“登录”和“用户信息查询”两个功能。按常规抓包思路,最多能看到两三个接口。但后来我把它的JS文件全部拉下来,用APIKit过了一遍,结果发现了包括“批量修改用户权限”“导出全部用户明文信息”在内的几十个隐藏接口。这些接口在界面上根本没有按钮,但你只要构造好请求体,直接就能调用。这种差距,就是被动抓包和主动探测之间的鸿沟。1.2 从“被动等流量”到“主动找接口”的思维转变做安全测试或者接口梳理,最核心的转变就是从“等待”变成“寻找”。你需要像搜索引擎爬虫一样,主动去扫描目录、主动去分析JS文件、主动去爆破参数。这才是一个合格的测试人员该做的事。而APIKit和Param Miner这两个插件,恰恰就是帮我们完成这个“主动寻找”过程的利器。前者侧重快速解析和梳理API资产,后者侧重深度爆破和参数发现。两者搭配,基本上可以覆盖API发现领域的大部分需求。接下来,我把这两个工具的安装、使用、组合玩法,以及很多教程里根本不会告诉你的细节,一次性讲明白。2. 用APIKit高效梳理API资产,别让它只是个摆设2.1 APIKit到底解决了什么问题很多人下载了APIKit,但用起来只是随便扫一下,感觉“也就那样”,然后就去玩别的了。这是因为它真正的价值没有被发挥出来。APIKit的核心功能之一是自动解析HTTP请求/响应中的数据。听起来很抽象?我换个说法:它能帮你从所有的流量里,把API的URL、请求方法、参数结构、认证方式这些信息,像做体检一样,一条条给你列得明明白白。就这么说吧,它是把你的“抓包数据”变成“接口资产表”的转换器。它对Postman、Swagger、OpenAPI这类标准的API定义文件也有很好的兼容性。如果你的项目里有Swagger文档,用APIKit直接导入解析,几秒钟就能把一个项目的所有API列出来。这比你自己拿着接口文档去一个个对,效率不知道高到哪里去了。2.2 APIKit的安装配置与实操演示安装过程不复杂,在Burp的BApp Store(官方扩展商店)里搜索APIKit,点击安装就行。但重点在于装完之后,你得让它干活。第一次打开APIKit时,它的主界面会有一个“API Definitions”区域,还有“API Assets”区域。你可能会问,这俩有啥区别?简单来说,Definitions是它通过菜单“Import from”主动导入进来的项目定义;Assets则是你在代理抓包时,它被动记录下来的API资产。理解了这个区别,你就知道该怎么用它了。实操里面,我建议你新建一个目标项目后,第一时间做两件事:第一步,把代理抓到的所有流量都过一遍APIKit。在Burp Proxy的历史记录里,选中你要测试的域名或目录,右键选择“Extensions -> APIKit -> Add to APIKit”。很快,它就会自动解析选中的请求,并把去重后的API信息整理到Assets里。第二步,疯狂寻找Swagger或OpenAPI定义文件。这一步是APIKit的核心功能,一定要在Proxy History里,用搜索语法点击Filter按钮,输入swagger|openapi|json这种关键词过滤,或者直接在响应体搜索swagger字段。找到后,右键点击该请求,选择“APIKit -> Import from Swagger/OpenAPI”。它会自动解析并填充进去。2.3 APIKit表格里的隐藏信息,用好了能救命很多人把API导入之后,只会盯着URL那一列看。太浪费了。我来告诉你看什么。看状态码(Status)那一列。如果同一个URL,你导入时看到它的状态码是500或者403,这暗示后端可能处理异常,或者存在未授权访问的风险。看参数(Parameters)列,不要只关心URL上的查询参数,更要关注Authorization、Cookie这类Header参数。如果一个接口在Swagger里定义了Header带Authorization,但实际请求里又没带,这中间可能就有认证绕过逻辑。看MIME类型(MIME Type),如果返回内容是application/json,但接口又没有定义复杂的返回模型,那可能存在数据泄露或安全问题。每次测试之前,先把APIKit的资产库当成你的作战地图。你都不清楚敌人有多少条路可以走,你怎么可能找到破绽?3. Param Miner:暴力美学下的隐藏参数挖掘3.1 突破思维定式,参数才是API的灵魂参数,就是API的灵魂。有时候你找到一个接口,看起来人畜无害,但一旦你往里加一个参数,它的行为就完全不一样了。比如一个查询用户信息的接口,正常请求是/api/v1/user?id=1,返回的是当前用户信息。但你瞎猜一下,如果加上?id=1&debug=true,后端会不会把包含所有用户的原始数据结构返回回来?这不是段子,这是我实际遇到过的。此类问题也恰恰是实际渗透中容易被忽略的。Param Miner这个插件,它的核心就是帮你干这个猜参数的活。而且它不是瞎猜,是有一整套规则和字典的猜。它能把隐藏在Header、Cookie、Body里的参数挖出来。3.2 Param Miner的安装与配置参数详解在BApp Store搜索Param Miner,同样一键安装。但装完之后,你直接就点“Run”是不行的,配置才是它的核心。Param Miner提供了一个非常强大的“Config”选项卡。这里可以配置很多东西,包括自定义参数名、Header名、Cookie名,以及用于爆破的字典来源。你甚至可以把之前在APIKit里整理好的接口资产,导入进来作为爆破的目标范围。在实际配置中,我建议你在“Engine”选项卡里Spider模式下,把线程数调到中等,太高容易被WAF拦,太低太慢。最关键的步骤是选择爆破的目标参数位置。有些人喜欢只爆破URL查询串(Query String),有些人喜欢爆破POST请求的Body。我的建议是,第一次跑,先只跑Header和Query String,等你熟悉了,再跑Body参数。这样做的好处是,Header参数和Query参数相对稳定,更容易定位到鉴权逻辑,不容易把你拖进庞大的业务参数泥潭里。3.3 按“猜测”精准打击:Param Miner的实际运行流程Param Miner上手不要直接就对目标全目录跑,那样既容易触发封禁,也容易迷失方向。我的个人习惯是,先从APIKit的资产列表里,筛选出那些“不需要认证”或“弱认证”的接口,专门针对这些接口运行Param Miner。假设我们现在锁定了/api/user/info这个接口。在Param Miner里,右键请求 -> Extensions -> Param Miner -> Param Miner this request。然后去“Config”选项卡,勾选上你自定义的参数为debug、test、admin等,并把它加入爆破行列。当它跑完,返回的结果中出现了debug=true,并且响应里多出了异常数据,你的战斗就正式结束了。提示:Param Miner的结果分析,并不只是看有没有报错或超时。一定要关注响应长度和响应状态码的变化。如果某个参数加上去之后,响应长度出现骤增,那大概率就是触发了什么不得了的逻辑。4. 强强联合:手把手组合操作流程,从流量到资产全掌握4.1 组合前准备:一份小而美的目标样例场景假设:我现在拿到了某个系统的主机名target.example.com,该系统的前端是Vue写的,后端接口相当丰富,但页面功能不多。我预想的组合目标是:不放过任何一个潜在API。4.2 详细操作步骤:从Burp到APIKit再到Param Miner的无缝衔接阶段一:快速摸家底打开Burp并浏览目标站点,尽可能多地点击页面功能。此时,不要只盯着浏览器的Network面板看,所有请求都已经经过Burp代理。我打开APIKit的“API Assets”选项卡,能看到它已经自动记录了若干条API信息。此刻我并不会着急去整理,继续做下一步。阶段二:JS文件大扫荡我用Burp的搜索功能,在HTTP History中过滤出所有响应类型为JavaScript的请求。全选这些JS请求,右键发送到APIKit。这一步,APIKit会尝试从JS中解析出URL和API路径,这往往能让我们发现很多未在页面中出现的管理接口,比如/admin/reset_all_password这种看着就让人兴奋的东西。阶段三:Swagger乌托邦接着我在History里搜索关键词swagger或openapi。需要注意的是,很多系统的Swagger地址是隐藏的,但Burp的搜索不会放过它。如果找到了,右键导入APIKit。导入后,APIKit会呈现出清晰的树状结构,包含每个API对应的请求方式、参数、描述、数据类型。这就是我们的财富自由时刻,因为拿到Swagger,等于拿到了整个后端服务的说明书。阶段四:针对关键资产,执行Param Miner现在我们的APIKit里面,已经有了几十上百个API资产。我选中那些需要参数但参数又不明不白的接口,发送到Param Miner。在Param Miner的配置里,我会针对某个具体的接口,同时爆破它的Header参数和Query参数。这里有几个我吃了亏之后总结出来的独特配置技巧:配置自定义Header:我通常会在“Config”里添加X-Forwarded-For、X-Real-IP、X-Original-URL。这些Header在API网关层非常常见,一旦后端信任了这些头,就可能出现IP绕过或路径绕过。配置自定义参数:我会加入callback、jsonp、_method、debug、source。当测试JSONP接口时,callback参数能用来做数据劫持验证;当测试Restful API时,_method参数可以用来做HTTP方法覆盖;debug参数则有时能帮你开启后端调试模式,直接泄露堆栈信息。保存并启用字典:Param Miner自带了很多常用参数名,但你一定要在里面勾选上Passive和Active模式,同时把参数值爆破级别调整到Medium。不要一开始就上High,一是流量太大,容易被封;二是噪音太多,难以分辨。4.3 数据分析与实战报告结束Param Miner的扫描后,我们需要打开Burp的HTTP History,设置过滤器筛选出状态码为200、201、302且响应长度异常的请求。如果发现Param Miner在某条请求后面添加了参数后,响应包体积变大,甚至出现了500错误时携带的堆栈信息,这就说明我们挖到了宝。我会把这些结果导出,并与APIKit进行交叉核对。看这个参数是不是已经在APIKit的元数据里被定义了。如果没有被定义,那就太有意思了,说明这是一个后端悄悄实现的“隐藏开关”,基本可以判断这是一个经验丰富的开发者留下的后门或调试功能。5. 常见问题与排查技巧实录,都是真金白银的教训5.1 APIKit没自动记录流量,怎么办这是很多人问的第一个问题:安装了APIKit后,为什么在Assets里看不到请求?遇到这个问题,你先不要怀疑是插件坏了。请先检查Burp的代理监听是否正常,浏览器流量是否真的走过了Burp。其次,检查APIKit的“Settings”选项卡,看是否勾选了“Enable passive scanning from Proxy history”。如果你在抓包时用的是Repeater工具重放的数据,它是不会自动被APIKit同步的,需要你右键手动选择“Add to APIKit”。5.2 Param Miner爆破时,Burp卡死到怀疑人生Param Miner跑起来,默认可能会有几十个线程同时发包,这在目标网络状况好的时候没问题,但目标一慢,或者本地内存不足,Burp就直接“未响应”了。这个问题很好解决,我要强烈建议你在使用前,去Param Miner的配置里把“Thread Count”从默认的5改成2,把“Retry on network failure”次数调低。此外,每一次爆破的目标范围别太大,最好就针对单个接口或者单一路径,宁肯多跑几次,也别指望着一个任务跑一宿。5.3 接口发现了很多,但凡是带鉴权的参数一个都跑不出来顶级的渗透并非只攻技术,也可能体现在绕过逻辑上。很多时候,Param Miner能爆破出参数,但爆破出来的参数也不是百发百中,比如会遇到需要签名或加密的参数。但这类参数恰恰能提示你,业务系统可能会存在逻辑漏洞,因为你要始终坚信,只要逻辑是人为设计的,那逻辑背后必有可乘之机。5.4 分不清Burp Suite Community和Professional的区别好多初学者在用Burp Community版本去装这些插件的时候,发现BApp Store根本没有这些扩展。这是因为许多高级插件,包括APIKit,通常在扩展商店里要求使用专业版(Professional)。但你也不用怕,有两个替代解决方法:第一,从GitHub或可信渠道下载这些插件的JAR文件,然后通过Extensions -> Add -> Select File手动安装。APIKit和Param Miner都是开源项目,完全可以装到Community版里用。第二,用类似CaSLM、Auth Analyzer这类功能比较接近的免费插件作为平替,也能达到类似效果。注意:无论是使用任何 Burp 插件,请务必确保其来源可靠。我通常只使用官方 BApp Store 或作者的 GitHub Releases 页面下载,避免引入恶意依赖或遭遇供应链风险。6. 扩展实战:APIKit与Param Miner在不同场景下的妙用6.1 在“零点击”攻击面上的应用很多时候,我们拿到一个目标,首页就是一个普通的企业官网,看起来毫无攻击面。这时候,APIKit的作用就更加突出了。我会把首页的所有JS文件拉进APIKit,分析它的API路径。往往你会发现,官网虽然只是展示型的,但它调用的后端却是一个功能复杂的CMS系统。通过APIKit分析,你能够精准定位到/api/cms/content/list这种管理接口。然后用Param Miner去跑一下这个接口的参数项,如果你运气够好,加一个?pageIndex=1&pageSize=999,也许你就能直接把这个官网的后台文章、用户数据全量拉出来。在“零点击”的状态下实现了数据资产的转移。6.2 绕过弱认证接口的另类思路有一次测试某个系统,我在APIKit的资产列表里看到有个接口/api/v2/order/query的参数是orderId。打开请求,发现它需要携带字段access_token。但我用Param Miner直接对这个接口跑了一遍“Query String”爆破,加了一个参数debug=1。结果,它返回了整个订单信息给未登录用户。这就是参数污染导致后端鉴权逻辑被绕过的典型案例。不要总想着正面攻击,有时候利用隐形参数直接绕过拦截,是一种更具性价比的开展方式。7. 总结:建立你自己的API资产“作战地图”别把APIKit和Param Miner当两个孤立的小工具用,在实战中,把它们当成一套组合拳去练习。APIKit负责帮你发现资产、梳理清晰,Param Miner负责帮你深挖潜力、寻找突破口。两者协同,才能形成一个高效的API安全测试闭环。最后,回归正向测试的角度来说,这套方法也同样适用于全队的研发自测。很多后端开发者自己都不知道系统里暴露了多少接口,用这套方法把API资产拉出来,清理僵尸接口、收敛不需要在公网开放的API路径,对整体安全水位是一种很好的提升。这一点,算是额外的正向防御价值吧。