条件竞争
简介
可以理解为多线程中,没有对一个资源进行上锁处理,发现竞争
条件竞争是指一个系统的运行结果依赖于不受控制的事件的先后顺序。当这些不受控制的事件并没有按照开发者想要的方式运行时,就可能会出现
bug
。尤其在当前我们的系统中大量对资源进行共享,如果处理不当的话,就会产生条件竞争漏洞。说的通俗一点,条件竞争涉及到的就是操作系统中所提到的进程或者线程同步的问题,当一个程序的运行的结果依赖于线程的顺序,处理不当就会发生条件竞争。
基础知识
条件竞争
系统中,最小的运算调度单位是线程,每一个线程都依附于一个进程。进程里有多个线程。一个进程里的多线程是资源共享的,多进程之间也可以出现资源共享的情况。倘若此时多线程或者多进程对同一个资源都要利用的话就产生了竞争
进程
进程是系统进行资源分配和调度的独立单位,每一个进程都有自己的独立的内存空间,不同的京进程之间通过通道进行通信。每一个进程都有自己的独立的资源,内存,栈区,寄存器,虚拟内存,文件句柄等
线程
线程的目的是降低上下文切换的消耗,提高系统的并发性。实现了进程并发,一个进程可以做更多的事情线程自己基本上不拥有系统资源,只拥有一点在 运行中必不可少的资源(如程序计数器,一组寄 存器和栈),但是它可与同属一个进程的其他的 线程共享进程所拥有的全部资源。 线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易 丢失数据。
session
PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
漏洞成因
我们可以一直上传文件,且文件会在后端金国检查如果发现这个文件不符合需求的话就会将其删除,但是这种情况下,只要我们访问的那么就可以赶在文件删除之前进行访问。如果访问的同时写入shell 那我们就成功的留下了一个webshell 在服务器上