首页 » 网站建设 » dedecmsphp702技巧_DeDeCMS v57 密码修改马脚分析

dedecmsphp702技巧_DeDeCMS v57 密码修改马脚分析

访客 2024-12-11 0

扫一扫用手机浏览

文章目录 [+]

2018年1月10日, 锦行信息安全公众号公开了一个关于DeDeCMS前台任意用户密码修正漏洞的细节2。

2018年1月10日,Seebug漏洞平台3收录该漏洞,漏洞编号为SSV-97074,知道创宇404漏洞应急团队成功复现该漏洞。

dedecmsphp702技巧_DeDeCMS v57 密码修改马脚分析

2018年1月17日,阿里先知平台公开了一个任意用户上岸漏洞4,和一个安全隐患6,通过组合漏洞,导致后台密码可以被修正。

dedecmsphp702技巧_DeDeCMS v57 密码修改马脚分析
(图片来自网络侵删)

2018年1月18日,知道创宇404漏洞应急团队成功复现该漏洞。

0x02 漏洞简述

全体漏洞利用链包括3个过程:

1、前台任意用户密码修正漏洞

2、前台任意用户上岸漏洞

3、前台管理员密码修正可影响后台的安全隐患

通过3个问题连起来,我们可以重置后台admin密码,如果我们得到了后台地址,就可以进一步上岸后台进行下一步攻击。

1、前台任意用户密码修正漏洞

前台任意用户密码修正漏洞的核心问题是由于DeDeCMS对付部分判断利用缺点的弱类型判断,再加上在设置初始值时利用了NULL作为默认添补,导致可以利用弱类型判断的漏洞来绕过判断。

漏洞利用有几个限定:

1、漏洞只影响前台账户

admin账户在前台是敏感词无法上岸

2、admin账户的前后台密码不一致,无法修正后台密码。

3、漏洞只影响未设置密保问题的账户

2、前台任意用户上岸漏洞

前台任意用户上岸漏洞紧张是利用了DeDeCMS的机制问题,通过一个分外的机制,我们可以得到任意通过后台加密过的cookie,通过这个cookie我们可以绕过上岸,实现任意用户上岸。

漏洞利用有一个限定:

如果后台开启了账户注册审核,那就必须等待审核通过才能进行下一步利用。

3、前台管理员密码修正可影响后台的安全隐患

在DeDeCMS的设计中,admin被设置为不可从前台上岸,但是当后台上岸admin账户的时候,前台同样会上岸管理员账户。

而且在前台的修正密码接口,如果供应了旧密码,admin同样可以修正密码,并且这里修正密码会同步给后台账户。

通过3个漏洞合营,我们可以避开全体漏洞利用下的大部分问题。

前台任意用户密码修正漏洞->修正admin密码,前台任意用户登录漏洞->上岸admin账户,通过刚才修正的admin密码,来重置admin账户密码。

0x03 漏洞复现

1、 上岸admin前台账户

安装DeDeCMS

注册用户名为000001的账户

由于是本地复现漏洞,以是我们直接从数据库中修正为审核通过

访问

http://your_website/member/index.php?uid=0000001

获取cookie中last_vid_ckMd5值,设置

DeDeUserID_ckMd5为刚才获取的值,并设置DedeUserID为0000001访问http://your_website/member/

2、修正admin前台上岸密码

利用DeDeCMS前台任意用户密码修正漏洞修正admin前台密码。

布局漏洞利用要求

http://yourwebsite/member/resetpassword.phpdopost=safequestion&safequestion=0.0&safeanswer=&id=1

从Burp获取下一步利用链接

/member/resetpassword.php?dopost=getpasswd&id=1&key=nlszc9Kn

直接访问该链接,修正新密码

成功修正上岸admin密码

3、修正后台密码

访问

http://yourwebsite/member/edit_baseinfo.php

利用刚才修正的密码再次修正密码

成功上岸

0x04 代码剖析

