create_function函数如何实现RCE

栏目: PHP · 发布时间: 5年前

内容简介:这是在??是

这是在 code-breaking 中遇到的一道题目,名为:easy - function。题目地址: http://51.158.75.42:8087

create_function函数如何实现RCE

??是 PHP7 中新增的运算符,用于替代需要 isset 的场合,是一种语法糖。接着正则对 $action 变量进行了正则匹配,该变量如果符合正常函数名命名规则,则显示该题目源码,否则就作为函数名进行可变变量动态调用函数。

正常函数名都是以字母数字或者下划线开头的,那么有没有什么变量名不是按照这个规则命名的呢?这让我想到之前看到的一种过狗一句话:

<?php namespace ccc;\eval($_REQUEST['a']);

该木马在 eval 函数前面添加了一个反斜杠,竟然也能正常运行。我们查阅 PHP 手册,会发现官方有这么一段说明:

create_function函数如何实现RCE

也就是说 所有PHP内置函数 均在 \命名空间下 ,这样就可以绕过上面的正则了。那么我们使用 \create_function 来作为 $action 的值,此时 create_function 函数的第二个参数可控。我们先来看看 create_function 函数的定义。

create_function函数如何实现RCE

可以看到手册上说, create_function 函数内部实现与 eval 函数一样,我们再来看看 create_function 函数对应的内核源码。( php-src/Zend/zend_builtin_functions.c:1901

create_function函数如何实现RCE

create_function函数如何实现RCE

上述代码用PHP语言来表达的话,实际上就是下图 第3行 代码(下图第2、3行代码是等价的):

create_function函数如何实现RCE

在这道题目中,用户可控的是第二个参数,也就是 code 部分,所以我们只要闭合 { 后,注入代码并注释后面的 } ,即可达到代码执行的效果。最终使用如下 payload8 即可解题:

http://51.158.75.42:8087/?action=\create_function&arg=return 111;}print_r(scandir('../'));highlight_file('../flag_h0w2execute_arb1trary_c0de');{

create_function函数如何实现RCE

如果是第一个参数用户可控,那么记得闭合 ( 号即可。


以上所述就是小编给大家介绍的《create_function函数如何实现RCE》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

模糊数学基础及实用算法

模糊数学基础及实用算法

李鸿吉编 / 科学出版社 / 2005-1 / 55.00元

本书开发了模糊数学常用的计算机程序,并以大量的算例系统地介绍了模糊数学的实用算法。本书可以作为模糊数学的应用程序包,在详细解释源代码的同时,对应用程序开发所用到的Visual Basic 6.0方法做了系统介绍,其目的是为读者做进一步的自主开发提供便利。本书所提供的源程序可以作为读者自主开发的素材。本书配有光盘,分章节提供程序源代码。 本书可以作为大专院校、培训班的教学参考书。对需......一起来看看 《模糊数学基础及实用算法》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具