House of Roman
Last updated
Last updated
AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks рдкреНрд░рд╢рд┐рдХреНрд╖рдг AWS рд░реЗрдб рдЯреАрдо рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ (ARTE) GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks рдкреНрд░рд╢рд┐рдХреНрд╖рдг GCP рд░реЗрдб рдЯреАрдо рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ (GRTE)
рдпрд╣ рдПрдХ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рддрдХрдиреАрдХ рдереА рдЬреЛ рдлреЗрдХ рдлрд╛рд╕реНрдЯрдмрд┐рдиреНрд╕, рдЕрдирд╕реЙрд░реНрдЯреЗрдб рдмрд┐рди рд╣рдорд▓рд╛ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдУрд╡рд░рд░рд╛рдЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рд▓реАрдХ рдХреЗ рдмрд┐рдирд╛ RCE рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рдереАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ.
рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдмрдВрдзрд┐рдд рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдХреЗ RCE
рдлрд╛рд╕реНрдЯрдмрд┐рди рдФрд░ рдЕрдирд╕реЙрд░реНрдЯреЗрдб рдмрд┐рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
12 рдмрд┐рдЯ рдХреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХреЛ рдмреНрд░реВрдЯ рдлреЛрд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (0.02% рдХреА рд╕рдВрднрд╛рд╡рдирд╛) рдХрд╛рдо рдХрд░рдиреЗ рдХреА
рдХрдИ рдЪрдВрдХ рдмрдирд╛рдПрдВ:
fastbin_victim
(0x60, рдСрдлрд╕реЗрдЯ 0): рдмрд╛рдж рдореЗрдВ рд╣реА рд╣реАрдк рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UAF рдЪрдВрдХред
chunk2
(0x80, рдСрдлрд╕реЗрдЯ 0x70): рдЕрдЪреНрдЫреЗ рдПрд▓рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП
main_arena_use
(0x80, рдСрдлрд╕реЗрдЯ 0x100)
relative_offset_heap
(0x60, рдСрдлрд╕реЗрдЯ 0x190): 'main_arena_use' рдЪрдВрдХ рдкрд░ рд╕рд╛рдкреЗрдХреНрд╖ рдСрдлрд╕реЗрдЯ
рдлрд┐рд░ free(main_arena_use)
рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рдЪрдВрдХ рдХреЛ рдЕрдирд╕реЙрд░реНрдЯреЗрдб рд╕реВрдЪреА рдореЗрдВ рд░рдЦреЗрдЧрд╛ рдФрд░ fd
рдФрд░ bk
рдкреЙрдЗрдВрдЯрд░реНрд╕ рдореЗрдВ рджреЛрдиреЛрдВ рдореЗрдВ main_arena + 0x68
рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рдорд┐рд▓реЗрдЧрд╛ред
рдЕрдм рдПрдХ рдирдпрд╛ рдЪрдВрдХ fake_libc_chunk(0x60)
рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ fd
рдФрд░ bk
рдореЗрдВ main_arena + 0x68
рдХреЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ред
рдлрд┐рд░ relative_offset_heap
рдФрд░ fastbin_victim
рдХреЛ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
fastbin_victim
рдХреЗ рдкрд╛рд╕ fd
рд╣реИ рдЬреЛ relative_offset_heap
рдХреА рдУрд░ рдкреЛрдЗрдВрдЯ рдХрд░рддрд╛ рд╣реИ
relative_offset_heap
fake_libc_chunk
рд╕реЗ рджреВрд░реА рдХрд╛ рдСрдлрд╕реЗрдЯ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ main_arena + 0x68
рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рд╣реИ
fastbin_victim.fd
рдХреЗ рдЖрдЦрд┐рд░реА рдмрд╛рдЗрдЯ рдХреЛ рдмрджрд▓рдХрд░ fastbin_victim
рдХреЛ main_arena + 0x68
рдкреЙрдЗрдВрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ
рдкрд┐рдЫрд▓реА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдорд▓рд╛рд╡рд╛рд░ рдХреЛ fastbin_victim
рдХреЗ fd
рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдлрд┐рд░, main_arena + 0x68
рдЗрддрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреЙрдЗрдВрдЯрд░ __malloc_hook
рдХреА рдУрд░ рдкрд╣реБрдВрдЪреЗред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ __memalign_hook
рдЖрдо рддреМрд░ рдкрд░ 0x7f
рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЬреАрд░реЛ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ 0x70
рдлрд╛рд╕реНрдЯ рдмрд┐рди рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдкрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддреЗ рдХреЗ рдЕрдВрддрд┐рдо 4 рдмрд┐рдЯ рд░реИрдВрдбрдо рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрдЪреНрдЫрд┐рдд рд╕реНрдерд╛рди рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП 2^4=16
рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдмреАрдПрдл рд╣рдорд▓рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЯреБрдХрдбрд╝рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рдкреНрдд рд╣реЛ: 0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)
ред
(рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдмрд╛рдХреА рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рджреЗрдЦреЗрдВ how2heap рдЙрджрд╛рд╣рд░рдг)ред рдпрджрд┐ рдмреАрдПрдл рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрд╕ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рддрдХ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ)ред
рдлрд┐рд░, 2 рдореИрд▓реЛрдХреНрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдлрд╛рд╕реНрдЯ рдмрд┐рди рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рддреАрд╕рд░рд╛ рдПрдХ рдЪрдВрдХ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ __malloc_hook:
рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЖрдк рдпрд╣рд╛рдБ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ:
Unsorted Bin Attackрд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ chunk->bk
рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ main_arena + 0x68
рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рд╣рдо рд╣рдорд▓реЗ рдХреЗ рд▓рд┐рдП __malloc_hook
рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░, рдЗрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдПрдХ рд░рд┐рд▓реЗрдЯрд┐рд╡ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ) рдПрдХ one_gadget
рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдЪрдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдмрд┐рди рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ:
Use an UAF in this chunk to point unsorted_bin_ptr->bk
to the address of __malloc_hook
(we brute forced this previously).
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╣рдорд▓рд╛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдмрд┐рди рдХреЛ рдХреНрд╖рддрд┐ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдЫреЛрдЯрд╛ рдФрд░ рдмрдбрд╝рд╛ рднреА)ред рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдм рдХреЗрд╡рд▓ рдлрд╛рд╕реНрдЯ рдмрд┐рди рд╕реЗ рдЖрд╡рдВрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдиреНрдп рдЖрд╡рдВрдЯрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреНрд░реИрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдЗрд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╣реА рдЖрдХрд╛рд░ рдХрд╛ рдЖрд╡рдВрдЯрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, main_arena + 0x68
рдореЗрдВ __malloc_hook
рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: malloc(0x80)
рдЪрд░рдг рдПрдХ рдореЗрдВ рд╣рдордиреЗ __malloc_hook
рдХреЛ рд╕рдорд╛рд╡реЗрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдЪрдВрдХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ (рдЪрд░рдг рджреЛ рдореЗрдВ рд╣рдордиреЗ рдпрд╣рд╛рдВ main_arena + 0x68
рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдлрд▓ рд░рд╣реЗред
рдЕрдм, рд╣рдо malloc_hook_chunk
рдореЗрдВ рдПрдХ рдЖрдВрд╢рд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рд╡рд╣рд╛рдВ рд▓рд┐рдЦреЗ рдЧрдП libc рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (main_arena + 0x68
) рдПрдХ one_gadget
рдкрддреЗ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрд╣рд╛рдВ рд╡рд╣рд╛рдВ 12 рдмрд┐рдЯ рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХрд╛ рдмреНрд░реВрдЯрдлреЛрд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА how2heap рдЙрджрд╛рд╣рд░рдг рдореЗрдВред)
рдЕрдВрддрддрдГ, рд╕рд╣реА рдкрддрд╛ рдУрд╡рд░рд░рд╛рдЗрдЯ рд╣реЛрдиреЗ рдкрд░, malloc
рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ one_gadget
рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдВред