对象临时中间状态的条件竞争覆盖
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 信息收…...
GitHub开源项目法律合规自动化:exoclaw-github的设计与实现
1. 项目概述:一个为GitHub仓库定制的“法律条款”守护者最近在开源社区里折腾,发现一个挺有意思的现象:很多开发者辛辛苦苦维护的项目,因为缺少清晰、合规的贡献者协议或开源许可证,导致后续在代码合并、版权归属甚至商…...
构建个人技能图谱:从GitHub项目到结构化能力管理实践
1. 项目概述:一个技能图谱的构建与价值 最近在整理自己的技术栈时,发现了一个挺有意思的GitHub项目,标题是“headlike-oradexon12/skills”。乍一看,这像是一个个人技能仓库,但深入探究后,我发现它远不止是…...
基于CRICKIT与蓝牙的双足机器人:从机械原理到手机遥控实践
1. 项目概述:一个会“翻跟头”的蓝牙机器人如果你玩腻了循迹小车或者舵机云台,想做一个动作更“魔性”、互动性更强的机器人,那么这个基于CRICKIT和Feather M0 Bluefruit的双足机器人绝对能让你眼前一亮。它走起路来不是平稳前进,…...
UPS 蓄电池在线监控系统是什么?工业 UPS 电源有必要安装吗?
在机房、工业生产、医疗设备等依赖 UPS 不间断电源的场景中,蓄电池往往被视为设备的 “心脏”。很多用户配置了优质 UPS 电源,却忽略了对蓄电池的实时管理,等到突发停电才发现电池亏电、失效,导致 UPS 无法正常供电,引…...
Rust服务脚手架:快速构建生产级微服务的标准化起点
1. 项目概述:为什么我们需要一个Rust服务脚手架?在当今的微服务与云原生架构浪潮中,快速启动一个健壮、可维护的后端服务是每个开发团队的核心诉求。如果你和我一样,厌倦了每次开启新项目时,都要重复搭建项目结构、配置…...
Laravel-admin 数据权限审计终极指南:完整权限变更记录解决方案 [特殊字符]️
Laravel-admin 数据权限审计终极指南:完整权限变更记录解决方案 🛡️ 【免费下载链接】laravel-admin Build a full-featured administrative interface in ten minutes 项目地址: https://gitcode.com/gh_mirrors/la/laravel-admin 想要确保你的…...
5分钟掌握网盘直链解析神器:彻底告别下载限速烦恼
5分钟掌握网盘直链解析神器:彻底告别下载限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...
科技晚报|2026年5月15日:AI 代理开始补协作、编排和护栏
科技晚报|2026年5月15日:AI 代理开始补协作、编排和护栏 一句话导读:今晚更值得看的,不是哪家模型榜单又变了,而是几家平台同时在补 AI 代理真正进生产前最缺的三块能力:跨 IDE 共享状态、团队级可观测&…...
告别手动填坑:用SSC工具+Excel快速搞定LAN9252 EtherCAT从站XML配置(附64点IO实例)
高效配置LAN9252 EtherCAT从站的自动化工具链实践 在嵌入式工业通信领域,EtherCAT因其卓越的实时性能被广泛采用,而LAN9252作为高性价比的从站控制器芯片,配合SPI接口成为许多开发者的首选方案。然而传统XML配置流程的复杂性往往成为项目瓶颈…...
React基础-第一章:React 简介与开发环境搭建
📘 第一章:React 简介与开发环境搭建 1. 什么是 React? React 是一个由 Facebook(现 Meta)开发并维护的 前端 JavaScript 库,用于构建用户界面,尤其是 单页应用(SPA)。 ✅…...
