Basic-ROP-Learning
ROP(Return-Oriented Programming)概述
ROP(Return-Oriented Programming)是一种高级的代码复用攻击技术,主要用于绕过现代操作系统的安全防护机制(如DEP/NX)。其核心思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。
1. 基本概念
(1)产生背景
Read More
Web安全条件竞争漏洞学习
0x00 概述
条件竞争漏洞发生在多个线程同时访问同一个共享代码、变量、文件等,,由于多个不同线程同时与相同的数据进行交互,从而导致碰撞冲突(例如,后端多个线程同时修改数据库中的某一个字段值)。攻击者通过精心定制请求到达后端的时间故意制造冲突,并由此实现恶意目的。这个漏洞存在于操作系统、数据库、web等多个层面,由于大多服务端框架在处理不同用户的请求时是并发进行的,而开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,而忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。
简单来说,就是多线程同时操作一个对象,而没有对对象进行加锁等保证一致性的操作
0x01 简单分析
我们来设计一个简答的业务逻辑:商城系统中,用户提交折扣码,后端会检测用户是否已经使用过折扣码。若未使用过,则使用该折扣码,并记录折扣码使用状态为True。若已使用折扣码,用户再次使用折扣码时,后端程序读取折扣码使用状态为True,拒绝用户再次使用折扣码。

我们在这里用一段简单的python代码来模拟后端逻辑,处理请求的handle_req()
函数是并发(多线程/多进程)执行的:
def **handle_req**(): if code_already_used = False: use_code() code_already_used = True else: reject_use_code()
|
但是这个过程可能会存在条件竞争漏洞,因为我们第一次请求判断的状态为false即未使用折扣码,但是第一个请求执行到第四行时准备更新数据库内容而第二个请求又开始执行并将折扣码使用状态再一次地标记为false,从而造成了使用了两次折扣码,触发了条件竞争漏洞,如下图所示:后端将记录折扣码使用状态为True之前,可能存在条件竞争,上述第2、3行代码执行的时间就是竞争窗口
。
Read More