WWW2Exec - .dtors & .fini_array
Last updated
Last updated
Leer & oefen AWS-hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Teenwoordig is dit baie vreemd om 'n binêre lêer met 'n .dtors-seksie te vind!
Die destruktore 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 van 'n shell-kode 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 geen funksie geregistreer is nie. Oorskryf dus die 00000000
met die adres van 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 geroep sal word voordat die program eindig, soos .dtors
. Dit is interessant as jy jou shellcode kan roep deur net na 'n adres te spring, of in gevalle waar jy terug moet gaan na main
om die kwesbaarheid 'n tweede keer te uitbuit.
Let wel dat wanneer 'n funksie van die .fini_array
uitgevoer word, beweeg dit na die volgende een, sodat dit nie verskeie kere uitgevoer sal word (om ewige lusse te voorkom nie), maar dit sal jou ook net 1 uitvoering van die funksie hier gee.
Let wel dat inskrywings in .fini_array
in omgekeerde volgorde genoem word, so jy wil waarskynlik begin skryf van die laaste een af.
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 skryf om die kwesbare willekeurige skryffunksie weer te roep
Bereken dan die terugkeeradres in die stapel wat deur __libc_csu_fini
gestoor word (die funksie wat al die .fini_array
-funksies aanroep) en sit daar die adres van __libc_csu_fini
Dit sal maak dat __libc_csu_fini
homself weer roep deur die .fini_array
-funksies weer uit te voer wat die kwesbare WWW-funksie 2 keer sal roep: een vir willekeurige skryf en nog een om weer die terugkeeradres van __libc_csu_fini
op die stapel te oorskryf om homself weer te roep.
Let daarop dat met Volle RELRO, die afdeling .fini_array
alleen-lees gemaak word. In nuwer weergawes, selfs met [Gedeeltelike RELRO] word die afdeling .fini_array
ook alleen-lees gemaak.
Leer & oefen AWS Hack:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hack: HackTricks Opleiding GCP Red Team Expert (GRTE)