首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >{${phpinfo()}}调用什么?(远程命令执行相关)

{${phpinfo()}}调用什么?(远程命令执行相关)
EN

Stack Overflow用户
提问于 2012-09-28 08:44:15
回答 2查看 2.8K关注 0票数 11

我希望有人能为我回答这个问题,因为我已经对此相当好奇了很长一段时间了,似乎还没有得到答案。然而,我相信这里的人一定能做到,因为这里有一些非常聪明的人。

现在说到问题上。我将使用远程命令执行漏洞作为示例。

代码语言:javascript
复制
<?php echo preg_replace('/(.*)/e', 'strtoupper("\\1")', $argv[1]); ?>

要利用此漏洞,攻击者只需输入{${phpinfo()}}即可。我的问题如下:

  1. 大括号{}用于什么?为什么它看起来像一个变量?
  2. 它有什么名字吗?我不认为这是一个变量函数,因为它们是不同的,不是吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-28 09:00:07

我是Complex (curly) syntax

函数、方法调用、静态类变量和自PHP5以来{$}工作中的类常量。但是,所访问的值将被解释为定义字符串的作用域中变量的名称。使用单个大括号({})的不适用于访问函数或方法的返回值或类常量或静态类变量的值的。

因此,对于一个简单的变量,单个{}可以工作,就像"{$foo}"一样,但是phpinfo()是一个函数,当您需要调用它时,您需要两个{},这是示例"{${phpinfo()}}",它将调用phpinfo()函数。

这就是为什么discouraged,是e修饰符的原因--例如,对它进行成像

{${eval($_GET['php_code'])}},它使攻击者能够执行任意的PHP代码,因此几乎可以完全访问您的服务器。

要防止出现这种情况,请使用preg_replace_callback()

票数 8
EN

Stack Overflow用户

发布于 2012-09-28 08:56:23

它称为“复杂(卷曲)语法”,希望这个链接能帮助您:

http://php.net/manual/en/language.types.string.php

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12636586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档