逻辑漏洞渗透与攻防(三)之登录前端验证漏洞

news2024/9/21 18:39:09

目录

前言

登录前端验证漏洞

忘记密码

给邮箱/手机发验证码

前端验证绕过

设置新密码时改他人密码 

​编辑 某网站密码找回功能

链接的形式-链接token参数可逆

服务端验证逻辑缺陷 

登录状态下修改密码等验证条件

参数带用户名等多阶段验证

重置密码

重置后的默认密码


前言

今天我们接着逻辑漏洞的系列文章,接着来讲逻辑漏洞有关于登录前端验证漏洞

登录前端验证漏洞

忘记密码

给邮箱/手机发验证码

当在“忘记密码”页面,输入邮箱或者手机号后,网站会给手机或者邮箱发送验证码。用户输入验证码后,服务器会将其与正确的验证码进行对比,若相同则验证成功并进行下一步操作。网站还贴心的考虑 到了:万一用户手抖输错怎么办?有两个选择:
第一个:客户重新填验证码。网站本来想着用户这次能输对了吧,没想到用户不停的手抖输错,短信不 断的发到手机上(这是短信炸弹漏洞)。一条短信一毛钱啊,网站掏不起啊,那就试试方法2吧。
第二个:验证码再输一遍。在这种情况下,极易产生验证码爆破漏洞。
你可能会觉得输入一万条数据简直太漫长了,但是要知道我们发到网站服务器的都是数据包,验证码就 在数据包中。我们只要不断的修改数据包中验证码的参数即可完整验证尝试
攻击方法和图片验证码相似,如果是4位,没有多余的防御措施,直接爆破即可,案列如下

我们后台开启抓包:

将这个验证码添加payload

然后发送到Interuter模块:

 

 前端验证绕过

客户端验证是不安全的,可能导致任意账号注册、登录及重置任意用户密码等一系列问题
1. 直接返回明文验证码输入手机号后,点击获取验证码。按 F12 调出开发者工具,然后在网络中,监听到两条 json 数据,可以发现本应该发送给用户的手机短信验证码就藏在 ticket 里面。用这个尝试登陆,输入 9360 即可登陆成功

2. 返回加密后的密码验证加密后,加密报文在应答数据包中,返回客户端,用户解密后即可获取验证码。  

设置新密码时改他人密码 

 修改密码时可否修改参数(用户名/邮箱/手机)达到修改其他用户密码的目的。

首先在一个网站注册一个用户,然后修改这个用户的密码,通过抓取数据包中的参数判断哪里是校验用户,通过修改关键参数,达到任意修改其他用户密码的目的。
下面对一个网站进行模拟攻击,以便于在攻击中讲解能够更深刻的理解。
1. 先注册一个网站的账号,注销后在登录界面点击忘记密码。然后填写相应的信息,这里填写了刚才注册的用户名和密码。然后 开启浏览器的代理和 Burp 的截断,如下图所示。

2. 点击下一步后,分析报文,看到请求的报文中传递了用户名和邮箱,因此判断此数据包 是用来判断是否存在此用户、用户名和邮箱是否匹配的。点击 Forward 放过次数据包。

3、攻击者收到网站给的验证码(到这里都是正常的网站找回的逻辑)

4、继续填写验证码,发现还是没有什么可以利用的数据,放包过去

5、 到了修改密码的界面,填好密码后点击下一步。抓包后,观察发现这里写入了用户名和密码。
可以先右键报文,然后 Send to Intruder 之后可以爆破用户名,并将其修改为同 一个密码。不过这里只是测试一个叫 zhagnwei 用户名,这是我们之前爆破出的一个其他的用户,如下图所示
6、发送之后,发现修改成功(这里漏洞点:原因是没有对校正的账号和修改的账号进行匹配,导致可以先通过用户验证后,去修改别人的密码)

 某网站密码找回功能

因为这种方式较为常见,因此再举一个例子,如下。 在用户更改密码和找回密码时,会发送一个验证码到手机。填写正确验证码后,后台会在返回的报文中通过状态码来进行正确的判断。
这个时候可以通过修改返回报文中的参数,使页面跳转到下一步认证的页面。
1. 在找回密码的界面,发现是通过填写手机号和返回的验证码进行身份认证。

2. 先填写一个想要修改的手机号,验证码随意填写一个。再打开浏览器代理和 Burp 的截断,这时候点击提交后,会抓取一个请求的数据包。
再右键点击报文内容,选择如下图所示:

 3. 这个时候可以拦截到回包, 观察图数据包中的 status 字段,这里的 0 可能是验证码错误的返回代码,因此我们尝试把他改为“1”,试试

 4. 结果直接发发现已经可以输入新密码了

