很简洁,但是功能非常全面。
图2
下面我们就来具体分析一下MyBB的漏洞。按照以前我们在Linux下挖掘PHP漏洞的步骤,先下载源代码并安装好,之后输入“grep –n –r ‘\$_POST’ *”,如图3所示。结果很多,仔细看了一下,发现有几个提交的变量,如fid、tid、pid、uid、eid。用“grep -n -r '\$_POST' * | grep pid”查找了几个,没有发现明显的漏洞;再看一下$_GET和$_COOKIE等变量,
也没有明
显的漏洞。
忽然眼睛一亮,
在MyBB主目录下的inc/functions.php的1219处出现了传说中的HTTP_X_FORWARDED_FOR,
如图4所示,
这里或许我们可以进行注
入的。
图3
图4
尽管在magic_quotes_gpc为ON的情况下,这些变量可能受到保护,但是很明显,忽视$_SERVER的结果
就是安全隐患的增加,就可以去寻找程序取得$_SE
RVER的地方,很可能就是脆弱点了!由于很多程序本身就疏于对$_SERVER变量的防范,所以我们只要绕过PHP本身对“'”的转义就可以了。在PHP4中,如果magic_quotes_gpc为OFF的话就不用管了,但是如果magic_quotes_gpc为ON的话,我们几乎就无法再操作下去了!但这种情况在PHP5中获得了彻底的改观,在测试中我发现,PHP5中无论magic_quotes_gpc是ON还是OFF,对$_SERVER变量都不会做转义处理的。这意味着我们可以很轻松地带进程序“'”“、"”和NULL字
符,这对于那些变量过滤不严格的程序来说是致命的!
我们继续分析代码,用vi打开inc/functions.php文
件,
输入Esc,
然后点1219就来到了第1219行,
其主要
作用是得到客户的IP地址。
继续往下看,
到了1292行,
我们找到了一个getip()函数,
如下所示。
在Fedora的命令中输入“grep –n
–r
‘getip’
*”
,我们看看都什么地方用到了这个函数。结果如图5所示。
图5