渗透测试-验证码的爆破与绕过

【验证码机制原理】

客户端发起请求->服务端响应并创建一个新的SessionID同时生成随机验证码,将验证码和SessionID一并返回给客户端->客户端提交验证码连同SessionID给服务端->服务端验证验证码同时销毁当前会话,返回给客户端结果。

【客户端可能存在的安全问题】

1、有的网站验证码由本地js生成仅仅在本地用js验证。可以在本地禁用js,用burp把验证字段删除。
2、有的网站把验证码输出到客户端html中,送到客户端Cookie或response headers。
3、有些网站默认不显示验证码,而是在输入错误一定数量之后才需要验证验证码,开发人员可能在Cookie中写入一个标记loginErr,用来记录错误数量,则可以不更新Cookie中的loginErr值反复提交,验证码就不会出现。

【服务端可能存在的安全问题】

1、验证码不过期,没有及时销毁会话导致同一验证码反复可用。攻击者可以在Cookie中带固定的sessionID和固定的验证码字符串。
2、没有对验证码进行非空判断,导致可以直接删除验证码参数。
3、产生的验证码问题有限

验证码固定

导致验证码不刷新(固定)的原因是:登录密码错误之后,session中的值没有更新,验证码不变。验证码不刷新通常有以下两种情况:无条件不刷新、有条件不刷新。

无条件不刷新

无条件不刷新是指在某一时间段内,无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对一个或多个用户帐号进行暴力猜解。换句话说,攻击者可以在同一个会话下,在获得第一个验证码后,后面不再主动触发验证码生成页面,并且一直使用第一个验证码就可循环进行后面的表单操作,从而绕过了验证码的屏障作用,对登录进行暴力猜解。

【测试案例 1】测试人员登录并抓取请求包,在不改变验证码的情况下,多次发送请求包,响应包中内容都是“用户名或密码错误”,如下图所示:
在这里插入图片描述【安全建议】建议针对一次请求生成的验证码只能用一次,用完立即过期。每次生成的验证码不允许跨会话和请求使用。

有条件不刷新

有条件不刷新多见于如下情况:登录失败之后,系统会打开一个新页面或者弹出一个新的警告窗口,提示用户登录失败,点击确定后返回登录界面且验证码刷新。这种情况下,只要我们不关闭新窗口或弹窗,配合使用Burpsuite的intruder模块就可以进行暴力破解了。

【测试案例 2】来看下某系统的验证码鉴权流程:

用户输入账户信息+验证码(刷新页面或手动刷新验证码会从服务器获取验证码,但该验证码缓存于session中),服务端接收到账户信息+验证后会先校验验证码是否正确,若不正确则,返回反之与数据库做对比,符合则返回,客户端接收服务端的请求,若成功则跳转,返回根据不同的错误码提示相应信息,并重新获取服务端生成的新验证码,重新缓存。

【问题描述】看完流程可以很容易想到一个问题:验证码此时并不会重置,一切重置验证码的操作都在浏览器,所以在Session不失效的时效内,可以无限重用验证码,这时就可以使用BurpSuite进行暴力破解了,验证码形同虚设。

验证码前端可获取

这种情况在早期的一些网站中比较常见,主要是因为程序员在写代码的时候安全意识不足导致的。验证码通常会被他们隐藏在网站的源码中或者高级一点的隐藏在请求的Cookie中,但这两种情况都可以被攻击者轻松绕过。

验证码隐藏在源码之中

验证这种情况很简单,我们只需要记住验证码,然后右键打开网站源代码,Ctrl+F搜索,输入刚才的验证码,如果可以成功匹配到,那恭喜你,接下来就可以写工具,提取源码中的验证码并将其放入每次请求的报文中,来进行帐号破解,这里推荐使用python。

验证码隐藏在Cookie中

一般来说,我们会把验证码的值用Session存储起来,通过对比用户提交的验证码和Session中的验证码,就可以知道输入是否正确。由于Session会占用服务器资源,有的开发人员会把验证码的值加密后存储在Cookie中。

这种情况,我们可以在提交登录的时候抓包,然后分析一下包中的Cookie字段,看看其中有没有相匹配的验证码,或者是经过了一些简单加密后的验证码。

仅在客户端生成验证码

有的网站验证码由本地js生成仅仅在本地用js验证。

