入侵DVBBS php官网详细过程(图)

互联网   发布时间:2008-10-08 19:36:29   作者:佚名   我要评论
几 个月前,DVBBS php2.0暴了一个可以直接读出管理员密码的sql注入漏洞,当时这个漏洞出来的时候
三、 后台跨目录写文件漏洞:
一天的时间,我得到后台的管理权限,真的很艰难,但革命尚未结束,还没拿到webshell呢,不过一般而言,得到了后台权限,就离webshell不远了,flyh4t说写个模板就可以搞定了,我没着急搞,先去吃个饭…
回来后,我在后台用syinfo.php?act=phpinfo看了下系统,典型的LAMP
(linux,apache,mysql,php)组合,看来要努力的还很多啊;我按照常规思路准备写个php的模板,可是新建模板的时候却出错了:

不是0777权限,写不进去。怎么办?
后台晃悠,看看可不可以找到另外的突破口,可是很不幸,从晚上翻到凌晨都没发现有一处可以利用的地方,可能php后台拿webshell的方法我不熟,一直搞惯了asp的站,到php就思路堵塞了,百度了下方法,也没找到。难道伟大的革命要结束啦?
翻 了一会,我居然在模板页面下面看到一个建目录的地方,不过依旧没权限建,哎,linux就是麻烦,如果是windows肯定不会权限这么变态的,自己的站 一般情况下肯定可以写的,想到可写,我突然眼前一亮,对啊,这个站可以有可写的地方啊,比如上传头像上传图片或者文件,都需要可写的目录啊,linux权 限设置的虽然变态,但总会留下个可以的地方的,可是问题是我该怎么利用?
胡乱尝试了好多次跨目录建目录或者文件失败后(现在回想回想怎么会出错的,我把目录跟英文名搞混淆了),我决定不要盲目搞了,读读源代码,于是我打开admin里的template.php开始读,这不读不要紧,一读居然发现了可以跨目录写文件的漏洞。
胡乱填路径肯定出错,还有出错的原因是中文名一定要输中文名,英文名称无所谓,看代码先:
if(!is_dir($destfile)) {
if ($issafemode = ini_get('safe_mode')) {
show_msg($lang['page_title'], str_replace('{ $TPL_DIR }', $destfile, $lang['tpl.error12']));
footer();
exit;
}
if (!mkdir($destfile, 0777)) {
show_msg($lang['page_title'], $lang['tpl.error4']);
footer();
exit;
}
}
看来$destfile是关键了,再看看这个变量是什么:
$destfile = simpleMapPath($_POST['add_directory'].'/'.$_POST['add_ename']);
有个simpleMapPath在过滤啊,怪不得,再看看这个函数:
function simpleMapPath($path)
{
global $_SERVER;
if (empty($path)) {
return false;
}
$path = preg_replace('#(?:\\ )|(?:/ )#i', '/', $path);
if ($path{ 0 } === '/') {
$documentroot = realpath(str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']));
return $documentroot.$path;
} elseif(substr($path, 0, 3) === '../') {
return $path;
} else {
return ROOT_PATH.$path;
}
}
这段函数看的我有点无语,实在看不出来他想过滤什么…专门写了个php文件把这个函数复制进去本机测试了下,完全可以写进上一层的目录。
无论是绝对路径还是相对路径都可以轻松在uploadfile里写个目录,然后写个模板里面,编辑下,于是拿到了webshell。此时天都快亮了,想睡觉的,可是睡不着,何不一气呵成,拿下系统权限?
四、 失败的提权:
由于提权失败了,所以这部分我也简单略过,虽然这花费了我一半的时间,可是水平不济啊。管理员权限给的太变态了,除了uploadfile,其他所有目录都不可写…不管了,有可写的地方就可以了,先查下服务器版本,输入uname -a;id,返回:
Linux p.dvbbs.net 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux
uid=2(daemon) gid=2(daemon) groups=1(bin),2(daemon),4(adm),7(lp)
检 查了下perl 、wget,都安装上了,于是wget一个comeback.pl,接着用NC反弹下,也成功反弹回来本地shell,心想这么顺利啊,接下来就是提权 了,可是翻遍了milw0rm.com,找了各种提权的利用程序,就是没有一个能成功的,我百度谷歌了N久,网上有关linux下提权的文章非常少,有的 基本都是一个样,反弹一下然后提权,可是大家能轻松提权的prtcl.c在这里对它无可奈何…
到了下午实在太困了睡了一会儿,醒来后继续搞,但最后还是以失败告终,并且把它服务器溢出挂了,我赶紧收手,哎,我太菜了,就不做坏事了,留个页面纪念下:

五、 清理残留:
Linux下的残留我就没办法了,没提权成功,权限太小;但网站留下来的东西必须清理掉。于是写个clear.php:
define('ISDVBBS', TRUE);
require '../inc/config.php';
require '../inc/dv_clssql.php';
$db= new sqldb();
defined('DV_MUF_DB_HOST') AND ($dbhost = DV_MUF_DB_HOST);
$db->connect($dbhost, $dbuser, $dbpw, $dbname , $charset,$pconnect);
//清除我新建的模板
$db->query("DELETE FROM dv_styles WHERE name='啊啊啊'");
//清除我所在的IP后台操作日志
$db->query("DELETE FROM dv_log WHERE l_ip='58.213.51.65'");
echo "ok!";
?>
传到uploadfile里面,浏览器里运行下,于是ok…

相关文章

最新评论