5、 填写密码后点击“确认修改”发现能够登陆, 说明任意用户密码修改成功

链接的形式-链接token参数可逆

通过邮箱找回密码时,邮件中将出现一个含有 token 的重置 URL,该 token 即为重置凭证。从经验来看,开发人员习惯以时间戳、递增序号、关键字段(如邮箱地址)等三类信 16 / 40 息之一作为因子,采用某种加密算法或编码生成 token,攻击者可以基于能收集 到的关键字段,用常见加密算法计算一遍,以判断是否可以预测出 token。下面举两个案例加以说明。
实验一:基于时间戳生成的 token ,这是一个靶场:
http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/

我们点击忘记密码:

来到当前页面:

输入用户名admin,点击重置密码,BP后台开启抓包

后台抓到的数据包:

我们将其发送给Repetaer模块:

我们看到username=admin的回显很正常:

接下来,我们把username这个字段改了看看会发生什么:

我们将其改为aaa后,他给我们返回了一段链接,注意看sukey这个字段后面的参数,像不像是我们平常接触的token。基于网站的信息,我们判断这是一个重置密码的链接,但是只有是aaa账户的情况下会出现这种情况,刚刚的admin账户并没有出现这种情况,那我们如果可以破解出这个重置链接的token加密方式,是不是可以通过伪造token来重置admin用户账户的密码了。

我们将这串key单独复制出来,根据经验判断,这很像是一串经过md5加密的key,我们将其拿到MD5网站解密试试看(MD5免费在线解密破解_MD5在线加密-SOMD5):

