Session覆盖测试(要验证码提交到后续页面操作的 绕过去的场景)
测试原理和方法
找回密码逻辑漏洞测试中也会遇到参数不可控的情况,比如要修改的用户名或者绑定 的手机号无法在提交参数时修改,服务端通过读取当前session会话来判断要修改密码的账 号,这种情况下能否对Session中的内容做修改以达到任意密码重置的目的呢?
在某网站中的找回密码功能中,业务逻辑是:由用户使用手机进行注册,然后服务端 向手机发送验证码短信,用户输入验证码提交后,进入密码重置页面。
对网站中Session覆盖的测试如下:
(1)需要准备自己的账号接收凭证(短信验证码);
(2)获得凭证校验成功后进入密码重置页面;
(3)在浏览器新标签重新打开找回密码页面,输入目标手机号;
(4)此时当前 Session 账户已经被覆盖,重新回到第二步中打开的重置密码页面即 可重置目标手机号。
12.5.2 测试流程
步骤一:在找回密码页面中输入 A 手机号(尾号 3274),然后单击“下一步”按钮,
如图12-23所示。
图12-23 找回密码第一步
步骤二:单击“立即验证”按钮,接收短信验证码。输入验证码通过验证后,就可以进
入密码重置页面了,如图12-24、图12-25所示。
图12-24 找回密码第二步验证手机号
图12-25 进入重置密码页面
步骤三:这里我们密码重置的目标账号是B手机号(尾号为5743),接下来打开一个
新的标签并进入找回密码第一步的页面,输入B手机号后单击“下一步”按钮,如图12-26所
示。
图12-26 新标签重新进入找回密码覆盖session
步骤四:此时成功进入第二步,向B手机号(尾号为5743)发送验证码。B手机收到
的短信验证码我们无法得知,但是不要担心,在这一步服务端已经将当前Session会话设
置为B手机号(尾号为5743)的用户,这个时候再刷新A手机号(尾号3274)密码重置页
面。
步骤五:通过观察页面上显示的手机号,可以看出已经由A手机号(尾号3274)改为
了B手机号(尾号为5743),这说明Session成功覆盖了。这意味着重置密码将修改的是B
手机号(尾号为5743)的密码,如图12-27所示,这样就又诞生了一个任意密码重置漏
洞。
图12-27 重新进入找回密码页面
12.5.3 修复建议
Session覆盖类似于账号参数的修改,只是以控制当前Session的方式篡改了要重置密
码的账号,在重置密码请求中一定要对修改的账号和凭证是否一致做进一步的校验。
Session覆盖测试(要验证码提交到后续页面操作的 绕过去的场景)的更多相关文章
- JavaWeb 使用Session实现一次性验证码
表单 <form action="loginServlet" method="post"> 请输入验证码:<input type=" ...
- 不使用Ajax,如何实现表单提交不刷新页面
不使用Ajax,如何实现表单提交不刷新页面? 目前,我想到的是使用<iframe>,如果有其他的方式,后续再补. 举个栗子: 在表单上传文件的时候必须设置enctype="mul ...
- Webform Session、Cookies传值,跳转页面方式
Session:每个独立的浏览器都会创建一个独立的Session,不是一台电脑一个Session 存放位置:服务器上 作用:只要里面有内容,那么这个网站中所有的C#端都能访问到这个变量 优点:安全,速 ...
- Session的使用(登录例案+其它页面访问)
本程序功能是使用Session将用户输入的用户名保存在Session中(登录成功情况下,登录失败不会有Session值),其它页面想访问时会先判断是否有之前存的Session值. 登录Login.ht ...
- 使用session实现一次性验证码
在登录页面和各种页面,会看到有验证码输入,这样做的目的是为了防止密码猜测工具破解密码,保护了用户密码安全,验证码只能使用一次,这样就给密码猜测工具带来了很大的困难,基本上阻断了密码猜测工具的使用. 可 ...
- `<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java
<jsp:getProperty>动作和<jsp:setProperty>动作的使用 1.<jsp:getProperty>动作 语法格式: <jsp:get ...
- 制作登录界面,登录成功后把用户名放在session里,在第3个页面读取session显示用户名
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- session失效后跳转到登陆页面
一.编写Filter拦截器类 package com.pv.utils; import java.io.IOException; import java.io.PrintWriter; import ...
- Form提交表单页面不跳转
1.设计源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
随机推荐
- 配置VScode c语言环境
vscode 提示 <sys/socket.h>找不到, 原来是不同平台上,头文件不一样. 参考:https://blog.csdn.net/qq_28581077/article/det ...
- Python bytes类型及用法
bytes 类型 Python 3 新增了 bytes 类型,用于代表字节串,是一个类型,不是C#中的列表. 字符串(str)由多个字符组成,以字符为单位进行操作: 字节串(bytes)由多个字节组成 ...
- spark读写Oracle、hive的艰辛之路(一)
前两天工作需求,要通过给的几个Oracle的视图把数据入到hive库中,很遗憾,使用的华为云平台的集区环境中并没有sqoop1,当然也并没有sqoop2,所以,想到的解决方案是使用spark读取Ora ...
- Servlet 容器
Servlet容器主要是JavaWeb应用提供运行时环境,所以也可以称之为JavaWeb应用容器,或者Servlet/JSP容器.Servlet容器主要负责管理Servlet.JSP的生命周期以及它们 ...
- ajax请求数据时,get和post的区别
发送机制 1.get请求会将参数跟在URL后面进行参数传递,而post请求则是作为http消息的实体内容发送给web服务器: 2.get提交的数据限制是1024字节,这种显示是来自特定浏览器和服务器对 ...
- vue cli4.0 配置环境变量
温馨提示:本文只适用于vue-cli 3.0 及以上的版本哦~ ------------------正文开始------------------ 开发项目时,经常会需要在不同环境中切换.那么我们如何配 ...
- java 8 学习三(Stream API)
集合讲的是数据,流讲的是计算. 流的数据处理功能支持类似于数据库的操作,以及函数式编程语言中的常用操作,如filter. map. reduce. find. match. sort等. 流操作可以顺 ...
- my OD
1 复习c文件处理内容 2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写Makefile 5 提交测试代码和运行 ...
- Pandas模块 -- 数据类型转换,描述统计
car=pd.read_csv(r'E:\Python\sec_cars.csv',sep=',').head(32) # print(car) print("数据集的类型:",t ...
- ent 基本使用七 Config
通过config 我们可以自定义表相关的选项 参考配置 package schema import ( "github.com/facebookincubator/ent" & ...