内容简介:这是在??是
这是在 code-breaking 中遇到的一道题目,名为:easy - function。题目地址: http://51.158.75.42:8087
??是 PHP7 中新增的运算符,用于替代需要 isset 的场合,是一种语法糖。接着正则对 $action 变量进行了正则匹配,该变量如果符合正常函数名命名规则,则显示该题目源码,否则就作为函数名进行可变变量动态调用函数。
正常函数名都是以字母数字或者下划线开头的,那么有没有什么变量名不是按照这个规则命名的呢?这让我想到之前看到的一种过狗一句话:
<?php namespace ccc;\eval($_REQUEST['a']);
该木马在 eval 函数前面添加了一个反斜杠,竟然也能正常运行。我们查阅 PHP 手册,会发现官方有这么一段说明:
也就是说 所有PHP内置函数 均在 \命名空间下 ,这样就可以绕过上面的正则了。那么我们使用 \create_function 来作为 $action 的值,此时 create_function 函数的第二个参数可控。我们先来看看 create_function 函数的定义。
可以看到手册上说, create_function 函数内部实现与 eval 函数一样,我们再来看看 create_function 函数对应的内核源码。( php-src/Zend/zend_builtin_functions.c:1901 )
上述代码用PHP语言来表达的话,实际上就是下图 第3行 代码(下图第2、3行代码是等价的):
在这道题目中,用户可控的是第二个参数,也就是 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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
屏幕上的聪明决策
Shlomo Benartzi、Jonah Lehrer / 石磊 / 北京联合出版公司 / 2017-3 / 56.90
为什么在手机上购物的人,常常高估商品的价值? 为什么利用网络订餐,人们更容易选择热量高的食物? 为什么网站上明明提供了所有选项,人们却还是选不到最佳的方案? 屏幕正在改变我们的思考方式,让我们变得更冲动,更容易根据直觉做出反应,进而做出错误的决策。在《屏幕上的聪明决策》一书中,什洛莫·贝纳茨教授通过引人入胜的实验及案例,揭示了究竟是什么影响了我们在屏幕上的决策。 ......一起来看看 《屏幕上的聪明决策》 这本书的介绍吧!