hacktricks/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md

7.8 KiB

Provere bezbednosti funkcija hipa

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

Podržite HackTricks
{% endhint %}

Za više informacija pogledajte:

{% content-ref url="unlink.md" %} unlink.md {% endcontent-ref %}

Ovo je sažetak izvršenih provera:

  • Proverite da li je naznačena veličina bloka ista kao prev_size naznačena u sledećem bloku
  • Poruka o grešci: corrupted size vs. prev_size
  • Proverite takođe da li P->fd->bk == P i P->bk->fw == P
  • Poruka o grešci: corrupted double-linked list
  • Ako blok nije mali, proverite da li P->fd_nextsize->bk_nextsize == P i P->bk_nextsize->fd_nextsize == P
  • Poruka o grešci: corrupted double-linked list (not small)

_int_malloc

Za više informacija pogledajte:

{% content-ref url="malloc-and-sysmalloc.md" %} malloc-and-sysmalloc.md {% endcontent-ref %}

  • Provere tokom pretrage brzih binova:
  • Ako je blok neusaglašen:
  • Poruka o grešci: malloc(): unaligned fastbin chunk detected 2
  • Ako je sledeći blok neusaglašen:
  • Poruka o grešci: malloc(): unaligned fastbin chunk detected
  • Ako vraćeni blok ima veličinu koja nije ispravna zbog svog indeksa u brzom binu:
  • Poruka o grešci: malloc(): memory corruption (fast)
  • Ako je bilo koji blok korišćen za popunjavanje tcache-a neusaglašen:
  • Poruka o grešci: malloc(): unaligned fastbin chunk detected 3
  • Provere tokom pretrage malih binova:
  • Ako victim->bk->fd != victim:
  • Poruka o grešci: malloc(): smallbin double linked list corrupted
  • Provere tokom konsolidacije izvršene za svaki brzi bin blok:
  • Ako je blok neusaglašen pokreni:
  • Poruka o grešci: malloc_consolidate(): unaligned fastbin chunk detected
  • Ako blok ima drugačiju veličinu od one koju bi trebalo zbog indeksa u kojem se nalazi:
  • Poruka o grešci: malloc_consolidate(): invalid chunk size
  • Ako prethodni blok nije u upotrebi i prethodni blok ima veličinu različitu od one naznačene od strane prev_chunk:
  • Poruka o grešci: corrupted size vs. prev_size in fastbins
  • Provere tokom pretrage nesortiranih binova:
  • Ako je veličina bloka čudna (previše mala ili previše velika):
  • Poruka o grešci: malloc(): invalid size (unsorted)
  • Ako je veličina sledećeg bloka čudna (previše mala ili previše velika):
  • Poruka o grešci: malloc(): invalid next size (unsorted)
  • Ako veličina prethodnog naznačena od strane sledećeg bloka se razlikuje od veličine bloka:
  • Poruka o grešci: malloc(): mismatching next->prev_size (unsorted)
  • Ako nije victim->bck->fd == victim ili nije victim->fd == av (arena):
  • Poruka o grešci: malloc(): unsorted double linked list corrupted
  • Pošto uvek proveravamo poslednji, njegov fd bi uvek trebalo da pokazuje na strukturu arene.
  • Ako sledeći blok ne naznačava da je prethodni u upotrebi:
  • Poruka o grešci: malloc(): invalid next->prev_inuse (unsorted)
  • Ako fwd->bk_nextsize->fd_nextsize != fwd:
  • Poruka o grešci: malloc(): largebin double linked list corrupted (nextsize)
  • Ako fwd->bk->fd != fwd:
  • Poruka o grešci: malloc(): largebin double linked list corrupted (bk)
  • Provere tokom pretrage velikih binova (po indeksu):
  • bck->fd-> bk != bck:
  • Poruka o grešci: malloc(): corrupted unsorted chunks
  • Provere tokom pretrage velikih binova (sledeći veći):
  • bck->fd-> bk != bck:
  • Poruka o grešci: malloc(): corrupted unsorted chunks2
  • Provere tokom korišćenja vrhunskog bloka:
  • chunksize(av->top) > av->system_mem:
  • Poruka o grešci: malloc(): corrupted top size

