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)
[^] # Re: Autre bot
Posté par Maxime (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 :
Pourtant avec eval, ça marche. Qui a un exemple de faille pour ce bout de code :