一样平常的安装文件在安装完成后,基本上都不会自动删除这个安装的文件,我碰着过的会自动删除的彷佛也就qibocms了。
其他的基本都是通过天生一个lock文件来判断程序是否安装过了,如果存在这个lock文件了就会退出了。 这里首先先来说一下安装文件常常涌现的问题。
根本无验证

这种的虽然不多,但是有时还是会碰着个。在安装完成, 并不会自动删除文件,又不会天生lock来判断是否安装过了。导致了可以直接重装过
例子: WooYun: PHPSHE B2C 重装[http://www.wooyun.org/bugs/wooyun-2014-062047]
安装file
由于install一样平常都会有step 步骤啥的。。Step 1 check 啥啥 step 2 是安装啥的。 而一些cms 默认step是1,而step又是GET 来的 而他check lock的时候便是在step 1里面。 这时候如果我们直接用GET提交step 2,那么就直接进入下一步了,就没check lock了。
例如某cms中的安装文件
变量覆盖导致重装
这里是一个常常碰着的一个变量覆盖。
导致了我们可以覆盖掉$insLockfile从而让file_exists为false就不会退出了。导致再次重装。 这个变量覆盖不知道咋的 能在一些小cms的安装文件里看到。
之前看的xdcms 和 frcms 都存在这个变量覆盖。
例子: WooYun: frcms 重装系统 [http://www.wooyun.org/bugs/wooyun-2014-073244]
解析漏洞
这个也比较少, 就随便说句。便是像dedecms良久以前的那样在安装完成后会在install.php rename 为 Install.php.bak 但是由于apache的解析漏洞,如果无法识别末了的一个后缀的话,就会向上解析,那么就又成php了。然后又结合dedecms安装时的变量覆盖,又成重装了。
知足一些条件不会退出的
这种例子也不算太多, 自己彷佛也没碰着过太多。
首先以之前发过的sitestar举例下
这里我们来理解一下这个逻辑, 这里的file_exists($lockfile) 由于安装成功后 lockfile 肯定存在的,以是这里肯定会是true。然后再看一下,这里是一个 && true true
才会进入语句块。 那么如果$_a 不为 template 、 setting 、 check 的话,那么后面的就为false True and false => false就不会进入这个语句块,就不会exit,再合营后面的
刚好有个其他的 如果$_a 为 create 那么就不会退出这个脚本
刚好这个create 能达到Getshell的效果
例子: WooYun: 建站之星Sitestar前台Getshell一枚 [http://www.wooyun.org/bugs/wooyun-2014-054387]
剩下的还有hdwiki之前也有一个基本差不多这样的例子
如果step为8的话 那么就不会实行exit了。
刚好这里step 8又能实行一些分外的操作。。 现在就把case 8 注释掉了。
这里代码我就不复制过了 免得占篇幅。
这里差不多是我比较常碰着的一些安装文件常常碰着的问题了,溘然想也想不到其他啥的了。