pikachu靶場通關筆記36 越權01之水平越權

目錄

一、水平越權

二、賬戶功能探測

1、登錄賬號lucy

2、登錄賬號lili

3、登錄賬號kobe

三、源碼分析

四、滲透實戰

1、登錄lucy賬號

2、越權訪問lili賬戶資料

3、越權訪問kobe賬戶資料


本系列為《pikachu靶場通關筆記》滲透實戰,本文通過對越權關卡源碼的代碼審計找到產生缺陷的真實原因,講解越權關卡的原理并進行滲透實踐。如下圖所示,pikcahu靶場在越權關卡介紹的過程中講解越權的產生原因:如果使用A用戶的權限去操作B用戶的數據,A的權限小于B的權限,如果能夠成功操作,則稱之為越權操作。 越權形成的原因是后臺使用了不合理的權限校驗規則導致的,本文專門講解越權之水平越權部分的滲透實戰。

越權分為兩個關卡,分別是水平越權和垂直越權,兩者區別如下所示。?

對比項目水平越權垂直越權
定義相同權限等級用戶間,非法訪問或操作其他用戶資源、數據,如同為普通用戶,一方訪問另一方信息。不同權限等級用戶間,低權限用戶非法訪問高權限用戶資源數據,或高權限用戶訪問不應訪問的更高層級資源,如普通用戶獲取管理員權限。

一、水平越權

水平越權是指同一權限級別的用戶之間,通過非法手段訪問或操作其他用戶的資源或數據,而這些資源或數據本應是相互隔離、僅能由各自的所有者進行訪問和操作的。例如,在一個在線銀行系統中,兩個普通用戶 A 和 B,用戶 A 通過某種方式獲取了用戶 B 的賬戶信息,并能夠對其進行操作,這就發生了水平越權訪問。

類別詳情
定義同一權限級別的用戶,能非法訪問、操作其他用戶的資源或數據,這些資源本應僅由各自所有者訪問操作。
產生原因1.?參數可預測:應用用可預測參數(如連續數字 ID)標識用戶資源,攻擊者可猜測、枚舉修改參數訪問他人資源;
2.?訪問控制不足:僅依賴登錄狀態或簡單權限驗證,未嚴格檢查資源所有者,致攻擊者可越權操作
危害1.?隱私泄露:攻擊者獲取他人敏感信息,侵犯用戶隱私;
2.?數據篡改:修改他人數據,致數據不一致,影響業務運行;
3.?身份冒用:冒用他人身份操作,給被冒用者帶來麻煩損失。
防范措施1.?強化訪問控制:關鍵操作嚴格驗證,不僅驗登錄和權限,還查資源所有者與用戶是否一致;
2.?參數驗證過濾:嚴格驗證、過濾用戶輸入參數,用白名單、類型檢查、長度限制等確保參數安全;
3.?使用不可預測標識:用隨機 UUID 等不可預測標識符標識資源,增加攻擊者猜測難度;
4.?日志監控:記錄用戶操作日志,監控分析,及時發現異常訪問并處理。

二、賬戶功能探測

1、登錄賬號lucy

進入pikachu靶場越權之水平越權關卡,登錄普通賬號lucy(lucy/123456),密碼根據頁面右上角的提示“lucy/123456,lili/123456,kobe/123456”獲取,這個關卡的三個賬號都是普通用戶,沒有管理員,具體如下所示。

http://127.0.0.1/pikachu/vul/overpermission/op1/op1_login.php#

使用lucy賬號登錄后,進入了個人中心頁面,有一個“點擊查看個人信息”的頁面。

http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php

點擊查看個人信息,進入到如下頁面,可以查看lucy個人信息,此時完整URL地址如下所示。?

http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF#

此時注意到頁面右上角的提示信息“這里可以查別人的信息嗎?”,然而在lucy登錄后的頁面中,我們沒有其他鏈接地址可以查到其他人的信息。

2、登錄賬號lili

接下來我們驗證下其他的賬號是否有查看他人信息的方法,此時退出lucy賬號,回到水平越權的登錄頁面,登錄賬號lili(lili/123456),和lucy用戶一樣,當我們點擊查看個人信息后,現實的只有lili賬號的信息,完整的URL地址與頁面效果如下所示。

http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php?username=lili&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF

這里注意,本步驟2.2相對于2.1步驟lucy的查看信息僅username不同,由lucy變為lili。?

3、登錄賬號kobe

接下來我們驗證下其他的賬號是否有查看他人信息的方法,此時退出lili賬號,回到水平越權的登錄頁面,登錄賬號kobe(kobe/123456),和lucy和lili用戶一樣,當我們點擊查看個人信息后,現實的只有lili賬號的信息,完整的URL地址與頁面效果如下所示。?

