九酷网络个人主页空间管理系统3.0漏洞查找实例_漏洞
作者:玄猫 文章来源:黑色森林
本文已发表于《黑客X档案》2004-12期,特此声明!)
前言:
最近本人做了一个搜集免费空间的咨讯类网站,有事没事喜欢留意一些提供免费空间的网站,有一次,急着传点东西到网上,随意申请了一个空间,为了方便,找了一个web上传的,注册开通后,上传一个Exe程序……咦~提示:不准上传这种类型的文件……(图一)
javascript:if(this.width>500)this.width=500" title="点击这里用新窗口浏览图片">
-_-||这么麻烦啊~不过没有关系,把那个扩展名由exe改成htm,上传,竟然成功了,再把文件名改回来,这就可以了,突然迸发出一个很伟大的想法,这个提供免费空间的网站只提供静态的网页服务,这么一来,把asp文件先改成htm扩展名,上传后再把扩展名改为asp不就可以使用了!想做就做,找了一个海洋木马2005a(-_-||我一直拿这个当空间探针使用……lcx:!@#$%^&&*)传好后,访问,竟然成功解析了!输入密码进去后发现服务器的安全性作的很差,所有的目录都可以访问……接下来不用我说了吧…这可是webshell最大的权限了,一下子就拿到了……于是对这个提供免费空间的网站程序产生了浓厚的兴趣,从Google上下载了这个asp程序,(很多网站都用这种程序,这个程序叫:"九酷网络个人主页空间管理系统",我下载的是网上最新的破解版本3.0商业版的,现在官方网站上已经有了4.0版本,本文以3.0为准,毕竟许多空间提供者本身也是从网上找的破解版)。进行配置,搭好站点,对其一一进行漏洞测试,结果让我大跌眼镜……这个程序几乎没有防止跨越权限的措施!而且漏洞百出,不仅对使用免费空间的用户,而且对服务器都是非常危险的!好了,跟我一起进入这个程序的漏洞研究吧^_^
漏洞发现:
配置环境简介:程序放在本地硬盘的E:\Web目录下,用户的数据放在E:\Web\Home\用户名\中,站点地址为:[url]http://127.0.0.1[/url](如图二)
九酷网络个人主页空间管理系统3.0漏洞查找实例_其他_02
javascript:if(this.width>500)this.width=500" title="点击这里用新窗口浏览图片">
注册两个用户,一个名为hacker,另一个名为cat…然后我们用Hacker的身份登录进入用户的主界面。用户的主界面分为顶部,左部和右部3个frame(图三)。
javascript:if(this.width>500)this.width=500" title="点击这里用新窗口浏览图片">
先从顶部开始吧……顶部的框架主要是几个导航的连接,按住shift点”修改个人资料”,使其在新窗口打开,地址为:[url]http://127.0.0.1/edituser.asp?userid=39&[/url];username=hacker,不难看出,地址中的username参数的值就是当前用户名,那么我们把它改一下试试……打开页面[url]http://127.0.0.1/edituser.asp?userid=39&[/url];username=cat,Bingo!网页上显示出我们注册cat用户时填写的资料!随便改改吧……这里我们可以修改它的密码提示问题和答案,然后再通过“忘记密码”功能修改该用户的密码。
   用同样的方法打开”修改用户密码”和”申请ftp”页面,对于” 修改用户密码”,我们看到虽然可以更改参数的值,但是它要求填写旧密码,所以这个直接修改密码的页面对我们来说没有什么用处。再看申请ftp,修改参数值,在对方还没有申请ftp的情况下我们可以填写这个表单,在站点管理员通过后,就可以用ftp登录对方的空间了……
 
再来看左边的frame,左面的框架主要是目录信息,点击右键,但是没有反应,原来是JS在作怪,可以使用Green Browser浏览器的”解除鼠标限制功能”,我们查看页面属性中的网页地址: [url]http://127.0.0.1/userleft.asp?userid=39&[/url];username=hacker&path=\hacker,还是老办法,改参数……把username参数的值改为cat,网页中显示出了cat的目录……再改……
Username=../竟然出现了上一级的目录(图四)!简直就是一个服务器文件夹浏览器!这里我们还可以给服务器上建立目录和点击目录名称操作目录下的文件!
九酷网络个人主页空间管理系统3.0漏洞查找实例_休闲_03
javascript:if(this.width>500)this.width=500" title="点击这里用新窗口浏览图片">
  好了,看右面的框架-主要的操作部分,用和打开左面frame同样的方法我们打开一个新窗口浏览,地址是: [url]http://127.0.0.1/main.asp?userid=39&[/url];username=hacker&path=\hacker,这里可以对文件进行浏览,上传,删除,改名等操作。看上传功能,点击”上传文件”按钮,弹出一个网页,里面可以设定上传个数,还有一个上传目录的文本框,但是不可以修改,这难得倒谁呢!在IE中将这个页面另存,然后找到文件的第44行,代码为: <LI>上传到: 以下是引用片段:
<INPUT class=INPUT style="WIDTH: 200px" ReadOnly…
我们把这个ReadOnly删除,然后找到文件第37行,把form标签的action属性中的值补全(就是把网站地址加上) ,然后在本地打开这个页面,此时”上传倒”文本框已经可以修改了,我们将其改为:/cat,选择文件上传,可以发现,这个文件已经传到cat目录下了。再来看删除文件功能:删除文件的连接经分析后是: [url]http://127.0.0.1/del.asp?userid=39&[/url];username=hacker&ty=file&path=\hacker\文件名, 这里我们可以通过改path的值来删除任意文件,譬如要删除用户cat的index.htm文件,就写: path=\cat\index.htm。改名功能是这个程序存在的最大漏洞!通过上传文件后改名为可以被iis.dll解释的文件,我们就能在这个只允许使用静态的空间中使用动态文件,当然服务器安全设置不好的话,也可以用asp木马捣乱!最后是文件编辑功能,这个功能也很实用,如果管理员设置禁止上传,我们可以在服务器上新建文件,然后将木马写入,然后再改扩展名为asp。
漏洞分析:
在上面的漏洞中不难看出,这套系统的主要漏洞就是文件操作的权限检查不够还有文件扩展名可以任意更改,我们看看程序的源代码:
程序中检测是否登陆是通过在页面include文件chkuser.asp来实现的
以下是引用片段:
<%
if session("user_userid")="" or session("user_username")="" then
Response.write"<script>alert(’对不起,您还没有登录或登录出错!’);top.location.href=’index.asp’</script>"
    response.End
end if  
%>

可以看到,这个文件只检查了session是否为空,而没有检查到底要操作的目录是否是当前用户的!所以只要以某一个用户登录就可以操作任何用户甚至是服务器上的文件。
改名的动作是通过文件rename.asp来进行的
以下是引用片段:
<!--#include file="chkuser.asp"-->
<!--#include file="inc/config.asp"-->
<head>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<%
userid=request.querystring("userid")
username=request.querystring("username")
rname=request.querystring("rname")
ty=request.querystring("ty")
path=request.querystring("path")
%>
<%
if path=<"\"+username then path="\"+username
if ty="file" then
Set ts= fs.Getfile(fullpath&HPDIRName&path)
ttpath=left(path,InstrRev(path,"\")-1)
ts.Move(fullpath&HPDIRName&"\"&ttpath&"\"&rname)
%>
<script language=javascript>alert("文件改名成功!!");</script>
<script language="vbs">
<!--
top.main.location.href="main.asp?userid=<%=userid%>&username=<%=username%>&path=<%=left(path,InstrRev(path,"\")-1)%>"
-->
</script>
<%
end if
%>
</head>

但是这个文件并没有检测用户改的扩展名是什么就全部改写了,这是导致随便改名的根本原因。
漏洞解决:
导致用户可以随便上传和操作的一个很重要的原因就是服务器的权限设置得不好,许多管理员根本不进行服务器磁盘权限的设置,甚至其服务器的分区根本不是NTFS的!
推荐使用此程序的管理员进行如下设置:将网站以外目录的Inernet用户访问的权限设置为不可浏览和修改删除,将用户网站所在目录的执行权限去掉,使得其上传asp文件也不能被解析,这点很重要!
然后就是程序的修改,这里给出一种方案。
(见附件-chkuser.asp)
(见附件-chkuser.asp)
修改好的文件