利用pin码可以在报错界面执行任意python代码 而观察这个pin码的生成机制,可以发现pin码是固定的 原理可以查阅文章Flask debug pin安全问题 - 先知社区 (aliyun.com),这里记录下漏洞利用方法 利用 条件 需要六个值: username #一般为root modname #一般为flask.app getattr(app, '__name__',
打开环境,发现三个链接/list /upload /console,题目描述为flask,那就是与flask的debug模式相关的漏洞,在此之前我只听过debug的pin码漏洞,也就是关于pin码的生成的。这里提一下: 点击查看代码 pin码的生成取决于下面这几个因素:1.服务器运行flask所登录的用户名。2.modname2.getattr(app, “name”, app.class....
当我们获取到这六个参数的值时,就可以通过脚本推算出生成的pin码,然后进行任意命令执行。 0x02漏洞利用 1、flask debug模式无开启pin码验证 可直接进入交互式的python shell 进行命令执行。 2、flask debug模式开启了pin码验证 1、一般都是需要通过任意文件读取读取到生成pin码private_bits()所需要的2个参数值。 2...
pin码脚本: import hashlibfrom itertools import chainprobably_public_bits = ['flaskweb',# username'flask.app',# modname'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))'/usr/local/lib/python3.7/site-packages/flask/app.py' # getattr(mod, '__file__', None)...
Werkzeug更新带来的Flask debug pin码生成方式改变 复现2020GYCTF-FLASKAPP及 2019CISCN double_secret出现异常。题目本身有两个解题方式。 其中一个思路是: 当Flask开启debug模式时,可以在报错页面输入pin码来执行python命令。 pin码需要配合SSTI或文件包含等情况获取系统信息来构造。有SSTI即可执行python命令,因而题目...
在本次的测试环境中,要进入这个Python shell需要输入一个PIN码,当时偶遇这个漏洞的时候,目标站点是不需要属于PIN码的(可能是Flask的版本原因,具体原因暂未考证。目测这个PIN码是可以爆破的,之后有时间的话会研究下具体的实现方式)。 由于当时遇到的是Linux系统,为了复盘漏洞现场,便把实验代码移植到Linux系统运行(前面...
在终端运行:python flask_test.py,即开启了一个访问地址为http://127.0.0.1:5000的服务器,在浏览器中访问该地址可以看到,出现上述结果说明flask引入成功,并且能正常工作。 代码解析: 第一句用于指定编码格式,这是为了防止出现中文乱码而做的处理,第二句则是从flask框架中引入Flask类到当前应用中的方法: ...
也就是我们如果能够伪造这六个值我们就能够生成一个一模一样的PIN码了。 靶机测试 而要获取这六个值我们可以通过任意文件读取来获得,因此本地写一个文件读取的漏洞点,并且为了方便写一个报错页面,放docker上启动: flask.app Flask 获取machine-id 直接访问即可: ...
也就是我们如果能够伪造这六个值我们就能够生成一个一模一样的PIN码了。 靶机测试 而要获取这六个值我们可以通过任意文件读取来获得,因此本地写一个文件读取的漏洞点,并且为了方便写一个报错页面,放docker上启动: # -*- coding: utf-8 -*- from flask import Flask, request app = Flask(__name__) @app...
这个PIN在我们的pycharm控制台中可以看到 然后我们将这个PIN输入进去,就可以开始调试了,PIN中间的-是可以省略的然后我们就可以开始调试了 打开DEBUG的缺点 容易被别人看到我们的代码漏洞,从而恶意攻击我们的网站,所以我们在生产环境下降DEBUG模式打开,便于我们调试代码,而部署项目到线上时,就需要关闭DEBUG模式,保证我们网...