【发布时间】:2016-02-19 19:23:57
【问题描述】:
我最近在我们的代码库中偶然发现了以下内容:
$func = $_GET['func'] . '_xyz123';
if(function_exists($func)){
$result = $func($_GET);
echo(json_encode($result));
}
这让我想知道,是否可以将一个 php 内置函数 + 一些垃圾传递给 $_GET['func'],这样它就会抵消 _xyz123 导致 RCE 漏洞利用。
这可能吗,还是我只是偏执?
【问题讨论】:
-
一个空字符可能会这样做,但这让我想知道他们为什么会打扰。构建漏洞利用似乎是一种非常奇怪的方式,但“奇怪”是许多漏洞未被发现的方式。
-
不能使用 \0 字符:3v4l.org/6vsmJ
-
unicode 范围 0x0...0xFFFF 中的任何其他字符都没有:3v4l.org/3MlSg
-
无论这种特殊情况是否可利用,我认为您的担心是对的——运行基于从 GET 参数构建的名称的函数在我的书中是一种代码味道。至少,可以通过发送
\Foo\bar之类的字符串来更改命名空间 -
谢谢@AlexHowansky,我什至没有想到这种可能性。