| //从头开始看 $rootdir = str_replace("\\", '/', dirname(__FILE__)); require $rootdir.'/include/common.inc.php';//通过extract可以覆盖$rootdir为任意值 require PHPCMS_ROOT.'/languages/'.$CONFIG['adminlanguage'].'/yp_admin.lang.php'; if(!$_username) showmessage($LANG['please_login'],$PHPCMS['siteurl'].'member/login.php?forward='.$PHP_URL); |
注意看里面的2个require,第一个那引进的extract的代码,第2个require才导致漏洞的函数。
伪代码:
|
<?php //下面就是require $rootdir.'/include/common.inc.php';引入的代码 require $rootdir.'/web/admin/include/common.inc.php |
如果这里用grep等软件去找静态的上跟踪这个的话障很再可能就会漏调着可能分析得到的结果是:
| $rootdir = str_replace("\\", '/', dirname(__FILE__)); require $rootdir.'/include/common.inc.php' require $rootdir.'/web/admin/include/common.inc.php |
一看$rootdir被过滤了,就会认为这里安全了?
所以一味的grep等静态去找,是找不到这样的bug的上...
来个“马后炮”,对于这样的上用灰盒测试可能效果很好:就是先看代码看common.inc.php这个躯干里发现用变量覆盖,然后黑盒去找跑那些变量可以覆盖.....
目前,Phpcms官方尚未到此消息发表回应
RSS订阅






收 藏
推 荐