zoukankan      html  css  js  c++  java
  • 业务逻辑漏洞——浅谈验证码漏洞

    在这里插入图片描述
    几个月前写的。。。居然一直待在草稿箱
    已经忘了之前想用一些cms来复现常见的业务逻辑漏洞这回事了
    最近有时间就继续慢慢弄吧~~

    一、验证码漏洞

    验证码机制主要用于用户身份识别,常见可分为图片验证码、数字验证码、滑动验证码、短信验证码、邮箱验证码等

    根据形成原因可分为:

    1.验证码暴力破解

    1.1 漏洞成因
    服务端未对验证时间、次数作出限制,存在爆破的可能性。验证码常用在批量注册,任意用户登录场景。

    1.2 测试
    1.2.1 测试流程
    输入信息–>抓包爆破验证码–>查看爆破是否成功
    1.2.2 PHPYunCMS漏洞演示
    PHPYun后台验证码可爆破
    (1)测试环境
    系统:Win10
    环境:PHPStudy集成环境
    CMS版本:PHPYunv3.1
    (2)测试过程
    输入正确用户信息
    在这里插入图片描述
    爆破成功
    在这里插入图片描述
    1.3 漏洞修复建议
    (1)提高验证码的长度、复杂度
    (2)可限制错误登录次数、有效时间

    2.验证码重复使用

    2.1原因
    在验证码首次认证成功后没有删除session中的验证码,使得该验证码可被多次成功验证,造成危害

    2.2测试:
    2.2.1 测试流程
    填写正确登录信息和验证码–>抓取提交数据包–>重复提交该数据包–>查看是否登录成功–>登录成功则存在验证码重复使用问题
    2.2.2 帝国CMS漏洞演示
    帝国CMS后台验证码显示重复
    (1)测试环境
    系统:Windows10
    PHPStudy集成环境:PHPv5.3.29+MYSQLv5.5.53
    CMS版本:EmpireCMS_6.0
    (2)安装CMS
    访问http://yoursite/e/install/index.php
    安装好后先登录后台页面修改后台验证码显示设置,步骤如图
    在这里插入图片描述
    同时将后台登录限制增大(eg:100),然后拉到最下方保存设置,退出登录
    (3)测试过程
    第一步,输入正确信息点击登录时抓包
    第二步,通过修改imageField参数的大小来实现暴力提交,自设一个两位数数字字典作为payload
    在这里插入图片描述
    第三步,查看任意响应包是否登录成功
    在这里插入图片描述
    从结果来看,暴力重复提交的数据包均登录成功,说明存在验证码重复使用的问题。
    经过暴力重复提交后,客户端显示登陆成功
    在这里插入图片描述
    PHP5.2.17下测试结果同5.3.29
    在这里插入图片描述
    2.2.3 CMS漏洞分析
    (1)原因
    自 PHP 4.2.0 起,不再需要用mt_srand() 给随机数发生器播种 ,因为现在是由系统自动完成的,导致帝国cms的验证码会显示一样的字符。
    (2)解决方法
    在每个文件中找到该行将其删除或注释即可。
    Seay源码审计系统中全局搜索mt_srand函数,含有mt_srand的文件为:
    在这里插入图片描述

    2.3 漏洞修复建议
    在一次认证成功后服务器端清空认证成功的ssesion

    3.验证码回显

    3.1 验证码直接由客户端生成,在回显中显示,可通过浏览器工具直接查看

    3.2 分类
    3.2.1 在源码中显示
    F12审计大法,搜索源码中有无验证码
    3.2.2 在COOKIE中显示
    抓包时分析COOKIE中是否含有验证码

    3.3 测试
    3.3.1 测试流程
    (1)在源码中显示
    (2)在COOKIE中显示
    3.3.2 在源码中显示

    3.2.3 在COOKIE中显示
    以某网站找回密码模块为例
    第一步,填写好相关信息并确认提交
    在这里插入图片描述
    步骤二:确认提交时抓取数据包
    在这里插入图片描述
    可以看到str_code回显在请求包中
    步骤三:forward发送请求包,跳转到输入验证码和新密码页面
    步骤四:填写从请求包得到的验证码,成功修改用户密码
    在这里插入图片描述
    防范:验证码由服务端生成且保存在服务端,不能通过任何API获取

    4.验证码绕过

    4.1 漏洞成因
    由于逻辑设计缺陷,可绕过验证,比如直接删除COOKIE或验证码参数可绕过、当验证不通过清空session时,验证码参数值为空时绕过等。
    4.2 分类
    4.2.1删除COOKIE绕过
    4.3 测试
    4.3.1 测试流程
    4.3.2 测试环境
    4.3.3 CmsEasy演示
    CmsEasyv5.5删除COOKIE绕过验证
    第一步,输入正确账户信息和错误验证码,登录时抓包
    在这里插入图片描述
    第二步,删除COOKIE
    在这里插入图片描述
    客户端登陆成功
    在这里插入图片描述
    74cms 设计缺陷导致全版本验证码绕过
    https://www.secpulse.com/archives/26839.html
    修复:在检测用户验证码时,先判断是否存在,是否为空,再判断是否正确

    5.验证码自动识别

    这类漏洞主要是指图片验证码,可以通过PKAV工具以及bp插件来识别,也可以用python

    二、密码找回
    1.敏感信息泄露

    2.邮箱弱token
    3.验证的有效性
    4.注册覆盖

    三、接口盗用
    1.重放

    四、账户越权
    1、未授权访问
    2、越权

    五、支付漏洞

    六、SSRF

  • 相关阅读:
    好的学习资源
    对paper有用的idea
    斜杠青年
    简书随笔
    点云专业英文单词
    通过 UDP 发送数据的简单范例
    简单的聊天时范例(客户端)
    键盘输入
    简单的传输文件范例
    编写serversocket简单示例1
  • 原文地址:https://www.cnblogs.com/0nc3/p/12063432.html
Copyright © 2011-2022 走看看