所以由于这个特性,如果我们可以控制create_function
的$code
参数,那就有了任意代码执行的可能。这里要说一下,create_function
这个漏洞最早由80sec在08年提出,这里提供几个链接作为参考:
- WordPress
- WordPress
- WordPress
接下来我们看Wordpress中一处用到create_function
的地方,在wp-includes/pomo/translations.php
第203-209行:
/**
* Makes a function, which will return the right translation index, according to the
* plural forms header
* @param int $nplurals
* @param string $expression
*/function make_plural_form_function($nplurals, $expression) {
$expression = str_replace('n', '$n', $expression);
$func_body = "
$index = (int)($expression);
return ($index < $nplurals)? $index : $nplurals - 1;";
return create_function('$n', $func_body);
}
根据注释可以看到该函数的作用是根据字体文件中的plural forms
这个header来创建函数并返回,其中$expression
用于组成$func_body
,而$func_body
作为$code
参数传入了create_function
,所以关键是控制$expresstion
的值。
我们看一下正常的字体文件zh_CN.mo
,其中有这么一段: