рдФрд░ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдХрд╛рд╕рди рдХреЗ рдЦрддрд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ ()

рдкреНрд░рд╢реНрди рдХреА рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╕рдордп рдХрд┐рддрдиреА рдкреНрд░рддрд┐рдпрд╛рдБ рдЯреВрдЯ рдЧрдИ рдереАрдВ "рдХреНрдпрд╛ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ?" - рдпрд╣ рдЧрд┐рдирддреА рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреЛрдИ рд╣реИ рдЬреЛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред

рдЬрдм рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рдЙрддреНрддрд░ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝реА, рддреЛ рдореИрдВ рдПрдХ рдкреЛрд╕реНрдЯ рдкрд░ рдЖрдпрд╛ред рдореБрдЭреЗ рдЕрдзреНрдпрдпрди рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред



рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ



рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди eval()



рдЬреЛ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:

 assert eval("2 + 3 * len('hello')") == 17
      
      





рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдЖрдк рдЬрд┐рд╕ рд░реЗрдЦрд╛ рд╕реЗ рдмрд╛рд╣рд░ eval



рд╣реИрдВ рд╡рд╣ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо eval



рдХреЛ рдЦрд┐рд▓рд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ 'y is os.system('rm -rf /')



? рджреБрднрд╛рд╖рд┐рдпрд╛ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЕрдЧрд░ рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдореИрдВ rm -rf /



рдмрдЬрд╛рдп clear



( cls



рдЕрдЧрд░ рдЖрдк Windows рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ rm -rf /



рддрд╛рдХрд┐ рдХреЛрдИ рднреА рдкрд╛рдардХ рдЧрд▓рддреА рд╕реЗ рди рд╣реЛ рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдирд╣реАрдВ рд▓рдЧреА )ред



рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИрдВ?



рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХрд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдЪрд▓рд╛рдХрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред рджреВрд╕рд░реЗ (рд╡реИрдХрд▓реНрдкрд┐рдХ) рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, eval()



рдПрдХ рд╢рдмреНрджрдХреЛрд╖ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди (рд╕рднреА рд╡рд░реНрдЧреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ, рдЪрд░, рдЖрджрд┐ eval()



рдмрдЬрд╛рдп "рд╢реАрд░реНрд╖" рд╕реНрддрд░ рдкрд░, рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рд╕реБрд▓рдн) рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ eval



рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред 'рдУрдоред рдпрджрд┐ рдЗрд╕ рддрд░реНрдХ рдХреЗ рдмрд┐рдирд╛ eval



рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ os



рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдЦрд╛рд▓реА рд╢рдмреНрджрдХреЛрд╢ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ eval



рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдо рд╕реНрдерд╛рди рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдХреЛрдб рдЕрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ рдФрд░ NameError: name 'os' is not defined



рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛ NameError: name 'os' is not defined



:

 eval("os.system('clear')", {})
      
      





рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЕрднреА рднреА рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ __import__



рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

 eval("__import__('os').system('clear')", {})
      
      





рдЕрдЧрд▓реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ __builtins__



рддрдХ рдкрд╣реБрдВрдЪ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 'рдП' рдЕрдВрджрд░ рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ __import__ рдЬреИрд╕реЗ рдирд╛рдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ __builtins__



ред рдпрджрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЦрд╛рд▓реА рд╢рдмреНрджрдХреЛрд╢ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 eval("__import__('os').system('clear')", {'__builtins__':{}}) # NameError: name '__import__' is not defined
      
      







рдЕрдЪреНрдЫрд╛, рдЕрдм, рдХреНрдпрд╛ рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ?



рдХреБрдЫ рд╣рд╛рдБ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЧрд▓рддреА рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдЧрд░ рдЖрдк CPython рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ segfault



рдХрд╣реЗрдВрдЧреЗ:

 s = """ (lambda fc=( lambda n: [ c for c in ().__class__.__bases__[0].__subclasses__() if c.__name__ == n ][0] ): fc("function")( fc("code")( 0,0,0,0,"KABOOM",(),(),(),"","",0,"" ),{} )() )() """ eval(s, {'__builtins__':{}})
      
      





