{${phpinfo()}}叫什么?(与远程命令执行相关)

{${phpinfo()}}叫什么?(与远程命令执行相关),php,security,code-injection,Php,Security,Code Injection,我希望有人能为我回答这个问题,因为我对它相当好奇已经有一段时间了,但似乎还没有得到答案。 然而,我相信这里会有人能够做到,因为这里有一些非常聪明的人 现在,我来回答这个问题。 我将以远程命令执行漏洞为例 <?php echo preg_replace('/(.*)/e', 'strtoupper("\\1")', $argv[1]); ?> 要利用此漏洞,攻击者只需输入{${phpinfo()}}。 我的问题如下: 大括号{}是用来做什么的?为什么看起来像一个大括号 变量 它有

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

现在,我来回答这个问题。 我将以远程命令执行漏洞为例

<?php echo preg_replace('/(.*)/e', 'strtoupper("\\1")', $argv[1]); ?>

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

  • 大括号
    {}
    是用来做什么的?为什么看起来像一个大括号 变量
  • 它有什么名字吗?我不相信这是一个变量函数,因为它们是不同的,不是吗
  • 谢谢大家!

    它称为“复杂(卷曲)语法” 希望此链接将帮助您:

    这是我的

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

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

    这就是为什么
    e
    修饰符不受欢迎的原因,例如,对其进行成像

    {${eval($\u GET['php\u code'])}
    ,这使攻击者能够执行任意php代码,从而使其几乎完全访问您的服务器


    要防止出现这种情况,请改用
    preg\u replace\u callback()

    哦,到目前为止,大括号还不在列表中: