рдкреНрд░рд╢реНрди рдХреА рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╕рдордп рдХрд┐рддрдиреА рдкреНрд░рддрд┐рдпрд╛рдБ рдЯреВрдЯ рдЧрдИ рдереАрдВ "рдХреНрдпрд╛ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ?" - рдпрд╣ рдЧрд┐рдирддреА рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреЛрдИ рд╣реИ рдЬреЛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред
рдЬрдм рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рдЙрддреНрддрд░ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝реА, рддреЛ рдореИрдВ рдПрдХ
рдкреЛрд╕реНрдЯ рдкрд░ рдЖрдпрд╛ред рдореБрдЭреЗ рдЕрдзреНрдпрдпрди рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди
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__':{}})
рдЕрдЪреНрдЫрд╛, рдЕрдм, рдХреНрдпрд╛ рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВ?
рдХреБрдЫ
рд╣рд╛рдБ рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЧрд▓рддреА рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдЧрд░ рдЖрдк 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] ):
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдирд╛рдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рд╣рдо рдХреНрд▓рд╛рд╕
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 рдХреЗ рд▓рд┐рдП рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреАрдкреАрдПрд╕: рдореИрдВ рдкреАрдПрдо рдореЗрдВ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ, рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдФрд░ рдЯрд╛рдЗрдкреЛрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ :)