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. springboot logback日志的使用

    以下有两个使用,一个是简单使用,另一个是需要进行详细的配置再使用.首先给出源代码.可以直接使用 import org.slf4j.Logger;import org.slf4j.LoggerFacto ...

  2. Spring Boot 面试题总结

    1.什么是spring boot 答案:springboot是用来简化spring应用的初始搭建和开发过程,使用特定的配置文件来配置,例如application.properties,简化来maven ...

  3. 深入浅出Mysql索引的那些事儿

    文章来源:公众号:猿人谷 一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优 ...

  4. 55 (OC)* 图片圆角处理

    iOS图片设置圆角性能优化   问题 圆角虽好,但如果使用不当,它就是你的帧数杀手,特别当它出现在滚动列表的时候.下面来看圆角如何毁掉你的流畅度的. 实测 layer.cornerRadius 我创建 ...

  5. NPOI导出数值格式设置(我是保留四位小数,不足补0)

    看了网上好多帖子,都是保留两位小数的,写法是: HSSFDataFormat.GetBuiltinFormat("0.00"); 于是想四位小数,就是多加两个00,变成: HSSF ...

  6. Spring Boot2 系列教程(七)理解自动化配置的原理

    Spring Boot 中的自动化配置确实够吸引人,甚至有人说 Spring Boot 让 Java 又一次焕发了生机,这话虽然听着有点夸张,但是不可否认的是,曾经臃肿繁琐的 Spring 配置确实让 ...

  7. [Leetcode][动态规划] 买卖股票的最佳时机IV

    一.题目描述 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多笔交易(你必须在再次购 ...

  8. rpm方式升级cenos6.7内核

    最近因为yarn集群问题需要配置cgroup.但是配置完成后操作系统内核奔溃. 查找资料后发现升级内核可以解决问题.在领导的大力支持下,对生产环境的计算节点(nodemanager)进行了批量升级内核 ...

  9. Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统

    一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...

  10. Windows10安装多个版本的PostgreSQL数据库,但是均没有自动注册Windows服务的解决方法

    1.确保正确安装了PostgreSQL数据库,注意端口号不能相同 我的安装目录如图: 其中9.6版本的端口号为5432,10版本的端口号为5433,11版本的端口号为5434.若不知道端口号,可在Po ...