WWW2Exec - .dtors & .fini_array

Leer & oefen AWS-hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)

Ondersteun HackTricks

.dtors

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:

objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”

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.

.fini_array

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.

objdump -s -j .fini_array ./greeting

./greeting:     file format elf32-i386

Contents of section .fini_array:
8049934 a0850408

#Put your address in 0x8049934

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.

Ewige lus

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)

Ondersteun HackTricks

Last updated