0x01 漏洞影响

该漏洞允许攻击者修改任意前台用户密码。

0x02 漏洞利用条件

1,开启会员模块

2,攻击者拥有一个正常的会员账号

3,目标没有设置安全问题

0x03 漏洞分析

漏洞文件:/member/resetpassword.php:

这个文件是来找回用户密码的,这里可以通过邮箱找回,也可以通过安全问题找回。

来看看代码中问题出在哪里:

这里先接受了一个id变量,用来查询用户。

接下来看到

这里的dpost变量就是找回用户密码的操作,可以通过邮件找回也可以通过安全问题找回,上图就是通过安全问题找回($dopost == "safequestion")

首先mid变量通过正则来过滤提交的id参数,然后拼接到下面的select查询语句中,

$sql = "SELECT safequestion,safeanswer,userid,email FROM #@__member WHERE mid = '$mid'";

这些都是先找到需要找回密码的用户的信息。

漏洞重点在这里:

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

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

判断这两个变量是否为空,是就等于空字符,这两个变量对应的就是找回密码的安全问题和安全问题的答案

接下来判断,我们在找回密码页面提交的安全问题和答案是否和数据库中存的一样,一样的话进入执行这个sn函数,这个就是找回密码的,否则不是

问题就出在从数据库中获取safequestion,然后与传过来的数据进行判等。用的是双等号,又因为用户没有设置安全问题,数据库里面默认存的是0。

