burp靶场-API testing

burp靶场

1.服务端主题

1.API测试

https://portswigger.net/web-security/api-testing#top

1.1 api探测api路径,数据格式,交互方法,参数是否必选:

## 使用Burp Scanner来爬取 API
https://portswigger.net/burp/vulnerability-scanner
GET /api/books HTTP/1.1
Host: example.com
联想:/api/books/mystery

## 插件:查找js中的api:
https://portswigger.net/bappstore/0e61c786db0c4ac787a08c4516d52ccf
## 重点注意:
API 处理的输入数据,包括必选参数和可选参数。
API 接受的请求类型,包括支持的 HTTP 方法和媒体格式。
速率限制和身份验证机制

## 查找公开的api文档说明:它以 JSON 或 XML 等结构化格式编写
## OpenAPI 规范可以从文件或 URL 中解析。该扩展还可以使用目标 ->
## 站点地图上下文菜单中的发送到OpenAPI 解析器选项直接从 URL 获取 OpenAPI 规范
## 插件:OpenAPI Parser
https://portswigger.net/bappstore/6bf7574b632847faaaa4eb5e42f1757c

## 使用burp Scanner来爬取API:
/api
/swagger/index.html
/openapi.json
寻找基本路径:
/api/swagger/v1
/api/swagger
/api

##
GET /api/tasks- 检索任务列表。
POST /api/tasks- 创建一个新任务。
DELETE /api/tasks/1- 删除任务。

## 识别数据包类型
## 插件:尝试转换数据类型:使用插件修改
https://portswigger.net/bappstore/db57ecbe2cb7446292a94aa6181c9278
触发泄露有用信息的错误。
绕过有缺陷的防御。
利用处理逻辑的差异。例如,API 在处理 JSON 数据时可能是安全的,但在处理 XML 时容易受到注入攻击。

## fuzz的参数需要结合系统业务来进行收集整理:
PUT /api/user/update
/update的列表来模糊路径的位置 。 deleteadd


1.2 寻找隐藏的参数:

## 挖掘参数:
插件:Param Miner
https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943

## 目录发现:
https://portswigger.net/burp/documentation/desktop/tools/engagement-tools/content-discovery

在这里插入图片描述

实验1:发现api

https://portswigger.net/web-security/api-testing/lab-exploiting-api-endpoint-using-documentation
Lab: Exploiting an API endpoint using documentation
要求:
要解决该实验室问题,请找到公开的 API 文档并删除carlos. 您可以使用以下凭据登录您自己的帐户:wiener:peter。

靶场测试前先登陆账户:
burp官网账户密码:
xxxxxxxx@qq.com
.p$'|7WD6[Qb8^7%zTc&k3Y/R!y=JD.+

https://0a6c000d04452323804fbde700e50064.web-security-academy.net/
使用以下凭据登录您自己的帐户:wiener:peter

Your username is: wiener

Your email is: wiener@normal-user.net

登陆站点后,浏览功能点,点击功能,到处浏览,查看功能:my account站点,填写测试数据,burp 代理查看流量历史:
在这里插入图片描述
发现可疑数据包:
在这里插入图片描述
将数据包发送到repeapter:

## 尝试修改请求方法:PATCH GET POST...
## 尝试测试path的payload:
/api/user/wiener
/api/user/
/api/
/api


payload发现泄露的api信息:
在这里插入图片描述
测试泄露的api:
使用泄露的api进行用户删除操作,造成危害:
DELETE /api/user/carlos
在这里插入图片描述

实验2:找到未使用的接口:

Lab: Finding and exploiting an unused API endpoint
实验要求:
要解决该实验室问题,请利用隐藏的 API 端点购买Lightweight l33t Leather Jacket。您可以使用以下凭据登录您自己的帐户: wiener:peter
站点逐个点击功能,burp查看流量包:
点击对应商品:将GET /api/products/1/price查询商品数据流量包发送到repeater:

在这里插入图片描述
在这里插入图片描述
请求包添加请求头:Content-Type: application/json
在这里插入图片描述
根据上面的测试,请求需要提供json数据格式:
在这里插入图片描述
提供参数:将价格修改为1或者0,发现修改成功:
在这里插入图片描述
修改价格为0,将商品添加到购物车,支付,发现实现了0元购:
在这里插入图片描述

实验3:利用批量分配漏洞

