WEB-CTF 条件竞争

如何来形容这个类型的问题呢,就像是幼儿园发糖吃,每个人只能拿一块,但是如果你跟别人一起再拿一次老师也没办法分辨,毕竟一群小朋友老师也没办法分辨手和对应的人。

关于部分的Burpsuite使用的知识,在前面的https://blog.csdn.net/iamsongyu/article/details/82989478中已经讲了,就不在赘述

 

这是一个好文章,从上边摘抄和借鉴了不少

http://wiki.secbug.net/web_race-condtion.html

 

条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生。

这是一个小例子,很多web程序都会有上传文件的功能,头像和图像等,服务器肯定会检查文件是否满足条件,不满足的要被删除,大概的框架是:

<?php
  if(isset($_GET['src'])){
    saveimg($_GET['src']);
    //得到保存路径filename
    //检查文件
    check(filename);
    if(不符合规范)
        deldte(filename);
    else
        pass;
    //...
 }
?>

那么问题就在于,如果我们采用大量的并发请求,就传递一个生成恶意webshell的图像,访问它就可以生成webshell。在上传完成和安全检查完成并删除它的间隙,攻击者通过不断地发起访问请求的方法访问了该文件,该文件就会被执行,并且在服务器上生成一个恶意shell的文件。至此,该文件的任务就已全部完成,至于后面发现它是一个不安全的文件并把它删除的问题都已经不重要了,因为攻击者已经成功的在服务器中植入了一个shell文件,后续的一切就都不是问题了。

 

预防方法

注意并发操作及相关操作逻辑是否得当,如上述获取远端文件时,尽量在将文件保存在本地前就进行相应的安全检查。其他建议待补充。

 

这里有两个例题,来自以下作者

作者:0verWatch 

来源:CSDN 

原文:https://blog.csdn.net/u011377996/article/details/79511160 

cumt平台上的 上传三  http://202.119.201.199/challenge/web/uploadfile/

这是一个图像上传,在服务器端使用黑名单的方式过滤,不符合的文件会被删除

使用条件竞争的方法就是,一边不断地去POST我们的恶意shellcode,另一方面就是不断地去访问服务器创建的那个文件。不断地提交文件可以使用Bp来完成,使用intruder爆破模块,负载设置为没有或者是随意找一个无用的设置一下。

另一方面,使用python不断的访问我们提交的文件,从条件竞争的方向来看,会使得我们有机会访问到我们的文件,最后得到flag

import requests
url = '你的文件路径'
while 1:
    r = requests.get(url)
    if 'moctf' in  r.text:
        print r.text

moctf上的 没时间解释 http://119.23.73.3:5006/web2/index2.php

题目首先是一个302跳转,我们可以抓包获取跳转前的信息

提示:我们需要上传一下东西.php

访问对应的网页,是一个上传的界面,名字和内容

我们就上传一句话木马,服务器给出保存路径

我们访问一下,发现提示太慢了,那么原理是一样的,他被删除了。我们可以采取跟上一题目相同的方法,也可以都使用Bp。

### CTF Web 文件上传机制 在Web应用程序中,文件上传功能允许用户向服务器提交文件。此过程通常涉及HTML表单中的`<input type="file">`元素以及相应的后端处理逻辑。当用户选择并提交文件时,浏览器会将文件数据发送到服务器上的特定URL。 为了实现这一操作,在客户端通过HTTP POST请求携带文件内容至服务端。服务端接收到该请求后解析其中的数据流,并将其保存为物理磁盘上的实际文件或临时存储位置以便后续处理[^1]。 #### 安全验证措施 理想情况下,开发者会在接收之前实施多种安全检查来防止恶意行为: - **文件扩展名过滤**:仅接受预定义的安全列表内的扩展名(如`.jpg`, `.png`),拒绝其他类型的文件。 - **MIME类型检测**:依据Content-Type头部字段确认上传对象的真实媒体类别,确保其符合预期格式。 - **文件头校验**:读取部分字节以判断文件签名是否匹配所声明的格式特征。 - **大小限制设定**:规定最大可接受尺寸以防资源耗尽攻击。 然而,在实践中这些防护手段可能被绕过或者存在缺陷,从而暴露出潜在风险点[^2]。 ### 常见漏洞及其利用手法 尽管采取了上述预防措施,但在某些场景下仍可能出现疏漏之处: - **LFI敏感文件读取**:如果应用未能妥善管理内部路径访问权限,则可能导致本地文件包含(Local File Inclusion, LFI),使攻击者能够获取任意系统文件甚至执行远程命令。 - **PHP伪协议滥用**:借助于特殊构造的链接参数(`php://filter`)可以改变输入流的行为模式,进而达到泄露源代码的目的。 - **条件竞争窗口**:假设两个并发进程试图同时创建相同名称的目标实体;由于缺乏同步控制机制而引发竞态状况(race condition),使得非法条目得以混入合法集合之中。 - **自动附加脚本(auto_append_file)**:一旦设置不当便会给所有响应页面注入额外指令片段,造成不可预见的影响范围扩大化趋势[^3]。 ```python import os from flask import Flask, request, redirect, url_for, send_from_directory app = Flask(__name__) UPLOAD_FOLDER = './uploads' ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg'} def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: return "No file part" file = request.files['file'] if file.filename == '': return "No selected file" if file and allowed_file(file.filename): filepath = os.path.join(UPLOAD_FOLDER, file.filename) file.save(filepath) return f"File saved at {filepath}" else: return "Invalid file extension" if __name__ == "__main__": app.run(debug=True) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值