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

查看所有标签

猜你喜欢:

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

敏捷项目管理

敏捷项目管理

马克·莱顿 / 人民邮电出版社 / 2015-12-1 / CNY 69.00

当你进行软件开发时,你一定需要一种更快捷、更灵活的方式。《敏捷项目管理》将通过手把手的方式帮你充分发挥你手中的所有可利用工具和技术,以一种非常有效的方式管理好你的项目。通过《敏捷项目管理》,你可以学到:在数周内而不是数月内完成你的软件开发;使用敏捷技术降低项目风险,并提升核心收益;将敏捷理论付诸实践;避免项目管理普遍存在的误区。一起来看看 《敏捷项目管理》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码