tcache_get_n

  • Provere u tcache_get_n:
  • Ako je blok neusaglašen:
  • Poruka o grešci: malloc(): unaligned tcache chunk detected

tcache_thread_shutdown

  • Provere u tcache_thread_shutdown:
  • Ako je blok neusaglašen:
  • Poruka o grešci: tcache_thread_shutdown(): unaligned tcache chunk detected

__libc_realloc

  • Provere u __libc_realloc:
  • Ako je stari pokazivač neusaglašen ili je veličina bila neispravna:
  • Poruka o grešci: realloc(): invalid pointer

_int_free

Za više informacija pogledajte:

{% content-ref url="free.md" %} free.md {% endcontent-ref %}

  • Provere tokom početka _int_free:
  • Pokazivač je usaglašen:
  • Poruka o grešci: free(): invalid pointer
  • Veličina veća od MINSIZE i takođe usaglašena:
  • Poruka o grešci: free(): invalid size
  • Provere u _int_free tcache-u:
  • Ako ima više unosa od mp_.tcache_count:
  • Poruka o grešci: free(): too many chunks detected in tcache
  • Ako unos nije usaglašen:
  • Poruka o grešci: free(): unaligned chunk detected in tcache 2
  • Ako je oslobođeni blok već bio oslobođen i prisutan kao blok u tcache-u:
  • Poruka o grešci: free(): double free detected in tcache 2
  • Provere u _int_free brzom binu:
  • Ako je veličina bloka neispravna (previše velika ili mala) pokreni:
  • Poruka o grešci: free(): invalid next size (fast)
  • Ako je dodati blok već bio na vrhu brzog bina:
  • Poruka o grešci: double free or corruption (fasttop)
  • Ako veličina bloka na vrhu ima drugačiju veličinu od bloka koji dodajemo:
  • Poruka o grešci: invalid fastbin entry (free)

_int_free_merge_chunk

  • Provere u _int_free_merge_chunk:
  • Ako je chunk vrhunski chunk:
  • Poruka o grešci: double free or corruption (top)
  • Ako je sledeći chunk van granica arene:
  • Poruka o grešci: double free or corruption (out)
  • Ako chunk nije označen kao korišćen (u prev_inuse od sledećeg chunk-a):
  • Poruka o grešci: double free or corruption (!prev)
  • Ako sledeći chunk ima previše malu ili previše veliku veličinu:
  • Poruka o grešci: free(): invalid next size (normal)
  • Ako prethodni chunk nije u upotrebi, pokušaće da konsoliduje. Ali, ako se prev_size razlikuje od veličine navedene u prethodnom chunk-u:
  • Poruka o grešci: corrupted size vs. prev_size while consolidating

_int_free_create_chunk

  • Provere u _int_free_create_chunk:
  • Dodavanje chunk-a u nesortirani bin, provera da li je unsorted_chunks(av)->fd->bk == unsorted_chunks(av):
  • Poruka o grešci: free(): corrupted unsorted chunks

do_check_malloc_state

  • Provere u do_check_malloc_state:
  • Ako je fast bin chunk nepravilno poravnat:
  • Poruka o grešci: do_check_malloc_state(): unaligned fastbin chunk detected

malloc_consolidate

  • Provere u malloc_consolidate:
  • Ako je fast bin chunk nepravilno poravnat:
  • Poruka o grešci: malloc_consolidate(): unaligned fastbin chunk detected
  • Ako je nepravilna veličina fast bin chunk-a:
  • Poruka o grešci: malloc_consolidate(): invalid chunk size

_int_realloc

  • Provere u _int_realloc:
  • Veličina je previše velika ili previše mala:
  • Poruka o grešci: realloc(): invalid old size
  • Veličina sledećeg chunk-a je previše velika ili previše mala:
  • Poruka o grešci: realloc(): invalid next size