open_basedir详解

open_basedir详解

PHP 的 open_basedir 和 disable_functions 这两个配置在web中非常常见,前几天粗浅地研究了bypass disable_functions,再来了解一下open_basedir

open_basedir 官方介绍

open_basedir string

将 PHP 所能打开的文件限制在指定的目录树,包括文件本身。本指令不受安全模式打开或者关闭的影响。
当一个脚本试图用例如 fopen() 或者 gzopen() 打开一个文件时,该文件的位置将被检查。
当文件在指定的目录树之外时 PHP 将拒绝打开它。
所有的符号连接都会被解析,所以不可能通过符号连接来避开此限制。
特殊值 . 指明脚本的工作目录将被作为基准目录。但这有些危险,因为脚本的工作目录可以轻易被 chdir() 而改变。

在 httpd.conf 文件中中,open_basedir 可以像其它任何配置选项一样用“php_admin_value open_basedir none”的方法关闭(例如某些虚拟主机中)。

在 Windows 中,用分号分隔目录。在任何其它系统中用冒号分隔目录。作为 Apache 模块时,父目录中的 open_basedir 路径自动被继承。

用 open_basedir 指定的限制实际上是前缀,不是目录名

也就是说“open_basedir = /dir/incl”也会允许访问“/dir/include”和“/dir/incls”,如果它们存在的话。

如果要将访问限制在仅为指定的目录,用斜线结束路径名。例如:“open_basedir = /dir/incl/”。

有几种方式设置限制包含目录

1)php.ini

open_basedir = /home/wwwroot/

2)在程序中使用

ini_set('open_basedir', '指定目录');
1

但不建议使用这种方法

3)apache 的 httpd.conf 中Directory配置

"php_admin_value open_basedir none" # 关闭 
php_admin_value open_basedir "/home/wwwroot/:/tmp/:/var/tmp/:/proc/"

httpd.conf中VirtualHost

php_admin_value open_basedir "/home/wwwroot/:/tmp/:/var/tmp/:/proc/"

4)nginx fastcgi.conf

 fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/";

5).user.ini 文件
设置方法同 1 ,即:

open_basedir = /home/wwwroot/

CTF中利用方法举例

执行系统命令,利用 php cli 在目标机器本地开启一个新的web服务,然后再用受限制的 webshell 转发请求到新开启的服务上去。

php -n -S 127.0.0.1:61111 -t /var/www/html/

解释一下里面的几个参数:

-S 127.0.0.1:61111 : 新web服务监听地址

-t /var/www/html/ : 新http服务的Web根目录,可随便指,只要保证那个目录下面有个 php webshell 就行,建议是直接指定成 shell 当前目录

-n : 表示不使用 php.ini, 这个新的服务PHP用的是默认配置,核心所在

当然思路不止这一种,还有用 反弹shell,python,perl 等等思路。

但设想一种比较极端的情况:

目标机器无法主动外连,并且入站只有80端口可访问,目标机器上面不保证一定有python, 不一定有 perl。我们能肯定的是,应该是有php的,但美中不足的是PHP在5.4版本才引入了 -S 这个内置web服务器

最终我们就把整个绕过暴力的简化成了绕过disable_functions

这也是蚁剑插件中绕过bypass disable_functions的方法。


  转载请注明: Liloong3t's Blog open_basedir详解

 上一篇
unicode详解以及有关的安全问题 unicode详解以及有关的安全问题
刷buu碰到了一个很有意思的flask模板注入题,里面的漏洞点实际上是一个unicode编码转换引发的问题,于是顺着wp找到了很多关于unicode的资料,学到很多基础知识。
2021-04-20
下一篇 
FFI扩展 bypass disable functions FFI扩展 bypass disable functions
FFI扩展 bypass disable functions介绍 FFI(Foreign Function Interface),即外部函数接口,允许从用户区调用C代码。当PHP所有的命令执行函数被禁用后,通过PHP 7.4的新特性FF
2021-03-08
  目录