http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF

這里注意,本步驟2.3相對于2.1、2.2步驟lucy和lili的查看信息僅username不同,用戶名變為lili。?

三、源碼分析

接下來分析普通用戶查看資料的頁面源碼op1_mem.php文件,其URL如下所示。

http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php

打開op1_mem.php文件,這段代碼的主要功能是實現一個用戶信息查詢和退出登錄的功能,對其源碼進行詳細注釋,具體如下所示。

<?php
// 調用 connect 函數,此函數可能用于建立與數據庫的連接,將返回的連接對象賦值給變量 $link
$link = connect();// 調用 check_op_login 函數,傳入數據庫連接對象 $link,用于檢查用戶是否已登錄
// 如果用戶未登錄,即 check_op_login 函數返回 false
if (!check_op_login($link)) {// 使用 header 函數將用戶重定向到登錄頁面 op1_login.phpheader("location:op1_login.php");
}// 初始化一個空字符串變量 $html,用于存儲后續要輸出的 HTML 內容
$html = '';// 檢查是否通過 GET 方式提交了名為 submit 的參數,并且名為 username 的參數不為空
if (isset($_GET['submit']) && $_GET['username'] != null) {// 調用 escape 函數,傳入數據庫連接對象 $link 和 $_GET['username']// 該函數可能用于對用戶輸入的用戶名進行轉義處理,防止 SQL 注入攻擊$username = escape($link, $_GET['username']);// 構建一個 SQL 查詢語句,用于從 member 表中查詢用戶名等于 $username 的所有記錄$query = "select * from member where username='$username'";// 調用 execute 函數,傳入數據庫連接對象 $link 和 SQL 查詢語句 $query// 該函數可能用于執行 SQL 查詢,并返回查詢結果$result = execute($link, $query);// 調用 mysqli_num_rows 函數,傳入查詢結果 $result,用于獲取查詢結果中的記錄數量// 如果記錄數量為 1,說明找到了對應的用戶記錄if (mysqli_num_rows($result) == 1) {// 調用 mysqli_fetch_assoc 函數,傳入查詢結果 $result,將查詢結果的第一行記錄以關聯數組的形式返回$data = mysqli_fetch_assoc($result);// 從關聯數組 $data 中提取用戶名、性別、電話號碼、地址和郵箱信息,并分別賦值給對應的變量$uname = $data['username'];$sex = $data['sex'];$phonenum = $data['phonenum'];$add = $data['address'];$email = $data['email'];// 使用 heredoc 語法將用戶信息拼接成 HTML 代碼,并追加到變量 $html 中$html .= <<<A
<div id="per_info"><h1 class="per_title">hello,{$uname},你的具體信息如下:</h1><p class="per_name">姓名:{$uname}</p><p class="per_sex">性別:{$sex}</p><p class="per_phone">手機:{$phonenum}</p>    <p class="per_add">住址:{$add}</p> <p class="per_email">郵箱:{$email}</p> 
</div>
A;}
}// 檢查是否通過 GET 方式提交了名為 logout 的參數,并且其值等于 1
if (isset($_GET['logout']) && $_GET['logout'] == 1) {// 調用 session_unset 函數,用于釋放當前會話中所有已注冊的變量session_unset();// 調用 session_destroy 函數,用于銷毀當前會話session_destroy();// 調用 setcookie 函數,將會話的 cookie 過期時間設置為當前時間減去 3600 秒,即讓該 cookie 立即過期setcookie(session_name(), '', time() - 3600, '/');// 使用 header 函數將用戶重定向到登錄頁面 op1_login.phpheader("location:op1_login.php");
}
?>

?代碼的主要功能流程如下所示。

  • 建立與數據庫的連接。
  • 檢查用戶是否已登錄,如果未登錄則重定向到登錄頁面。
  • 當用戶通過 GET 請求提交 submit 參數和 username 參數時,從數據庫中查詢該用戶名對應的用戶信息。若找到匹配記錄,則將用戶信息以 HTML 格式展示出來。
  • 當用戶通過 GET 請求提交 logout 參數且其值為 1 時,銷毀當前會話,清除會話 cookie,并將用戶重定向到登錄頁面。

然而本關卡的代碼存在水平越權安全風險,主要原因在于權限校驗機制存在問題。代碼僅對用戶的登錄狀態進行了檢查,而在查詢用戶信息時,沒有將查詢操作與當前登錄用戶進行綁定,而是直接使用了用戶通過 GET 請求傳入的 username 參數來查詢數據庫。這就意味著,只要用戶處于登錄狀態,就可以通過修改 URL 中的 username 參數,查詢到任意其他用戶的信息,從而導致同一權限級別的用戶之間出現水平越權訪問的情況。例如,用戶 A 登錄后,將 URL 中的 username 參數修改為用戶 B 的用戶名,就可以獲取到用戶 B 的個人信息。

