看这篇文章看的很难受,逻辑不清楚。。。
expand_filepath
是php 里面路径展开函数, 用来处理 ../
, ./
,//
为什么 /
会变成\x00
,可以去看看expand_filepath
其中递归处理过程。
还有即然已经能 ini_set()
,那么这样做还有意义吗?
在twiter上看到一个bypass open_basedir的新方法 顺便就分析了一下
先看payload
chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('flag'));
很好搜
对着php.net的解释看一下 猜也能猜个大概
先跳过php_check_open_basedir
看zend_alter_ini_entry_ex
先从EG表中取出要修改的项目的指针,然后一路赋值过去new_value => duplicate => ini_entry->value
直接看下gdb的调试结果 最初的时候值是ini里面的值
执行下去 可以看到值改变了