前言

在8月25日的安恒杯月赛题出现了一道flask debug配合任意文件读取的题,当时没有搞出来,作为萌新没见过这种题目,所以赛后经过讲解,自己本地复现了一波,收益良多。

0x01

此漏洞主要是利用Flask在debug会生成一个pin码。

E:\\1待处理\\123\\flaskfuxianaaa\\venv\\Scripts\\python.exe -m flask run
 * Serving Flask app "app.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 229-992-815
 * Running on <http://127.0.0.1:5000/> (Press CTRL+C to quit)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8251c03a-17e8-4b7b-aa60-ba3490a06e40/rId22.png

image.png

问题出在这个pin码的生成,在同一台机子上多次启动同一个Flask应用时,会发现这个pin码是固定的。 # 0x02 —————————————————————————- 漏洞测试环境: windows python3.6

Flask 1.0.2

0x03

现在来分析pin码是如何生成的,本人是用pycharm单步debug,下面只给出重要代码段。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hellso World!'

if __name__ == '__main__':
    app.run()

跟进app.run函数。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/79441f4b-6847-41b7-890d-ceae3637739f/rId24.png

跟进run_simple函数

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a6b7ea99-3be3-4b79-80aa-3bba9154d1c2/rId25.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1c75f672-12a5-4319-8b1f-0f78315b89b7/rId26.png

跟进DebuggedApplication类

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b24f09f5-1b2c-47d8-be70-1d1c4e6c5f5e/rId27.png