四、滲透實戰

1、登錄lucy賬號

登錄lucy賬戶并查看個人信息,進入如下頁面,完整URL如下所示。

http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF#

2、越權訪問lili賬戶資料

將第1步驟中URL地址中的username中的lucy替換為lili,如下所示。

http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php?username=lili&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF

訪問URL后進入到了lili賬號的個人信息查看頁面,具體如下所示。

3、越權訪問kobe賬戶資料

將第1步驟中URL地址中的username中的lucy替換為kobe,水平越權滲透成功,如下所示。

http://127.0.0.1/pikachu/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF

訪問URL后進入到了kobe賬號的個人信息查看頁面,水平越權滲透成功,具體如下所示。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909847.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909847.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909847.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

javaweb -Ajax

Ajax的定義 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一種用于創建異步 Web 應用的技術&#xff0c;允許網頁在不重新加載整個頁面的情況下與服務器交換數據并更新部分內容。 Ajax的核心特點 異步通信&#xff1a;通過后臺與服務器交互&#xff0c;用…

11.OpenCV—聯合QT環境配置

1.QT環境變量配置 在Qt中配置OpenCV 3.4.6與Visual Studio 2017的步驟如下&#xff1a; 一、前期準備 安裝組件驗證 確認已安裝Qt的MSVC2017版本&#xff08;如Qt 5.12 MSVC2017 64-bit&#xff09; 檢查Visual Studio 2017的MSVC編譯器是否正常工作 OpenCV庫準備 從官網…

2025虛幻引擎一般用什么模型格式

2025虛幻引擎一般用什么模型格式 前言 積累了一些人物模型發現有的有骨骼&#xff0c;有的沒骨骼&#xff0c;有的要轉換格式&#xff0c;有的直接可以用&#xff0c;所以了解一下各種模型。 2025虛幻人物模型積累 格式轉換真麻煩。 2025.uexp、.uasset文件、.ubulk如何打…

電腦在使用過程中頻繁死機怎么辦

正興致勃勃地打游戲&#xff0c;或者趕著完成一份重要的工作文檔&#xff0c;電腦突然死機了&#xff0c;鼠標動不了&#xff0c;鍵盤也沒反應&#xff0c;只能干瞪眼干著急。電腦在使用過程中頻繁死機&#xff0c;真的太影響心情和效率了。今天咱就來好好聊聊&#xff0c;遇到…

【Java_EE】設計模式

設計模式&#xff1a;解決一些固定場景的固定套路&#xff0c;是一種代碼風格的知道指南。設計模式不止23種 1、單例設計模式 單例設計模式&#xff1a;確保一個類只有一個實例&#xff0c;提供全局訪問點 單例模式的實現方式&#xff1a; 1&#xff1a;餓漢模式 /*** 餓漢…

Nginx代理緩存靜態資源

問題描述 有兩臺服務器&#xff0c;一臺是外網的網關服務器&#xff0c;一臺是內網的資源服務器&#xff0c;但是兩臺服務器距離很遠&#xff08;跨省&#xff09;&#xff0c;頁面中依賴大量插件資源&#xff0c;加載耗時久&#xff0c;本章重點講解Nginx代理緩存靜態資源。 …

Blender 轉換為 STP:軟件操作與迪威模型網在線轉換全指南

在三維設計與工程制造領域&#xff0c;不同格式的文件承擔著各自的使命。Blender 作為一款功能強大且開源的三維建模軟件&#xff0c;被眾多設計師、藝術家以及學生廣泛使用&#xff0c;能夠創作出風格多樣、細節豐富的三維模型。而 STP 格式作為制造業通用的數據交換標準&…

WebFuture:PDF頁面去掉下載按鈕

問題描述&#xff1a;客戶要求pdf頁面不顯示下載按鈕 解決辦法&#xff1a;WF15.2版本開始會在內容管理配置增加“允許下載 PDF“開關&#xff1b;之前的版本需要替換文件來處理 1.備份網站下的base文件夾&#xff0c;路徑為/wwwroot/content/_common/base/&#xff0c;然后覆…

【JVM】- 類加載與字節碼結構2

編譯期處理&#xff08;語法糖&#xff09; java編譯器把.java源碼編譯成.class字節碼的過程&#xff0c;自動生成和轉換的一些代碼。 默認構造器 public class Candy01 { }編譯成class后的代碼 public class Candy1 {public Candy1(){super();} }自動拆裝箱&#xff08;jd…