实验室:利用批量分配漏洞
Lab: Exploiting a mass assignment vulnerability
通过前端web api接口给后端的实例对象的属性赋值,从而修改了对象属性:
登陆站点:wiener:peter,选择商品——》添加到购物车——》产生订单——》支付——》发现信用额度不够
burp查看数据包,GET与POST的数据包,将两个包发送到repeater,对比参数:发现隐藏的请求参数:
“chosen_discount”:{“percentage”:0}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再次刷新购物车订单,发现支付费用为0:
在这里插入图片描述

实验4:服务端参数污染

实验室:利用查询字符串中的服务器端参数污染
Lab: Exploiting server-side parameter pollution in a query string
目的:重置administrator,administrator登陆并删除用户carlos
浏览站点,使用忘记密码功能进行密码重置,输入administrator,使用burp 代理历史查看数据包,查看到忘记密码的数据包,查看739,740,741三个与忘记密码操作相关的数据包:
在这里插入图片描述
对username参数进行测试:尝试参数值:administrator,adminstratorx(一个大概率不存在的参数),查看响应包:
Invalid username,这说明了administrator用户名存在,administratorx用户名不存在,可以用来枚举,但是这里的目的不是枚举用户名。
在这里插入图片描述
构造其他参数进行测试,测试服务是否接受其他参数,如添加【&需要使用url编码】:&x=y,username=administrator%26x=y
从响应结果看出服务大概率是接受多个参数,但是参数x是错误不支持的。

在这里插入图片描述
测试:username=administrator#【#号使用url编码】,username=administrator%23
使用#截断参数测试,发现了参数:Fileld
在这里插入图片描述
测试:&field=x#【&与#需要url编码】,username=administrator%26field=x%23
这个payload指定一个fileld参数的值
在这里插入图片描述
接下来,对field参数的值进行爆破:
在“入侵者”>“有效负载”中,单击“从列表添加”。选择内置的服务器端变量名负载列表,然后开始攻击。
查看结果。请注意,带有用户名和电子邮件负载的请求都会返回响应200
在这里插入图片描述
在这里插入图片描述
爆破成功:得到一个email参数
在这里插入图片描述
在忘记密码的js中发现了,重置密码的url:/forgot-password?reset_token=${resetToken}
在这里插入图片描述
后续操作:
在“代理”>“HTTP 历史记录”中,查看/static/js/forgotPassword.jsJavaScript 文件。注意密码重置端点,它引用了 reset_token参数:

/forgot-password?reset_token=${resetToken}

在Repeater选项卡中,将参数值field从 更改email为reset_token:

username=administrator%26field=reset_token%23

发送请求。请注意,这会返回一个密码重置令牌,记下重置令牌:6ws18f561lomm78lgqn51skk22qaakjm

在 Burp 的浏览器中,在地址栏中输入密码重置端点。添加您的密码重置令牌作为参数的值 reset_token。例如:

/forgot-password?reset_token=123456789

设置新密码。

使用您的密码以用户身份登录administrator。

转到管理面板并删除carlos以解决实验。

在这里插入图片描述
/forgot-password?reset_token=6ws18f561lomm78lgqn51skk22qaakjm
浏览器打开重置密码的url:url中附加管理员administrator的参数,重置密码为123test:
在这里插入图片描述
在这里插入图片描述

实验5:REST URL服务端参数污染:

Lab: Exploiting server-side parameter pollution in a REST URL
进入靶场:点击功能,密码重置功能,尝试重置administrator用户的密码,进入burp查看代理历史,关注到下面两个流量包:

判断行为:
在 Burp 的浏览器中,触发用户密码重置administrator。

在“代理”>“HTTP 历史记录”中,注意POST /forgot-password请求和相关的 /static/js/forgotPassword.jsJavaScript 文件。

右键单击该POST /forgot-password请求并选择“发送到转发器”。

在中继器选项卡中,重新发送请求以确认响应是否一致。

发送各种带有修改后的username参数值的请求,判断输入是否放在服务器端请求的URL路径中而不进行转义:

提交 URL 编码administrator#作为参数的值username。

请注意,这会返回一条Invalid route错误消息。这表明服务器可能已将输入放置在服务器端请求的路径中,并且该片段已截断了一些尾随数据。请注意,该消息还引用了 API 定义。

将 username 参数的值从 更改administrator%23 为 URL-encoded administrator?,然后发送请求。

请注意,这还会返回一条Invalid route错误消息。这表明输入可能被放置在 URL 路径中,因为该?字符指示查询字符串的开头,因此会截断 URL 路径。

将参数值username从 更改administrator%3F为./administrator然后发送请求。

请注意,这将返回原始响应。这表明该请求可能访问了与原始请求相同的 URL 路径。这进一步表明输入可以放置在 URL 路径中。

将 username 参数的值从 更改为./administrator ,../administrator然后发送请求。

请注意,这会返回一条Invalid route错误消息。这表明该请求可能访问了无效的 URL 路径。

在这里插入图片描述
根据响应判断服务端处理的模式:

1.提交 URL 编码administrator#作为参数的值username。

请注意,这会返回一条Invalid route错误消息。这表明服务器可能已将输入放置在服务器端请求的路径中,并且该片段已截断了一些尾随数据。请注意,该消息还引用了 API 定义。

在这里插入图片描述

2. 将 username 参数的值从 更改administrator%23 为 URL-encoded administrator?,然后发送请求。
请注意,这还会返回一条Invalid route错误消息。这表明输入可能被放置在 URL 路径中,因为该?字符指示查询字符串的开头,因此会截断 URL 路径

在这里插入图片描述

3.将参数值username从 更改administrator%3F为./administrator然后发送请求。
请注意,这将返回原始响应。这表明该请求可能访问了与原始请求相同的 URL 路径。这进一步表明输入可以放置在 URL 路径中。

在这里插入图片描述

4.将 username 参数的值从 更改为./administrator ,../administrator然后发送请求。

请注意,这会返回一条Invalid route错误消息。这表明该请求可能访问了无效的 URL 路径。

在这里插入图片描述

利用报错查询到敏感api接口:
## 利用:
将用户名参数的值从 更改../administrator为../%23。注意 Invalid route响应。

逐渐添加更多../序列,直到达到../../../../%23请注意,这会返回 Not found响应。这表明您已导航到 API 根目录之外。

在此级别,将一些常见的 API 定义文件名添加到 URL 路径。例如,提交以下内容:

username=../../../../openapi.json%23

请注意,这会返回一条错误消息,其中包含以下用于查找用户的 API 端点:

/api/internal/v1/users/{username}/field/{field}

请注意,此端点指示 URL 路径包含一个名为 的参数field。

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b0d723b33a514674b01a1fe0898b3b36.png

利用此漏洞
username使用已识别端点的结构 更新参数的值。为参数添加无效值 field:

username=administrator/field/foo%23

发送请求。请注意,这会返回一条错误消息,因为该 API 仅支持电子邮件字段。

添加email作为参数的值field:

username=administrator/field/email%23

发送请求。请注意,这将返回原始响应。这可能表明服务器端应用程序识别注入的field参数并且该参数 email是有效的字段类型。

在“代理”>“HTTP 历史记录”中,查看/static/js/forgotPassword.jsJavaScript 文件。识别密码重置端点,参考参数 passwordResetToken:

/forgot-password?passwordResetToken=${resetToken}

在Repeater选项卡中,将参数值field从更改email为passwordResetToken:

username=administrator/field/passwordResetToken%23

发送请求。请注意,这会返回一条错误消息,因为passwordResetToken应用程序设置的 API 版本不支持该参数。

使用/api/您之前确定的端点,更改参数值中的 API 版本username:

username=../../v1/users/administrator/field/passwordResetToken%23

发送请求。请注意,这会返回一个密码重置令牌。记下这一点。

在 Burp 的浏览器中,在地址栏中输入密码重置端点。添加您的密码重置令牌作为参数的值reset_token。例如:

/forgot-password?passwordResetToken=123456789

设置新密码。

使用您的密码登录administrator。

转到管理面板并删除carlos以解决实验。

填充无效的字段foo,查看报错:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

浏览器修改漏洞:

使用泄露的token重置管理员密码:
https://0a3600be04d9717c818f8a7d00fc0045.web-security-academy.net/forgot-password?passwordResetToken=y6ig3hyvx0n4p1322r5j7fjqe38r1in8
在这里插入图片描述
修改完成后使用管理员用户登陆,进入管理面板,删除用户carlos,完成靶场:
在这里插入图片描述

与owasp对标:

https://portswigger.net/web-security/api-testing/top-10-api-vulnerabilities
https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/

参考:

https://mp.weixin.qq.com/s/9-2C7vPHPHcTXBJWH9_tlg
https://blog.csdn.net/m0_50841600/article/details/135456276
  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值