最近搞SSTI,发现有的开发开了debug,由此想到了PIN,但一直没有对这个点做一个深入剖析,今天就完整的整理Flask Debug PIN码的生成原理与安全问题 。
PIN是什么?
PIN是 Werkzeug(它是 Flask 的依赖项之一)提供的额外安全措施,以防止在不知道 PIN 的情况下访问调试器 。您可以使用浏览器中的调试器引脚来启动交互式调试器 。werkzeug不同版本以及Python/ target=_blank class=infotextkey>Python不同版本都会影响PIN码的生成
请注意,无论如何,您都不应该在生产环境中使用调试模式,因为错误的堆栈跟踪可能会揭示代码的多个方面 。
调试器 PIN 只是一个附加的安全层,以防您无意中在生产应用程序中打开调试模式,从而使攻击者难以访问调试器 。
——来自StackOverFlow回答
但是PIN码并不是随机生成,当我们重复运行同一程序时,生成的PIN一样,PIN码生成满足一定的生成算法
探寻PIN码生成算法笔者环境
- Python 3.10.2
- Flask 2.0.3
- PyCharm 2021.3.3 (Professional Edition)
- windows 10 专业版 21H2
- Docker Desktop 4.7.0
from flask import FlaskApp = Flask(__name__)@app.route("/")def hello():return '合天网安实验室-实践型网络安全在线学习平台;真实环境,在线实操学网络安全 。'if __name__ == "__main__":app.run(host="0.0.0.0", port=8080, debug=True)运行,控制台状态如下文章插图
浏览器如下则成功
文章插图
接下来开始调试程序,顺藤摸瓜找到生成PIN码的函数
PIN码是werkzeug的策略,先找到flask中导入werkzeug的部分
【----帮助网安学习,以下所有学习资料关注我,私信回复“资料”获取----】
【深入浅出Flask PIN】 ① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(Android/ target=_blank class=infotextkey>安卓+IOS)
调试在run.app行下断点,点击调试
文章插图
点击步入
文章插图
转到了flask/app.py,直接Ctrl+F搜索werkzeug
文章插图
发现程序从werkzeug导入了run_simple模块,而且try部分有run app的参数
我们直接按住ctrl点击run_simple进去看看
此时进入了seving.py,找到了负责Debug的部分,PIN码是在debug状态下才有的,那这个部分很有可能存有PIN码生成部分,进去看看
文章插图
此时进入了__init__.py,经过一番审计,先来看一看pin函数
文章插图
主要是get_pin_and_cookie_name函数,进去看看
推荐阅读
- Linux|国产操作系统上新:深度Deepin官宣23版本8月发布
- 老外发微信时说“I'll ping you”是什么意思? ping是什么意思
- 联通puk码是什么意思 PUK码是什么意思
- ping命令最全的用法,做项目必备技能 ping是什么意思
- 手机卡的PIN码是什么意思? 手机pin码是什么
- 经常看到的PIN是什么意思 pin是什么意思
- 生菜|BLACKPINK Lisa换新发型了!超性感「狼尾剪」获700万点赞
- 手机卡的PIN码是什么意思 pin码是什么
- 发型|已经美到不像凡人了啊!Red Velvet与Apink回归新发型解析!
- 如何同时Ping多个IP地址,一个小技巧节约N小时?
