@1kbfree
        
        2018-05-08T16:34:20.000000Z
        字数 1100
        阅读 1295
    代码审计
banner
在很多开源程序里,都会有安装程序的那个功能,这样让那些不会写代码的人也可以成功的安装这个程序
帝国cms安装界面(网上随便找的): 

KingCMS安装界面(还是网上随便找的): 

这些就是安装网站的界面,只需几步操作就可以安装一个程序,相当方便,但是如果在逻辑上存在一些问题的话,就可能导致网站重装,下面我们就来看看。
我们需要先明白一下
file_exists(),他的参数是一个文件名,主要判断文件是否存在的,如果存在放回true,不存在则返回false,所以现在在安装完某cms后,某cms会生成一个install.xxx文件,用file_exists()来判断文件是否存在,如果文件存在的话就不能再一次安装,如果文件不存在才可安装,但是但凡这里出现了逻辑问题就会有危险,看下面的简单讲解

<meta charset="utf-8"><?php/*** @Author: iamfree* @Date: 2018-05-06 20:07:34* @Last Modified by: iamfree* @Last Modified time: 2018-05-06 20:17:31*/if (file_exists('install.666')){ //判断是否存在install.666文件header("Location:home.php"); //跳转至首页}echo "<h1>开始安装程序...</h1>";?>
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>这是首页</title></head><body><!-- 假装这是很炫酷的首页 --><h1>hello 欢迎来到首页</h1></body></html>
当我们访问index.php的时候,因为目录下存在install.666文件,所以会跳转到home.php,这里我就不展示了,因为我一访问index.php立马跳转到home.php
那么我们如何来绕过呢,我们可以利用BurpSuite工具来绕过,因为BurpSuite不执行http头里面的跳转指令(某大佬告诉我的=v=),我来演示一下。
index.php,然后抓包:
ctrl+r,放到Repeater里
 
成功绕过
那么我们该如何防御呢,其实方法很多种,最粗暴的就是在跳转后面加上一个exit(),下面我再来演示一下

 
成功防御了
作者 @iamfree 
2018 年 05月 06日 
