hacktricks/binary-exploitation/arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md

5.2 KiB

WWW2Exec - .dtors & .fini_array

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

.dtors

{% hint style="danger" %} Teenwoordig is dit baie vreemd om 'n bineêre lêer met 'n .dtors-seksie te vind. {% endhint %}

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 bineêre lêer gestoor en daarom, as jy daarin slaag om die adres van 'n shellcode 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.

{% hint style="warning" %} Natuurlik moet jy eers 'n plek vind om die shellcode te stoor sodat jy dit later kan aanroep. {% endhint %}

.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

Merk op dat wanneer 'n funksie van die .fini_array uitgevoer word, beweeg dit na die volgende een, sodat dit nie verskeie kere uitgevoer word (om ewige lusse te voorkom nie), maar dit sal jou ook net 1 uitvoering van die funksie hier gee.

Merk op 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 weer die kwesbare willekeurige skryffunksie 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.

{% hint style="danger" %} Merk op dat met Vol Relro, die afdeling .fini_array leesbaar gemaak word. {% endhint %}

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: