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

4.8 KiB

WWW2Exec - .dtors & .fini_array

{% hint style="success" %} Naučite i vežbajte hakovanje AWS-a:HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE)
Naučite i vežbajte hakovanje GCP-a: HackTricks Obuka GCP Crveni Tim Stručnjak (GRTE)

Podržite HackTricks
{% endhint %}

.dtors

{% hint style="danger" %} Danas je vrlo čudno naći binarni fajl sa .dtors sekcijom! {% endhint %}

Destruktori su funkcije koje se izvršavaju pre završetka programa (nakon što se funkcija main završi).
Adrese ovih funkcija se čuvaju unutar .dtors sekcije binarnog fajla i stoga, ako uspete da upišete adresu za shellcode u __DTOR_END__, to će biti izvršeno pre nego što program završi.

Dobijte adresu ove sekcije sa:

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

Obično ćete pronaći DTOR markere između vrednosti ffffffff i 00000000. Dakle, ako vidite samo te vrednosti, to znači da nema registrovane funkcije. Dakle, prepšišite 00000000 sa adresom shell koda da biste ga izvršili.

{% hint style="warning" %} Naravno, prvo morate pronaći mesto za čuvanje shell koda kako biste ga kasnije mogli pozvati. {% endhint %}

.fini_array

Essentially this is a structure with functions that will be called before the program finishes, like .dtors. This is interesting if you can call your shellcode just jumping to an address, or in cases where you need to go back to main again to exploit the vulnerability a second time.

objdump -s -j .fini_array ./greeting

./greeting:     file format elf32-i386

Contents of section .fini_array:
8049934 a0850408

#Put your address in 0x8049934

Večita petlja

Da biste zloupotrebili .fini_array kako biste dobili večitu petlju, možete proveriti šta je urađeno ovde: Ako imate najmanje 2 unosa u .fini_array, možete:

  • Koristite svoj prvi zapis da pozovete ranjivu funkciju za proizvoljni zapis ponovo
  • Zatim, izračunajte povratnu adresu na steku koju čuva __libc_csu_fini (funkcija koja poziva sve funkcije .fini_array) i stavite tamo adresu __libc_csu_fini
  • Ovo će naterati __libc_csu_fini da pozove sam sebe ponovo izvršavajući ponovo funkcije .fini_array koje će pozvati ranjivu WWW funkciju 2 puta: jednom za proizvoljni zapis i još jednom da ponovo prepiše povratnu adresu __libc_csu_fini na steku da bi se ponovo pozvao.

{% hint style="danger" %} Imajte na umu da sa Full RELRO, odeljak .fini_array je postavljen kao samo za čitanje. U novijim verzijama, čak i sa [Partial RELRO] odeljak .fini_array je takođe postavljen kao samo za čitanje. {% endhint %}

{% hint style="success" %} Naučite i vežbajte hakovanje AWS:HackTricks Training AWS Red Team Expert (ARTE)
Naučite i vežbajte hakovanje GCP: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks
{% endhint %}