use*_*335 11 php security code-injection
我希望有人可以为我回答这个问题,因为我已经相当长时间地对此感到好奇,但似乎无法获得答案.但是,我相信这里有人能够,因为这里有一些非常聪明的人.
现在,问题.我将使用远程命令执行漏洞作为示例.
<?php echo preg_replace('/(.*)/e', 'strtoupper("\\1")', $argv[1]); ?>
Run Code Online (Sandbox Code Playgroud)
为了利用这一点,攻击者只需输入{${phpinfo()}}例如.我的问题如下:
{},为什么它看起来像变量?谢谢!
这是复杂(卷曲)语法.
自PHP 5起,{$}内的函数,方法调用,静态类变量和类常量起作用.但是,访问的值将被解释为定义字符串的范围中的变量的名称.使用单个花括号({})将无法访问函数或方法的返回值或类常量或静态类变量的值.
因此,对于一个简单的变量,单个{}将起作用,"{$foo}"但是phpinfo()是一个函数,当你需要调用它时,你需要两个{},你的例子"{${phpinfo()}}",它将调用phpinfo()函数.
这就是为什么不鼓励使用e修饰符,例如,对此进行成像
{${eval($_GET['php_code'])}},这使攻击者能够执行任意PHP代码,因此几乎可以完全访问您的服务器.
为防止这种情况,请preg_replace_callback()改为使用.
| 归档时间: |
|
| 查看次数: |
2317 次 |
| 最近记录: |