【实际案例】
在这里插入图片描述
测试人员抓取登录过程的请求包,如下图所示:
在这里插入图片描述
从上面抓取到的数据包可以看出,虽然该系统存在验证码,但是其验证码并没有向服务器传输,而是在本地客户端直接进行验证。我们可以在输入一次正确的验证码(绕过客户端验证)后,使用BurpSuite对用户名和密码同时进行暴力猜测,如下图所示:
在这里插入图片描述
返回的数据是“账号不存在”,而不是“验证码错误”,说明此处已不需要输入正确的验证码就能发送登录请求,只要密码字典够大,我们就能进行暴力破解。

计算类型的验证码,如1+8=?,这种类型的验证码严格意义上来说不能叫做验证码,多刷新几次验证码,我们可能会发现系统中的算数题目只有那么几道,这种情况下只要将验证码全部下载下来,生成一个md5库,然后将前端生成的验证码与本地文件进行对比即可。

验证码薄弱

验证码自动识别

有的系统虽然在登录界面带了验证码,但是验证码功能薄弱,可以被工具识别,导致系统面临被爆破登录的风险。
在这里插入图片描述点击F12打开开发者工具,查看前端源码,找到生成验证码的URL。
在这里插入图片描述将URL输入搜索框,验证是否正确。
在这里插入图片描述
然后,打开工具PKAV HTTP FUzzer,开始尝试自动识别验证码。
在这里插入图片描述
在这里插入图片描述
建议对验证码进行干扰、变形处理!

验证码爆破登录

紧接上面的系统案例,接下来同样借助工具PKAV HTTP FUzzer,咱们进行带验证码登录页面的暴力破解。
在这里插入图片描述
(1)首先,使用Burp Suite抓包
在这里插入图片描述
(2)把数据包丢进PKAV工具,分别标记password验证码(username事前知道了,即存在admin的用户,无需用字典猜测,故此处不用标记)。
在这里插入图片描述
(3)给标记的变量添加猜测字典。字典可选工具自带的,也可用专门的字典生成工具生成。
在这里插入图片描述
或者使用工具生成字典:
在这里插入图片描述
(4)添加验证码地址

在登录框找到验证码地址复制到工具,识别范围看情况,这里为数字+字母。
在这里插入图片描述
(5)设置参数

切换到重换选项卡设置相关参数,具体设置看情况而定。
在这里插入图片描述
(6)识别验证码测试

相关参数设置好之后,点击进行识别测试。
在这里插入图片描述
(7)开始爆破
在这里插入图片描述
接下来,耐心等待爆破结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最近对项目代码做的一些更改和感想

最近对项目代码做了一些更改,主要的改动是对整个界面框架的改变,因为以前写代码的时候,为了完成功能,没有从上帝视角来思考软件的界面设计,完全是需要这个功能了,怎么可以做到?好,就…

CSS常见的四种垂直居中的方法

