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

摘要:
据发现,金星信息安全发布了一篇文章《【漏洞分析】织梦前台随机用户的密码修改》,该文章仅对未设置安全问题(默认未设置)的用户有效。0x02漏洞会影响此漏洞,使攻击者可以修改任何前台用户的密码。目标没有安全问题。0x04漏洞分析问题出现在/member/resetpasswordd.php文件中。由于用户没有设置安全问题,验证码直接在首页返回。(请参见上文)因为用户ID是可控的。

 0x00 前言

早上浏览sec-news,发现锦行信息安全发布了一篇文章《【漏洞分析】 织梦前台任意用户密码修改》,看完之后就想着自己复现一下。

该漏洞的精髓是php的弱类型比较,'0.0' == '0',也有一定的限制,只对没有设置安全问题的用户有效(默认是没有设置的)。

0x01 漏洞版本

我复现的是DedeCMS V5.7 SP2正式版,2018-01-09发布的,其他的没测。应该算是最新版本的一个0day了。

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

0x02 漏洞影响

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

0x03 漏洞利用条件

1,开启会员模块

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

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

0x04 漏洞分析

问题出现在/member/resetpasswordd.php  文件中。dedecms 用的是全局变量解析

一步步看:

【漏洞分析】dedecms有前提前台任意用户密码修改第2张

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

接下来看到

【漏洞分析】dedecms有前提前台任意用户密码修改第3张

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

【漏洞分析】dedecms有前提前台任意用户密码修改第4张

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

直接传0是不行的,因为前面有一个empty的判断,当然你也可以利用十六进制比如:0x0

【漏洞分析】dedecms有前提前台任意用户密码修改第5张

【漏洞分析】dedecms有前提前台任意用户密码修改第6张

 其内不转换和上面的是一样的。

接下来跟进sn函数(记住这里我们的send默认为N)

【漏洞分析】dedecms有前提前台任意用户密码修改第7张

【漏洞分析】dedecms有前提前台任意用户密码修改第8张

继续跟进newmail函数

【漏洞分析】dedecms有前提前台任意用户密码修改第9张

可以看到当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用户

【漏洞分析】dedecms有前提前台任意用户密码修改第10张

Step2:发送请求url

【漏洞分析】dedecms有前提前台任意用户密码修改第11张

Step3:请求修改页URL:

http://127.0.0.1/dedecms/member/resetpassword.php?dopost=getpasswd&id=3&key=Dj7PeiRm

【漏洞分析】dedecms有前提前台任意用户密码修改第12张

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

【漏洞分析】dedecms有前提前台任意用户密码修改第13张

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

【漏洞分析】dedecms有前提前台任意用户密码修改第14张

验证成功。

0x06  思考与总结

虽然说整个漏洞的关键是那一处弱类型比较,也是php的特性与及开发人员对于特性的掌握不够全面所致。漏洞危害其实不太,dede多用于内容,没有什么用户交互而言。如果需要提供用户交流平台,大多数应该会用discuz。

但我觉得对于用户的权限划分不明才是这个漏洞的根本,可以归根为越权。用户id竟然可以直接由用户控制传输,倘若通过session,那么就算用户安全问题没有设置,可以用弱类型比较,最后也仅限于修改自己的密码。

php的弱类型一直是一个问题,特别是早期没有那么重视安全的时候。多少问题都是出在那里。

免责声明:文章转载自《【漏洞分析】dedecms有前提前台任意用户密码修改》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SqlServer触发器常用语法AFTER、INSTEAD OF及其详解Laravel 开发单页应用时返回 302 状态码 、跳转 login 页面下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

django 数据库迁移

一,简单的数据导出与导入(简单的迁移) 1. django 项目提供了一个导出的方法 python manage.py dumpdata, 不指定 appname 时默认为导出所有的app 1 python manage.py dumpdata [appname] > appname_data.json 比如我们有一个项目叫 mysite, 里...

Redis配置不当致使root被提权漏洞

Redis配置不当致使root被提权漏洞 Dear all~ 最近Redis服务被曝出因配置不当,可能造成数据库被恶意清空,或被黑客利用写入后门文件造成进一步入侵,请关注! 一、漏洞发布日期 2015年11月10日 二、已确认被成功利用的软件及系统 对公网开放,且未启用认证的redis服务器。 三、漏洞描述 最近Redis服务被曝出因配置不当,被攻击者进行...

报错:(未解决)Opening socket connection to server master/192.168.52.26:2181. Will not attempt to authenticate using SASL (unknown error)

报错背景: CDH集群中,将kafka和Flume整合,将kafka的数据发送给Flume消费。 启动kafka的时候正常,但是启动Flume的时候出现了报错现象。 报错现象: DH-5.15.1-1.cdh5.15.1.p0.4/lib/hadoop/lib/native:/opt/cloudera/parcels/CDH-5.15.1-1.cdh5....

Oracle dblink详解(转)

oracle dblink 是干嘛的:比如现在有俩个数据库,都是单独的,如果我们现在登陆当前数据库,想访问另一个数据库,如果我们建了DBLINK我们就可以直接在当前数据库取访问另一个数据库。 如select * from user@xe 这样我们就可以直接访问另一个数据库的user表@真东方之子 database link概述 database link是...

LeetCode刷题--20.有效的括号(简单)

题目描述 给定一个只包括 ' ( ' , ' )  ',  ' { ' , ' } ' , ' [ ' , ' ] ' 的字符串,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例1: 输入:"()"输出:true 示例2: 输入:"()[ ] { } "输出:...

ms17_010(永恒之蓝)漏洞复现详细教程

如题,这是个漏洞复现的详细教程,本教程针对的系统是Windows7操作系统,其他系统请自行测试。 备注:教程会很详细,讲解会很明白,一文可以解决你的常见困难。 测试环境 kalilinux 192.168.1.109 (主机) windows7 192.168.1.104 (虚拟机) 开始 首先使用 nmap 命令扫描局域网内的所有主机(因为ms17_...