安全工具:使用 BurpSuite Macro 重放多个数据包

  渗透测试过程中,需要对多个参数存在关系的数据包(例如手动输入兑换码,HTTP数据包层面上就是后一个数据包的请求参数需要前一个数据包中响应体中的数据)按序进行重放时,通过编写代码或录制BurpSuite宏可以提升工作效率。

  以下是PortSwigger提供的靶场,这两个靶场使用宏或Trubo Intruder会更加方便,本文后续演示以“无限金钱逻辑漏洞”为例。

  该漏洞为逻辑漏洞:用户在商城每次下单都可以使用同一个折扣券,商城中存在“充值卡”商品,用户可使用折扣券购买“充值卡”商品并充值余额(折扣券打折30%,使用折扣券购买10$的充值卡需要花费7$账户余额,之后用户可以手动输入充值卡为自己账户余额充值10$,即每次进行上述操作账户余额都会增加3$),用户可以无限次使用折扣购价格买充值卡并充值账户余额,使余额一直增加。

  具体的操作流程如下:

  1. 使用优惠券购买充值卡

    image-20230919164046471

  2. 获取充值卡余额兑换代码

    image-20230919164204778

  3. 手动输入充值卡,增加账户余额

    image-20230919164304869

  上述流程中的关键数据包(高亮部分)如下:

image-20230919164710702

  1. 将充值卡添加至购物车

    image-20230919164834821

  2. 使用优惠券

    image-20230919164921915

  3. 付款

    image-20230919165115111

  4. 获得充值卡代码

    image-20230919165153731

  5. 兑换充值卡,增加余额

    image-20230919165230762

  6. 查看账户余额,发现余额已经增加(100$变为103$)

    image-20230919165410749

  分析:可按顺序多次重放上述数据包(参数需要变更)增加用户余额,第五个请求数据包中的gift-card参数来自第四个数据包的响应体中(此处对购买余额充值卡并获得充值卡代码后,手动兑换该充值卡)。

  Settings–Project–Sessions–Session handling rules–Add

image-20230920141632889

  在Details选项卡中,在Rule actions选项中点击AddRun a macro

image-20230920141817845

  在打开的Session handling action editor窗口中Select macro选择Add,新建一个宏

image-20230920142105989

  选择录制宏需要使用的数据包(按住Ctrl并使用鼠标点选),点击OK

image-20230920142613129

  因为第四、第五个数据包存在关系,第四个数据包响应中存在充值卡代码,而第五个数据包请求中需要将充值卡代码作为参数提交。

  配置第四个数据包,将响应体中的充值卡代码作为参数提取出来。

  选中第四个数据包,点击Configure item

image-20230920143212492

  在Custom Parameter locations in response中,点击Add,以提取响应体中作为后续参数的数据

image-20230920143409425

  在Parameter name输入框中命名该参数,并使用鼠标在下方响应数据包中选中该参数,参数会被高亮处理,点击OK

image-20230920143620588

  此时在Custom parameter locations in reponse列表中已经能看到刚刚自定义的参数,点击OK

image-20230920143948333

  配置第五个数据包,将上述从第四个数据包响应体中提取的参数配置到第五个数据包中的请求中。

  选中第五个数据包,点击Configure item

image-20230920144310960

  在Parameter handling中,修改gift-card参数为Derive from prior response,并选择参数来源为Response 4,点击OK

image-20230920144511676

  完成参数配置后,点击Test macro以测试宏,确保宏运行过程中无异常响应,且宏功能正常(在本例中,运行一次宏用户余额会+3$)

  测试宏之前,余额为103$。

image-20230920145736871

  点击Test macro测试宏。

image-20230920150050541

image-20230920150135128

  测试宏之后,余额为106$。

image-20230920150202372

  可以看到账户余额增加3$,证明宏功能正常。

  选择宏的使用范围,在上述测试宏成功后,点击OK关闭配置窗口,直至返回Session handing rule editor窗口(会话处理规则编辑器),在Scope(范围)选项卡中,选择宏使用范围。此处在URL scpoe中选择Include all URLs,即在上述Tool scope中勾选的模块中所有URL请求之前都会运行该宏,点击OK

image-20230920150458062

  此时在Session handling rules中能查看到刚刚添加的宏。

image-20230920150935187

  经过上述配置,此时通过Burp的Intruder、Repeter等工具模块发送任意一个数据包都可以触发宏,从而增加用户账户金钱。

  将查看用户账号状态的请求包发送至Intruder中,通过重放该数据包触发宏。

  Position选项卡中无需任何配置,Payload选项卡中,Payloadset中的Payload type选择 Null Payloads ,在Payload Setting中填写执行次数,也可以选择 Continue indefinitely 一直执行,待满足条件后手动停止执行。

image-20230920151813400

  资源池选项(Resource pool)中,选择Create new resource pool,并将最大并发数(Maximum concurrent requests)设置为1。因为宏是有数据包先后顺序的,Burp intruder中默认资源池的并发数为10,多个并发会导致数据包收发顺序错乱,从而导致宏无法正常工作。

image-20230920151851437

  点击Start attack开始攻击,此时查看数据包,可以看到账户余额一直在增加。

image-20230920152537911

image-20230920152553668

  在SettingsSessionsSession handling rules中选中刚刚添加的会话处理规则,点击Remove删除即可删除会话规则,删除后使用Burp的Intruder、Repeter等模块就不会触发宏,或者也可以自行修改该会话处理规则的触发条件和模块,此处不再演示。

image-20230920152840938

  在SettingsSessionsMacros中选中刚刚添加的宏,点击Remove删除即可删除宏。

image-20230920153233746