House of Roman
Leer & oefen AWS-hacking: HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Basiese Inligting
Dit was 'n baie interessante tegniek wat RCE moontlik gemaak het sonder lekke via valse fastbins, die unsorted_bin-aanval en relatiewe oorskrywings. Dit is egter gepatch.
Kode
Jy kan 'n voorbeeld vind op https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c
Doel
RCE deur relatiewe aanwysers te misbruik
Vereistes
Redigeer fastbin- en unsorted bin-aanwysers
12 bits van willekeur moet afgedwing word (0.02% kans) om te werk
Aanvalstappe
Deel 1: Fastbin-stuk wys na __malloc_hook
Skep verskeie stukke:
fastbin_victim
(0x60, offset 0): UAF-stuk later om die heap-aanwyser later te redigeer om na die LibC-waarde te wys.chunk2
(0x80, offset 0x70): Vir goeie belynigmain_arena_use
(0x80, offset 0x100)relative_offset_heap
(0x60, offset 0x190): relatiewe offset op die 'main_arena_use'-stuk
Vry dan free(main_arena_use)
wat hierdie stuk in die ongesorteerde lys plaas en 'n aanwyser na main_arena + 0x68
sal kry in beide die fd
en bk
aanwysers.
Nou word 'n nuwe stuk toegewys fake_libc_chunk(0x60)
omdat dit die aanwysers na main_arena + 0x68
in fd
en bk
sal bevat.
Dan word relative_offset_heap
en fastbin_victim
vrygestel.
fastbin_victim
het 'nfd
wat narelative_offset_heap
wysrelative_offset_heap
is 'n offset van afstand vanaffake_libc_chunk
, wat 'n aanwyser namain_arena + 0x68
bevatDeur net die laaste byte van
fastbin_victim.fd
te verander, is dit moontlik om te maak datfastbin_victim
namain_arena + 0x68
wys
Vir die vorige aksies moet die aanvaller in staat wees om die fd-aanwyser van fastbin_victim
te wysig.
Dan is main_arena + 0x68
nie so interessant nie, so laat ons dit wysig sodat die aanwyser na __malloc_hook
wys.
Let daarop dat __memalign_hook
gewoonlik met 0x7f
begin en nulle voor dit, dan is dit moontlik om dit te vervals as 'n waarde in die 0x70
vinnige bin. Omdat die laaste 4 bits van die adres willekeurig is, is daar 2^4=16
moontlikhede vir die waarde om te eindig waarin ons belangstel. Dus word 'n BF-aanval hier uitgevoer sodat die blok eindig soos: 0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)
.
(Vir meer inligting oor die res van die bytes, kyk na die verduideliking in die how2heap voorbeeld). As die BF nie werk nie, sal die program net afsluit (begin dus weer totdat dit werk).
Dan word 2 mallocs uitgevoer om die 2 aanvanklike vinnige bin-blokke te verwyder en dan word 'n derde toegewys om 'n blok in die __malloc_hook:
te kry.
Deel 2: Ongeordende_bin aanval
Vir meer inligting kan jy kyk:
Unsorted Bin AttackMaar basies maak dit dit moontlik om main_arena + 0x68
na enige plek te skryf deur dit te spesifiseer in chunk->bk
. En vir die aanval kies ons __malloc_hook
. Dan, nadat ons dit oorskryf het, sal ons 'n relatiewe oorskrywing gebruik om na 'n one_gadget
te verwys.
Hiervoor begin ons 'n stuk kry en sit dit in die ongeordende bin:
Gebruik 'n UAF in hierdie stuk om unsorted_bin_ptr->bk
te wys na die adres van __malloc_hook
(ons het dit vantevore brute force).
Let daarop dat hierdie aanval die ongesorteerde bin beskadig (dus ook klein en groot). Ons kan dus slegs toewysings van die vinnige bin gebruik (‘n meer komplekse program mag ander toewysings doen en laat val), en om dit te trigger moet ons dieselfde grootte toewys anders sal die program val.
Dus, om die skryf van main_arena + 0x68
na __malloc_hook
te trigger, voer ons na die instelling van __malloc_hook
in unsorted_bin_ptr->bk
net die volgende uit: malloc(0x80)
Stap 3: Stel __malloc_hook na system
In stap een het ons beheer oor 'n brokkie wat __malloc_hook
bevat (in die veranderlike malloc_hook_chunk
) en in die tweede stap het ons daarin geslaag om main_arena + 0x68
hierin te skryf.
Nou misbruik ons 'n gedeeltelike oorskrywing in malloc_hook_chunk
om die libc-adres wat ons daar geskryf het (main_arena + 0x68
) te gebruik om 'n one_gadget
-adres te wys.
Hier is waar dit nodig is om 12 bits van willekeurigheid te brute force (meer inligting in die how2heap voorbeeld).
Laastens, sodra die korrekte adres oorgeskryf is, roep malloc
aan en trigger die one_gadget
.
Verwysings
Leer & oefen AWS Hack:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hack: HackTricks Opleiding GCP Red Team Expert (GRTE)
Last updated