рддреЛ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕рдХреА рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ:

 ().__class__.__bases__[0]
      
      





рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рд▓реЛрдЧ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ object



рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рд╣рдо рд╕рд┐рд░реНрдл object



рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ __builtins__



рдЦрд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдЦрд╛рд▓реА рдЯрдкрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдкрд╣рд▓рд╛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ object



рдФрд░ рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП, рдХреНрд▓рд╛рд╕ object



рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╣рдореЗрдВ рдЙрди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ рдЬреЛ object



рд╕реЗ рдкреНрд░рд╛рдкреНрдд object



рдпрд╛, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдШреЛрд╖рд┐рдд рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреА рд╕реВрдЪреА:

 ().__class__.__bases__[0].__subclasses__()
      
      





рдпрджрд┐ рд╣рдо рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ ALL_CLASSES



рд▓рд┐рдП ALL_CLASSES



рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рдиреАрдЪреЗ рджреА рдЧрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдиреЗ рдирд╛рдо рд╕реЗ рд╡рд░реНрдЧ рдвреВрдВрдврддреА рд╣реИ:

 [c for c in ALL_CLASSES if c.__name__ == n][0]
      
      





рдХреЛрдб рдореЗрдВ рдЖрдЧреЗ, рд╣рдореЗрдВ рджреЛ рдмрд╛рд░ рдХрдХреНрд╖рд╛ рдХреА рдЦреЛрдЬ рдХрд░рдиреА рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ:

 lambda n: [c for c in ALL_CLASSES if c.__name__ == n][0]
      
      





рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ eval



рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ 'a, рд╣рдо рди рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ( def



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдФрд░ рди рд╣реА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рд╡реЗрд░рд┐рдПрдмрд▓ рдкрд░ рд╣рдорд╛рд░реЗ рд▓рдВрдмреЛ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рд╕рднреА рдХреЛрдб рдХреЛ рджреВрд╕рд░реЗ рд▓реИрдореНрдмреНрдбрд╛ рдХреЗ рдЕрдВрджрд░ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

 (lambda fc=( lambda n: [ c for c in ALL_CLASSES if c.__name__ == n ][0] ): #         fc )()
      
      





рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдирд╛рдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рд╣рдо рдХреНрд▓рд╛рд╕ code



(рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ, рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА func_code



рд╕рдВрдкрддреНрддрд┐ рд╣реИ) рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ func_code



:

 fc("code")(0,0,0,0,"KABOOM",(),(),(),"","",0,"")
      
      





рд╕рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ, рд╣рдо рдХреЗрд╡рд▓ рдХрдмрд╛рдУрдо рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╛рдЗрдЯрдХреЛрдб рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд╣реИ рдЬреЛ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЕрдиреБрдХреНрд░рдо "рдЕрдЪреНрдЫрд╛" рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдмрд╛рдпреЛрдЯреЗрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд╕рднреА рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рд╕реАрдкреАрдереЙрди рдХреЗ рд╕реЗрдЧрдлреЙрд▓реНрдЯ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ 'ред " рдХрд╛рдмреВрдо " рдмрд╕ рдордЬреЗрджрд╛рд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж lvh ред



рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрдЧ code



рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХреЛрдб рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рд╣реЛрдЧреА:

 fc("function")(CODE_OBJECT, {})
      
      





рдЦреИрд░, рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рдкрддрди рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред

рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ рдкреВрд░рд╛ рдХреЛрдб рд╣реИ:

 (lambda fc=(lambda n: [c for c in ().__class__.__bases__[0].__subclasses__() if c.__name__ == n][0]): fc("function")(fc("code")(0,0,0,0,"KABOOM",(),(),(),"","",0,""),{})() )()
      
      







рдирд┐рд╖реНрдХрд░реНрд╖



рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЕрдм рдХрд┐рд╕реА рдХреЛ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ eval



рдХрд┐ eval



SECURE рдирд╣реАрдВ рд╣реИ , рднрд▓реЗ рд╣реА рдЖрдк рд╡реИрд╢реНрд╡рд┐рдХ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдкрд╣реБрдВрдЪ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред



рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ code



рдФрд░ function



рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП object



рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рднреА рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ, рдЖрдк рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЛ рдЙрд╕ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рддрддреНрдХрд╛рд▓) рдЬрд┐рд╕реЗ рдЖрдк eval()



ред

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 s = """ [ c for c in ().__class__.__bases__[0].__subclasses__() if c.__name__ == "Quitter" ][0](0)() """ eval(s, {'__builtins__':{}})
      
      





Lib / site.py рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреНрд╡рд┐рдЯрд░ рдХреНрд▓рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ quit()



рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдордВрдЧрд╛рдИ рдЬрд╛рддреА рд╣реИред

рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИ, рдЙрд╕реЗ рддреНрд╡рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рдХрд╛рдо рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред



рдЕрдм рд╣рдо рдЦрд╛рд▓реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рднрд╛рдЧ рдЧрдП, рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рд▓реЗрдЦ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЛрдб рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╕рднреА рдХреЛрдб рд╣реИред

рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ eval



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЙрди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЙрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рд╕реАрдорд┐рдд рди рд╣реЛред



eval



рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рдРрд╕реЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА blacklists рдХреЗ рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ, рдЙрди рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рд╣рдо рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ eval



рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЦрддрд░рдирд╛рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реА рд░рдгрдиреАрддрд┐ рдХреЗ рд╕рд╛рде, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЬреАрдд рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдирд┐рд╖рд┐рджреНрдз рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдХрдордЬреЛрд░ рд╣реЛрдЧрд╛ред



рдЬрдм рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╢реЛрдз рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдкрд╛рдпрдерди рдореЗрдВ eval



рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ рдЖрдпрд╛, рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдкреНрд░рдпрд╛рд╕ рд╣реИ:

 >>> eval("(lambda:0).func_code", {'__builtins__':{}}) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> RuntimeError: function attributes not accessible in restricted mode
      
      





рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдпрджрд┐ __builtins__



рдЕрдВрджрд░ eval



"рдЖрдзрд┐рдХрд╛рд░рд┐рдХ" рд╡рд╛рд▓реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рддреЛ eval



рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рдЦрддрд░рдирд╛рдХ рдЧреБрдгреЛрдВ рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП func_code



рддрдХ рдкрд╣реБрдВрдЪ рд╕реЗ func_code



рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд╛ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рджреЗрдЦрд╛ рд╣реИ , рдпрд╣ "рдЪрд╛рдВрджреА рдХреА рдЧреЛрд▓реА" рднреА рдирд╣реАрдВ рд╣реИред



рдлрд┐рд░ рднреА, eval



рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ? рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рджреЛ рдирд┐рдЪрд▓реЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ рдЬреЛ рдирд╛рдо рдХреЛ рдлреНрд░реЗрдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рджреЛ рдХрдо рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╡рд╛рд▓реЗ рд╕рднреА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдП, рддреЛ рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣реЗрдВрдЧреЗред рд╢рд╛рдпрдж ...



рдкреБрдирд╢реНрдЪ



Reddit рдкрд░ рдереНрд░реЗрдб рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕реНрдирд┐рдкреЗрдЯ рдорд┐рд▓рд╛ , рдЬреЛ рд╣рдореЗрдВ eval рдореЗрдВ "рдореВрд▓" __builtins__ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 [ c for c in ().__class__.__base__.__subclasses__() if c.__name__ == 'catch_warnings' ][0]()._module.__builtins__
      
      





Habr рдХреЗ рд▓рд┐рдП рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреАрдкреАрдПрд╕: рдореИрдВ рдкреАрдПрдо рдореЗрдВ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ, рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдФрд░ рдЯрд╛рдЗрдкреЛрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ :)



All Articles