hacktricks/binary-exploitation/heap/tcache-bin-attack.md

7.5 KiB

Tcache Bin Napad

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne Informacije

Za više informacija o tome šta je tcache bin, pogledajte ovu stranicu:

{% content-ref url="bins-and-memory-allocations.md" %} bins-and-memory-allocations.md {% endcontent-ref %}

Prvo, napomenimo da je Tcache uveden u glibc verziji 2.26.

Tcache napad predložen na guyinatuxido stranici veoma je sličan napadu na fast bin gde je cilj prepisati pokazivač na sledeći blok u binu unutar oslobođenog bloka na proizvoljnu adresu kako bi kasnije bilo moguće dodeliti tu specifičnu adresu i potencijalno prepisati pokazivače.

Međutim, danas, ako pokrenete pomenuti kod, dobićete grešku: malloc(): unaligned tcache chunk detected. Dakle, potrebno je upisati kao adresu u novi pokazivač poravnanu adresu (ili dovoljno puta izvršiti binarni fajl kako bi upisana adresa zapravo bila poravnata).

Napad na tcache indekse

Obično je moguće naći na početku hipa blok koji sadrži broj blokova po indeksu unutar tcache-a i adresu glavnog bloka svakog indeksa tcache-a. Ako iz nekog razloga bude moguće izmeniti ove informacije, bilo bi moguće naterati glavni blok nekog indeksa da pokazuje na željenu adresu (kao što je malloc hook) kako bi se zatim dodelio blok veličine indeksa i prepisali sadržaji malloc hook-a u ovom slučaju.

Primeri

  • CTF https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html
  • Libc info leak: Moguće je popuniti tcache-ove, dodati blok u nesortiranu listu, isprazniti tcache i ponovo dodeliti blok iz nesortirane liste samo prepisujući prvih 8B, ostavljajući drugu adresu libc-a iz bloka netaknutom tako da je možemo pročitati.
  • Tcache napad: Binarni fajl je ranjiv na 1B prelivanje hipa. Ovo će biti iskorišćeno da se promeni veličina zaglavlja dodeljenog bloka čineći ga većim. Zatim, ovaj blok će biti oslobođen, dodajući ga u tcache blokove lažne veličine. Zatim, dodelićemo blok sa lažnom veličinom, a prethodni blok će biti vraćen znajući da je ovaj blok zapravo bio manji i to pruža mogućnost da se prepise sledeći blok u memoriji.
    Iskoristićemo ovo da prepisujemo pokazivač FD sledećeg bloka da pokazuje na malloc_hook, tako da je moguće alocirati 2 pokazivača: prvo legitimni pokazivač koji smo upravo izmenili, a zatim će druga alokacija vratiti blok u malloc_hook koji je moguće iskoristiti za pisanje one gadget-a.
  • CTF https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html
  • Libc info leak: Postoji upotreba nakon oslobođenja i dvostruko oslobođenje. U ovom writeup-u autor je procurio adresu libc-a čitajući adresu bloka smeštenog u malom binu (kao što je procurio iz nesortiranog bina ali iz malog).
  • Tcache napad: Tcache je izvršen putem dvostrukog oslobođenja. Isti blok je oslobođen dva puta, tako da će unutar Tcache-a blok pokazivati na sebe. Zatim, on se alocira, njegov FD pokazivač se menja da pokazuje na free hook i zatim se ponovo alocira tako da će sledeći blok na listi biti u free hook-u. Zatim, i ovaj je alociran i moguće je upisati adresu system ovde tako da kada se alocira malloc koji sadrži "/bin/sh" dobijemo shell.
  • CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html
  • Glavna ranjivost ovde je mogućnost oslobođenja bilo koje adrese u hipu navođenjem njenog ofseta
  • Napad na tcache indekse: Moguće je alocirati i osloboditi blok određene veličine koji kada se čuva unutar tcache bloka (blok sa informacijama o binovima tcache-a) generisaće adresu sa vrednošću 0x100. Ovo je zato što tcache čuva broj blokova u svakom binu u različitim bajtovima, stoga jedan blok u jednom određenom indeksu generiše vrednost 0x100.
  • Zatim, ova vrednost izgleda kao da postoji blok veličine 0x100. Omogućava zloupotrebu putem oslobođenja ove adrese. Ovo će dodati tu adresu u indeks blokova veličine 0x100 u tcache-u.
  • Zatim, alociranjem bloka veličine 0x100, prethodna adresa će biti vraćena kao blok, omogućavajući prepisivanje drugih tcache indeksa.
    Na primer, postavljanje adrese malloc hook-a u jednom od njih i alokacija bloka veličine tog indeksa omogućiće blok u calloc hook-u, što omogućava pisanje one gadget-a za dobijanje s školjke.
  • CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps1/index.html
  • Istovetna ranjivost kao i prethodno sa jednim dodatnim ograničenjem
  • Napad na tcache indekse: Sličan napad kao prethodni ali sa manje koraka tako što se oslobađa blok koji sadrži informacije o tcache-u tako da se njegova adresa doda u tcache indeks njegove veličine tako da je moguće alocirati tu veličinu i dobiti informacije o tcache bloku kao blok, što omogućava dodavanje free hook-a kao adrese jednog indeksa, alokacija toga, i pisanje one gadget-a na njemu.
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: