Wordpress<=4.6.1代码执行漏洞复现过程

2016-10-29 23:01:30 13 2027 1
漏洞介绍:
如果网站使用攻击者提前构造好的语言文件对网站、主题、插件来进行翻译的话,就可以执行任意代码。

利用条件:
1.攻击者可以将自己构造的语言文件上传到网站服务器

2.网站使用攻击者构造的语音文件来对主题、插件进行翻译

影响版本:
<=4.6.1 目前所有版本
复现过程:
1>漏洞产生原理:
wp-includes\pomo\translations.php文件中,第203-209行:
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);
        }
这里出现漏洞的是creat_function这个函数,来看下官方对这个函数的解释:

这个函数用eval来执行$code参数的内容,那么我们只要控制了$code这个参数传递来的内容就可以让任意代码被执行了。

这里$code是怎么被eval执行的呢?

那么就要先看一下create_function这个函数的实现过程了:

1.获取参数($args),函数体($code)

2.拼凑一个"function_lambda_func($args){$code;}"的字符串

3.eval这个字符串

4.通过__lamdba_func在函数表中找到eval后获得的函数体,找不到会报错

5.定义一个函数名:"\000_lambda_".count(anoymous_functions)++;

6.用新的函数名替代_lamdba_func;

7.返回新的函数

根据注释可以知道产生漏洞的这段代码创建的函数make_plural_form_function这个函数的作用是根据语言文件的plural forms这个header来创建函数并返回,plural forms中的$nplurals就是函数中的$nplurals,plural forms中的$plural就是函数中的$expression,那么控制语言文件的plural forms中的$plural即可控制$expression,因为$expression是$func_body的主要组成,所以控制了$expression就相当于控制了create_function函数的$code参数。

看下正常的语言文件(wp-content\languages\zh_CN.po):

这里我们将plural修改一下,改为:
"Plural-Forms: nplurals=1; plural=n);}eval($_GET[x]);/*"
简单解释一下这个payload(结合上面create_function函数实现步骤理解):

首先呢,)将$n前面那个(闭合,然后;结束$index = (int)($n)这个语句,然后}闭合函数体,然后/*将后面的字符注释掉,那么字符串就变成了:

一个函数和eval($_GET[x]);这个语句。

这样再执行第三步eval,就会把eval($_GET[x]);执行了,因此并不用调用创建的函数,这个代码就被执行了。
2>利用过程
构造漏洞文件(wp-content\languages\zh_CN.po):用notepad++打开,修改第九行为:
"Plural-Forms: nplurals=1; plural=n);}eval($_GET[x]);/*"
然后保存,再用poedit打开修改后的.po文件

点击保存,即可修改.mo文件(.mo文件算是.po文件的编译结果,而系统调用语言文件也是调用的.mo文件)

保存的时候会报错,点确定就好。

然后验证漏洞,打开主页,在url后面添加?x=phpinfo();即可显示phpinfo结果:



参考文献:http://www.tuicool.com/articles/2En2YfJ

http://www.ichunqiu.com/vm/56013/1

http://www.2cto.com/article/201212/177146.html

TCV = 0

关于作者

AdminTony65篇文章1093篇回复

评论13次

要评论?请先  登录  或  注册