背景
这篇文章将讨论 PHP Web 应用中 create_function 的命令注入。命令注入,究其根源,都是未对用户提供的输入做合理过滤造成的。当然,编程语言本身内置的危险方法的使用,是命令注入频发的另一原因。
各种变成语言的危险方法有所不同,对于 PHP 而言,我们可以再这里找到一系列的 PHP 危险方法。在使用这些方法的时候,一定要考虑其安全隐患。
在这些众多的危险方法中,最臭名昭著的,当是 eval() 莫属。这个方法可以直接调用,也可以通过其他的 PHP 内置方法间接调用。
今天,我们看一下 PHP 4 时代就存在的 create_function 内置方法,是如何走向命令注入的。
环境参数
create_function 存在于 PHP 4 >= 4.0.1, PHP 5, PHP 7 版本中。
该方法已经在 PHP 7.2.0 中废弃,并在 PHP 8.0.0 中移除。
create_function 方法
这里,我们看一下该方法的基本作用,它的应用,最后看一下源码,找出命令注入的成因。
方法介绍
根据官方文档,create_function 方法,顾名思义,就是可以将自定义的代码字符串,解析成可执行代码,并且可以指定任意个方法参数。
我们到 Online PHP Playground 来通过实例看一下这个方法的使用。
我们选择 PHP 7.0.33。