数据库被挂马我相信很多人都碰到过在这里我讲下我处理的方法
第一步为现有数据库做好备份
第二步执行如下ASP文件这样就可以去掉数据库当中的JS木马
注connasp自己去写了
这里放入JS木马内容请记得改为自己数据库中的JS木马内容
!#include file=connasp
%
ServerScriptTimeOut=Set rstSchema = connOpenSchema()
k=
Do Until rstSchemaEOF遍历数据库表
If rstSchema(TABLE_TYPE)=TABLE Then
responsewrite Kfont color=redbrstSchema(TABLE_NAME) /b/font:显示表名Set rs=ServerCreateObject(ADODBRecordset)
sql=select * from [ rstSchema(TABLE_NAME)]
rsopen sqlconnFor i=to unt遍历表中字段If int(rs(i)Type)=or int(rs(i)Type)=or int(rs(i)Type)=or int(rs(i)Type)=or int(rs(i)Type)=or int(rs(i)Type)=Then只处理字段类型为字符型的字段
connexecute(update [rstSchema(TABLE_NAME)] set rs(i)name =replace(cast(rs(i)name as varchar())这里放入JS木马内容)) responsewrite rs(i)name rs(i)Type显示执行过的字段名
End If
Next
responsewrite br
End If
rstSchemaMoveNext
k=k+
Loop
responseWrite 执行成功
%
如果数据库表很多的话上面的遍历数据库结构未执行完就被IIS给停止了在这时候可以在
If rstSchema(TABLE_TYPE)=TABLE Then
当中适当加入k值的范围如
If rstSchema(TABLE_TYPE)=TABLE kand kThen
这样的话就一次只操作个表
第三步
根据数据库JS注入的特性(会包括script/script和里面放入如下代码
Function Cheack_Sqljs()防止数据库外链JS注入:true为发现外链JS注入
Dim F_PostF_Get
Cheack_Sqljs=False
If RequestForm Then表单提交时的检测For Each F_Post In RequestForm If (Instr(LCase(RequestForm(F_Post))script)or Instr(LCase(RequestForm(F_Post))/script)) and Instr(LCase(RequestForm(F_Post))//)Then
Cheack_Sqljs=True
Exit For
End If
Next
End If
If RequestQueryString ThenQueryString提交时的检测For Each F_Get In RequestQueryString If (Instr(LCase(RequestForm(F_Get))script)orInstr(LCase(RequestForm(F_Get))/script)) and Instr(LCase(RequestForm(F_Get))//)Then
Cheack_Sqljs=True
Exit For
End If
Next
End If
End Function
Function CheckDataFrom()检查提交数据来源True为数据从站外提交过来的
CheckDataFrom=True
server_v=Cstr(RequestServerVariables(HTTP_REFERER)) server_v=Cstr(RequestServerVariables(SERVER_NAME)) if mid(server_vlen(server_v))server_vthen
CheckDataFrom=False
end if
End Function
If Cheack_Sqljs or CheckDataFrom Then
ResponseWrite Script Language=JavaScriptalert(禁止执行非法操作);/Script ResponseEnd()
End If