作者:HackBraid
0x01 设计缺陷&&逻辑漏洞挖掘的脑图:
0x02 无任何验证 :
程序安装完成后不会自动删除安装文件,也不会生成lock来判断是否安装过导致的重装漏洞,之前出现过的漏洞代码如下:
install/index.php
install的引导文件里没有判断lock导致可以直接重装
0x03 代码的逻辑问题 :
1.Step1判断lock文件可直接Step2绕过
install/index.php的缺陷代码和分析如下:
- 判断lock文件的代码有问题
还有一种是在判断lock文件是否存在的代码上有问题了,我们看下缺陷代码:
可以看到这里判断了Lock是否存在,但是if(file_exists($lockfile) && ($_a==’template’ || $_a==’setting’ || $_a==’check’)这里除了判断lock还判断了$_a,并且使用&&导致$_a为空时就绕过了lock的验证最终导致可继续重装。
0x04 变量覆盖 :
在install/index.php中
file_exists($insLockfile)这里判断lock文件是否存在并退出,但是这行代码foreach($$_request as $_k => $_v) ${$_k} = _runmagicquotes($_v);存在变量覆盖,所以可以直接将$insLockfile变量覆盖为1就使得file_exists($insLockfile)的返回为0,从而可以继续重装。
0x05 判断lock后无exit :
缺陷代码如下:
检查是否存在install.lock,然后用javascript的方式告诉用户“系统已安装过”,然后跳转。问题在于这个脚本根本还没有使用exit函数来结束,程序会继续运行,导致可继续重装。