解密出来之后是这么一串数字。发现是unix的时间戳(看多了,你就知道各种加密方式了),我们也可以将其放到时间戳的网站上验证看看(https://tool.lu/timestamp/

 好,现在我们确定了这串key的加密方式是时间戳在经过MD5的加密方式得到的,这下我们确定了攻击模型。虽然admin无法得知重置密码的链接,但是我们知道链接的构造,就可以模拟出来。

时间戳的值是根据一个时间数值递增的,比如现在的时间戳的值是123456,下一秒很可能就是123458,所以我们只要连续发送三次请求,得到一头一尾两个时间戳,便可以去爆破出中间的哪那个时间戳的值

攻击流程如下所示:

发送普通用户得到时间戳------>发送admin重置-------->在发送普通用户得到时间戳,那么admin的时间戳必定在两个用户的时间区间内,然后构造爆破语句爆破就可以了 。
我们回到我们重置密码的界面,BP后台开启抓包,分别输入用户aaa,admin,bbb,然后分别点击重置密码:

我们来到BP的后台,看看我们抓到的数据包:

 接下来我们来收集三个数据包中响应的key值:

 

最终我们得到两个时间戳,然后将我们链接也复制上,因为等下要通过这个链接来伪造:

然后我们将两个tokenMD5解密,记录下来:

1672906019-1672906036,得到这么一个区间 ,admin既然在这个中间,那我们可以开始爆破,我们点击这个链接,抓到重置请求包,后开始加密爆破。

 我们看到如下的数据包:

 我们将这个数据包放到Inturder模块:

将我们要爆破的位置添加上payload,然后因为我们要爆破的是admin,所以我们要把username后面改为admin:

接下来来到payload模块添加我们的字典,设置如下:

A48CJxY9PXrTAAAAAElFTkSuQmCCwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 然后我们再给他进行一个MD5加密处理:

然后开始我们的爆破:

有个长度异常的,应该是跑出结果来了:

然后查看一下我们的回包:

说明我们这个数据包成功重置了admin用户的密码。

实验二:基于关键字段生成的 token 某网站密码找回功能

通过分析,我们猜测1、username 是邮箱、rvcode 图片验证码、sid 未知,登录邮箱查看重置 URL:

2、重置的关键参数为key,直接丢到md5发现无法解密,后来发现多次尝试,发现md5(username + sid) 可以得到一个和邮件一样的MD5

 3、 猜测出其 key 的生成算法,那么,后续将豪无压力重置任意账号的密码了。

服务端验证逻辑缺陷 

登录状态下修改密码等验证条件

1、登陆状态下修改自己的密码时,通过修改截获的数据包,将部分参数替换,从而偷龙换凤的将他人的密码修改为自己指定的密码。下面通过实例讲解。
在登录状态下,点击修改密码。这个时候我们发现用户名变为不可修改的状态(当然我们可以通过修改前端的代码让这个用户名变为可以修改的状态)
不可修改就说明网站开发人员不想让用户修改用户名。这种情况常常出现随意修改其他用户密码的漏洞。

 

 2. 这里抓取到数据包,观察数据包,数据包中包含用户名,旧密码和新密码。

3、将用户名修改成的其他的用户名

 4、发现wangkaijiang的密码修改成功

 

 参数带用户名等多阶段验证

密码找回流程一般包括获取短信验证码、校验短信验证码是否有效、设置新密码等三个步骤。
在第二步,校验短信验证码是否有效的结果应保存在服务端,某些网站未在服务端保存而是错误地将结果状态值下发客户端,后续又依靠前端 js 判断是否可以进入第三步。
那么,更改应答包中的状态值,可重置其他用户的密码。下面用两个案例分析说明。
案例一: 在密码找回页面 http://www.xx.cn/yy/action/forgot 用攻击者手机号 13908081024 进 入密码找回全流程,获取短信验证码 033128、输入图片验证码、输入短信验证码并提交:

 服务端校验通过后,系统应答如下:

简单分析发现,校验通过时服务端并未向客户端 set-cookie,猜测服务端并未记录校验 状态,是否进入设置新密码页面完全是由前端 js 基于应答状态决定的,那么,即便我没有 短信验证码,通过将服务端下发给客户端的校验状态从“失败”改为“成功”。

 

也能成功重置找回账号密码。 具体而言,以信息搜集时找到的客服手机号 13980808888 为例。
输入手机号、获取短 信验证码、输入图片验证码、输入错误的短信验证码 123123 后提交:

 拦截该应答,用前面抓取校验成功的应答包替换之:

 这样又顺利进入新密码设置

案例二: 在密码找回页面 http://www.xx.cn/yy/forgot 用攻击者手机号 13908081024 进入密码找回全流程,获取短信验证码2118、输入短信验证码并提交:
简单分析发现,校验通过时服务端并未向客户端 set-cookie,将服务端下发给客户端的 校验状态 code 改为“0000”,可以重置其他用户密码。 具体而言,以土豪手机号 13888888888 为例。输入手机号、获取短信验证码、输入错误的短信验证码 1234 后提交。由于短信验证码错误,服务端校验失败,应答如下:

拦截后修改成0000即可进入设置新密码的环节

 重置密码

重置后的默认密码

在一些大型公司或者学校的的网站上,会有介绍用户注册的指导手册,里面会介绍用户的用户名和默认密码。
这时可以先用默认密码尝试爆破默认密码,或者寻找重置密码的选项,重置密码后,用默认口令尝试登陆。 因为可能会有未授权修改网站用户的密码。

 

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

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

相关文章

软件产品科技成果鉴定需要提供哪些材料?软件测试费用怎么算?

一、软件产品科技成果鉴定是什么? 软件产品科技成果鉴定是有效评价科技成果质量和水平的方法之一,也是鼓励科技成果通过市场竞争等方式得到有效的评价和认可,可以推动科技成果的进步和转化。软件产品科技成果鉴定测试报告是申报国家、省、市科技成果奖…

SQLite Database Introduction

Use SQLite installed on Linux (CentOS7) to introduce.(You can also use python to install SQLite3 for learning.)•SQLite Preface•Introduction to SQLite Features•SQLite Data Type•SQLite Constraint•SQLite Syntax•SQLite Join•SQLite Database & Table•…

第01讲:ElasticSearch安装

一、什么是ElasticSearch 二、ElasticSearch的安装 Elasticsearch 分为 Linux 和 Windows 版本,基于我们主要学习的是 Elasticsearch 的 Java 客户端的使用,所以课程中使用的是安装较为简便的 Windows 版本。 2.1、Windows系统下安装ElasticSearch W…

KubeSphere 使用 OpenLDAP 进行统一认证完全指南

作者:申红磊,青云QingCloud 容器解决方案架构师,开源项目爱好者,KubeSphere Member。 背景 在实际使用中,会有一些用户,在不同场景中经常碰到 OpenLDAP 对接问题: 能否对接 LDAP?对…

go sync.Map源码分析

概述 go 语言中的map并不是并发安全的,在Go 1.6之前,并发读写map会导致读取到脏数据,在1.6之后则程序直接panic. 因此之前的解决方案一般都是通过引入RWMutex(读写锁)进行处理, 关于go为什么不支持map的原子操作,概况来说,对map原子操作一定程度上降低了只有并发读,或不存在并…

多线程看这一篇文章就够了

第一章 多线程概述 1 2 31. 什么是程序? 2. 什么是进程? 3. 什么是线程?程序1是为完成特定任务、用某种语言编写的一组指令的集合(一段静态的代码)进程1是程序的一次执行过程,或是正在运行的一个程序线程1 2 3进程可进一步细化为线程,是一个程序内部的…

软考网络工程师上午常考点

软考网络工程师上午常考点: **计算机硬件基础:**根据考纲分析,本章主要考查三个模块:计算机体系结构、存储系统、I/O输入输出系统,其中每一模块又分若干知识点。“计算机硬件基础”相当于软考中的“公共基础课”&…

12月更新 | Visual Studio Code Python

我们很高兴地宣布,2022年12月发布的适用于 Visual Studio Code Python 和 Jupyter 扩展现已推出!此版本包括以下改进:Pylance 自动缩进 预览:浏览器中运行与调试 Python社区提供新扩展:Ruff如果您有兴趣,可…

C51单片机基础之串口编程实战

目录 一、串口编程寄存器分析 1、PCON : 电源控制寄存器 2、SCON:串行控制寄存器 二、自己实现串口初始化编程 三、发送一串字符串给到PC端编程 四、PC发送指令控制LED编程 五、串口中断实时控制LED编程 1、串口中断的中断号:interrupt4 2、串口…

Apache Doris Join 实现与调优实践|未来源码

推荐语: SQL 的支持力度和粒度,已经作为今天所有大数据计算引擎的重要衡量标准之一,而 SQL 的所有操作,可以分为简单操作(如 where、limit等 filter 操作)和复杂操作(groupby、join 等聚合操作&…

SpringCloud微服务项目实战 - 3.App端文章

经历了新冠疫情始末,之后,多出门走走,看看山,看看海,吃好吃的 系列文章目录 项目搭建App登录及网关App文章 文章目录系列文章目录一、文章列表1. 数据库⑴. 导入文章数据库⑵. 表结构分析①. ap_article 文章基本信息…

MySQL慢SQL探究

文章目录前言1、慢SQL捕获慢查询追踪配置方式2、情况分析为什么查询会慢?2.1 SQL执行计划分析explain执行计划分析PROFILE分析OPTIMIZER_TRACE分析3、引擎参数配置分析I/O性能分析MySQL I/O参数其他原因分析网络抖动单表数据量过大总结前言 我们在日常开发中&#…

GeoServer搭建私有地图服务,Cesium引擎加载。

一、安装JDK 1、安装GeoServer是基于Java的环境,所以需要先装Jdk环境。 2、前往官网下载Java SE 3、下载GeoServer 1、前往官网下载最新稳定版 2、安装GeoServer 二、发布地图服务 1、启动geoserver 找到安装目录,bin/下的startup.bat,双击执行…

PF-Net源码详解

代码及数据见最后 1.参数配置 参数配置使用默认参数即可,但是windows操作系统下,需要将--workers设置为0. 2.数据准备 PF-Net将不完整的点云做输入,并预测其缺失部分。同时,我们可以从整体流程看到,输入有三个尺度,通过最远点采样进行构建,预测的输出也有三个尺度。数…

MySQL:SQL通用语法、SQL分类、DDL、DML、DQL、DCL

一.SQL通用语法 SQL语句可以单行或多行书写,以分号结尾;SQL语句可以使用空格/缩进来增强语句的可读性;MySQL数据库SQL语句不区分大小写,关键字建议大写;注释: 单行:--或#多行:/* …

Spring AOP 面向切面编程

1.AOP是什么我们之前学过 OOP 面向对象编程, 那么 AOP 是否就比 OOP 更牛逼呢? 是否也是面向过程到面向对象这种质的跨越呢? 其实不是, 它和 OOP 思想是一种互补的关系, 是对 OOP 思想的一种补充.AOP (Aspect Oriented Programming) : 面向切面编程, 它是一种思想, 它是对某一…

Arrays数组

1.Arrays.toString()方法:输出数组内容 2.Arrays.sort()方法:给数组排序,默认升序 对其他对象数组进行排序 一个对象数组,排序算法需要重复比较数组中的元素。不同的类比较元素的规则是不同的,但是排序算法只应该调用类提供的比较方法&#…

netty中channelHandler实现原理及最佳实践|极客星球

为持续夯实MobTech袤博科技的数智技术创新能力和技术布道能力,本期极客星球邀请了企业服务研发部工程师梁立从 TCP 的粘包/半包、 Netty 处理粘包/半包及源码分析、 开源项目对 channelHandler最佳实践三方面对《netty 中channelHandler的原理与最佳实践》进行了全面…

【Ctfer训练计划】——(九)

作者名:Demo不是emo 主页面链接:主页传送门创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座右…

Python+Selenium4元素定位_web自动化(3)

目录 0. 上节回顾 1. 八大定位 2. 定位器 3. CSS选择器 4. XPath选择器 4.1. XPath语法 4.2. XPath 函数 5. 相对定位 5.1 XPath 中的相对定位【重点】 5.1.1 相对路径 5.1.2 轴 5.2 selenium4 中的相对定位 总结 0. 上节回顾 浏览器的一般操作 浏览器的高级操作…