WWW2Exec - .dtors & .fini_array

Reading time: 3 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

.dtors

caution

Vandag 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:

bash
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. So oorwrite die 00000000 met die adres na die shellcode om dit uit te voer.

warning

Natuurlik moet jy eers 'n plek vind om die shellcode te stoor om dit later aan te roep.

.fini_array

Essensieel is dit 'n struktuur met funksies wat geroep sal word voordat die program klaar is, 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.

bash
objdump -s -j .fini_array ./greeting

./greeting:     file format elf32-i386

Contents of section .fini_array:
8049934 a0850408

#Put your address in 0x8049934

Let daarop 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.

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 skrywe om die kwetsbare arbitrêre skrywe funksie weer aan te roep
  • Dan, bereken die terugkeeradres in die stapel wat gestoor is 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 kwesbare WWW funksie 2 keer sal aanroep: een vir arbitrêre skrywe en nog een om weer die terugkeeradres van __libc_csu_fini op die stapel te oorskryf om homself weer aan te roep.

caution

Let daarop dat met Full RELRO, die afdeling .fini_array lees-slegs gemaak word. In nuwer weergawes, selfs met [Partial RELRO] word die afdeling .fini_array ook lees-slegs gemaak.

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks