1. 概念
“条件竞争”发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
开发者在进行代码开发时认为代码以线性方式执行,忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果
2. 举例
在文件上传场景中,分为2步,先上传,再检查(删除或保存)
如果上传一个恶意文件:在服务器删除前,我们多次访问它,结合文件包含漏洞等将它执行,拿到shell,至于之后是不是被删除已经不重要了
3. 练习
拿一道ctf的题目来练习moctf平台的题目:没时间解释了
http://119.23.73.3:5006/web2/index2.php
进去之后发现什么都没有,查看源代码也是没有有价值的信息
Diesearch扫描
找到一个upload.php,进入
抓包
访问该地址
后面就用到条件竞争,多线程访问这个地址,才能拿到flag
方法一:burpsuite
我们再访问这个地址,刷新几次后得到flag
方法二:python脚本
python
import requests
url = "http://119.23.73.3:5006/web2/uploads/590d2f2ff59f0347f1094e243fc6b0d21347f441/111"
while 1:
print(requests.get(url).text)
搞定