通过php弱类型的转换'0.0' == '0'了。(内部运算:先是把0.0(浮点数(0.0)转换为int(0),然后字符串('0')转换为int(0),最后 0==0 ,所以相等了。)

可以看到使用”0.0”,”0.”,”0e1”都可以绕过前面的判断,最后进入sn()函数,继续跟进。

(记住这里我们的send默认为N)

sn()函数在文件/member/inc/inc_pwd_functions.php:

这里发现还是要进行发邮箱验证,继续跟进newmail函数,看看是否可以不用验证邮箱进行绕过。

elseif($send == 'N')
{
return ShowMsg('稍后跳转到修改页', $cfg_basehost.$cfg_memberurl."/resetpassword.php?dopost=getpasswd&id=".$mid."&key=".$randval);
}

可以看到当send为N时,直接在前端页面返回了验证码。(而我们这里刚好默认就是N,见前文)
又因为用户id是我们可以控制的,safequestion(默认情况)下可以绕过。

那么也就达成了修改前台任意用户密码的效果。

0x04 漏洞验证

通过分析代码我们知道我们请求的地址是这样了

http://192.168.5.149/DedeCMS-V5.7/uploads/member/resetpassword.php?dopost=safequestion&safequestion=0.0&id={userid}

这里我们注册两个个账号:

账号一 test 密码test 这是我们的目标账号 id为2

账号二 secquan 密码 secquan 这是我们的攻击账号 id为3

这里登录了secquan的账号 ,我们要重置目标id为2的账号,发送请求url,

http://192.168.5.149/DedeCMS-V5.7/uploads/member/resetpassword.php?dopost=safequestion&safequestion=0.0&id=2

这里直接返回了邮箱验证里的验证码

这时候我们再来请求修改页URL:

http://192.168.5.149/DedeCMS-V5.7/uploads/member/resetpassword.php?dopost=getpasswd&id=2&key=ROivopAb

然后就可以直接重置密码了。

这里修改id的值即可修改对应的用户的密码。

但是这个漏洞存在一个缺陷,因为通过分析可以看出来只有没有设置安全问题的用户才会受此漏洞的影响;而且只能修改前台用户的密码。

代码审计-DedeCMS-V5.7前台任意用户密码重置的更多相关文章

  1. 【漏洞分析】dedecms有前提前台任意用户密码修改

     0x00 前言 早上浏览sec-news,发现锦行信息安全发布了一篇文章<[漏洞分析] 织梦前台任意用户密码修改>,看完之后就想着自己复现一下. 该漏洞的精髓是php的弱类型比较,'0. ...

  2. zzcms8.2#任意用户密码重置#del.php时间盲注#复现

    00x0 引言 早上起来,发现seebug更新了一批新的洞, 发现zzcms8.2这个洞好多人在挖,于是我就默默的踏上了复现之路(要不是点进去要买详情,我何必这么折腾~) 环境:zzcms8.2(产品 ...

  3. PHPCMS v9.5.8-设计缺陷可重置前台任意用户密码

    验证.参考漏洞:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0152291.html 漏洞出现在/phpcms/modules/member/in ...

  4. PHPCMS v9.6.0 任意用户密码重置

    参考来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0173130.html 他分析的好像不对.我用我的在分析一次. 先来看poc: /inde ...

  5. 任意用户密码重置的十种姿势=====>学习笔记!

    原学习视频链接:https://www.butian.net/School/content?id=214%E2%80%98 1.验证码不失效 原因:获取的验证码缺少时间限制,仅判断验证码是否不正确而未 ...

  6. Dbshop v1.3任意用户密码重置漏洞

    0x00 前言 年也过的差不多了,各自也都回到岗位忙碌起来了,新的一年祝大家诸事顺利,洞洞高危!好了进入正题 0x01 漏洞简介 本次主要写个简单的逻辑漏洞!然后抛个Message 内置高危. 1.找 ...

  7. ZZCMS8.2 用户密码重置漏洞

    前言 一个找回密码处的逻辑漏洞, 还是有点意思的. 正文 首先是定位找回密码功能对应的代码位置,使用找回密码的功能,然后抓包即可 下面去 getpassword.php 里面看看, 首先包含了一些文件 ...

  8. Linux root用户密码重置,远程登陆,文件基本属性

    Linux root用户密码重置,远程登陆,文件基本属性 忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码 ...

  9. 通达OA 前台任意用户登录漏洞复现

    漏洞描述 通达OA是一套办公系统.通达OA官方于4月17日发布安全更新.经分析,在该次安全更新中修复了包括任意用户登录在内的高危漏洞.攻击者通过构造恶意请求,可以直接绕过登录验证逻辑,伪装为系统管理身 ...

随机推荐

  1. 面试常见问题:java中wait()和sleep()方法的区别

    wait()和sleep()方法都是用来控制多线程的有力工具,那么它们之间有什么巨大的区别呢? 1.wait()方法是属于Object类的,而sleep()方法是属于Thread类的. 2.最重要的一 ...

  2. Python网络爬虫实战(三)照片定位与B站弹幕

    之前两篇已经说完了如何爬取网页以及如何解析其中的数据,那么今天我们就可以开始第一次实战了. 这篇实战包含两个内容. * 利用爬虫调用Api来解析照片的拍摄位置 * 利用爬虫爬取Bilibili视频中的 ...

  3. C#中using的使用-以FileStream写入文件为例

    场景 CS中FileStream的对比以及使用方法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100396022 关注公众号 ...

  4. 【学习笔记】第一章 python安全开发简介

    1.1为什么黑客喜欢用python? python为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象的称为“”内置电池“”,用python开发,许多功能不必从零 ...

  5. Java 中的 syncronized 你真的用对了吗

    生活中随处可见并行的例子,并行 顾名思义就是一起进行的意思,同样的程序在某些时候也需要并行来提高效率,在上一篇文章中我们了解了 Java 语言对缓存导致的可见性问题.编译优化导致的顺序性问题的解决方法 ...

  6. Linux 笔记 - 第十九章 配置 Squid 正向代理和反向代理服务

    一.简介 Squid 是一个高性能的代理缓存服务器,对应中文的乌贼,鱿鱼的意思.Squid 支持 FTP,gopher 和 HTTP 协议.和一般的代理缓存软件不同,Squid 用一个单独的,非模块化 ...

  7. Django中自定义模型管理器(Manager)及方法

    1.自定义管理器(Manager) 在语句Book.objects.all()中,objects是一个特殊的属性,通过它来查询数据库,它就是模型的一个Manager.每个Django模型至少有一个ma ...

  8. Spring Cloud 负载均衡初体验

    目录 服务搭建 1.注册中心--Eureka Server 2.服务提供方--Service Provider 3.服务消费方--Service Consumer 服务消费 Feign 与断路器 Hy ...

  9. moment实现计算两个时间的差值

    var m1 = moment('2018-08-14 11:00:00'), m2 = moment('2018-08-14 12:10:00'); console.log(m1)console.l ...

  10. 三段式有限状态机Verilog代码

    状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作.完成特定操作的控制中心.有限状态机简写为FSM(Finite State Machine),主 ...