macOS Thread Injection via Task port
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Code
1. Thread Hijacking
рд╢реБрд░реБрдЖрдд рдореЗрдВ, task_threads()
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╛рд░реНрдп рдкреЛрд░реНрдЯ рдкрд░ рджреВрд░рд╕реНрде рдХрд╛рд░реНрдп рд╕реЗ рдереНрд░реЗрдб рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдереНрд░реЗрдб рдХреЛ рд╣рд╛рдИрдЬреИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рднрд┐рдиреНрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдирдП рдорд╛рдЗрдЯрд┐рдЧреЗрд╢рди рдХреЗ рдХрд╛рд░рдг рдирдП рджреВрд░рд╕реНрде рдереНрд░реЗрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИ рдЬреЛ thread_create_running()
рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИред
рдереНрд░реЗрдб рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, thread_suspend()
рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕рдХреА рдирд┐рд╖реНрдкрд╛рджрди рд░реБрдХ рдЬрд╛рддреА рд╣реИред
рджреВрд░рд╕реНрде рдереНрд░реЗрдб рдкрд░ рдХреЗрд╡рд▓ рд░реЛрдХрдирд╛ рдФрд░ рд╢реБрд░реВ рдХрд░рдирд╛, рдкрдВрдЬреАрдХрд░рдг рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рджреВрд░рд╕реНрде рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ x0
рд╕реЗ x7
рдХреЛ рдЖрд░реНрдЧреБрдореЗрдВрдЯреНрд╕ рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ, pc
рдХреЛ рд▓рдХреНрд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдХреЗ, рдФрд░ рдереНрд░реЗрдб рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рдереНрд░реЗрдб рд░рд┐рдЯрд░реНрди рдХреЗ рдмрд╛рдж рдХреНрд░реИрд╢ рди рд╣реЛ, рд░рд┐рдЯрд░реНрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдПрдХ рд░рдгрдиреАрддрд┐ рдореЗрдВ рджреВрд░рд╕реНрде рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрдкреНрд╢рди рд╣реИрдВрдбрд▓рд░ рдХреЛ thread_set_exception_ports()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ lr
рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдПрдХ рдЕрдорд╛рдиреНрдп рдкрддреЗ рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрдкрд╡рд╛рдж рдкреЛрд░реНрдЯ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ, рдереНрд░реЗрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЗрдпрд╛рди рдмреАрдпрд░ рдХреЗ рдЯреНрд░рд┐рдкрд▓_рдлреЗрдЪ рдПрдХреНрд╕рдкреНрд▓реЙрдЗрдЯ рд╕реЗ рдЕрдкрдирд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐ рдореЗрдВ, lr
рдХреЛ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдереНрд░реЗрдб рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рддрдм рд▓рдЧрд╛рддрд╛рд░ рдореЙрдирд┐рдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ pc
рдЙрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред
2. Mach ports for communication
рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рджреВрд░рд╕реНрде рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Mach рдкреЛрд░реНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпреЗ рдкреЛрд░реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдордирдорд╛рдиреЗ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред
рджреНрд╡рд┐рджрд┐рд╢ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП, рджреЛ Mach рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ: рдПрдХ рд╕реНрдерд╛рдиреАрдп рдореЗрдВ рдФрд░ рджреВрд╕рд░рд╛ рджреВрд░рд╕реНрде рдХрд╛рд░реНрдп рдореЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╕рдордХрдХреНрд╖ рдХрд╛рд░реНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред
рд╕реНрдерд╛рдиреАрдп рдкреЛрд░реНрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдп рджреНрд╡рд╛рд░рд╛ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреЛрд░реНрдЯ рдХреЛ mach_port_allocate()
рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреБрдиреМрддреА рдЗрд╕ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рднреЗрдЬрдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рджреВрд░рд╕реНрде рдХрд╛рд░реНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╣реИред
рдПрдХ рд░рдгрдиреАрддрд┐ рдореЗрдВ thread_set_special_port()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреВрд░рд╕реНрде рдереНрд░реЗрдб рдХреЗ THREAD_KERNEL_PORT
рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд░рдЦрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдлрд┐рд░, рджреВрд░рд╕реНрде рдереНрд░реЗрдб рдХреЛ mach_thread_self()
рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рджреВрд░рд╕реНрде рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрд▓рдЯ рд╣реЛрддреА рд╣реИред рджреВрд░рд╕реНрде рдереНрд░реЗрдб рдХреЛ mach_reply_port()
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ Mach рдкреЛрд░реНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ mach_port_allocate()
рдЗрд╕рдХреА рд░рд┐рдЯрд░реНрди рдореИрдХреЗрдирд┐рдЬреНрдо рдХреЗ рдХрд╛рд░рдг рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИ)ред рдкреЛрд░реНрдЯ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж, mach_port_insert_right()
рдХреЛ рджреВрд░рд╕реНрде рдереНрд░реЗрдб рдореЗрдВ рдПрдХ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХрд╛рд░ рдлрд┐рд░ thread_set_special_port()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдп рдореЗрдВ рд╡рд╛рдкрд╕, thread_get_special_port()
рдХрд╛ рдЙрдкрдпреЛрдЧ рджреВрд░рд╕реНрде рдХрд╛рд░реНрдп рдореЗрдВ рдирдП рдЖрд╡рдВрдЯрд┐рдд Mach рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рднреЗрдЬрдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╕реЗ Mach рдкреЛрд░реНрдЯ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рджреНрд╡рд┐рджрд┐рд╢ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
3. Basic Memory Read/Write Primitives
рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдмреБрдирд┐рдпрд╛рджреА рдореЗрдореЛрд░реА рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрджрдо рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдЪрд░рдг рдореЗрдВ рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡ рдХрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЬрд▓реНрдж рд╣реА, рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
Memory Reading and Writing Using Execute Primitive
рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╣реИред рдореЗрдореЛрд░реА рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдпреЗ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдП рдЧрдП рдЕрд╕реЗрдВрдмрд▓реА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ:
рдЙрдкрдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреА рдкрд╣рдЪрд╛рди
рд╕рд╛рдорд╛рдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╕реНрдХреИрди рдЗрди рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддрд╛ рд╣реИ:
рдореЗрдореЛрд░реА рдкрдврд╝рдирд╛:
property_getName()
рдлрд╝рдВрдХреНрд╢рди Objective-C рд░рдирдЯрд╛рдЗрдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдореЗрдореЛрд░реА рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирд╛ рдЧрдпрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИ:
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ read_func
рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЬреЛ objc_property_t
рдХрд╛ рдкрд╣рд▓рд╛ рдлрд╝реАрд▓реНрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдореЗрдореЛрд░реА рд▓рд┐рдЦрдирд╛: рдореЗрдореЛрд░реА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рдЦреЛрдЬрдирд╛ рдЕрдзрд┐рдХ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, libxpc рд╕реЗ
_xpc_int64_set_value()
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЙрдкрдпреБрдХреНрдд рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓реА рд╣реИ:
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ 64-рдмрд┐рдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рджреВрд░рд╕реНрде рдХреЙрд▓ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
With these primitives established, the stage is set for creating shared memory, marking a significant progression in controlling the remote process.
4. рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд╕реЗрдЯрдЕрдк
рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рдФрд░ рдХрдИ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг libxpc
рдФрд░ рдЗрд╕рдХреЗ OS_xpc_shmem
рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдордЪ рдореЗрдореЛрд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрд╡рд▓реЛрдХрди:
рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди:
рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ
mach_vm_allocate()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗредрдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП
OS_xpc_shmem
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПxpc_shmem_create()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдордЪ рдореЗрдореЛрд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдЧрд╛ рдФрд░OS_xpc_shmem
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдСрдлрд╕реЗрдЯ0x18
рдкрд░ рдордЪ рднреЗрдЬрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред
рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдмрдирд╛рдирд╛:
рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ
OS_xpc_shmem
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВmalloc()
рдХреЗ рд▓рд┐рдП рдПрдХ рджреВрд░рд╕реНрде рдХреЙрд▓ рдХреЗ рд╕рд╛рдередрд╕реНрдерд╛рдиреАрдп
OS_xpc_shmem
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдкреА рдСрдлрд╕реЗрдЯ0x18
рдкрд░ рдЧрд▓рдд рдордЪ рдореЗрдореЛрд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╛рдо рд╣реЛрдЧрд╛ред
рдордЪ рдореЗрдореЛрд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╕рд╣реА рдХрд░рдирд╛:
рджреВрд░рд╕реНрде рдХрд╛рд░реНрдп рдореЗрдВ рдордЪ рдореЗрдореЛрд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рднреЗрдЬрдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
thread_set_special_port()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВредрджреВрд░рд╕реНрде рдореЗрдореЛрд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдХреЗ рдСрдлрд╕реЗрдЯ
0x18
рдкрд░ рдордЪ рдореЗрдореЛрд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рд╣реА рдХрд░реЗрдВред
рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд╕реЗрдЯрдЕрдк рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдирд╛:
рджреВрд░рд╕реНрде
OS_xpc_shmem
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдорд╛рдиреНрдп рдХрд░реЗрдВредxpc_shmem_remote()
рдХреЗ рд▓рд┐рдП рдПрдХ рджреВрд░рд╕реНрде рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдореИрдкрд┐рдВрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ, рд╕реНрдерд╛рдиреАрдп рдФрд░ рджреВрд░рд╕реНрде рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдФрд░ рдХрдИ рддрд░реНрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдорд┐рд▓реЗрдЧреАред
рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯреНрд╕
рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдФрд░ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП:
рд░рд┐рдореЛрдЯ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд╕реЗрдЯрдЕрдк рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Mach рдкреЛрд░реНрдЯ рдФрд░ рдореЗрдореЛрд░реА рдПрдВрдЯреНрд░реА рдирд╛рдореЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВред
5. рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдордирдорд╛рдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рд╣рдордиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдПрдБ рд╣реИрдВ:
рдордирдорд╛рдиреА рдореЗрдореЛрд░реА рд╕рдВрдЪрд╛рд▓рди:
рд╕рд╛рдЭрд╛ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
memcpy()
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдордирдорд╛рдиреА рдореЗрдореЛрд░реА рдкрдврд╝реЗрдВредрд╕рд╛рдЭрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
memcpy()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдордирдорд╛рдиреА рдореЗрдореЛрд░реА рд▓рд┐рдЦреЗрдВред
рдХрдИ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛:
рдЙрди рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ 8 рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВред
Mach рдкреЛрд░реНрдЯ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг:
рдкреВрд░реНрд╡ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Mach рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ Mach рдкреЛрд░реНрдЯ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг:
triple_fetch
рдореЗрдВ Ian Beer рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдХреА рдЧрдИ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
рдпрд╣ рд╡реНрдпрд╛рдкрдХ рдирд┐рдпрдВрддреНрд░рдг threadexec рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднреАрддрд░ рд╕рдВрдХреБрдЪрд┐рдд рд╣реИ, рдЬреЛ рдкреАрдбрд╝рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ API рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░:
рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд┐рд░рддрд╛ рдФрд░ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдкрдврд╝рдиреЗ/рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП
memcpy()
рдХрд╛ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВредMach рдкреЛрд░реНрдЯ рдпрд╛ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЙрдЪрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ рдФрд░ рд░рд┐рд╕реЛрд░реНрд╕реЗрд╕ рдХреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ рддрд╛рдХрд┐ рд▓реАрдХ рдпрд╛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд╣реБрдВрдЪ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрди рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рдФрд░ threadexec
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХреЛрдИ рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕реВрдХреНрд╖реНрдо рд╕реНрддрд░ рдкрд░ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓рдХреНрд╖рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated