-
为什么说,在代码审计之前,必须要熟悉PHP各版本中配置文件的核心指令
,才能更高效地挖掘到高质量的漏洞呢?
-
PHP官方配置说明:传送门
-
PHP_INI_*常量的定义,参见表1-1:
-
PHP配置文件的指令多大数百项,这里只列出会影响 PHP 脚本安全
的配置列表
以及核心配置选项
-
register_globals (全局变量注册开关)
(1)功能:register_gloabls
(全局变量注册开关),该选项在设置为on
的情况下,会直接把用户以GET、POST
等方式提交上来的参数注册成全局变量并初始化值为其参数对应的值
,从而使提交的参数可以直接在脚本中使用
。而Off的时候,我们需要到特定的数组里去得到GET、POST提交的参数值!!!
(2)PHP版本小于4.2.3时,register_globals被设置为PHP_INI_ALL。
(3)PHP版本>=5.3.0时,register_globals被废弃,不推荐使用。(还是可以手工设置为on)
(4)PHP版本>=5.4.0时,移除了该选项。(不可以再设置为on了)如果强制设置该参数,则会报出以下信息:
????????????????????????????
(5)demo测试:当register_globals (全局变量注册开启) 设置为on且PHP版本小于5.4.0时,如下代码输出结果为true。
(6)上面的代码测试,如果register_globals处于off的状态,那么会报出以下信息:
-
allow_url_include (是否允许包含远程文件)
(1)功能:这个配置指令/参数处于on的情况下,就允许用户直接包含远程文件。所以说,当存在include($var)
且$var
可控的情况下,可以直接控制$var
变量来执行PHP代码。
(2)PHP版本>5.2.0时,allow_url_include 默认设置为off,其配置范围是PHP_INI_ALL。
(3)PHP版本>=7.4.0时,被废弃,不推荐使用。
(4)注意:allow_url_fopen (是否允许打开远程文件),默认处于on
(5)很明显:allow_url_include 设置项必须要开启 allow_url_fopen ,否则打不开远程文件,包含有个什么用!!!
(6)demo测试:配置allow_url_inlucde指令为on且待远程包含的文件内容为php探针的时候,如下代码输出结果:
(7)注意:文件包含的时候,这个包含的文件很有讲究,只要文件里的内是符合php语法规范的,无论是什么文件,就算文件名为zxcvbnm,也可被后台解析并执行,若文件里的内容不符合php语法规范,则原样打印输出到页面上!!!
(8)如果allow_url_include是on的,而allow_url_fopen是off的,会报出以下等信息:
????????????????????????????