Linux 權限提升
🔍 1. 資訊收集
1
id
可能屬於 disk、adm、docker、lxd 等群組
Disk 提權、ADM 提權、Docker 提權、LXC/LXD 提權
5
find / -type f -iname "*flag*" 2>/dev/null
含有 "flag" 關鍵字檔案
資訊收集
6
ls -la /home/*
主目錄內有敏感檔案如 flag 或證書
資訊收集
7
find / -type f -iregex '.*\(pass|secret|key|token|config|env\).*' 2>/dev/null
含敏感關鍵字檔案,如 secret、key
資訊收集
8
find / -type f \( -iname ".env" -o -iname "*.env" -o -iname ".git*" -o -iname "*config*" \) 2>/dev/null
常見敏感檔案 (.env, .git)
資訊收集
9
find / -type f -path "*/.ssh/*" 2>/dev/null
SSH 私鑰或憑證
資訊收集
10
cat ~/.bash_history 或 cat ~/.zsh_history
歷史命令含敏感資訊如密碼
資訊收集
11
find / -type f -iregex '.*\(bak|backup|old|tar|zip\)$' 2>/dev/null
系統中容易被忽略的備份檔案
資訊收集
12
find /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin -type f -exec getcap {} \;
檢查有 cap_setuid 權限檔案
Linux Capabilities 提權
13
cat /etc/crontab
發現 cron job 路徑可寫
Cron Job 濫用
14
screen -v
版本 ≤ 4.5.0 存在漏洞
Screen Vulnerable (版本 ≤ 4.5.0)
15
find / -path /proc -prune -o -type f -perm -o+w 2>/dev/null
發現 root 執行嘅可寫 script
通配符濫用 (tar 等)
16
cat /etc/logrotate.conf 和 grep "create|compress" /etc/logrotate.conf
logrotate 設定不當
日誌輪轉 Logrotate
17
ps aux | grep tmux
tmux 會話有 socket 未保護
tmux 劫持 (Hijacking Tmux Sessions)
18
ss -tulnp 或 netstat -tulnp
開放的服務可能被利用
被動流量捕獲或服務利用
19
cat /etc/resolv.conf
DNS 配置洩漏內部網域資訊
資訊收集
20
showmount -e <ip>
發現 no_root_squash 的 NFS 設定
弱 NFS 權限 (Weak NFS Privileges) 提權
21
find / -perm -4000 -type f 2>/dev/null
可疑 SUID 檔案 (可能被利用)
GTFOBins 路徑濫用
22
ls -l mem_status.py
發現 SUID Python 檔案引用可寫入模組
Python 函式庫劫持
23
pkexec -u root id
polkit 版本存在漏洞
Polkit 波爾基特 (CVE-2021-4034 / PwnKi)
24
readelf -d <binary> | grep PATH
RUNPATH 指向可寫入路徑
共享對象劫持 (Shared Object Hijacking)
25
find / -perm -o+w -type d 2>/dev/null
發現可寫目錄,可用作共享對象劫持
共享對象劫持 (Shared Object Hijacking)
26
cat /etc/passwd
發現異常使用者或提示
資訊收集
⚠️
用户组检查: 首先,通过
id命令检查当前用户所属的组别,确定是否属于具有特殊权限的组,如disk、adm、docker、lxd等。这些组的成员可能拥有对系统关键部分的访问权限,可能导致权限提升。使用者群組檢查: 首先,透過id指令檢查目前使用者所屬的組別,確定是否屬於具有特殊權限的群組,如disk、adm、docker、lxd等。這些群組的成員可能擁有對系統關鍵部分的存取權限,可能導致權限提升。 號系统版本信息: 接下来,使用
uname -a和cat /etc/lsb-release获取内核版本和操作系统版本信息。这有助于识别已知的漏洞和可利用的漏洞利用方式。系統版本資訊: 接下來,使用uname -a和cat /etc/lsb-release取得核心版本和作業系統版本資訊。這有助於識別已知的漏洞和可利用的漏洞利用方式。 號sudo 权限: sudo 權限: 使用
sudo -l檢查目前使用者的 sudo 權限配置,識別可能的不安全配置或可利用的權限提昇路徑。號使用sudo -l检查当前用户的 sudo 权限配置,识别可能的不安全配置或可利用的权限提升路径。文件搜索与检查: 然后,使用一系列
find命令和其他文件检查命令,搜索系统中可能包含敏感信息或可利用的文件和目录。这些步骤有助于收集潜在的漏洞利用信息。檔案搜尋與檢查: 然後,使用一系列find指令和其他檔案檢查指令,搜尋系統中可能包含敏感資訊或可利用的檔案和目錄。這些步驟有助於收集潛在的漏洞資訊。 號计划任务与服务: 检查计划任务配置(如
cat /etc/crontab)和正在运行的服务(如ss -tulnp),识别可能存在的安全漏洞或可利用的服务。排程任務與服務: 檢查排程任務配置(如cat /etc/crontab)和正在執行的服務(如ss -tulnp),識別可能存在的安全漏洞或可利用的服務。 號特殊权限文件: 搜索具有特殊权限的文件(特殊權限檔案: 搜尋具有特殊權限的檔案
🚀 2. 權限提升
GTFOBins : 路徑濫用
✅ 步驟1️⃣:先進行本地系統枚舉
你需要找到可疑的執行檔或權限:
找 sudo 權限:
如果結果裡面有
NOPASSWD: /usr/bin/something→ 記下something這個指令,去 GTFOBins 搜索!
找 SUID 程式(root 權限執行檔):
看到的可執行檔,例如
/usr/bin/nmap或/usr/bin/vim→ 記下來,去 GTFOBins 搜索!
找 capabilities:
如果出現像
/usr/bin/vim.basic = cap_dac_override+ep→ 把vim記下來,去 GTFOBins 搜索!
✅ 步驟2️⃣:打開 https://gtfobins.github.io/
✅ 步驟3️⃣:搜尋你剛剛枚舉到的執行檔
👉 例如你找到 /usr/bin/nmap
去 GTFOBins 主頁,在「Search」欄輸入:
nmap
✅ 步驟4️⃣:點進去之後看分類
會有幾個 section:
Shell(怎麼用它打出反彈 shell 或本地 shell)SUID(如果有 SUID 權限怎麼利用)sudo(如果可以 sudo 執行這個程式怎麼提權)File Write/File Read(可讀可寫檔案)Capabilities(如果有 cap 權限可以怎麼繞過限制)
👉 你根據你找到的權限去看對應的章節!
✅ 步驟5️⃣:跟著 payload 做!
例如:
如果
nmap有 SUID 權限,網頁上會寫:
代表你只需要輸入這兩行,你就 root 了!
✅ 實戰示範:
舉例:
你枚舉出
/usr/bin/vim.basic = cap_dac_override+ep
去 GTFOBins 搜尋
vim找到
Capabilities章節跟著網頁 payload:
然後就拿到 shell!
利用 vim.basic : 通配符濫用
1️⃣ 找出有 cap_dac_override 權限的執行檔
執行以下指令:
這個指令會幫你列出有 cap 權限的檔案。
✅ 如果你看到像這樣的結果:
代表 vim.basic 可以用來打開系統檔案。
2️⃣ 利用 vim.basic 開啟 /etc/passwd
vim.basic 開啟 /etc/passwd輸入:
這樣可以用 vim 打開 /etc/passwd,一般來說是不能修改的,但是因為有 cap_dac_override,所以可以!
3️⃣ 編輯 /etc/passwd
/etc/passwd打開後:
找到最上面那一行:
把
x刪掉,變成:
存檔離開(在 vim 輸入
:wq然後按Enter)
4️⃣ 使用 su 切換成 root
su 切換成 root現在可以直接輸入:
然後直接按 Enter,不需要密碼,就會變成 root。
通配符濫用 (tar )
一、枚舉階段(找漏洞)
1️⃣ 枚舉 cron job
如果需要 sudo:
2️⃣ 看 cron job 裡面有沒有 *(星號)
範例:
✅ 發現有星號 * 且執行者是 root,表示有機會。
3️⃣ 確認用的程式是不是有漏洞
tar
✅ 支援 --checkpoint-action=exec=CMD
非常常見漏洞
zip
部分版本 ✅
可嘗試
rsync
✅ 可利用 --rsync-path
少見但強大
find
可利用 -exec
較少用作通配符攻擊,但可以配合不安全參數利用
4️⃣ 檢查目錄可寫權限
如果有 w(寫入)權限,代表你可以放入惡意檔案。
二、利用階段(實戰 Exploit)
👉 以下以 tar 為例(最常見)
1️⃣ 建立 root.sh(放入惡意指令)
把
youruser換成你的帳號。
2️⃣ 建立特殊檔名(讓 tar 自己執行)
3️⃣ 等待 cron job 自動執行(或手動觸發)
當 root 的 cron job 執行 tar 時,它會自動執行
root.sh
4️⃣ 檢查 sudo 權限
應該會看到 NOPASSWD: ALL
代表可以無密碼 sudo。
5️⃣ 提權成功
拿到 root!
逃離受限 Shell
✅ 一、Command Injection(指令注入逃脫)
💡 什麼意思?
當受限 shell 只允許執行固定參數指令(例如只能用 ls -l),
你可以把額外指令透過參數注入進去執行!
✅ 範例:
或
➡ 後面的 pwd、whoami 雖然 shell 不允許直接打,但透過反引號 / $() 注入執行!
✅ 二、Command Substitution(命令替換逃脫)
💡 什麼意思?
用反引號 `command` 或 $() 方式,
讓 shell 在允許指令參數中偷偷執行其他指令。
✅ 範例:
➡ 它會執行 id,把結果當參數傳給 ls,實現逃脫。
✅ 三、Command Chaining(命令鏈逃脫)
💡 什麼意思?
利用 ;、&&、|| 等符號,
在受限 shell 裡同時執行多個指令。
✅ 範例:
➡ ls -l 之後就直接打開 /bin/sh!
如果 ; 被過濾,可以試 && 或 |:
✅ 四、Environment Variables(環境變數逃脫)
💡 什麼意思?
修改 PATH 環境變數或定義特殊變數,
讓 shell 使用到可控路徑中的惡意程式或開放指令。
✅ 範例:
➡ 下次執行 ls 就會變成執行你自定義的 /bin/sh。
✅ 五、Shell Functions(自定義函數逃脫)
💡 什麼意思?
如果 shell 允許定義 function,你可以建立一個函數覆蓋原本的指令, 讓它執行惡意命令。
✅ 範例:
➡ 下次執行 ls 時直接彈出 shell!
LXC / LXD 提權
✅ 條件判斷
執行:
如果 groups 裡面有 lxd ,代表可以用 LXD 提權!
✅ LXD 提權完整步驟
Step by step:
1️⃣ 解壓 Alpine 映像檔(通常題目會給 alpine.tar.gz):
2️⃣ 初始化 LXD(遇到提示都選預設):
如果出錯 must be run as root,可以忽略或先嘗試 sudo lxd init
如果不行就直接用
lxc指令。
3️⃣ 匯入 Alpine 映像:
4️⃣ 建立特權容器:
5️⃣ 把主機掛載進容器:
6️⃣ 啟動容器:
7️⃣ 進入容器拿 root:
從這裡就可以 root 身份操作整個主機,讀 /etc/shadow、改 SSH Key 通通行。
二、Docker 提權
✅ 判斷方法:
如果有 docker 群組 → 可以用 docker 提權!
✅ Docker 提權方式
-v /:/mnt:把主機的根目錄掛到容器/mntchroot /mnt sh:進入主機 root現在你就是 root 了!
三、Disk 群組提權
✅ 判斷方法:
如果有 disk 群組 → 代表可以存取 /dev/sda* 裝置。
✅ 利用方法
使用
debugfs或fdisk、mount去掛載硬碟,讀取敏感檔案:
可以直接讀出 root 密碼 hash。
四、ADM 群組利用
✅ 判斷方法:
如果有 adm 群組 → 可以讀取 /var/log/ 日誌。
✅ 利用方向
閱讀 log,發現敏感資料
常見線索:
cron job 執行的內容
認證憑證或密碼被誤記錄在 log
有人手誤打過
sudo密碼被記錄下來
Linux Capabilities 提權
1️⃣ 什麼是 Linux Capabilities?
Linux capabilities 是一種安全設計, 可以讓特定執行檔獲得部分 root 權限(不需要整個 root)。
這樣可以:
控制更細粒度的權限
比傳統的 sudo、setuid 更靈活
2️⃣ 常見危險 Capabilities(遇到要特別注意)
cap_dac_override
允許繞過檔案讀寫執行權限,可以打開或修改任何檔案
cap_sys_admin
超級大權限,幾乎等同 root,可以掛載系統、修改設定
cap_setuid
允許程式改變自己 UID,可以偽裝成其他使用者(甚至 root)
cap_setgid
允許改變 GID,同樣可以透過群組提權
cap_net_bind_service
允許在低端口(1024以下)開伺服器,一般需要 root 權限
cap_sys_ptrace
允許 attach & 偵錯其他程序,可能繞過保護或提權
3️⃣ 如何列舉系統所有 capabilities
舉例結果:
✅ 把結果拿去 GTFOBins 查詢,或者判斷是否可直接用來繞過限制。
4️⃣ 利用範例:
✅ (範例 1)利用 cap_dac_override
假設找到:
代表可以繞過檔案權限,直接打開 /etc/passwd 編輯!
步驟:
將:
改成:
儲存後:
直接 root!
✅ (範例 2)非互動模式修改 /etc/passwd
如果不想開互動編輯,可以一行解決:
然後直接 su root 即可!
✅ (範例 3)cap_sys_admin 利用
如果有
cap_sys_admin,可以透過mount掛載設備、使用pivot_root或直接改系統設定。或使用
fuse、modprobe等間接方法取得 shell。
5️⃣ 如何清除 Capabilities(系統管理員角度)
-r 代表 remove capabilities。
6️⃣ 小結表(考試 / CTF 快速參考)
cap_dac_override
高
可繞過檔案存取權限
編輯 /etc/passwd 讓 root 無密碼
cap_sys_admin
非常高
幾乎 root 全能
掛載、注入核心模組、直接系統控制
cap_setuid
高
可以把程式提權執行
利用程式讓自己 UID 變 root
cap_net_bind_service
中
開低埠服務
開 80 埠、443 埠 listener,偷資料、釣魚
cap_sys_ptrace
高
可以 attach 其他 process,看 memory、注入 shell
偵錯其他程式取得密碼或注入 payload
7️⃣ 終極一行 — 列舉 + 分析
找出系統中最值得關注的 binary。
Screen Vulnerable
✅ 漏洞確認步驟:
1️⃣ 查看 screen 版本:
如果小於或等於 4.5.0:
✅ 確認漏洞存在。
2️⃣ 查看是否有 setuid 權限:
看到 rws(setuid)就是有漏洞。
✅ 利用流程(完整 PoC)
步驟一:建立惡意 so 檔案
這個程式碼的作用是:
把
/tmp/rootshell改成 root 擁有給予 setuid 權限
並清理
ld.so.preload
編譯:
步驟二:建立 rootshell
編譯:
步驟三:利用 Screen 輸入 payload
這行會創建
/etc/ld.so.preload且內容是/tmp/libhax.so每當有 binary 載入共享函式庫時,會執行
dropshell
步驟四:觸發
screen自己就是 setuid binary,觸發之後/tmp/rootshell已經有 root 權限。
步驟五:拿到 root
✅ 你就 root 了!
Cron Job 濫用
✅ 枚舉步驟
查看所有 world-writable 檔案(所有人可寫)
找到像這種:
用
ls -la查看權限:
如果看到:
代表以 root 執行但可被你編輯,超危險!
3️⃣ 確認 cron job 正在執行
使用
pspy(無 root 權限也能用)觀察:
當 pspy 顯示:
✅ 證明 cron job 正在定時用 root 執行這個 script!
4️⃣ 如何利用漏洞
✅ (步驟一)備份原始腳本
✅ (步驟二)編輯 backup.sh
把你的反向 shell 加到腳本最後面:
或者手動編輯加入:
✅ (步驟三)開啟 netcat 等待連線
✅ (步驟四)等待 cron job 觸發(通常 3 分鐘內)
你就會看到 root shell 連進來!
5️⃣ 成功範例
✅ 你就 root 了!
匿名 Kubelet API 存取
4️⃣ 常見攻擊面
✅ 匿名 Kubelet API 存取
Kubelet API 常開放在
10250port匿名訪問測試:
若有回應 PodList,代表匿名可讀 Pod 資訊。
5️⃣ 利用 kubeletctl 工具進行自動化操作
安裝方式:
常用指令範例:
列出 Pod:
執行指令 (例如查看 ID):
掃描可 RCE 的 Pod:
取得 Token:
取得 CA 證書:
6️⃣ 利用取得的 token / ca.crt 操作 kubectl
驗證權限:
如果擁有
createpod 權限,可以建立掛載主機根目錄的惡意 Pod。
7️⃣ 惡意 Pod YAML 範例 (掛載主機 / )
/ )建立 Pod:
確認 Pod 運行:
進入 Pod 內部、提取主機 root 資料:
日誌旋轉 Logrotate
1️⃣ 什麼是 Logrotate?
logrotate 是 Linux 系統自動管理日誌(log)的工具。
主要功能:
定期壓縮、歸檔、刪除舊日誌
減少磁碟空間使用
預設由 cron 週期性執行
2️⃣ 可被利用的漏洞條件
我們必須擁有可寫入的日誌檔案
logrotate 必須以 root 或高權限 執行
系統中使用的 logrotate 版本為易受攻擊版本:
3.8.6
3.11.0
3.15.0
3.18.0
3️⃣ 漏洞原理 (logrotten)
透過將惡意 payload 注入日誌檔案
當 logrotate 運行,並根據
create選項重新建立 log 時惡意內容會被執行,達到本地提權
4️⃣ 確認系統配置
查看全域設定檔:
確認是否使用
create選項(代表會執行重新建立行為):
如果看到:
✅ 表示可以用 logrotten 利用此行為!
5️⃣ 準備漏洞工具 logrotten
6️⃣ 準備 Payload
常見反向 shell 一行式:
例如:
7️⃣ 開啟本地監聽器
等待反彈 shell。
8️⃣ 執行漏洞攻擊
/tmp/tmp.log就是你有寫權限的日誌檔案路徑。
9️⃣ 結果
等 cron job 執行 logrotate 後,你的 listener 裡會看到連線:
✅ 提權成功!
tmux 劫持 (Hijacking Tmux Sessions)
🎯 攻擊前提
系統上有一個 tmux session 在執行
該 tmux 的 socket 檔案權限設定為某個群組 (例如 devs) 可讀寫
你目前的帳號就是該群組成員
✅ Step by step — 流程
① 確認是否有 tmux session 執行中
🔎 觀察輸出結果,例如:
👉 找到 -S /shareds 就是 socket 路徑
② 檢查 socket 權限
你會看到類似結果:
⚠ root devs 表示這個 socket 檔案屬於 root,群組是 devs,且 devs 群組成員可以 rw(可讀寫)
③ 確認你是不是 devs 群組成員
舉例結果:
✅ 有看到 devs,恭喜,可以劫持!
④ 附加到該 tmux session
或者
👉 你現在已經進入 root 的 tmux session 了!
⑤ 在 tmux 裡確認身分
你應該會看到:
✅ root get!
弱 NFS 權限 (Weak NFS Privileges) 提權
攻擊前提:
NFS 服務有掛載目錄 (例如
/tmp、/var/nfs/general)設定中存在
no_root_squash,代表 root 權限不會被降權,可以直接以 root 身份寫檔我們有掛載權限,可以從本機掛載 NFS
✅ Step by step — 流程教學
① 掃描 NFS 匯出
範例:
輸出範例:
✅ 表示 /tmp 和 /var/nfs/general 對所有人開放
② 檢查是否有 no_root_squash
no_root_squash如果可以,查看 /etc/exports (通常需要有主機 shell 權限):
範例輸出:
✅ 有 no_root_squash,代表 root 可以上傳 suid 二進位!
③ 本地建立 SUID Shell 二進位檔
建立 shell.c
編譯:
⚠ 這個 shell 程式執行時會直接用 root 權限開 bash
④ 將 NFS 掛載到本地
例如:
👉 現在 /mnt 對應遠端 /tmp
⑤ 上傳 SUID Shell 並設定權限
✅ 設定 suid bit(u+s)讓 shell 可以以 root 身份執行
⑥ 回到受害主機低權限帳號
在目標機 /tmp 找到 shell:
應該看到:
✅ rws 代表 suid bit 已經設置好了
⑦ 執行提權!
結果會是:
🎉 root get!
被動流量捕獲 (Passive Traffic Capture)
① 用 tcpdump 開始抓封包
範例:監聽 eth0 介面並將流量存到檔案
可以限定抓取 HTTP 流量 (port 80)tcpdump -i eth0 port 80 -w /tmp/http.pcap
⚠ 通常會讓它跑一段時間,等有人登入或傳輸敏感資料
② 停止抓包
按 Ctrl+C 停止,封包會存到指定的 pcap 檔案中
③ 在本機分析封包
✅ 方法 A:使用 Wireshark (圖形化)
把
/tmp/capture.pcap拿到本機開 Wireshark,過濾:
或用
Follow TCP Stream查看明文帳密
✅ 方法 B:使用 PCredz (自動提取憑證)
下載 PCredz 工具:
分析封包:
👉 它會自動列出明文密碼、Cookie、HTTP Basic Auth、SMTP/POP3/IMAP 密碼等
✅ 方法 C:使用 net-creds
👉 一樣可以自動分析 pcap 抓明文帳密
④ 嘗試用抓到的帳密登入系統
登入 SSH / FTP
嘗試 sudo 提權
嘗試 SMB hash 破解
✅ 攻擊範例(範本)
Linux 核心漏洞 (Kernel Exploits) 權限提升
✅ 前置條件
你已經有低權限 shell
可以使用
uname -a知道目標核心版本
✅ Step by step 實戰流程
① 查看目標核心版本
範例輸出:
✅ 紀錄版本: 4.4.0-116-generic
② Google 搜尋
👉 使用 Google 搜尋:
或
找到適用的 Exploit 程式碼(例如 Dirty Cow、或者專屬版本漏洞 PoC)。
③ 將 exploit 上傳目標主機
如果主機有 wget 或 curl:
或
⚠ 如果不行,可以 SCP 或透過你的反向 shell 傳輸。
④ 編譯漏洞程式
⚠ 如果沒有 gcc,可以試著找預編譯版本或在同核心版本環境編譯後上傳。
⑤ 執行 exploit
正常會出現提示類似:
此時已經有機會是 root shell!
⑥ 確認身分
預期輸出:
🎉 成功提權為 root!
Shared Libraries 共享庫
🎯 攻擊前提條件:
受害機器 sudo 設定中保留
env_keep+=LD_PRELOAD有一個 sudo 可執行的程式(不是 GTFOBins 也可以)
目標 sudo 指令可以執行,且允許注入 preload
📜 攻擊流程:
① 確認 sudo 權限及 LD_PRELOAD 是否可利用
✅ 如果看到:
並且有類似:
代表此攻擊路徑可以嘗試!
② 建立惡意共享函式庫
用以下內容建立 root.c:
_init()函式會在共享庫被載入時自動執行。
③ 將共享庫編譯成 so 檔
📌 小知識:
-fPIC:產生位置無關代碼-shared:輸出為共享庫-nostartfiles:不載入標準初始化代碼
④ 開啟監聽(若要 reverse shell)或直接執行觸發
若是反彈 shell,可以準備 nc:
如果只是要直接取得 root shell,直接進行下一步。
⑤ 透過 sudo 搭配 LD_PRELOAD 觸發權限提升
🔎 這行指令會:
利用 sudo 執行 apache2
在執行時預先載入我們的 root.so
自動呼叫
_init(),取得 root shell
⑥ 驗證是否為 root 權限
預期輸出:
🎉 你已經 root 了!
共享對象劫持 (Shared Object Hijacking)
📝 【1️⃣ 資訊收集】
① 搜尋系統中有 SUID 權限的執行檔
找出哪些程式擁有 root 權限執行。
② 使用 ldd 查看目標 SUID 執行檔的動態函式庫依賴
ldd 查看目標 SUID 執行檔的動態函式庫依賴範例:
檢查是否有非標準路徑(例如
/development/)或自訂的libshared.so。
③ 確認 RUNPATH 或 RPATH
範例:
找到可疑目錄(如果是 everyone writable 即為攻擊點)。
④ 確認該路徑是否「可寫」
drwxrwxrwx代表所有人可寫,非常危險!
🛠 【2️⃣ 攻擊步驟】
以下步驟與前面教學相同,我整合補全:
① 找到執行檔及函式庫
② 測試執行,找到缺少的函式 (symbol)
通常會出現:
③ 撰寫惡意函式庫 (libshared.so)
exploit.c:
④ 編譯惡意共享函式庫
⑤ 執行 payload,觸發 root shell
你應該會看到:
Python 函式庫劫持
✅ 1️⃣ 錯誤的寫入權限(Wrong Write Permissions)
當目標 Python 腳本以 root 或高權限執行,並且導入的模組有 world-writable 權限,我們可以直接修改該模組來注入惡意指令。
➡️ 攻擊步驟
① 確認有 SUID 權限的 Python 腳本
輸出範例:
② 檢查 Python 腳本內容
範例內容:
③ 搜尋被匯入模組 psutil 的實際路徑
psutil 的實際路徑然後確認 __init__.py 的權限:
若結果顯示 world writable,如:
✅ 可以被修改,代表存在漏洞!
④ 編輯該模組,注入惡意指令
在 virtual_memory() 函式開頭加入:
⑤ 執行目標 Python 腳本
若看到輸出:
🎉 權限提升成功!
✅ 2️⃣ 利用 Library 路徑優先順序 (Library Path Hijacking)
➡️ 攻擊條件
導入的模組位於 sys.path 中較低優先權目錄(如
/usr/local/lib/...)。sys.path 中較高優先權路徑可寫(如
/usr/lib/python3.8/)。
➡️ 攻擊步驟
① 檢查 Python 的模組搜尋順序
② 檢查 psutil 預設安裝位置
輸出範例:
若此路徑在 sys.path 裡較低順位,而 /usr/lib/python3.8 可寫,代表可以進行 hijacking。
③ 確認目錄可寫權限
若為:
✅ World writable,漏洞存在!
④ 建立同名惡意模組
建立 /usr/lib/python3.8/psutil.py:
⑤ 執行目標 Python 腳本
如果執行時出現:
🎉 劫持成功!
✅ 3️⃣ 利用 PYTHONPATH 環境變數 (PYTHONPATH Hijacking)
➡️ 攻擊條件
有 sudo 權限可用
SETENV執行python3。可自訂 PYTHONPATH 指向惡意模組所在目錄。
➡️ 攻擊步驟
① 檢查 sudo 權限
結果範例:
✅ 可以搭配環境變數執行 python3!
② 在 /tmp/ 建立惡意模組 psutil.py
/tmp/ 建立惡意模組 psutil.py內容如下:
③ 使用 PYTHONPATH 執行
如果輸出結果顯示:
🎉 PYTHONPATH 劫持成功!
✅ 完整整理表格 (一眼看懂)
錯誤寫入權限 (Wrong Write)
目標腳本以 root 執行 & 匯入模組有 world writable 權限
修改該模組,在函式開頭插入 os.system(‘id’),執行觸發
Library Path Hijacking
sys.path 高優先權路徑可寫,低順位路徑存在目標模組
在高優先權目錄中放置同名惡意模組,覆蓋原本模組
PYTHONPATH 環境變數劫持
sudo 可使用 SETENV 選項執行 python3
自訂 PYTHONPATH 指向 /tmp/ 下惡意模組,sudo 執行目標程式
🎯 Linux 憑證獵取
🧨 A. Files 類憑證搜尋
🔍 1. 設定檔(config)
🔎 搜尋內容中的關鍵詞:
🔍 2. 資料庫檔案
看重點:cert9.db 和 key4.db → Firefox 儲存的登入資訊
🔍 3. Notes 筆記檔
這會找出所有 .txt 和「沒有副檔名」的筆記檔,內文往往藏密碼。
🔍 4. Scripts 腳本檔
重點:檢查腳本是否包含 hardcoded 密碼
🔍 5. CronJobs 排程
這些定時任務的腳本中可能 hardcode 密碼、API key。
🔍 6. SSH 金鑰
🔑 私鑰開頭通常是 -----BEGIN OPENSSH PRIVATE KEY-----
🔓 若未加密可直接用來連線!
🔁 B. History 類憑證搜尋
🔍 Bash 歷史記錄
看是否執行過 su、腳本參數帶密碼,或 curl/post 提交密碼。
💾 C. Memory & 快取類
🔧 Mimipenguin 提取記憶體中的登入密碼
✅ 會回傳格式:
🔧 LaZagne(支援超過 30 種工具憑證)
🎯 支援項目包括:
Shadow / passwd
GNOME keyring / Kwallet
SSH / Git / AWS / Docker
Firefox, Chromium, Filezilla, etc
🔓 Firefox 解密瀏覽器登入
🔧 用 firefox-decrypt.py 解密:
輸出範例:
📚 D. 日誌紀錄中的痕跡
🔍 有用的日誌檔:
🔍 搜尋關鍵字:
Linux 憑證系統與破解 (to be edit ...)
🔐 Linux 憑證系統與破解攻略
📘 一、認識三大密碼檔案
/etc/passwd
所有使用者帳號基本資料,可被所有人讀取
/etc/shadow
密碼雜湊資訊(加密密碼),只有 root 可讀
/etc/security/opasswd
過往使用過的舊密碼雜湊,用於 PAM 防止重複使用
📂 /etc/passwd 格式說明
/etc/passwd 格式說明範例:
1
使用者名稱
2
密碼資訊(x 代表存放在 shadow)
3
UID(使用者 ID)
4
GID(群組 ID)
5
使用者全名 / 備註
6
使用者家目錄
7
shell(登入使用的殼)
⚠️ 特別注意:
若密碼欄位是
x→ 使用/etc/shadow若密碼欄位是空白或
::→ 無需密碼登入(重大安全漏洞)若誤設寫入權限 → 可自行刪除 root 密碼達成提權
範例提權技巧:
🧱 /etc/shadow 格式說明
/etc/shadow 格式說明範例:
1
使用者名稱
2
密碼雜湊(或 *、! 表示無法密碼登入)
3
上次密碼修改時間(從 1970 年起的天數)
4~9
密碼策略設定(最小、最大使用時間等)
🔐 雜湊格式解析(Field 2)
格式:
常見加密演算法:
$1$
MD5
$2a$
Blowfish
$5$
SHA-256
$6$
SHA-512(大多數新版預設)
🗝 /etc/security/opasswd(舊密碼紀錄)
/etc/security/opasswd(舊密碼紀錄)PAM 模組
pam_unix.so會儲存舊密碼防止重複使用檔案格式通常為:
比如:
✅ 可從這裡挖到舊密碼 hash,特別是 $1$ → MD5 很好破解
🧨 破解流程(清晰步驟)
✅ 第一步:備份檔案
✅ 第二步:解除 Shadow 合併
🔥 使用 Hashcat 破解密碼
🧠 破解 Linux 雜湊(SHA-512)
參數說明:
-m 1800:表示 SHA-512 ($6$)-a 0:字典攻擊rockyou.txt:常用密碼字典
🧠 破解 Opasswd 中的 MD5 密碼
先建立 MD5 hash 清單:
破解:
參數說明:
-m 500:表示 Linux MD5 ($1$)
✅ 破解成功後可見:
🛠 若無 Hashcat,可用 John the Ripper:
查看已破解:
🎯 3. ZERO day
(CVE-2021-3156) ,(CVE-2019-14287) (sudo)
CVE-2021-3156
sudo < 1.9.5p2 且系統為易受影響版本
利用公開 POC,下載編譯 sudo-hax-me-a-sandwich,執行指定 ID 即 root
CVE-2019-14287
sudoers 允許特定指令,透過 sudo -u 指定 ID
執行 sudo -u#-1 指令,利用 -1 映射為 root (UID 0)
✅ 1️⃣ CVE-2021-3156 (Heap-based Buffer Overflow)
影響 sudo 版本 < 1.9.5p2,大多數 Linux 發行版本在多年來都存在此漏洞。
➡️ 攻擊流程
① 確認 sudo 版本
若結果為:
並且系統版本對應 Ubuntu 20.04 或其他受影響版本,即可進行下一步。
② 確認作業系統版本
範例結果:
③ 下載 exploit
④ 執行 exploit
確認目標系統編號 (如 1 為 Ubuntu 20.04.1)
⑤ 執行指定版本 ID
正常會看到:
🎉 root 權限成功!
✅ 2️⃣ CVE-2019-14287 (Sudo Policy Bypass)
當 sudo 設定允許執行特定指令時,即使只執行
sudo -u#-1也可以拿到 root 權限。
➡️ 攻擊流程
① 查看 sudo 權限
若有類似:
代表可執行 id 指令。
② 檢查使用者 UID
範例結果:
✅ 知道自己 UID 是 1005。
③ 利用 sudo -u#-1 觸發 root 權限
會回傳:
然後就可以:
取得 root shell!
Polkit 波爾基特 (CVE-2021-4034 )/ PwnKi
✅ Polkit 簡介
Polkit 是 Linux 系統用來授權不同使用者或應用程式以 root 權限執行操作的授權服務。
pkexec指令就像 sudo,可以用來以 root 或其他使用者身份執行指令。
✅ 漏洞背景(CVE-2021-4034)
此漏洞存在於
pkexec工具中,是一個記憶體損毀 (Memory corruption) 弱點。利用此漏洞可以在系統上以非特權使用者取得 root 權限。
該漏洞隱藏長達 12 年,2022 年初正式公開,編號 CVE-2021-4034(PwnKit)。
✅ 環境確認步驟
① 檢查系統是否安裝有 pkexec:
② 確認 polkit 版本(可選):
若版本較舊(通常 < 0.120)都可能受影響。
✅ Exploit 利用步驟
1️⃣ 下載 Exploit PoC
如果沒有 git,可以嘗試 wget 或 curl。
2️⃣ 編譯 POC
✅ 如果沒裝 gcc,可以先確認是否能用 sudo apt install gcc 安裝,或嘗試透過其他管道上傳已編譯好的二進制。
3️⃣ 執行 Exploit
⚠️ 成功執行後會直接進入 root shell,但初始是 /bin/sh,可以執行:
切換成 bash shell。
4️⃣ 驗證 root 權限
預期輸出:
🎉 成功取得 root!
✅ 小總結:
CVE-2021-4034 (PwnKit)
系統有 pkexec,版本未修補,通常 <0.120
下載 POC → 編譯 → 執行 ./poc → 切 bash → id 查看 root
Dirty Pipe (CVE-2022-0847)
✅ Dirty Pipe 簡介
Dirty Pipe 係 Linux 核心 5.8 ~ 5.17 之間一個重大漏洞,允許非特權用戶寫入有 read 權限但冇寫權限嘅檔案(例如 /etc/passwd),從而達到權限提升 (root)。
✅ 利用條件:
Linux kernel 版本 5.8 ~ 5.17。
目標系統可執行
git、gcc或有辦法上傳已編譯的 exploit。有
read權限嘅目標檔案(例如/etc/passwd)。
✅ 利用 Dirty Pipe 權限提升 step by step
1️⃣ 確認 Kernel 版本
如果版本係 5.8 到 5.17 之間,即有機會存在漏洞。
2️⃣ 下載 Dirty Pipe PoC Exploit
3️⃣ 編譯 Exploit
完成之後會產生:
exploit-1exploit-2
4️⃣ 使用 exploit-1 修改 /etc/passwd
/etc/passwdExploit-1 會備份
/etc/passwd,修改 root 密碼成「piped」,再 restore。 執行:
成功後會提示可以用 su -c 指令直接取得 root。 驗證:
預期結果:
🎉 已經成功 pop root shell!
5️⃣ 使用 exploit-2 劫持 SUID Binary
exploit-2 可以利用 Dirty Pipe 臨時劫持指定嘅 SUID binary 以 root 權限執行。
5-1️⃣ 找到 SUID binary
常見可利用目標:/usr/bin/sudo、/usr/bin/passwd、/usr/bin/chsh 等等。
5-2️⃣ 使用 exploit-2 指定 SUID binary
例如使用 /usr/bin/sudo:
執行後會顯示類似:
驗證 root 權限:
結果:
✅ 利用完成後記得:
恢復
/etc/passwd(exploit 已自動備份)。刪除
/tmp/sh臨時文件。如果係 CTF 環境或測試機唔需要處理,但真實環境需要清理痕跡。
✅ 小結
exploit-1
修改 /etc/passwd root 密碼為 piped,彈出 root shell
./exploit-1
exploit-2
臨時劫持指定 SUID binary 執行 root shell
./exploit-2 /usr/bin/sudo
Netfilter 權限提升漏洞 (CVE-2021-22555、CVE-2022-25636、CVE-2023-32233)
✅ 什麼係 Netfilter?
Netfilter 係 Linux 核心中負責封包過濾、NAT 及流量控制嘅模組,透過 iptables、nftables 等機制運作。 而由於 Netfilter 在核心層處理封包,歷年嚟多次發現可導致本地用戶提權到 root 嘅漏洞。
✅ 1️⃣ CVE-2021-22555 (Linux 2.6 ~ 5.11)
利用步驟:
1️⃣ 確認 kernel 版本
✅ 如果係 5.11 以下就有可能中招。
2️⃣ 下載漏洞 PoC
3️⃣ 編譯
4️⃣ 執行
5️⃣ 成功會彈出 root shell:
結果:
✅ 2️⃣ CVE-2022-25636 (Linux 5.4 ~ 5.6.10)
利用步驟:
1️⃣ 確認 kernel 版本
✅ 如果係 5.4 ~ 5.6.10 之間即有機會中招。
2️⃣ 下載 exploit
3️⃣ 編譯
4️⃣ 執行
5️⃣ 成功彈出 root shell 後驗證:
結果:
⚠ 注意:此 exploit 有機會令系統 kernel crash,實機請小心測試!
✅ 3️⃣ CVE-2023-32233 (Linux 最高到 6.3.1)
原理:
利用 nf_tables 中匿名 sets 嘅 Use-After-Free 漏洞,通過 race condition 攻擊提權。
利用步驟:
1️⃣ 下載 exploit
2️⃣ 編譯
3️⃣ 執行
4️⃣ 成功後會自動彈出 root shell:
結果:
✅ 小結整理表
CVE-2021-22555
Kernel 2.6 ~ 5.11
OOB write + namespace
穩定度較高
CVE-2022-25636
Kernel 5.4 ~ 5.6.10
Heap out-of-bounds
可能造成 kernel panic
CVE-2023-32233
Kernel ≤ 6.3.1
nf_tables UAF + race
較複雜,易影響系統穩定性
🔗 5. 連鎖漏洞
最后更新于
这有帮助吗?