代码审计的艺术系列-第十一篇

2019-04-04 约 768 字 预计阅读 2 分钟

声明:本文 【代码审计的艺术系列-第十一篇】 由作者 小冰 于 2016-10-23 04:24:00 首发 先知社区 曾经 浏览数 5848 次

感谢 小冰 的辛苦付出!

作者:HackBraid

0x01 设计缺陷&&逻辑漏洞挖掘的脑图:

0x02 无任何验证 :

程序安装完成后不会自动删除安装文件,也不会生成lock来判断是否安装过导致的重装漏洞,之前出现过的漏洞代码如下:
install/index.php

install的引导文件里没有判断lock导致可以直接重装

0x03 代码的逻辑问题 :

1.Step1判断lock文件可直接Step2绕过
install/index.php的缺陷代码和分析如下:

  1. 判断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函数来结束,程序会继续运行,导致可继续重装。

关键词:[‘新手’, ‘入门资料’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now