瑞星卡卡安全论坛
小水滴儿 - 2008-12-28 0:49:00
我的也这样子了,,怎么办啊,,网站都已经停了两天了。。我的是租万网的空间,,怎么加防注代码啊????希望高手们帮忙
浏阳河数据 - 2008-12-28 1:30:00
:default3: 同命相邻.... 我也中得很惨....还没有找到好的解决方法,,,请求高手指点.... 顶上
浏阳河数据 - 2008-12-28 1:32:00
这个是今天有位朋友提示的:可以参与试一下
防水代码,这是简约的做法
简单的,只是堵住注水,只要把以下代码粘贴到数据库打开的页面,比如 conn.asp等页,从源头堵住注水:
function CheckInputSecurity()
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
'由于管理需要的不同,get方法和post提交时,对关键字的敏感程序要求不一样,post提交可以低一些
'post
Fy_In = "'|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare"
'get
Fy_In_get = "'|*|%|@|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare"
Fy_Inf = split(Fy_In,"|")
'--------对POST部份进行安全验证------------------
If Request.Form<>"" Then
For Each Fy_Post In Request.Form
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>0 Then
Response.Write "<Script Language=JavaScript>alert('严重警告:请不要在参数中包含非法字符尝试注入!');</Script>"
Response.End
End If
Next
Next
End If
'----------------------------------
'--------GET部份进行安全验证-------------------
Fy_Inf = split(Fy_In_get,"|")
If Request.QueryString<>"" Then
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
Response.Write "<Script Language=JavaScript>alert('严重警告:请不要在参数中包含非法字符尝试注入!');</Script>"
Response.End
End If
Next
Next
End If
end function
call CheckInputSecurity()
浏阳河数据 - 2008-12-28 1:32:00
'--------这是另外一个补充版本的防注水代码------------------
'这个需要创建一个 t_web_sys_hackinfo 的 表,保存了黑客攻击的信息,名手攻击时的IP,所传的值,访问页面\时间等....
'由于需要保存数据,这个要求放在数据库打开之后.
'--------定义部份------------------以下为代码:
function check_user_input()
'--------版权说明------------------
'SQL通用防注入程序
'--------定义部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
'自定义需要过滤的字串,用 "|" 分隔
'由于管理需要的不同,get方法和post提交时,对关键字的敏感程序要求不一样,post提交可以低一些
'post
Fy_In = "'|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare"
'get
Fy_In_get = "[email=]'|*|%|@|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare[/email]"
'----------------------------------
Fy_Inf = split(Fy_In,"|")
'--------POST部份------------------
If Request.Form<>"" Then
For Each Fy_Post In Request.Form
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>0 Then
'--------写入数据库--头--------
Conn.Execute("insert into t_web_sys_hackinfo(IP,link,way,inputname,content) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','POST','"&Fy_Post&"','"&replace(Request.Form(Fy_Post),"'","''")&"')")
'--------写入数据库--尾--------
Response.Write "<Script Language=JavaScript>alert('严重警告:请不要在参数中包含非法字符尝试注入!');</Script>"
Response.Write "非法操作:系统做了如下记录<br>"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:POST<br>"
Response.Write "提交参数:"&Fy_Post&"<br>"
Response.Write "提交数据:"&Request.Form(Fy_Post)
Response.End
End If
Next
Next
End If
'----------------------------------
'--------GET部份-------------------
Fy_Inf = split(Fy_In_get,"|")
If Request.QueryString<>"" Then
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
'--------写入数据库--头--------
Conn.Execute("insert into t_web_sys_hackinfo(IP,link,way,inputname,content) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','GET','"&Fy_Get&"','"&replace(Request.QueryString(Fy_Get),"'","''")&"')")
'--------写入数据库--尾--------
Response.Write "<Script Language=JavaScript>alert('严重警告:请不要在参数中包含非法字符尝试注入!');</Script>"
Response.Write "非法操作:系统做了如下记录<br>"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作时间:"&Now&"<br>"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交参数:"&Fy_Get&"<br>"
Response.Write "提交数据:"&Request.QueryString(Fy_Get)
Response.End
End If
Next
Next
End If
end function
call check_user_input()
创建表的代码:
CREATE TABLE [dbo].[t_web_sys_hackinfo] (
[id_] [int] IDENTITY (1, 1) NOT NULL ,
[IP] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[link] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[inputname] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[way] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[content] [text] COLLATE Chinese_PRC_CI_AS NULL ,
[dateandtime] [datetime] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[t_web_sys_hackinfo] ADD
CONSTRAINT [DF_t_web_sys_hackinfo_dateandtime] DEFAULT (getdate()) FOR [dateandtime]
GO
水上飞云 - 2008-12-28 10:11:00
这木马与asp页面无关.
解决办法如下:
1.打开mssql企业管理器,将Windows身份验证用户:BUILTIN\Administrators的安全性访问选为:拒绝访问.
2.打开查询分析器,将非法字符串replace掉,本人做了个小代码段,遍历数据库所有的[字符串字段],将定义的字符串去掉,可以为大家效劳一下.
/***********定义要去除的字符,请注意,可能不止一条,我的服务器就查到两条************/
declare @delStr nvarchar(500)
set @delStr='<script src=http://cn.daxia123.cn/cn.js></script>'
--set @delStr='<script src=http://cn.jxmmtv.com/cn.js></script>'
/****************************************/
/**********以下为操作实体************/
set nocount on
declare @tableName nvarchar(100),@columnName nvarchar(100),@tbID int,@iRow int,@iResult int
declare @sql nvarchar(500)
set @iResult=0
declare cur cursor for
select name,id from sysobjects where xtype='U'
open cur
fetch next from cur into @tableName,@tbID
while @@fetch_status=0
begin
declare cur1 cursor for
--xtype in (231,167,239,175) 为char,varchar,nchar,nvarchar类型
select name from syscolumns where xtype in (231,167,239,175) and id=@tbID
open cur1
fetch next from cur1 into @columnName
while @@fetch_status=0
begin
set @sql='update [' + @tableName + '] set ['+ @columnName +']= replace(['+@columnName+'],'''+@delStr+''','''') where ['+@columnName+'] like ''%'+@delStr+'%'''
exec sp_executesql @sql
set @iRow=@@rowcount
set @iResult=@iResult+@iRow
if @iRow>0
begin
print '表:'+@tableName+',列:'+@columnName+'被更新'+convert(varchar(10),@iRow)+'条记录;'
end
fetch next from cur1 into @columnName
end
close cur1
deallocate cur1
fetch next from cur into @tableName,@tbID
end
print '数据库共有'+convert(varchar(10),@iResult)+'条记录被更新!!!'
close cur
deallocate cur
set nocount off
/*****以上为操作实体******/
huangguaxuan - 2008-12-28 10:38:00
非常感谢水上飞云 ,想问一下,你如何确定和asp页面无关呢?
huangguaxuan - 2008-12-28 11:05:00
以前备份做的勤所以一直都是用还原数据库的方法,刚看到水上飞云的代码,我尝试了一下,省下了不少麻烦,但是不能替换ntext和text的,这两种就只能手动替换了吗?
水上飞云 - 2008-12-28 11:15:00
我的数据库服务器没查到有text 和ntext类别的出问题,不知你们的如何?
水上飞云 - 2008-12-28 11:18:00
原帖由 huangguaxuan 于 2008-12-28 10:38:00 发表
非常感谢水上飞云 ,想问一下,你如何确定和asp页面无关呢?
估计这木马是在服务器里运行着的,所以数据库访问权限会很高,我将windows访问权限设为"拒绝访问"后几天都没事.
huangguaxuan - 2008-12-28 12:10:00
谢谢水上飞云,希望将windows访问权限设为"拒绝访问"后能消停会,快被折腾死了,哎,以前做的那些防注入对于这次的攻击完全派不上用场也许是做的还不到家。尝试中。。。有了结果再说吧。。。。
xutingxin - 2008-12-28 12:40:00
解决办法:1 严格过滤 request.form 和 request.querystring 获取的内容,坚决不用 request("name") 这样的方式获取值,凡是采用 cookies 保存的内容,尽量不要用在sql语句里进行查询数据库操作;2 重要的用户资料尽量采用 session 验证,因为session是服务器端的,客户端无法伪造数据,除非他有你服务器的权限。
可以采用以下的防范 get 、post以及cookies 注入的代码来过滤 sql 注入攻击:
<%
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+()]+([email=select%7Cupdate%7Cinsert%7Cdelete%7Cdeclare%7C@%7Cexec%7Cdbcc%7Calter%7Cdrop%7Ccreate%7Cbackup%7Cif%7Celse%7Cend%7Cand%7Cor%7Cadd%7Cset%7Copen%7Cclose%7Cuse%7Cbegin%7Cretun%7Cas%7Cgo%7Cexists)[/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[/email]+]*)"
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 注入的攻击了。
allenxing - 2008-12-28 22:41:00
我用一下楼上朋友的防注入代码先试试!
激情跑龙套 - 2008-12-29 11:13:00
去除数据库中被注入的内容可以 用查询分析器,直接Update
update 表名
set 字段名 = replace(字段名,'<script src=http://cn.daxia123.cn/cn.js></script>','')
可是 我发现text类型的 好像有些字符被注入的内容修改过一些:default2:
晴空朗月001 - 2008-12-29 11:29:00
replace 对text 不关用的.
peterpan2009 - 2008-12-29 12:00:00
我的也是,上周5中的招。
peterpan2009 - 2008-12-29 12:17:00
原帖由 daveeyang 于 2008-12-26 23:16:00 发表
目前发现一个问题了,是注入式攻击,通过对访问日志的查看,终于发现了访问有问题,来自IP-121.42.214.238(河北省邯郸市)的访问里面,有一段:
GET /news/more.asp classid=18;dEcLaRe%20@S%20VaRcHaR(4000)%20SeT%20@s=cAsT(0x4445434C4152452040542056415243484152283235352
按照你的方法,我也在我的log中找到了注水代码。
我是2008-12-25 09:56:35被连续攻击三次, 来自IP 210.222.179.98,来自韩国。
然后在2008-12-28 又被攻击两次,一次IP来自韩国,另一次来自香港。
。。。
不过随着仔细浏览最近几天的Log, 发现攻击越来越多,来自很多不同的IP。
。。。
看来这次是大虾123木马大爆发了
hooyun - 2008-12-29 14:30:00
我是虚拟主机,服务商说是我的问题,我自己要处理没有权限,数据恢复后半小时又中!!!
:default11:
林子AA - 2008-12-29 14:44:00
我也是这样子,现在两个小时被改一次,前天我用MSSQL的触发器对新闻数据表做了动作,昨天一天没落问题,今天其他数据表又中了,现在我只好把每个表都加上触发器了
把我的触发器代码给大家看下,可以做修改用
CREATE TRIGGER DB_News_Info_TR ON DB_News_Info
FOR INSERT,UPDATE
AS
begin
Save Transaction TReturn
declare @Text nvarchar(255)
select @Text=(select NewsTitle from Inserted)
if charindex('<',@Text)>0 or charindex('>',@Text)>0
begin
RAISERROR('请不要对数据库进行恶意攻击,数据库已记下你的IP,情况恶劣我们报警处理!顺便代本网全体用户问候您
妈!',16,1)
Rollback Transaction TReturn
end
end
激情跑龙套 - 2008-12-29 14:49:00
楼上强人:default3:
网络探头 - 2008-12-29 17:01:00
打开mssql企业管理器,将Windows身份验证用户:BUILTIN\Administrators的安全性访问选为:拒绝访问.
照着你上面的做了,怎么SQL打不开了。怎么办呢?
枯黄的秋色 - 2008-12-29 17:18:00
原帖由 网络探头 于 2008-12-29 17:01:00 发表
打开mssql企业管理器,将Windows身份验证用户:BUILTIN\Administrators的安全性访问选为:拒绝访问.
照着你上面的做了,怎么SQL打不开了。怎么办呢?
你要点那个“编辑 SQL Server 注册属性”,然后选择“使用 SQL Server 身份验证”,输入登录名和密码就可以了。
其实我也将Windows身份验证选为拒绝访问,但是不管用。
另外,问个菜鸟问题,为什么攻击者的IP每次都是不一样的呢?
huangguaxuan - 2008-12-29 19:45:00
我测试了这段,似乎少了过滤declare ,在get的过滤字符串里加上declare更安全
'get
Fy_In_get = "[email=]'|*|%|@|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|declare[/email]"
另外post过滤时,把select过滤掉,因为我的程序里需要用到action=select这样的,结果导致了所有的提交都失效了,但是又怕在post里不过滤select会不安全。。。矛盾。。。。。。开始没有发现原因,导致暂时删除这段防注入代码,结果一删除立刻就又被注入了。
今天有加上了,明天再看看这段代码是否真的防住这次的攻击。
流浪的熊 - 2008-12-29 22:45:00
现在还有个问题,为了防这个垃圾daxia123,加了防注代码,跟楼上的差不多,过滤了N多字符,但问题来了,网站无法正常上传图片了,数据可以提交到数据库里,但图片上不去了……把过滤关了就可以,愁死了,俺是菜鸟,快来达人把这个虾炖了吧……
流浪的熊 - 2008-12-29 22:46:00
俺的站应该是24号开始被攻击的,搞了两天没搞定,换了服务器IP,加了防注水,目前正常,不知道下次是啥时候……了……
sweet28 - 2008-12-30 9:14:00
水上飞云的方法不管用啊
dexhing - 2008-12-30 9:23:00
还没有解决方法吗???急死了,哎,2个小时一次~~~~ 该怎么办~~
sweet28 - 2008-12-30 9:24:00
根据我的判断,问题不是出在数据库服务器上,应该是在asp页面注水,因为我们的数据库服务器上放了好几个用户的数据库,只有一个用户的出现这样的情况。
dexhing - 2008-12-30 9:40:00
对了,我现在把网站和数据库分服务器放,倒是有2天没有被攻击了~~但我觉得也不保险~~~~ 还是请哪位高手来给我们完全的解决方法吧~~~~~~~~~~~~~~~ 请谁提供个QQ群,把中招的朋友都加进去,
我的QQ是 7979375
网络探头 - 2008-12-30 10:18:00
DDOS攻击了,当然每次攻击的IP都不一样了。要一个IP你封掉他就攻击不了了。
网络探头 - 2008-12-30 10:41:00
想讨论这个问题的,加这个群了62300478,但愿黑与白能成为双刃剑吧。
© 2000 - 2025 Rising Corp. Ltd.