对象临时中间状态的条件竞争覆盖
Portswigger练兵场之条件竞争
🦄条件竞争之对象临时中间状态的条件竞争
Lab: Partial construction race conditions
🚀实验前置必要知识点
某些框架尝试通过使用某种形式的请求锁定来防止意外的数据损坏。例如,PHP 的本机会话处理程序模块一次只处理每个会话的一个请求。
许多应用程序通过多个步骤创建对象,这可能会引入可利用对象的临时中间状态。
例如,注册新用户时,应用程序可能会在数据库中创建用户,并使用两个单独的 SQL 语句设置其 API 密钥。这留下了一个用户存在的door,但其 API 密钥未初始化。
框架通常允许您使用非标准语法传入数组和其他非字符串数据结构。例如,在 PHP 中:
param[]=foo相当于param = ['foo']param[]=foo¶m[]=bar相当于param = ['foo', 'bar']param[]相当于param = []
如果注册了账户之后,抢先在SQL语句赋值之前发出身份验证
🏆实验要求
本实验包含用户注册机制。争用条件使你能够绕过电子邮件验证,并使用不属于你的任意电子邮件地址进行注册。要解决实验室问题,请利用此争用条件创建一个帐户,然后登录并删除用户carlos。
⚡️渗透开始
- 访问对应靶场界面
https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction
- 启动靶场
1. 站点分析
这是SHOP类型的网站

可以查看文章信息、购买、登录、注册等功能点,根据提示我们来到注册功能点处

需要用户名、邮箱以及密码才可以注册,发现只能用推荐的邮箱注册

尝试注册账户为1,发现注册成功

再次注册1的账户发现无法注册

尝试注册账户2,用同样的邮箱发现注册成功,说明同样的邮箱可以注册复用

但是无法直接用账号密码进行登录,需要邮箱激活

在不清楚邮箱的情况下陷入了困局
2. 寻找可疑功能点(查看Burp历史记录进行分析)
正常的流程为
前端注册 → 后端发送邮件并在数据库中预注册用户的账户/密码信息 → 用户激活邮箱 → 后端分配权限给用户 → 用户可以正常访问
注册发送数据包

在此处条件竞争获取的账号也是没有权限的,毫无用处🤔
在翻阅的过程中发现了一处可疑的js

const createRegistrationForm = () => {const form = document.getElementById('user-registration');const usernameLabel = document.createElement('label');usernameLabel.textContent = 'Username';const usernameInput = document.createElement('input');usernameInput.required = true;usernameInput.type = 'text';usernameInput.name = 'username';const emailLabel = document.createElement('label');emailLabel.textContent = 'Email';const emailInput = document.createElement('input');emailInput.required = true;emailInput.type = 'email';emailInput.name = 'email';const passwordLabel = document.createElement('label');passwordLabel.textContent = 'Password';const passwordInput = document.createElement('input');passwordInput.required = true;passwordInput.type = 'password';passwordInput.name = 'password';const button = document.createElement('button');button.className = 'button';button.type = 'submit';button.textContent = 'Register';form.appendChild(usernameLabel);form.appendChild(usernameInput);form.appendChild(emailLabel);form.appendChild(emailInput);form.appendChild(passwordLabel);form.appendChild(passwordInput);form.appendChild(button);
}const confirmEmail = () => {const container = document.getElementsByClassName('confirmation')[0];const parts = window.location.href.split("?");const query = parts.length == 2 ? parts[1] : "";const action = query.includes('token') ? query : "";const form = document.createElement('form');form.method = 'POST';form.action = '/confirm?' + action;const button = document.createElement('button');button.className = 'button';button.type = 'submit';button.textContent = 'Confirm';form.appendChild(button);container.appendChild(form);
}
3. Js分析 | 对行为进行基准测试
从json中命名大致了解
- 函数
createRegistrationForm通过操作DOM创建注册表单 - 函数
confirmEmail用于创建确认电子邮件功能。
在确认电子邮件功能中 访问的是POST请求的/confirm端点,拼接的参数是token
该创建的表单会获取token并确认提交
4./confirm端点分析 | 对行为进行基准测试
token为空被禁止

token为1,证明验证了令牌为0不正确

如果是刚注册的用户通常为空,可以发现被禁止了,尝试数组没被禁止

5.完成实验 | 证明概念
当我注册账号之后,如果存在两句SQL语句,我可不可以抢先在应用程序赋值token之前给予账号空的token,这样就可以绕过用户注册的邮箱验证机制
构造创建用户的枚举,同时并发token为空验证的条件竞争机制成功获取了用户

用户信息a4016:111111

登录账号

打开管理面板删除用户后完成实验