面试中不管是笔试题还是面试题,一般很容易被问到如何实现垂直水平居中,这里总结四种方法作为参考 (1)margin:auto法 css: div{ width: 400px; height: 400px; position: relative; border: 1px solid #465468; } img{ position: absolute; margin: auto; top: 0; left: 0; …

对安卓应用进行加固签名,为上架各大应用市场做准备

上架安卓各大应用市场之前需要对自己的应用进行签名加固,签名是为了证明你是这个应用的开发者,软著也是一种方式,这是不做介绍,加固是为了从安全角度给安装包加一个保护层,防止被恶意破解及攻击。下面简单介绍一下签名…

大前端最强vscode教程(基础篇)

这段时间入职了一家外包公司的前端工程师岗位,前端编辑器用起来,前端一般会用到几个编译器,VScode、sublime text3、webstorm、Hbuid等,这里主要介绍VScode. 初次使用vscode时各种不适应,所有需要用到的功能貌似都需要单独安装插件才能用。这让很多初次使用vscode的朋友有…

edusrc0day挖掘技巧

网瑞达web资源管理系统0day ps: 作为在edusrc的小白,经常看见大师傅们的刷屏,我也很向往能像大师们一样有一次刷屏的机会,于是有了这一次的渗透之旅。 思路:要想刷屏上分,就得找系统来挖掘,对…

个人或者公司如何写版权认证的证明文件?

项目场景: 现在好多平台都在做知识付费,比如百度文库、CSDN、微博、头条、知乎等等,因此我想给大家做一些付费文档,想上传到百度文库的知识店铺 问题描述: 一般人不知道这个版权认证文件怎么写,怎么弄&am…

Bypass WAF实战总结

0X00前言 上个月刷了一波洞,然后这个月初远程支持了一个HW,在文件上传getshell的时候,碰到个各式各样的云waf,通过一个月的实战,总结了几个比较实用的技巧,文章总结的不全,只是基于我实战中用到…

Git教程学习总结(分享给热爱学习的你,团队的协作离不开你呀)

目录 Git 教程 Git 安装配置 Git 工作流程 Git 工作区、暂存区和版本库 Git 创建仓库 Git 基本操作 Git 分支管理 Git 查看提交历史 git log git blame Git 标签 Git 远程仓库(Github) Git Gitee Git 服务器搭建 Git 教程 Git 是一个开源的分布式版本控制系统&…

Linux的shell编写

-eq //等于 -ne //不等于 -gt //大于 -lt //小于 ge //大于等于 le //小于等于实验中遇到的问题: 1.NAMEuser1 中间不能有空格 2.[ xxx ] xxx前面和后面要有空格 任务1:使用case语句编…

为啥这么多程序员大佬学习Cortex-M3

Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,…

Ffuf使用教程

kali安装教程链接:https://www.iculture.cc/cybersecurity/pig210 该工具用途广泛,可用于多种用途。一些用途: • 目录发现,可选择在 URL 中的任何位置进行模糊测试。 • 子域名发现 • 使用各种 HTTP 方法进行模糊测试。 安装 …

Burp Collaborator 使用总结

0x00:使用原因 我们在做渗透测试的时候,经常会遇到这种情况,测试跨站可能有些功能插入恶意脚本后无法立即触发,例如提交反馈表单,需要等管理员打开查看提交信息时才会触发,或者是盲注跨站,盲打 …

jrockit_1.6下载_Oracle JRockit Mission Control 4.1发布

jrockit_1.6下载Oracle发布了以前的仅JRockit专用工具Mission Control Suite(JRMC)的新版本。 4.1版本是次要版本升级,直接遵循4.0.1(该版本发布于2010年中期)。 但是,即使版本号表明是次要的升级&#xff…

dnslog盲注原理

Dnslog盲注原理 布尔盲注和时间盲注相当于猜单词的游戏,我们需要对每一位逐步的猜测,效率很低,需要发送很多的请求进行判断,很可能会触发安全设备的防护 我们需要一种方式能够减少请求,直接回显数据——Dnslog注入 Dn…

[学习笔记]批次需求计划系统-简要

一、该系统的目的二、系统特色(1)来源根据 如上图(2)仅仅补充需求来源的最大值,避免料件多买而造成浪费(3)可透过[发放LRP工单]将生产计划发放成正式工单(4)可透过[发放LRP採购单]将採购计划发放成正式的请购单或者採购单(5)系统会记录计划的来源单据,方…

在浏览器控制台执行以下代码,输入的结果是()

在浏览器控制台执行以下代码,输入的结果是(A) A.4400 4401 4399 4400 B.4400 4401 4401 4402 C.4400 4400 4399 4400 D.4400 4401 4399 4402 E.4400 4401 4401 4400 解析 js在执行之前

iOS-心跳

转载于:https://www.cnblogs.com/zhuyaguang/p/4800703.html

google国内镜像网址收集

搞IT的遇到问题,光靠baidu有时真的解决不了问题,所以时不时的就需要求助google😂, 里面有好多国外网友的博客、stackoverflow、github issues、官方文档等等的大量一手英文资料, 但是因为种种原因国家一直不放开Google…

mongo-express 远程代码执行漏洞(CVE-2019-10758)

前言 mongo-express是一款mongodb的第三方Web界面,使用node和express开发。如果攻击者可以成功登录,或者目标服务器没有修改默认的账号密码(admin:pass),则可以执行任意node.js代码。 影响版本 mongo-express&#xff…

【转】深入浅出PageRank算法

原文链接 http://segmentfault.com/a/1190000000711128 PageRank算法 PageRank算法是谷歌曾经独步天下的“倚天剑”,该算法由Larry Page和Sergey Brin在斯坦福大学读研时发明的, 论文点击下载: The PageRank Citation Ranking: Bringing Order to the We…