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