1、 前台任意用户上岸

在剖析漏洞之前,我们先来看看通过cookie获取上岸状态的代码。

/include/memberlogin.class.php 161行

通过GetCookie函数从DedeUserID取到了明文的M_ID,通过intval转化之后,直接从数据库中读取该id对应的用户数据。

让我们来看看GetCookie函数

/include/helpers/cookie.helper.php 56行

这里的cfg_cookie_encode是未知的,DeDeCMS通过这种加盐的办法,来担保cookie只能是做事端设置的,以是我们没办法通过自己设置cookie来上岸其他账户。

这里我们须要从别的地方获取这个加密后的值。

1

/member/index.php 161行

161行存在一段分外的代码,这段代码是用来更新最新的访客记录的,当last_vid没有设置的时候,会把userid更新到这个变量中,更新到flag中。

而这里的userid便是注册时的用户名(如果不是已存在的用户名的话,会由于用户不存在无法访问这个页面)。

通过这种办法,我们就可以通过已知明文来获取我们想要的密文。

这里我们通过注册userid为形似00001或者1aaa这样的用户,在获取上岸状态时,mid会经由intval的转化变为1,我们就成功的上岸到admin的账户下。

ps:该漏洞影响所有用户

2、前台任意用户密码修正

漏洞紧张逻辑在

/member/resetpassword.php 75行至95行

当找回密码的办法为安全问题时

dedecms会从数据库中获取用户的安全问题、回答进行比对,当我们在注册时没设置安全问题时。

从数据库中可以看到默认值为NULL(admin默认没有设置安全问题)

下面是设置了安全问题时数据库的样子,safequestion代表问题的id,safeanswer代表安全问题的回答。

我们须要绕过第一个判断

1

if(empty($safequestion)) $safequestion = '';

这里我们只要传入0.0就可以绕过这里,然后0.0 == 0为True,第二个判断NULL==\"大众\"大众为True,成功进入sn函数。

跟入/member/inc/inc_pwd_functions.php 第150行

有效韶光10分钟,进入newmail函数

跟入/member/inc/inc_pwd_functions.php 第73行

77行通过random天生了8位的临时密码。

这里我们利用的是安全问题修正密码,以是直接进入94行,将key代入修正页。

跳转进入形似

1

/member/resetpassword.php?dopost=getpasswd&id=1&key=nlszc9Kn

的链接,进入修正密码流程唯一存在问题的是,这里&缺点的经由一次编码,以是这里我们只好手动从流量中抓到这个链接,访问修正密码。

3、修正后台密码安全隐患

在DeDeCMS的代码中,专门对前台修正管理员密码做了设置,如果是管理员,则一并更新后台密码,也便是这个安全隐患导致了这个问题。

1

/member/edit_baseinfo.php 119行

0x05 修复方案

截至该文章完成时,DeDeCMS的官方仍旧没有修复该漏洞,以是须要采取临时修复方案,等待官方正式修复更新。

由于攻击漏洞涉及到3个漏洞,但官方仍旧没有公开补丁,以是只能从一定程度上减小各个漏洞的影响。

前台任意用户上岸漏洞:开启新用户注册审核,当创造userid为1xxxx或1时,不予以

通过审核。

在官方更新正式补丁之前,可以考试测验暂时注释该部分代码,以避免更大的安全隐患

1

/member/index.php 161-162行

前台修正后台管理员密码:设置较为繁芜的后台地址,如果后台地址不可创造,则无法上岸后台。

前台任意用户密码修正漏洞:

修正文件/member/resetpassword.php 第84行

将个中的==修正为===

即可临时防护该该漏洞。

作者:锦行信息安全

标签:

相关文章

phploop轮回教程技巧_PHP 轮回While 轮回

PHP 循环在您编写代码时,您常常须要让相同的代码块一次又一次地重复运行。我们可以在代码中利用循环语句来完成这个任务。在 PHP...

网站建设 2024-12-13 阅读0 评论0