create_function函数如何实现RCE

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

内容简介:这是在??是

这是在 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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

数据压缩导论

数据压缩导论

萨尤得 / 2009-2 / 99.00元

《数据压缩导论(英文版·第3版)》是数据压缩方面的经典著作,介绍了各种类型的压缩模式。书中首先介绍了基本压缩方法(包括无损压缩和有损压缩)中涉及的数学知识,为常见的压缩形式打牢了信息论基础,然后从无损压缩体制开始,依次讲述了霍夫曼编码、算术编码以及字典编码技术等,对于有损压缩,还讨论了使用量化的模式,描述了标量、矢量以及微分编码和分形压缩技术,最后重点介绍了视频加密。《数据压缩导论(英文版·第3版......一起来看看 《数据压缩导论》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具