代码审计-DedeCMS-V5.7前台任意用户密码重置
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前台任意用户密码重置的更多相关文章
- 【漏洞分析】dedecms有前提前台任意用户密码修改
0x00 前言 早上浏览sec-news,发现锦行信息安全发布了一篇文章<[漏洞分析] 织梦前台任意用户密码修改>,看完之后就想着自己复现一下. 该漏洞的精髓是php的弱类型比较,'0. ...
- zzcms8.2#任意用户密码重置#del.php时间盲注#复现
00x0 引言 早上起来,发现seebug更新了一批新的洞, 发现zzcms8.2这个洞好多人在挖,于是我就默默的踏上了复现之路(要不是点进去要买详情,我何必这么折腾~) 环境:zzcms8.2(产品 ...
- PHPCMS v9.5.8-设计缺陷可重置前台任意用户密码
验证.参考漏洞:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0152291.html 漏洞出现在/phpcms/modules/member/in ...
- PHPCMS v9.6.0 任意用户密码重置
参考来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0173130.html 他分析的好像不对.我用我的在分析一次. 先来看poc: /inde ...
- 任意用户密码重置的十种姿势=====>学习笔记!
原学习视频链接:https://www.butian.net/School/content?id=214%E2%80%98 1.验证码不失效 原因:获取的验证码缺少时间限制,仅判断验证码是否不正确而未 ...
- Dbshop v1.3任意用户密码重置漏洞
0x00 前言 年也过的差不多了,各自也都回到岗位忙碌起来了,新的一年祝大家诸事顺利,洞洞高危!好了进入正题 0x01 漏洞简介 本次主要写个简单的逻辑漏洞!然后抛个Message 内置高危. 1.找 ...
- ZZCMS8.2 用户密码重置漏洞
前言 一个找回密码处的逻辑漏洞, 还是有点意思的. 正文 首先是定位找回密码功能对应的代码位置,使用找回密码的功能,然后抓包即可 下面去 getpassword.php 里面看看, 首先包含了一些文件 ...
- Linux root用户密码重置,远程登陆,文件基本属性
Linux root用户密码重置,远程登陆,文件基本属性 忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码 ...
- 通达OA 前台任意用户登录漏洞复现
漏洞描述 通达OA是一套办公系统.通达OA官方于4月17日发布安全更新.经分析,在该次安全更新中修复了包括任意用户登录在内的高危漏洞.攻击者通过构造恶意请求,可以直接绕过登录验证逻辑,伪装为系统管理身 ...
随机推荐
- Python集训营45天—Day02
目录 变量和运算符 1.1 初步介绍 1.2 使用案例 1.3 知识点梳理 1.4 练习 序言:这一章我们将学习变量以及常见的类型,我们将以案例和代码相结合的方式进行梳理,但是其中所有的案例和知识点 ...
- springmvc项目中的中文乱码的解决及未生效解决
情景: springmvc项目中,在控制台输出时中文乱码,在web网页中正常. 解决方法: 在web.xml中添加如下代码: <!-- 中文乱码解决 --> <filter> ...
- java 线程监控
线程的五种状态 * 新建:new * 运行:runnable * 等待:waitting(无限期等待),timed waitting(限期等待) * 阻塞:blocked * 结束:terminate ...
- jenkins自动化部署项目5 -- 系统管理-系统设置ssh配置
[系统管理]-[系统设置] 如果应用服务(前端后台)要部署在linux服务器上,我选择的是用ssh 为了jenkins登录远程登录linux服务器可以免密登录,先配置公钥和私钥: 我是在windows ...
- 接口测试时数据格式是json,如何将响应内容转换为字典解析
import requests url = 'http://127.0.0.1:5050/index' def apiTestPost(url): datas = { 'a':'cisco3', 'b ...
- 【Python笔记】Python 基础语法
Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大小 ...
- Autofac的AOP面向切面编程研究
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...
- C#2匿名方法中的捕获变量
乍一接触"匿名方法中的捕获变量"这一术语可能会优点蒙,那什么是"匿名方法中的捕获变量"呢?在章节未开始之前,我们先定义一个委托:public delegate ...
- java的日期时间处理(待更新)
1. /* * 将时间转换为时间戳 */ public static String dateToStamp(String s) throws ParseExcepti ...
- ELK日志分析系统(3)-logstash数据处理
1. 概述 logspout收集数据以后,就会把数据发送给logstash进行处理,本文主要讲解logstash的input, filter, output处理 2. input 数据的输入处理 支持 ...