zzcms 8.2 任意用户密码修改

作者:Sebao@知道创宇404实验室

漏 洞 描 述

zzcms是一款企业建站程序。zzcms 8.2版本/one/getpassword.php文件存在漏洞,攻击者可利用该漏洞修改任意用户密码。

漏 洞 分 析

/one/getpassword.php 文件第 73行,触发漏洞的关键代码。

}elseif($action=="step3" && @$_SESSION['username']!=''){ $passwordtrue = isset($_POST['password'])?$_POST['password']:""; $password=md5(trim($passwordtrue)); query("update zzcms_user set password='$password',passwordtrue='$passwordtrue' where username='".@$_SESSION['username']."'"); $strout=str_replace("{step4}","",$strout) ; $strout=str_replace("{/step4}","",$strout) ; $strout=str_replace("{step1}".$step1."{/step1}","",$strout) ; $strout=str_replace("{step2}".$step2."{/step2}","",$strout) ; $strout=str_replace("{step3}".$step3."{/step3}","",$strout) ; $strout=str_replace("{#username}",@$_SESSION['username'],$strout) ;

这里仅仅判断了 action 参数为 step3,并且$_SESSION['username']不为空,就进入密码修改的逻辑,直接执行sql语句执行update操作。

那么这里的$_SESSION['username']从哪里来的,我们继续看代码,在/one/getpassword.php 文件第 31行,可以看到 $_SESSION['username']。

if ($action=="step1"){ $username = isset($_POST['username'])?$_POST['username']:""; $_SESSION['username']=$username; checkyzm($_POST["yzm"]); $rs=query("select mobile,email from zzcms_user where username='" . $username . "' "); $row=fetch_array($rs); $regmobile=$row['mobile']; $regmobile_show=str_replace(substr($regmobile,3,4),"****",$regmobile); $regemail=$row['email']; $regemail_show=str_replace(substr($regemail,1,2),"**",$regemail);

这里$_SESSION['username']是从step1中 post传递过来的 username 参数,也就是我们要修改的用户名。那么漏洞就很明显了,在第一步输入要修改的用户名,然后获取session值,直接跳到第三步,修改密码就可以达到任意用户密码修改。

漏 洞 复 现

第一步先在找回密码页面输入要修改的用户名,点击下一步,burp拦截。

抓包获取session值

这里我们获取到了 session 值,然后根据上面的描述,修改数据包,直接进入修改密码操作。

这里session就是上面获取到的,只需要修改 post-data值就可以。这里改成mima888。action值要改成step3 才可以进去 数据库 update语句的操作。然后重放数据包,就可以完成任意密码修改了。 前台登录试试,是否修改成功。

成功修改密码,登录成功。

利用此漏洞,只需要知道用户名即可。

原文发布于微信公众号 - Seebug漏洞平台(seebug_org)

原文发表时间:2018-02-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

单点登录原理与简单实现

web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,...

1984
来自专栏吴伟祥

单点登录原理与简单实现 原

web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联...

1165
来自专栏Java架构沉思录

单点登录原理与简单实现

web应用通常采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关...

1302
来自专栏java技术学习之道

单点登录原理与简单实现

1352
来自专栏小古哥的博客园

PHP学习-验证用户名密码

登录页:login.php 1 <?php 2 //登录 3 if(!isset($_POST['submit'])){exit('非法访问!');} ...

3214
来自专栏DeveWork

WordPress登陆不了后台的原因及解决方法(登陆界面不断返回)

应该说,这是一个常见的现象。这种现象具体为:在后台登陆界面输入账号密码后,点击进入却无任何反应及提示。更换浏览器也是一样。 出现如上问题,请检查一下,你的电脑是...

28011
来自专栏大数据-Hadoop、Spark

wget unable to resolve host address>问题>解决方法

>问题 今天在CDH资源上 http://archive.cloudera.com/cdh5/cdh/5/ 下载 hive-1.1.0-cdh5.7.0 htt...

6028
来自专栏我的博客

PHP错误提示failed to open stream: Too many open files

项目遇到的这个问题failed to open stream: Too many open files 检查PHP脚本发现发起很多curl请求,于是看curl是...

3665
来自专栏coder修行路

python爬虫从入门到放弃(二)之爬虫的原理

在上文中我们说了:爬虫就是请求网站并提取数据的自动化程序。其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程 爬虫的基本流程 发起请求 通过HTTP...

2229
来自专栏钟绍威的专栏

浅谈spring security 403机制一、无权限访问二、匿名访问三、有权限访问原因机制指定AccessDeniedHandler指定error-page情景原因结论

403就是access denied ,就是请求拒绝,因为权限不足 三种权限级别 一、无权限访问 <security:http security="none"...

64510

扫码关注云+社区

领取腾讯云代金券