相关文章:
对象临时中间状态的条件竞争覆盖
Portswigger练兵场之条件竞争 🦄条件竞争之对象临时中间状态的条件竞争 Lab: Partial construction race conditions🚀实验前置必要知识点 某些框架尝试通过使用某种形式的请求锁定来防止意外的数据损坏。例如,PHP 的本机会话处理程序模块…...
Nodejs 第十四章(process)
process 是Nodejs操作当前进程和控制当前进程的API,并且是挂载到globalThis下面的全局API API 介绍 1. process.arch 返回操作系统 CPU 架构 跟我们之前讲的os.arch 一样 arm、arm64、ia32、mips、mipsel、ppc、ppc64、s390、s390x、以及 x64 2. process.cwd() …...
数据分析因子评分学习
当多个因素影响一个结果时,我们需要综合考虑这些因素分别对结果德影响。因子评分就是用于比较其对结果德影响程度。 文章目录 前言一、案例背景二、解决方案(一)分析思路(二)剔除无关数据(三)求…...
【postgresql 基础入门】数据库服务的管理
数据库服务管理 专栏内容: postgresql内核源码分析手写数据库toadb并发编程 开源贡献: toadb开源库 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤ÿ…...
githubPage部署Vue项目
github中新建项目 my-web (编写vue项目代码) myWebOnline(存放Vue打包后的dist包里面的文件) 发布流程 (假设my-web项目已经编写完成)Vue-cli my-web vue.config.js文件中 const { defineConfig } require(vue/cli-service)…...
【网络编程】网络原来这么简单(更新中)
故事背景:有一天小胖和他的朋友细狗出去吃饭,聊着聊着就聊到了网络,小胖是学校里的编程大佬,而细狗只是个空有求知欲的编程小白。 细狗:胖儿啊,你说计算机是怎么通信的我感觉好抽象啊。为啥别人给我发个消息…...
监控系统典型架构
监控系统典型架构如下: 从左往右看: 采集器是负责采集监控数据的,采集到数据之后传输给服务端,通常是直接写入时序库。 对时序库的数据进行分析和可视化。 告警引擎产生告警事件之后交给告警发送模块做不同媒介的通知。 可视化比…...
jsp 新能源汽车论坛网Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 JSP 新能源汽车论坛网是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…...
Code Snippet的使用
文章目录 前言Code Snippet:就是咱们在VS中敲的prop、propfull、ctol【构造器快捷键】、for等快捷键,然后按tab键自动生成代码1.VS自带的:prop、propfull、ctol【构造器快捷键】、for等快捷键,直接使用2.自定义Snippet: 巨人的肩膀…...
华为云云服务器评测|华为云耀云L搭建zerotier服务测试
0. 环境 - Win10 - 云耀云L服务器 1. 安装docker 检查yum源,本EulerOS的源在这里: cd /etc/yum.repos.d 更新源 yum makecache 安装 yum install -y docker-engine 运行测试 docker run hello-world 2. 运行docker镜像 默认配…...
企业电脑文件加密系统 / 防泄密软件——「天锐绿盾」
「天锐绿盾」是一种公司文件加密系统,旨在保护公司内网数据安全,防止信息泄露。该系统由硬件和软件组成,其中包括服务端程序、控制台程序和终端程序。 PC访问地址: isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c…...
单条视频涨粉50w,逃出大英博物馆背后的逻辑是什么?
为洞察小红书平台的内容创作趋势及品牌营销策略,新红推出8月月度榜单,从创作者、品牌、品类多方面入手,解析月榜数据,为从业者提供参考。 一条视频涨粉50w 情感共鸣是爆火的核心 据8月的『涨粉排行榜』TOP500数据显示,…...
AIGC(生成式AI)试用 1 -- 基本文本查询
以一个字起,依次加一个字构成新句,不断加字使句子越来越长,也许越来越有趣。 1. 使用不同的生成AI提问,提取结果(全部 或 第一句),对比结果,个人评价更喜欢哪个(绿色底色…...
php如何处理高并发请求
PHP 处理高并发请求的方法: 使用异步框架:通过使用异步处理方式,可以有效地降低 PHP 处理请求的响应时间,避免因为 IO 操作而导致的等待阻塞。常用的异步框架有ReactPHP和Swoole等。 使用缓存:使用缓存可以减少每个请求…...
控制台实现汽车租赁系统
汽车租赁系统需求:(基于控制台实现,适合基础小白练习使用) 1、包含汽车租赁和汽车管理两个模块 2、汽车租赁需要包含汽车租赁天数以及汽车租金结算功能 3、汽车管理需要包含租赁汽车的添加、删除、修改、查询功能 代码如下&#…...
机器学习和数据挖掘03-模型性能评估指标
Accuracy(准确率) 概念:模型正确预测的样本数量与总样本数量的比例。 公式:Accuracy (TP TN) / (TP TN FP FN) TP (True Positives):正确预测为正例的样本数。即模型正确地将正例判定为正例。 TN (True Negati…...
PageNumberPagination、LimitOffsetPagination、CursorPagination
数据 from django.db import modelsclass User(models.Model):username models.CharField(max_length64, verbose_name用户名)password models.CharField(max_length64, verbose_name密码)# 用户类型user_type models.IntegerField(choices((1, 菜鸟用户), (2, 普通用户), …...
怎么把视频转换成mp4格式
怎么把视频转换成mp4格式?如今,随着科技的不断发展,我们在工作中接触到的多媒体视频格式也越来越多。其中,MP4作为一种广泛兼容的视频格式,在许多软件中都能轻松播放,并且成为了剪辑与裁剪视频时大家常用的…...
正则判断字符是否包含手机号
字符前后不能是数字,满足手机号标准 String msg "19009098989";String mobliePattern "((?<!\\d))(mobile|手机号|)(|\\[|\\\":\\\"|:|:||:|)(1)([3-9]{1}\\d{1})(\\d{4})(\\d{4})(\\]|\\\"||)((?!\\d))";String mobileR…...
OSCP系列靶场-Esay-Sumo
OSCP系列靶场-Esay-Sumo 总结 getwebshell : nikto扫描 → 发现shellshock漏洞 → 漏洞利用 → getwebshell 提 权 思 路 : 内网信息收集 → 内核版本较老 →脏牛提权 准备工作 启动VPN 获取攻击机IP → 192.168.45.194 启动靶机 获取目标机器IP → 192.168.190.87 信息收…...
Ice:macOS菜单栏管理终极指南,彻底告别杂乱无章
Ice:macOS菜单栏管理终极指南,彻底告别杂乱无章 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 想要彻底掌控macOS菜单栏,告别杂乱无章的图标堆积吗?I…...
串口转HID实战:CH9329芯片在无外网环境下的应用指南
CH9329芯片串口转HID实战:隔离环境下的设备控制方案 在工业控制、医疗设备和某些特殊应用场景中,经常需要在物理隔离的网络环境下实现设备控制。CH9329芯片作为一款串口转HID(人机接口设备)的专业芯片,为解决这类问题提…...
PlayCover深度技术解析:如何在M系列Mac上实现iOS游戏原生运行体验
PlayCover深度技术解析:如何在M系列Mac上实现iOS游戏原生运行体验 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover PlayCover作为一款创新的开源工具,让Apple Silicon Mac用户能…...
IDEA插件开发实战:手把手教你开发首个效率工具(附GitHub源码)
IDEA插件开发实战:从零打造你的专属效率工具 JetBrains系列IDE的强大之处不仅在于其核心功能,更在于其开放的插件生态系统。作为一名Java开发者,你是否曾想过为IDEA添加一个能提升自己工作效率的专属工具?本文将带你从零开始&…...
【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(五)- 动态配置与性能优化实战(vsetvli/vsetivli/vsetvl)
1. 动态向量配置指令的核心作用 RISC-V向量扩展指令集中最精妙的设计之一,就是允许程序运行时动态调整向量处理参数的机制。想象你正在用不同尺寸的螺丝刀组装家具——当遇到大螺丝就换大号刀头,碰到小螺丝立即切换精密刀头,这就是vsetvli/vs…...
Android架构组件
Android架构组件:构建现代化应用的利器 在移动应用开发中,良好的架构设计是保证应用稳定性和可维护性的关键。Google推出的Android架构组件(Android Architecture Components)为开发者提供了一套标准化工具,帮助简化开…...
TEA加密算法实战:用Python和C语言实现QQ同款加密(附完整代码)
TEA加密算法实战:从原理到跨语言实现 在即时通讯和物联网设备中,数据安全传输一直是核心需求。TEA(Tiny Encryption Algorithm)以其轻量级、高效率的特性,成为资源受限环境下的理想选择。本文将深入探讨TEA算法家族的工…...
用LDA模型挖掘微信聊天秘密:Gensim实战教程(含pyLDAvis可视化)
用LDA模型挖掘微信聊天秘密:Gensim实战教程(含pyLDAvis可视化) 微信聊天记录中隐藏着大量有价值的信息,从日常对话到重要决策,这些文本数据就像一座未被充分挖掘的金矿。本文将带你用Python中的Gensim库构建LDA主题模型…...
省流量秘籍:ESP32+LittleFS构建超轻量级物联网WEB界面(附低功耗配置)
ESP32物联网低功耗WEB界面开发实战:从LittleFS优化到移动端适配 在野外环境或移动场景中部署物联网设备时,每毫安的电流消耗和每KB的流量都值得精打细算。ESP32作为一款高性价比的Wi-Fi/蓝牙双模芯片,其灵活的网络配置和丰富的外设接口使其成…...
OpenClaw 的对话系统是否支持对话流程的可视化编辑?如何定义状态机?
关于OpenClaw对话系统是否支持对话流程的可视化编辑,目前公开的技术文档和社区讨论中并没有明确提及这一功能。从技术实现的角度来看,这类系统通常更侧重于底层对话状态管理和自然语言理解引擎的构建,而非面向产品经理或非技术人员的可视化编…...
