@1kbfree
2018-05-09T00:34:20.000000Z
字数 1100
阅读 1046
代码审计
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日