• [^] # Re: Autre bot

    Posté par (site web personnel) . En réponse au journal Justabot le bot XMPP ٩(͡๏̯͡๏)۶. Évalué à 2. Dernière modification le 23 mars 2013 à 10:44.

    Je viens d'essayer :

     calc("[t for t in (1).__class__.__bases__[-1].__subclasses__() if t.__name__ == 'file'][0]('/etc/passwd').read()")
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
     File "<stdin>", line 6, in calc
     File "<string>", line 1, in <module>
    IOError: file() constructor not accessible in restricted mode
    
    

    Pourtant avec eval, ça marche. Qui a un exemple de faille pour ce bout de code :

    def calc(expression):
     #make a list of safe functions
     safe_list = ['math','acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
    'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
     #use the list to filter the local namespace
     safe_dict = dict([ (k, locals().get(k, None)) for k in safe_list ])
     return eval(expression, {"__builtins__":None},safe_dict)