【漏洞分析】dedecms有前提前台任意用户密码修改
0x00 前言
早上浏览sec-news,发现锦行信息安全发布了一篇文章《【漏洞分析】 织梦前台任意用户密码修改》,看完之后就想着自己复现一下。
该漏洞的精髓是php的弱类型比较,'0.0' == '0',也有一定的限制,只对没有设置安全问题的用户有效(默认是没有设置的)。
0x01 漏洞版本
我复现的是DedeCMS V5.7 SP2正式版,2018-01-09发布的,其他的没测。应该算是最新版本的一个0day了。

0x02 漏洞影响
该漏洞允许攻击者修改任意前台用户密码。
0x03 漏洞利用条件
1,开启会员模块
2,攻击者拥有一个正常的会员账号
3,目标没有设置安全问题
0x04 漏洞分析
问题出现在/member/resetpasswordd.php 文件中。dedecms 用的是全局变量解析
一步步看:

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

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

通过php弱类型的转换'0.0' == '0'了。(内部运算:先是把0.0(浮点数(0.0)转换为int(0),然后字符串('0')转换为int(0),最后 0==0 ,所以相等了。)
直接传0是不行的,因为前面有一个empty的判断,当然你也可以利用十六进制比如:0x0


其内不转换和上面的是一样的。
接下来跟进sn函数(记住这里我们的send默认为N)


继续跟进newmail函数

可以看到当send为N时,直接在前端页面返回了验证码。(而我们这里刚好默认就是N,见前文)
又因为用户id是我们可以控制的,safequestion(默认情况)下可以绕过。
那么也就达成了修改前台任意用户密码的效果。
0x05 漏洞复现
因为这里的模块属于会员模块,包含了member.login.class.php。需要登录才能操作。
那么我先注册一个用户,担任攻击者,再注册另外一个用户担任目标。
请求url应该是这样的:
http://127.0.0.1/dedecms/member/resetpassword.php?dopost=safequestion&safequestion=0.0&id={userid}
test为攻击者,用户id为2,密码:test。test1为目标,用户id为3,修改密码为:hacker
下面就演示一下用test修改test1用户的过程。
Step1: 登陆test用户

Step2:发送请求url

Step3:请求修改页URL:
http://127.0.0.1/dedecms/member/resetpassword.php?dopost=getpasswd&id=3&key=Dj7PeiRm

Step4:修改用户test1的密码为hacker

Step5: 用修改之后的密码登陆进行验证

验证成功。
0x06 思考与总结
虽然说整个漏洞的关键是那一处弱类型比较,也是php的特性与及开发人员对于特性的掌握不够全面所致。漏洞危害其实不太,dede多用于内容,没有什么用户交互而言。如果需要提供用户交流平台,大多数应该会用discuz。
但我觉得对于用户的权限划分不明才是这个漏洞的根本,可以归根为越权。用户id竟然可以直接由用户控制传输,倘若通过session,那么就算用户安全问题没有设置,可以用弱类型比较,最后也仅限于修改自己的密码。
php的弱类型一直是一个问题,特别是早期没有那么重视安全的时候。多少问题都是出在那里。
【漏洞分析】dedecms有前提前台任意用户密码修改的更多相关文章
- 代码审计-DedeCMS-V5.7前台任意用户密码重置
0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...
- PHPCMS v9.5.8-设计缺陷可重置前台任意用户密码
验证.参考漏洞:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0152291.html 漏洞出现在/phpcms/modules/member/in ...
- Metinfo4.0 /member/save.php 任意用户密码修改
- zzcms8.2#任意用户密码重置#del.php时间盲注#复现
00x0 引言 早上起来,发现seebug更新了一批新的洞, 发现zzcms8.2这个洞好多人在挖,于是我就默默的踏上了复现之路(要不是点进去要买详情,我何必这么折腾~) 环境:zzcms8.2(产品 ...
- Windows下GIT的用户密码修改
Windows下GIT的用户密码修改
- 通达OA 前台任意用户登录漏洞复现
漏洞描述 通达OA是一套办公系统.通达OA官方于4月17日发布安全更新.经分析,在该次安全更新中修复了包括任意用户登录在内的高危漏洞.攻击者通过构造恶意请求,可以直接绕过登录验证逻辑,伪装为系统管理身 ...
- Dbshop v1.3任意用户密码重置漏洞
0x00 前言 年也过的差不多了,各自也都回到岗位忙碌起来了,新的一年祝大家诸事顺利,洞洞高危!好了进入正题 0x01 漏洞简介 本次主要写个简单的逻辑漏洞!然后抛个Message 内置高危. 1.找 ...
- 任意用户密码重置的十种姿势=====>学习笔记!
原学习视频链接:https://www.butian.net/School/content?id=214%E2%80%98 1.验证码不失效 原因:获取的验证码缺少时间限制,仅判断验证码是否不正确而未 ...
- mysql用户密码修改,用户添加、删除及设置权限
一下的示例所用用户名和密码为:test,111111 Mysql密码修改: Mysql修改密码需要root的权限,先执行mysql -uroot -p(密码); 1)使用set password方式来 ...
随机推荐
- xml概述(1)
本节要点: 标记语言的定义 XML简介 XML与HTML 比较 XML与数据库比较 XML的特点 XML结构 1 标记语言的定义 "XML.SGML.HTML"中的"ML ...
- Spring Boot实战之逐行释义HelloWorld
一.前言 研究Spring boot也有一小段时间了,最近会将研究东西整理一下给大家分享,大概会有10~20篇左右的博客,整个系列会以一个简单的博客系统作为基础,因为光讲理论很多东西不是特别容易理解 ...
- java.util.ConcurrentModificationException异常排查
java.util.ConcurrentModificationException对于这个异常我们一般会认为是在遍历list的时候对这个list做了add,remove等修改操作造成的,最近在线上 ...
- 如何把git仓库(包含所有提交历史)迁移到gitlab
在gitlab上new 一个project 跳转到本地的git 目录中,运行命令 git remote add gitlab gitlab_new_project_address -最后运行如下命令, ...
- 百度地图点集文档使用python的re模块处理成json的相关写法
这个实在不好起名字.写这个还不是因为被渣度坑的不要不要的.为什么说他坑呢.参考一下这两个截图的txt文档: 文档资源下载地址: http://lbsyun.baidu.com/index.php?t ...
- 「mysql优化专题」高可用性、负载均衡的mysql集群解决方案(12)
一.为什么需要mysql集群? 一个庞大的分布式系统的性能瓶颈中,最脆弱的就是连接.连接有两个,一个是客户端与后端的连接,另一个是后端与数据库的连接.简单如图下两个蓝色框框(其实,这张图是我在悟空问答 ...
- 使用MVC创建API
1.新建MVC-WebAPI 2.Build后页面是这样的,这就是我们需要的页面. 3.自己Add API的页面,然后Run,会发现页面没有action和Description 4.显示action, ...
- git的使用,eclipse操作(待更新)
使用eclipse将项目上传到git私有服务器或github服务器: 1.配置个人信息: 2.配置eclipse私钥公钥: 上传公钥到仓库: 修改仓库中的公钥名称: 3.提交代码 一个仓库只能上传一个 ...
- spring boot https --restful接口篇
我们写的接口默认都是http形式的,不过我们的接口很容易被人抓包,而且一抓全是明文的挺尴尬的 spring boot配置https生成证书大的方向有3种: 1.利用keytool自己生成证书 2.从免 ...
- iOS SDAutoLayout图文混排-共享
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #526eda } span.s1 { color: #4dbf5 ...