WWW2Exec - .dtors & .fini_array
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Tans is dit baie vreemd om 'n binêre met 'n .dtors afdeling te vind!
Die vernietigers is funksies wat uitgevoer word voordat die program eindig (nadat die main
funksie terugkeer).
Die adresse van hierdie funksies word binne die .dtors
afdeling van die binêre gestoor en daarom, as jy daarin slaag om die adres na 'n shellcode in __DTOR_END__
te skryf, sal dit uitgevoer word voordat die programme eindig.
Kry die adres van hierdie afdeling met:
Gewoonlik sal jy die DTOR merkers tussen die waardes ffffffff
en 00000000
vind. So as jy net daardie waardes sien, beteken dit dat daar nie 'n funksie geregistreer is nie. So oorwrite die 00000000
met die adres na die shellcode om dit uit te voer.
Natuurlik moet jy eers 'n plek vind om die shellcode te stoor sodat jy dit later kan aanroep.
Essensieel is dit 'n struktuur met funksies wat aangeroep sal word voordat die program eindig, soos .dtors
. Dit is interessant as jy jou shellcode kan aanroep deur net na 'n adres te spring, of in gevalle waar jy weer terug na main
moet gaan om die kwesbaarheid 'n tweede keer te benut.
Note dat wanneer 'n funksie van die .fini_array
uitgevoer word, dit na die volgende een beweeg, so dit sal nie verskeie kere uitgevoer word nie (wat ewige lusse voorkom), maar dit sal ook net 1 uitvoering van die funksie wat hier geplaas is, gee.
Let daarop dat inskrywings in .fini_array
in omgekeerde volgorde aangeroep word, so jy wil waarskynlik begin skryf vanaf die laaste een.
Om .fini_array
te misbruik om 'n ewige lus te kry, kan jy kyk wat hier gedoen is: As jy ten minste 2 inskrywings in .fini_array
het, kan jy:
Gebruik jou eerste skrywe om die kwetsbare arbitrêre skrywe funksie weer aan te roep
Dan, bereken die terugadres in die stap wat gestoor word deur __libc_csu_fini
(die funksie wat al die .fini_array
funksies aanroep) en plaas daar die adres van __libc_csu_fini
Dit sal maak dat __libc_csu_fini
homself weer aanroep en die .fini_array
funksies weer uitvoer wat die kwetsbare WWW funksie 2 keer sal aanroep: een vir arbitrêre skrywe en nog een om weer die terugadres van __libc_csu_fini
op die stap te oorskryf om homself weer aan te roep.
Let daarop dat met Full RELRO, die afdeling .fini_array
lees-slegs gemaak word. In nuwer weergawes, selfs met [Partial RELRO] is die afdeling .fini_array
ook lees-slegs gemaak.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)