WSL2 中安裝 cuDNN?? 的完整指南

以下是關于 ??cuDNN?? 的詳細介紹及在 ??WSL2 中安裝 cuDNN?? 的完整指南&#xff0c;結合權威資料整理而成&#xff1a; &#x1f4da; ??一、cuDNN 深度解析?? ??1. 定義與作用?? ??cuDNN??&#xff08;CUDA Deep Neural Network Library&#xff09;是…

Apache Doris FE 問題排查與故障分析全景指南

前言&#xff1a; FE&#xff08;Frontend&#xff09;是 Apache Doris 集群架構中的“大腦”&#xff0c;負責元數據管理、查詢解析和調度等關鍵任務。一旦 FE 出現問題&#xff0c;整個集群的穩定性和可用性將受到嚴重影響。因此&#xff0c;掌握 FE 故障定位與排查方法對于保…

RK AndroidFramework 內置應用可,卸載,恢復出廠設置恢復安裝

device/rockchip/rk356x/rk3568_r/preinstall_del/Android.mkdevice/rockchip/rk356x/rk3568_r/preinstall_del/Android.mk include $(call all-subdir-makefiles) 拿內置LoyversePos應用做例子 device/rockchip/rk356x/rk3568_r/preinstall_del/preinstall.mk PRODUCT_PACK…

一文了解Blob文件格式,前端必備技能之一

文章目錄 前言一、什么是Blob&#xff1f;二、Blob的基本特性三、Blob的構造函數四、常見使用場景1. 文件下載2. 圖片預覽3. 大文件分片上傳 四、Blob與其他API的關系1. File API2. FileReader3. URL.createObjectURL()4. Response 五、性能與內存管理六、實際案例&#xff1a;…

LLMs 系列實操科普(4)

六、deep research 這是 chatgpt 推出的功能&#xff0c;但我這里是免費用戶&#xff0c;一個月才有 5 次使用機會&#xff0c;而且使用的是輕量化模型版本&#xff0c;相對體驗上比較雞肋一些。 那這個深度思考研究是個什么東西呢&#xff1f; 根據 openai 對其的解釋是&…

若依框架前端調用后臺服務報跨域錯誤

背景&#xff1a;使用若依框架的前后端分離項目&#xff0c;前后端開發在同一個辦公室情況下前端調用后端服務提示如下報錯&#xff1a;Access to XMLHttpRequest at http://ip1:8089/online/layer/dataType from origin http://ip2:6090 has been blocked by CORS policy: Res…

PHP商城源碼:構建高效電商平臺的利器

一、PHP商城源碼的核心優勢 1. **開源免費&#xff0c;降低成本** PHP作為開源語言&#xff0c;擁有龐大的開發者社區&#xff0c;成熟的商城源碼&#xff08;如EcShop、OpenCart&#xff09;可免費獲取&#xff0c;大幅降低企業的技術投入成本。 2. **開發效率高** PHP語法…

【學習筆記】C++代碼規范整理

【學習筆記】C代碼規范整理 一、匿名空間namespace 匿名命名空間&#xff08;Anonymous Namespace&#xff09;是一種特殊的命名空間聲明方式&#xff0c;其作用是將聲明的成員限定在當前編譯單元&#xff08;源文件&#xff09;內可見&#xff0c;類似于使用 static 關鍵字修…

數學復習筆記 29 不定積分

前言 復習的時候時常復習一下以前復習的高數&#xff0c;溫故而知新&#xff0c;可以為師矣。現實生活中有非常多讓我難受的事情&#xff0c;賢者模式的時候也會對一些自己的行為嗤之以鼻&#xff0c;復習考研對其他三門科目都沒有學出來正反饋&#xff0c;只能從數學這兒找一…

微軟因安全漏洞禁用黑暗環境下的Windows Hello面部識別功能

面部識別技術在各種場景中的應用日益廣泛&#xff0c;但身份欺詐事件仍時有發生&#xff0c;這表明即使面部識別也并非萬無一失。在某些情況下&#xff0c;這些系統可能被攻擊者利用。 漏洞發現與應對措施 近期&#xff0c;微軟在Windows 10和11系統中禁用了黑暗環境下使用Wi…

產品經理課程(十五)實戰點評(3)

&#xff08;一&#xff09;復習 需求文檔是產品的說明書 需求文檔包含&#xff1a;修訂記錄、背景、主要流程、詳細功能邏輯、數據上報&#xff0c;發布策略 bug也是需求文檔的一部分 &#xff08;二&#xff09;案例講解 案例一&#xff1a; 一個版本里面的4-5個功能點就比…