前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >d_cms(某梦)公开漏洞复现 - 篡改cookie登入admin

d_cms(某梦)公开漏洞复现 - 篡改cookie登入admin

原创
作者头像
极安御信安全研究院
发布2022-03-30 20:15:17
2850
发布2022-03-30 20:15:17
举报

作者 | 枫涧

编辑 | 楌橪

审计系统:dedeCMS v5.7

目标:篡改cookie实现任意登录并分析原理。

我觉得这个漏洞主要是对于用户ID的处理方式不当,以及把敏感的东西放到了cookie中进行传输。

分析流程图:

细致分析: 首先,当我们访问member/index.php?uid=00001时,触发了Putcookie(),而Putcookie()中的last_vid就是我们url里面的uid,同时,还设置了last_vid以及last_vid_ckMd5两个cookie进行传输,这个地方就造成了cookie泄露,我们可以通过抓包得到。

获得了后面需要用到的两个东西:last_vid和last_vid_ckMd5。

其次,当我们登陆成功后,会进行IsLogin()判断,判断是否是登录状态。

而M_ID又是来源于memberlogin.class.php中170行,通过GetNum(GetCooke("DedeUserID"))来获得;

期间我们可以观察cookie.helper.php中的GetCookie()和PutCookie(),发现生成cookie的方法都一样。

然后继续memberlogin.class.php得到了M_ID往下走,我们发现,在判断M_ID是否为空时,运用了intval()函数。这个函数有一个特点,就是在处理一些特殊数据进行取整处理时会进行一定转换,而也就是这些转换为我们提供了机会。下面引用菜鸟论坛对于intval()对于一些数据的处理说明:

而之前我们提到在获取cookie的时候也有一个GetNum()方法,这个方法其实也就是对M_ID做一个只取数字的处理,所以我们也可以通过修改正则表达式来达到想要的效果,避免使用intval()的而出现这个问题。

因此,我们设置M_ID=00001时,会通过intval()变为1,而1恰好就是admin的ID。那么我们得到了admin的M_ID之后,回到index.php进行后续的数据获取操作,从而进入了对应的空间。

操作及结果:

首先,注册一个username是00001的用户,类似能通过intval()换为1的就行,而这个username也就是我们的uid:

然后用00001用户登陆后,刷新进行抓包,用之前我们访问00001主界面抓取到的cookie进行修改再发包过去:

得到:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档