本篇文章给大家分享了PHP绕过open_basedir限制操作文件的三种方法以及相关技巧,有兴趣的朋友参考学习下。
0x00 预备知识
关于open_basedir
open_basedir是php.ini中的一个配置选项
它可将用户访问文件的活动范围限制在指定的区域,
假设open_basedir=/home/wwwroot/home/web1/:/tmp/,那么通过web1访问服务器的用户就无法获取服务器上除了/home/wwwroot/home/web1/和/tmp/这两个目录以外的文件。
注意用open_basedir指定的限制实际上是前缀,而不是目录名。
举例来说: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。
关于符号链接
符号链接又叫软链接,是一类特殊的文件,这个文件包含了另一个文件的路径名(绝对路径或者相对路径)。
路径可以是任意文件或目录,可以链接不同文件系统的文件。在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
0x01 命令执行函数
由于open_basedir的设置对system等命令执行函数是无效的,所以我们可以使用命令执行函数来访问限制目录。
我们首先创建一个目录
/home/puret/test/
且在该目录下新建一个1.txt 内容为abc
nano 1.txt
再在该目录下创建一个目录命名为b
mkdir b
并且在该目录下创建一个1.php文件内容为
<?php echo file_get_contents("../1.txt"); ?>
且在php.ini中设置好我们的open_basedir
open_basedir = /home/puret/test/b/
我们尝试执行1.php看看open_basedir是否会限制我们的访问
执行效果如图
很明显我们无法直接读取open_basedir所规定以外的目录文件。
接下来我们用system函数尝试绕open_basedir的限制来删除1.txt
编辑1.php为
<?php system("rm -rf ../1.txt"); ?>
先来看看执行1.php之前的文件情况
执行1.php之后
成功通过命令执行函数绕过open_basedir来删除文件。
由于命令执行函数一般都会被限制在disable_function当中,所以我们需要寻找其他的途径来绕过限制。
0x02 symlink()函数
我们先来了解一下symlink函数
bool symlink ( string $target , string $link )
symlink函数将建立一个指向target的名为link的符号链接,当然一般情况下这个target是受限于open_basedir的。
由于早期的symlink不支持windows,我的测试环境就放在Linux下了。
测试的PHP版本是5.3.0,其他的版本大家自测吧。
在Linux环境下我们可以通过symlink完成一些逻辑上的绕过导致可以跨目录操作文件。
我们首先在/var/www/html/1.php中 编辑1.php的内容为
<?php mkdir("c"); chdir("c"); mkdir("d"); chdir("d"); chdir(".."); chdir(".."); symlink("c/d","tmplink"); symlink("tmplink/../../1.txt","exploit"); unlink("tmplink"); mkdir("tmplink"); echo file_put_contents("http://127.0.0.1/exploit"); ?>
接着在/var/www/中新建一个1.txt文件内容为
"abc"
再来设置一下我们的open_basedir
open_basedir = /var/www/html/
在html目录下编辑一个php脚本检验一下open_basedir
<?php file_get_contents("../1.txt"); ?>
执行看下。
意料之中,文件无法访问。
我们执行刚才写好的脚本,1.php
可以看到成功读取到了1.txt的文件内容,逃脱了open_basedir的限制
问题的关键就在于
symlink("tmplink/../../1.txt","exploit");
此时tmplink还是一个符号链接文件,它指向的路径是c/d,因此exploit指向的路径就变成了
c/d/../../1.txt
由于这个路径在open_basedir的范围之内所以exploit成功建立了。
之后我们删除tmplink符号链接文件再新建一个同名为tmplink的文件夹,这时exploit所指向的路径为
tmplink/../../
由于这时候tmplink变成了一个真实存在的文件夹所以tmplink/../../变成了1.txt所在的目录即/var/www/
然后再通过访问符号链接文件exploit即可直接读取到1.txt的文件内容
当然,针对symlink()只需要将它放入disable_function即可解决问题,所以我们需要寻求更多的方法。
0x03 glob伪协议
glob是php自5.3.0版本起开始生效的一个用来筛选目录的伪协议,由于它在筛选目录时是不受open_basedir的制约的,所以我们可以利用它来绕过限制,我们新建一个目录在/var/www/下命名为test
并且在/var/www/html/下新建t.php内容为
<?php $a = "glob:///var/www/test/*.txt"; if ( $b = opendir($a) ) { while ( ($file = readdir($b)) !== false ) { echo "filename:".$file."\n"; } closedir($b); } ?>
执行结果如图:
成功躲过open_basedir的限制读取到了文件。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
关于ThinkPHP中Common/common.php文件常用函数的功能分析
PHP的Cannot use object of type stdClass as array in错误的解决办法
以上是如何通过PHP绕过open_basedir限制操作文件的详细内容。更多信息请关注PHP中文网其他相关文章!

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Atom编辑器mac版下载
最流行的的开源编辑器

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!