php变量函数漏洞演示

什么叫变量函数, 简单点说就是以函数形式执行的一个变量, 就叫变量函数。(标不标准我也不知道, 大概就是这个意思)看变量函数之前, 首先来看一下变量

 $v = 'areyouok';

这样就定义了一个值为字符串areyouok的变量$v, 如果echo $v,得到的将会是一个字符串这就是普通的变量定义和获取变量值的一个完整过程, 我们通过$v获取了字符串areyouok.如果这个时候, 把$v,变成$v(), 意义就变了, 因为这个时候, $v()就变成了一个变量函数,他会去以函数的方式执行与它同名或者名字命名空间下的同名函数,比如

 $i = $_GET['i'];

如果我们echo $i, 获取的将会是通过浏览器get形式输入的信息, 如果把echo $i; 变成$i(); 就变成了首先$i会去寻找与它同名的函数, 如果找到了,就以函数的形式去执行,如果没找到, 就去寻找它的名字命名空间下的名称,然后去以函数的形式去执行, 也就意味着这个时候咱们通过$_GET获取到的用户输入是被以函数的形式去执行的, 如果这个时候, 有黑客过来了, 给你输了一个phpinfo,那么就会造成$i首先去找有没有i这个函数, 如果没找到就继续去名字命名空间下找找$i对应的是什么, 这里咱们的$i对应的是通过$_GET输入获取的内容, 于是, 这个时候, $i找到了他里面的phpinfo, 于是最后phpinfo被以函数的形式执行了, 结果就是造成了一个漏洞。

这里我提供一个小例子

<?php

function msi($v)
{
    eval($v);
}
$mss = 'msi';

echo $mss($_GET['o']);

?>

虽然看起来很可笑, 但现实中的确会有叔叔阿姨会犯这样的错误, 把变量变成了变量函数,

而这个函数用户又是直接可控的。

此条目发表在php security分类目录,贴了, , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注