首页 > 其他分享 >[NISACTF 2022]babyupload

[NISACTF 2022]babyupload

时间:2023-08-11 23:34:49浏览次数:35  
标签:return 2022 db file path NISACTF babyupload def cur

[NISACTF 2022]babyupload

题目来源:nssctf

题目类型:web

涉及考点:文件上传

1. 题目说传一个图片文件,那我们传个muma.jpg看看

但是上传失败:

  • 回去检查一下源代码,发现有/source

直接访问下载了一个压缩文件,解压之后是一个py文件,随后进行代码审计

2. 代码审计

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)

我们直接看最关键的def uploaddef file里的内容,意思是,上传的文件不能有后缀名,且文件名前会拼接一个前缀upload/,使得输出的文件只能是在目录upload/下的,这里就涉及到os.path.join()的绝对路径拼接漏洞:

绝对路径拼接漏洞

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

然而,这个函数有一个少有人知的特性,如果拼接的某个路径以 / 开头,那么包括基础路径在内的所有前缀路径都将被删除,该路径将视为绝对路径

即,若我们使得res[0]='/flag',则可以读取到根目录下的flag文件,因此利用bp抓包,修改文件名为/flag即可:

我们直接访问得到的路径,获得flag:

NSSCTF{4ee39007-decc-43ca-bffc-65f593babeb3}

日期:2023.8.11

作者:y0Zero

标签:return,2022,db,file,path,NISACTF,babyupload,def,cur
From: https://www.cnblogs.com/bkofyZ/p/17624129.html

相关文章

  • 2022 上海静安高三一模英语订正
    I卷除听力订正语法填空subtle:【adj.,不易察觉的】fallshortof:【未达到……预期】initself:【本质上,本身】第24题,thepractice作主语,creates作谓语,句子【成分完整】。空前面是【介词】,所以只能是代词。这里不知道initself的意思,所以没填出来。第30题,空后跟着一句......
  • 【专题】2022中国快消品零售市场趋势解读报告PDF合集分享(附原数据表)
    全文链接:https://tecdat.cn/?p=33411我们在这份报告合集中分享了有关中国本土企业的信息,包括快消品企业的渠道布局、所面临的外部风险和挑战,以及如何应对这些挑战。阅读原文,获取专题报告合集全文,解锁文末19份快消品行业相关报告。中国本土企业在制定价格策略方面,面临的......
  • 【专题】2022快消品行业线下分销链路数字化转型报告PDF合集分享(附原数据表)
    全文链接:https://tecdat.cn/?p=33411我们在这份报告合集中分享了有关中国本土企业的信息,包括快消品企业的渠道布局、所面临的外部风险和挑战,以及如何应对这些挑战。阅读原文,获取专题报告合集全文,解锁文末19份快消品行业相关报告。中国本土企业在制定价格策略方面,面临的......
  • 2022最全Hbuilder打包成苹果IOS-App的详解
    本文相关主要记录一下使用Hbuilder打包成苹果IOS-App的详细步骤。介绍一下个人开发者账号:再说下什么是免费的苹果开发者账号,就是你没交688年费的就是免费账号,如果你想变成付费开发者账号,提交申请付费就行,账号都是一样的账号。没有账号的点击链接申请:苹果开发者账号申请登录开发者......
  • 2022最新上传ipa到appstore的步骤说明​
    我们平时在开发原生的iosapp的时候,有苹果电脑在手,上传ipa文件到苹果开发者中心比较简单,直接在xcode上就可以实现了。但是现在大多数人开发app不再是用原生框架开发了,也没有苹果电脑。很多朋友们选择了跨平台的H5技术来开发app,真正做到实现一种语法到处运行的场景。现在比较热的框......
  • 2022 上海普陀高三一模英语
    I卷除听力订正语法填空第22题,区分but和though,虽然都是转折,但but强调跟在后面的内容,而though强调主句内容。这里填but更好,因为这一段都在说批评者的观点,所以空处应该强调的是跟在空后的内容,填but。小猫钓鱼climateneutral:【气候中和,不会破坏气候的(类比“碳中和”......
  • NOIP-2022-ZJ游记
    DAY0在机房看了点题,搓了遍模板,看了遍错题,回宿舍摆DAY16:40出发7点多到杭师大,看到了杭二fyk范神!8:30比赛开始,结果CCF的密码有问题,8:33才打开题目——日常半小时看题——发现T1水题,T2ex题,T3能骗特例,T4能打暴力2hT1:O(n2m2)--->O(n3m)--->O(n2m)--->O(nm)0.5hT2:啥也不会0.5hT......
  • SolidWorks2022中文版图文安装教程、激活方法附安装包下载
    一、下载方式[软件名称]:SolidWorks2022[软件语言]:简体中文 [软件大小]:14.7G[安装环境]:Win11/Win10[硬件要求]:[email protected]内存@8G及以上下载链接%70%61%6E%2E%62%61%69%64%75%2E%63%6F%6D/%73/%31%4E%2D%4D%7A%53%41%34%71%32%76%70%5A%4F%51%4B%78%4E%4E%57%41%79%67?%70%77%64=%......
  • PR语音生成字幕——文本转录功能【2022.2新功能】
    转录序列会得到一个文本然后点上面的CC,创建字幕,调整一下参数就好了......
  • 【重要】2022年有三AI专属固态硬盘开启预订,附赠视频与代码等学习资料
    离咱们上一次发布移动固态硬盘产品过去有一年多了,部分之前没有拿到的同学,断断续续在这一年间在不断问我,三哥啥时候再来一批,非常想要。正好咱们下半年开启了,这一年多我们平台也有了很大的变化,这一次我们就来发布今年的定制版移动固态硬盘,欢迎大家订阅收藏使用!硬盘产品细节本次我们的......