FreeBuf|Cookie算法与Rootkey随机强度分析
本篇为《DEDECMS伪随机漏洞(一):PHP下随机函数的研究》的续篇 , 研究DEDECMS的cookie生成的算法,以及rootkey生成的算法,确认rootkey使用的随机算法的强度,计算攻击耗时 。
一、Cookie算法1.COOKIE的作用和常见的构造形式作用:权限鉴别、无会话状态 。
构成:
常常是以下形式cookie=F(x,y),F为不可逆函数,x为盐,y为和权限/用户相关的数据
我们可以知道的部分,F->一般常常为hash函数md5,sha256等
y->比如用户名称/id编号/权限简称
我们无法知道的部分,x
2.定位算法-动态调试根据常识,在登陆后,server端会返回cookie!
2.1在web站点上进行登陆,并抓包,看到路径/member/index_do.php
2.2分析index_do.php(dedecms路由很简单,路径直接对应到了文件),在登陆接口处下断点

文章图片
2.3大致浏览整个函数,并没有发现设置cookie的操作(php原型函数-setcookie),但是发现了检查账号的函数,跟入进去:
文章图片

文章图片

文章图片
2.4关键字段有的时候,查看服务端响应或是通过js生成的cookie字段很多,但调用接口时,可能校验的是cookie里面的几个字段,因此我们找到关键的被用来鉴权的字段,可以减少我们测试时的干扰.
针对2.1图片的cookie通过递减字段测试,其实可以发现dedecms校验cookie的关键字段为:
DedeUserID=7;DedeUserID_ckMd5=4d0db47b3ba3fef5;DedeUserID=用户ID;DedeUserIDckMd5=substr(md5($cfgcookie_encode.用户ID),0,16)其中DedeUserID是很容易知道的,或者有规律的,1,2,3,4这样子,那么其实要伪造cookie的关键是需要知道$cfgcookieencode(本文称之为rootkey)
二、RootKey生成算法1.代码定位$cfgcookieencode是固定的?还是在内存内动态生成的?
1.1全文查找以下cfgcookieencode,发现在config.cache.inc.php存储有:这个值和我们在上面断点看到的值一样,大概率可以判断,应该属于一个固定值.1.2全局找一下有哪些地方操作了config.cache.inc.php,看是哪个函数写入了这个值
这儿定位偏了,这儿是更新服务器的时候会刷新一次rootkey~

文章图片
1.3继续定位到install.php$cfgcookieencode除了在config.cache.inc.php,也记录在config.cache.bak.php,那么看下哪里操作了config.cache.bak.php:

文章图片
在上下文找到了同样的rootkey生成算法:
文章图片
在安装界面的时候其实会显示出来给我们:

文章图片
1.4根据1.2,1.3可知RootKey算法如下:
$chars='abcdefghigklmnopqrstuvwxwyABCDEFGHIGKLMNOPQRSTUVWXWY0123456789';$max=strlen($chars)-1;$length=rand(28,32);$root_key='';for($i=0;$i<$length;$i++){$root_key.=$chars[mt_rand(0,$max)];}2.强度分析2.1套用结论
基于第一篇的下面三个结论:
4.1影响随机数生成的因素为两个:1.种子2.次数
4.4种子区间为0到0xffffffff
4.6同一进程下,先后被调用的rand和mt_rand,在未播种的前提下,会使用同一个随机种子
推荐阅读
- 爱小楠聊科技|三者缺一不可,手机拍照的未来在哪里?CMOS、芯片和算法
- 少年帮|新氧升级算法加强人工审核规避黑产入侵,疫情加速消费决策线上化
- 驱动之家|没办法啊!,华为:数据存储芯片、算法都是自己做
- 科技小丸家|花粉:AI算法太爱了,华为最强黑科技神机!麒麟985+50倍数字变焦
- 驱动之家资讯|Waymo自动驾驶算法挑战赛结果出炉:中国企业地平线4项全球第一
- 科技生活大侠|R-CNN,识别迷雾中的物体,谷歌提出最新目标检测算法Context
- 科技实验室|不仅仅是画图,算法对建筑业的影响
- 影客网络科技|占全球搜索引擎八成市场,AI算法实在是太优化了,谷歌这是要逆天
- FreeBuf|图解利用虚函数过GS保护
- 『算法』面试常见问题jvm的调优思路
