WPE|52wpe|我爱WPE

 找回密码
 注册会员
搜索
  • 2086查看
  • 0回复

主题

好友

1700

积分

禁止访问

发表于 2010-2-20 11:24:12 |显示全部楼层
在网站看见有朋友用这个博客程序,[separator]下载回来发现一些BUG,分析了一下。并和
套程序的开发者取得了联系。可以说这个程序在跨站方面做的很不错。我们看看
处理跨站的代码是怎么写的,myreplace.asp文件代码如下:

<%function myreplace(mystring)
    mystring=replace(mystring,"&","&amp")
    mystring=replace(mystring,"<","&lt;")
    mystring=replace(mystring,">","&gt;")
    mystring=replace(mystring,chr(13),"<br>")
    mystring=replace(mystring,chr(32),"&nbsp")
    mystring=replace(mystring,chr(9),"&nbsp;&nbsp;&nbsp;&nbsp;")
    mystring=replace(mystring,chr(39),"&Aacute;")
    mystring=replace(mystring,chr(34),"&quot;")
    mystring=replace(mystring,"","<b>")
    mystring=replace(mystring,"","</b>")
    mystring=replace(mystring,"","<u>")
    mystring=replace(mystring,"","</u>")
    mystring=replace(mystring,"/","</u>")
    mystring=replace(mystring,"#","</u>")
    myreplace=mystring
  end function
  %>
跨站来说基本上是没得玩了,过虑了基本的"<",">",本想用IMG,JAVASCRIPT跨一
下呢,连"/"都过虑掉了。看来跨站是没得玩了。继续看注入吧。

在show_article.asp中的关键代码如下:

dim articleid,articleRs,articleSql
      articleid=request.querystring("articleid")    //直接取值
      if articleid="" then                         //为空就会告诉我们错误
        response.Write "<script>alert('参数错误!');history.back();</script>"
      else
      
      '---------------------
      session("articleid")=articleid             //将articleid值保存上服务器上
      '先来更新点击率
      'hitsql="update article set hits=hits+1 where articleid="&artilceid   //修改没过虑的articleid值
      'db.execute(hitsql)
      hitsql="update article set hits=hits+1 where articleid="&session("articleid")
      db.execute(hitsql)      
      
      '-----------------      
      set articleRs=server.createobject("adodb.recordset")
      articleSql="select  * from article where articleid="&articleid    //查询没过虑的articleid值,漏洞出现
      articleRs.open articleSql,db,1
      %>

见图一,图二。





  我也没看数据库里的表名复杂不,因为发现了后台可以OR,代码如下:

<%
  dim admin,password
  admin=request.form("admin")      //直接取值
  password=md5(request.form("password"))
  if admin<>"" then
    dim rs,strsql                   //没有过虑OR
      strsql="select * from users where admin='"&admin&"' and password='"&password&"'"   
      set rs=db.execute(strsql)   
    if not rs.eof and not rs.bof then   
      session("msmax")=rs("admin")
        response.Redirect "admin_index.asp"
      else
        response.write "<script>alert('对不起,此用户名不存在!');</script>"  
    end if
  end if
  %>




不过他用代码判断我们提交的用户名有没有特殊字符,见图三。看看他的代码是怎么实现的,
在admin/login.asp代码如下:

<script language="javascript" type="text/javascript">                //这个不用管它
  function check1()
  {
      if (document.form.admin.value=="")
      {
        alert("错误:请输入用户名!");        
        return false;
        }
      if (document.form.pwd.value=="")
       {
          alert("错误:请输入密码!");
         return false;
    }
   return true;  
    }        
</script>
<script type="text/jscript">                                     //把这个去掉
    var uReg=/[^A-Za-z0-9]/ig;
    function check3(vAlue){     
     if (uReg.test(vAlue)){
    alert('错误:密码不能输入非法字符!');
    document.form.password.value=""
      form.password.focus();
       }
    if (vAlue.length>16){
    alert('错误:密码只能输入16位!');
    document.form.password.value=""
      form.pwd.focus();
      }
    }
    </script>
    <script type="text/jscript">
    var uReg=/[^A-Za-z0-9]/ig;
    function check2(vAlue){
     if (uReg.test(vAlue)){
     alert('错误:用户名不能输入非法字符!');
     document.form.admin.value=""
      form.admin.focus();
       }
    if (vAlue.length>6){
    alert('错误:用户名只能输入6位!');
    document.form.admin.value=""
      form1.admin.focus();
      }     
    }
    </script>
</head>

<body>
<div id="formwrapper">

<h3>后台管理登录</h3>
  <form action="" method="post"  name="form" onsubmit="javascript:return check1();"  >    //改处理路径
  <fieldset>
    <legend>用户登录</legend>
    <div>
      <label for="Name">用户名:</label>
      <input type="text" name="admin"  size="17" maxlength="30" onchange="check2(this.value)"/><br />
    </div>
    <div>
      <label for="password">密码:</label>
      <input type="password" name="password" size="18" maxlength="18"onchange="check3(this.value)" /><br />
                   代码略……

快速发帖

您需要登录后才可以回帖 登录 | 注册会员

手机版|Archiver|WPE|52wpe|我爱WPE ( 闽ICP备15009081号 )

GMT+8, 2024-5-1 07:20 , Processed in 0.049816 second(s), 16 queries .

返回顶部