Translated ['binary-exploitation/libc-heap/bins-and-memory-allocations.m

This commit is contained in:
Translator 2024-07-17 18:07:25 +00:00
parent e2aba4bb2e
commit 1a4445e1ac
15 changed files with 366 additions and 372 deletions

View file

@ -8,28 +8,28 @@ Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
## Taarifa Msingi
Kwa lengo la kuboresha ufanisi wa jinsi vipande vinavyohifadhiwa, kila kipande sio tu kwenye orodha moja ya viungo, lakini kuna aina kadhaa. Hizi ni vitengo na kuna aina 5 za vitengo: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) vitengo vidogo, 63 vitengo vikubwa, 1 kikasha kisichopangwa, 10 vitengo vya haraka na vitengo 64 vya tcache kwa kila mnyororo.
Ili kuboresha ufanisi wa jinsi vipande vinavyohifadhiwa, kila kipande sio tu kwenye orodha moja ya viungo, bali kuna aina kadhaa. Hizi ni vitengo vya kumbukumbu na kuna aina 5 za vitengo: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) vitengo vidogo, 63 vitengo vikubwa, 1 kisanduku kisichopangwa, vitengo 10 vya haraka na vitengo 64 vya tcache kwa kila mnyororo.
Anwani ya awali ya kila kikasha kisichopangwa, kidogo na kikubwa iko ndani ya safu ile ile. Indeksi 0 haifai, 1 ni kikasha kisichopangwa, vitengo 2-64 ni vitengo vidogo na vitengo 65-127 ni vitengo vikubwa.
Anwani ya awali ya kila kisanduku kisichopangwa, kidogo na kikubwa iko ndani ya safu moja. Indeksi 0 haifai, 1 ni kisanduku kisichopangwa, vitengo 2-64 ni vitengo vidogo na vitengo 65-127 ni vitengo vikubwa.
### Vitengo vya Tcache (Akiba kwa Kila Mnyororo)
Ingawa nyuzi zinajaribu kuwa na rundo lao la kumbukumbu (angalia [Arenas](bins-and-memory-allocations.md#arenas) na [Subheaps](bins-and-memory-allocations.md#subheaps)), kuna uwezekano kwamba mchakato na nyuzi nyingi (kama seva ya wavuti) **itamaliza kushiriki rundo la kumbukumbu na nyuzi nyingine**. Katika kesi hii, suluhisho kuu ni matumizi ya **lockers**, ambayo yanaweza **kupunguza kwa kiasi kikubwa kasi ya nyuzi**.
Ingawa nyuzi zinajaribu kuwa na kumbukumbu yao wenyewe (angalia [Arenas](bins-and-memory-allocations.md#arenas) na [Subheaps](bins-and-memory-allocations.md#subheaps)), kuna uwezekano kwamba mchakato na nyuzi nyingi (kama seva ya wavuti) **itamaliza kushiriki kumbukumbu na nyuzi nyingine**. Katika kesi hii, suluhisho kuu ni matumizi ya **lockers**, ambayo yanaweza **kupunguza kwa kiasi kikubwa kasi ya nyuzi**.
Kwa hivyo, tcache inafanana na kikasha cha haraka kwa kila nyuzi kwa njia kwamba ni **orodha moja ya viungo** ambayo haifungi vipande. Kila nyuzi ina **vitengo 64 vya tcache vilivyounganishwa kwa mnyororo mmoja**. Kila kikasha kinaweza kuwa na kiwango cha juu cha [vipande vya saizi sawa 7](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) kuanzia [24 hadi 1032B kwenye mifumo ya 64-bit na 12 hadi 516B kwenye mifumo ya 32-bit](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315).
Kwa hivyo, tcache inafanana na kisanduku cha haraka kwa kila nyuzi kwa njia kwamba ni **orodha moja ya viungo** ambayo haifungi vipande. Kila nyuzi ina **vitengo 64 vya tcache vilivyounganishwa kwa viungo**. Kila kisanduku kinaweza kuwa na kiwango cha juu cha [vipande sawa 7 vya saizi hiyo hiyo](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) kuanzia [24 hadi 1032B kwenye mifumo ya 64-bit na 12 hadi 516B kwenye mifumo ya 32-bit](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315).
**Wakati nyuzi inaachilia** kipande, **ikiwa sio kikubwa sana** kuweza kupangwa kwenye tcache na kikasha cha tcache **hakijajaa** (tayari kuna vipande 7), **kitapangwa hapo**. Ikiwa hakiwezi kwenda kwenye tcache, italazimika kusubiri kwa ajili ya kufungua rundo ili kuweza kufanya operesheni ya kuachilia kwa jumla.
**Wakati nyuzi inaachilia** kipande, **ikiwa sio kikubwa sana** kuweza kupangwa kwenye tcache na tcache husika **haiko kamili** (tayari kuna vipande 7), **itapangwa hapo**. Ikiwa haitaweza kwenda kwenye tcache, italazimika kusubiri kwa ajili ya kufungua kumbukumbu ili kuweza kufanya operesheni ya kufuta kwa ujumla.
Wakati **kipande kinapopangwa**, ikiwa kuna kipande cha bure cha saizi inayohitajika kwenye **Tcache itakitumia**, la sivyo, italazimika kusubiri kufungua rundo ili kuweza kupata moja kwenye vitengo vya jumla au kuunda mpya.\
Pia kuna uboreshaji, katika kesi hii, wakati wa kufunga rundo, nyuzi **itajaza Tcache yake na vipande vya rundo (7) vya kumbukumbu ya kumbukumbu inayohitajika**, hivyo ikihitaji zaidi, itavipata kwenye Tcache.
Wakati **kipande kinapopangwa**, ikiwa kuna kipande cha bure cha saizi inayohitajika kwenye **Tcache itakitumia**, la sivyo, italazimika kusubiri kufungua kumbukumbu ili kuweza kupata moja kwenye vitengo vya kumbukumbu vya jumla au kuunda kipya.\
Kuna pia upimaji, katika kesi hii, wakati wa kufungua kumbukumbu, nyuzi **itajaza Tcache yake na vipande vya kumbukumbu (7) vya kumbukumbu inayohitajika**, hivyo ikihitaji zaidi, itavipata kwenye Tcache.
<details>
@ -48,7 +48,7 @@ free(chunk);
return 0;
}
```
Fanya kompile na uisashe na kivunjo katika opcode ya ret kutoka kwenye kazi ya msingi. kisha kwa gef unaweza kuona tcache bin inayotumiwa:
Fanya kompile na uishe na kosa katika opcode ya ret kutoka kwa kazi kuu. Kisha kwa gef unaweza kuona tcache bin inayotumiwa:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -58,7 +58,7 @@ Tcachebins[idx=0, size=0x20, count=1] ← Chunk(addr=0xaaaaaaac12a0, size=0x20,
#### Tcache Miundo na Kazi
Katika msimbo ufuatao inawezekana kuona **max bins** na **vipande kwa kila index**, miundo ya **`tcache_entry`** iliyoanzishwa ili kuepuka kufuta mara mbili na **`tcache_perthread_struct`**, miundo ambayo kila mnyororo hutumia kuhifadhi anwani ya kila index ya bakuli.
Katika msimbo ufuatao inawezekana kuona **max bins** na **vipande kwa kila indeksi**, miundo ya **`tcache_entry`** iliyoanzishwa ili kuepuka kufuta mara mbili na **`tcache_perthread_struct`**, miundo ambayo kila mnyororo hutumia kuhifadhi anwani za kila indeksi ya bakuli.
<details>
@ -157,23 +157,23 @@ memset (tcache, 0, sizeof (tcache_perthread_struct));
#### Viashiria vya Tcache
Tcache ina viashiria kadhaa kulingana na ukubwa na viashiria vya awali kwa **kila kipande cha kwanza cha kila kiashiria na idadi ya vipande kwa kila kiashiria vimehifadhiwa ndani ya kipande**. Hii inamaanisha kwamba kwa kutambua kipande chenye habari hii (kawaida cha kwanza), ni rahisi kupata viashiria vya awali vya tcache na idadi ya vipande vya Tcache.
Tcache ina viashiria kadhaa kulingana na ukubwa na viashiria vya awali kwa **kila kipande cha kwanza cha kila kiashiria na idadi ya vipande kwa kila kiashiria vimehifadhiwa ndani ya kipande**. Hii inamaanisha kwamba kwa kutambua kipande chenye habari hii (kawaida cha kwanza), ni rahisi kupata viashiria vyote vya tcache na idadi ya vipande vya Tcache.
### Bins za Haraka
Bins za haraka zimeundwa ili **kuongeza kasi ya kutengwa kwa kumbukumbu kwa vipande vidogo** kwa kuweka vipande vilivyotolewa hivi karibuni katika muundo wa kupata haraka. Bins hizi hutumia njia ya Mwisho-Kuingia-Kwanza, Mwisho-Kutoka (LIFO), ambayo inamaanisha kwamba **kipande kilichotolewa hivi karibuni zaidi ndicho kwanza** kutumika tena wakati kuna ombi jipya la kutengwa. Tabia hii ni faida kwa kasi, kwani ni haraka kuweka na kuondoa kutoka juu ya rundo (LIFO) ikilinganishwa na foleni (FIFO).
Bins za haraka zimeundwa ili **kuongeza kasi ya kutengwa kwa kumbukumbu kwa vipande vidogo** kwa kuweka vipande vilivyotolewa hivi karibuni katika muundo wa kupata haraka. Bins hizi hutumia njia ya Mwisho-Kuingia-Kwanza (LIFO), ambayo inamaanisha kwamba **kipande kilichotolewa hivi karibuni zaidi ndicho kwanza** kutumika tena wakati kuna ombi jipya la kutengwa. Tabia hii ni nzuri kwa kasi, kwani ni haraka kuweka na kuondoa kutoka juu ya rundo (LIFO) ikilinganishwa na foleni (FIFO).
Kwa kuongezea, **bins za haraka hutumia orodha za viungo moja**, sio mbili, ambayo inaboresha kasi zaidi. Kwa kuwa vipande katika bins za haraka havijunganishwi na majirani, hakuna haja ya muundo tata unaoruhusu kuondolewa katikati. Orodha ya viungo moja ni rahisi na haraka kwa shughuli hizi.
Kwa kuongezea, **bins za haraka hutumia orodha za viungo vya moja kwa moja**, si za mara mbili, ambayo inaboresha kasi zaidi. Kwa kuwa vipande katika bins za haraka havijunganishwi na majirani, hakuna haja ya muundo tata unaoruhusu kuondolewa katikati. Orodha ya viungo vya moja kwa moja ni rahisi na haraka kwa operesheni hizi.
Kimsingi, kinachotokea hapa ni kwamba kichwa (kiashiria cha kipande cha kwanza cha kuangalia) kila wakati kinaelekeza kwenye kipande kilichotolewa hivi karibuni zaidi cha ukubwa huo. Kwa hivyo:
Kimsingi, kinachotokea hapa ni kwamba kichwa (kiashiria cha kipande cha kwanza cha kuangalia) kila wakati kinawalenga kipande kilichotolewa hivi karibuni zaidi cha ukubwa huo. Kwa hivyo:
- Wakati kipande kipya kinatengwa cha ukubwa huo, kichwa kinatazama kipande huru cha kutumia. Kwa kuwa kipande hiki huru kinatazama kipande kinachofuata cha kutumia, anwani hii inahifadhiwa kwenye kichwa ili kutambua wapi kupata kipande kinachopatikana baadaye
- Wakati kipande kinapotolewa, kipande huru kitahifadhi anwani ya kipande kinachopatikana kwa sasa na anwani ya kipande hiki kilichotolewa hivi karibuni itawekwa kwenye kichwa
- Wakati kipande kipya kinatengwa cha ukubwa huo, kichwa kinawalenga kipande cha bure cha kutumia. Kwa kuwa kipande hiki cha bure kinawalenga kile kinachofuata kutumika, anwani hii imehifadhiwa kwenye kichwa ili kutambua wapi kupata kipande kinachopatikana
- Wakati kipande kinapotolewa, kipande cha bure kitahifadhi anwani ya kipande kinachopatikana kwa sasa na anwani ya kipande hiki kilichotolewa hivi karibuni itawekwa kwenye kichwa
Ukubwa wa juu wa orodha iliyounganishwa ni `0x80` na zimepangwa ili kipande cha ukubwa wa `0x20-0x2f` kiwe kwenye kiashiria `0`, kipande cha ukubwa wa `0x30-0x3f` kingekuwa kwenye `idx` `1`...
Ukubwa wa juu wa orodha ya viungo ni `0x80` na zimepangwa ili kipande cha ukubwa wa `0x20` kiwe katika kiashiria `0`, kipande cha ukubwa wa `0x30` kingekuwa katika kiashiria `1`...
{% hint style="danger" %}
Vipande katika bins za haraka havijawekwa kama vinavyopatikana kwa hivyo vinabaki kama vipande vya bins za haraka kwa muda fulani badala ya kuweza kuunganishwa na vipande vingine huru vinavyowazunguka.
Vipande katika bins za haraka havijawekwa kama vinavyopatikana kwa hivyo vinabaki kama vipande vya bins za haraka kwa muda fulani badala ya kuweza kuunganishwa na vipande vingine vya bure vinavyowazunguka.
{% endhint %}
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711
@ -210,7 +210,7 @@ typedef struct malloc_chunk *mfastbinptr;
```
<details>
<summary>Ongeza mfano wa kipande cha fastbin</summary>
<summary>Wekeza mfano wa kipande cha fastbin</summary>
```c
#include <stdlib.h>
#include <stdio.h>
@ -238,9 +238,9 @@ free(chunks[i]);
return 0;
}
```
Tazama jinsi tunavyoomba na kuachilia vipande 8 vya saizi sawa ili kujaza tcache na cha nane kuhifadhiwa kwenye kisanduku cha haraka.
Tambua jinsi tunavyo allocate na free vipande 8 vya saizi ile ile ili wajaze tcache na cha nane kuhifadhiwa kwenye kipande cha haraka.
Ikusanye na uisahihishe na kizuizi katika opcode ya ret kutoka kwenye kazi kuu. kisha kwa gef unaweza kuona tcache bin kujaa na kipande kimoja kwenye kisanduku cha haraka:
Sakinisha na uisashe na kivurugaji kwenye opcode ya `ret` kutoka kwenye kazi ya `main`. Kisha kwa kutumia `gef` unaweza kuona kuwa tcache bin imejaa na kipande kimoja kipo kwenye kikundi cha haraka:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -253,16 +253,16 @@ Fastbins[idx=1, size=0x30] 0x00
### Bakuli lisilo na mpangilio
Bakuli lisilo na mpangilio ni **cache** inayotumiwa na meneja wa bakuli kufanya mgawanyo wa kumbukumbu uwe wa haraka zaidi. Hapa ndivyo inavyofanya kazi: Wakati programu inaachilia kipande, na ikiwa kipande hiki hakiwezi kupewa katika tcache au bakuli la haraka na haligongani na kipande cha juu, meneja wa bakuli hauweki mara moja katika bakuli maalum la kipande kidogo au kikubwa. Badala yake, kwanza inajaribu **kulifunga na vipande vingine vya bure vya jirani** ili kuunda kibodi kikubwa cha kumbukumbu ya bure. Kisha, inaweka kipande kipya hiki katika bakuli la jumla linaloitwa "bakuli lisilo na mpangilio."
Bakuli lisilo na mpangilio ni **cache** inayotumiwa na meneja wa bakuli kufanya mgawanyo wa kumbukumbu uwe haraka zaidi. Hapa ndivyo inavyofanya kazi: Wakati programu inafuta kipande, na ikiwa kipande hiki hakiwezi kutengwa katika tcache au bakuli la haraka na haligongani na kipande cha juu, meneja wa bakuli haitaweka mara moja katika bakuli maalum la kipande kidogo au kikubwa. Badala yake, kwanza inajaribu **kulifunga na vipande vingine vya bure vya jirani** ili kuunda kibodi kikubwa cha kumbukumbu isiyo na malipo. Kisha, inaweka kipande kipya hiki katika bakuli la jumla linaloitwa "bakuli lisilo na mpangilio."
Wakati programu **inahitaji kumbukumbu**, meneja wa bakuli **huchunguza bakuli lisilo na mpangilio** kuona ikiwa kuna kipande cha ukubwa wa kutosha. Ikiipata, inaitumia mara moja. Ikiwa haitapata kipande kinachofaa katika bakuli lisilo na mpangilio, inahamisha vipande vyote katika orodha hii kwenye bakuli zao husika, iwe ndogo au kubwa, kulingana na ukubwa wao.
Tafadhali kumbuka kwamba ikiwa kipande kikubwa kimegawanywa katika sehemu 2 na sehemu iliyobaki ni kubwa kuliko MINSIZE, itarudishwa kwenye bakuli lisilo na mpangilio.&#x20;
Tafadhali kumbuka kwamba ikiwa kipande kikubwa kimegawanywa katika sehemu 2 na sehemu iliyobaki ni kubwa kuliko MINSIZE, itarudishwa tena kwenye bakuli lisilo na mpangilio.
Kwa hivyo, bakuli lisilo na mpangilio ni njia ya kuharakisha mgawanyo wa kumbukumbu kwa haraka kwa kutumia tena kumbukumbu iliyotolewa hivi karibuni na kupunguza haja ya kutafuta na kufunga kwa muda mrefu.
Kwa hivyo, bakuli lisilo na mpangilio ni njia ya kuharakisha mgawanyo wa kumbukumbu kwa haraka kutumia tena kumbukumbu iliyofutwa hivi karibuni na kupunguza haja ya kutafuta na kufunga kwa muda mrefu.
{% hint style="danger" %}
Tafadhali kumbuka kwamba hata ikiwa vipande ni vya makundi tofauti, ikiwa kipande kinachopatikana kinagongana na kipande kingine kinachopatikana (hata ikiwa awali zilikuwa katika bakuli tofauti), vitafungwa pamoja.
Tafadhali kumbuka kwamba hata ikiwa vipande ni vya makundi tofauti, ikiwa kipande kinachopatikana kinagongana na kipande kingine kinachopatikana (hata kama kwa asili wanatoka kwenye bakuli tofauti), vitafungwa pamoja.
{% endhint %}
<details>
@ -295,9 +295,9 @@ free(chunks[i]);
return 0;
}
```
Tambua jinsi tunavyo alokeisha na kuachilia vipande 9 vya saizi sawa ili vijaze **tcache** na cha nane kuhifadhiwa kwenye sanduku lisiloandikwa kwa sababu ni **kubwa sana kwa fastbin** na cha tisa hakijaachiliwa hivyo cha tisa na cha nane **havitaunganishwa na kipande cha juu**.
Tazama jinsi tunavyoomba na kuachilia vipande 9 vya saizi ileile ili vijaze tcache na cha nane kuhifadhiwa kwenye unsorted bin kwa sababu ni kubwa mno kwa fastbin na cha tisa hakijaachiliwa hivyo cha tisa na cha nane havijunganishwa na kipande cha juu.
Sakinisha na ukague kwa kubreakpoint katika opcode ya ret kutoka kwenye kazi kuu. kisha kwa gef unaweza kuona tcache bin kujaa na kipande kimoja kwenye sanduku lisiloandikwa:
Sakinisha na ukague kwa kuvunja kwenye opcode ya `ret` kutoka kwenye kazi ya `main`. Kisha kwa kutumia `gef` unaweza kuona kuwa tcache bin imejaa na kipande kimoja kipo kwenye unsorted bin:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -317,13 +317,13 @@ Fastbins[idx=6, size=0x80] 0x00
```
</details>
### Bins Ndogo
### Vifungu Vidogo
Bins ndogo ni haraka kuliko bins kubwa lakini polepole kuliko fast bins.
Vifungu vidogo ni haraka kuliko vifungu vikubwa lakini polepole kuliko vifungu vya haraka.
Kila bin kati ya 62 itakuwa na **vipande vya saizi sawa**: 16, 24, ... (na saizi ya juu ya byte 504 katika bits 32 na 1024 katika bits 64). Hii husaidia katika kasi ya kupata bin ambapo nafasi inapaswa kutengwa na kuingiza na kuondoa vipande kwenye orodha hizi.
Kila kifungu kati ya 62 kitakuwa na **vipande vya saizi ile ile**: 16, 24, ... (na saizi kubwa ya 504 baiti katika bits 32 na 1024 katika bits 64). Hii husaidia katika kasi ya kupata kifungu ambapo nafasi inapaswa kutengwa na kuingiza na kuondoa vipande kwenye orodha hizi.
Hivi ndivyo saizi ya bin ndogo inavyohesabiwa kulingana na index ya bin:
Hivi ndivyo saizi ya kifungu kidogo inavyohesabiwa kulingana na index ya kifungu:
* Saizi ndogo zaidi: 2\*4\*index (k.m. index 5 -> 40)
* Saizi kubwa zaidi: 2\*8\*index (k.m. index 5 -> 80)
@ -345,11 +345,7 @@ Hivi ndivyo saizi ya bin ndogo inavyohesabiwa kulingana na index ya bin:
void *malloc(size_t size);
```
### Swahili Translation:
```c
Kazi ya kuchagua kati ya makandarasi madogo na makubwa:
```
Hii ni kazi ya kuchagua kati ya bakuli ndogo na kubwa:
```c
#define bin_index(sz) \
((in_smallbin_range (sz)) ? smallbin_index (sz) : largebin_index (sz))
@ -386,9 +382,9 @@ chunks[9] = malloc(0x110);
return 0;
}
```
Tambua jinsi tunavyoomba na kuachilia vipande 9 vya saizi ile ile ili vijaze **tcache** na cha nane kuhifadhiwa kwenye sanduku lisilo na mpangilio kwa sababu ni **kubwa sana kwa fastbin** na cha tisa hakijaachiliwa hivyo cha tisa na cha nane **havichanganywi na kipande cha juu**. Kisha tunaomba kipande kikubwa cha 0x110 ambacho kinasababisha **kipande katika sanduku lisilo na mpangilio kuingia kwenye sanduku dogo**.
Tambua jinsi tunavyo tenganisha na kuachilia vipande 9 vya saizi ile ile ili vijaze tcache na cha nane kuhifadhiwa kwenye unsorted bin kwa sababu ni kubwa mno kwa fastbin na cha tisa hakijatolewa hivyo cha tisa na cha nane havitengwi na kipande cha juu. Kisha tunatenga kipande kikubwa cha 0x110 ambacho kinasababisha kipande kilichoko kwenye unsorted bin kuingia kwenye small bin.
Sakinisha na ukague kwa kusitisha kwenye kificho cha kurudi kutoka kwenye kazi kuu. Kisha kwa gef unaweza kuona tcache inajazwa na kipande kimoja kwenye sanduku dogo:
Sakinisha na ukague kwa kusitisha kwenye `ret` opcode kutoka kwenye kazi ya `main`. Kisha kwa kutumia `gef` unaweza kuona kuwa tcache bin imejaa na kipande kimoja kipo kwenye small bin:
```bash
gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -412,17 +408,17 @@ Fastbins[idx=6, size=0x80] 0x00
### Bins kubwa
Tofauti na bins ndogo, ambazo hushughulikia vipande vya saizi iliyowekwa, kila **bin kubwa hushughulikia safu ya saizi za vipande**. Hii ni ya kubadilika zaidi, kuruhusu mfumo kuzoea **saizi tofauti** bila haja ya bin tofauti kwa kila saizi.
Tofauti na bins ndogo, ambazo hushughulikia vipande vya saizi iliyowekwa, kila **bin kubwa hushughulikia safu ya saizi za vipande**. Hii ni ya kubadilika zaidi, ikiruhusu mfumo kuzoea **saizi tofauti** bila kuhitaji bin tofauti kwa kila saizi.
Katika mpangilio wa kumbukumbu, bins kubwa huanza pale ambapo bins ndogo zinaishia. Safu za bins kubwa hukua kwa ukubwa kwa mfululizo, maana bin ya kwanza inaweza kufunika vipande kutoka 512 hadi 576 baiti, wakati inayofuata inafunika 576 hadi 640 baiti. Mtindo huu unaendelea, na bin kubwa zaidi ina vipande vyote zaidi ya 1MB.
Katika mpangilio wa kumbukumbu, bins kubwa huanza pale ambapo bins ndogo zinaishia. Safu za bins kubwa hukua kwa ukubwa kwa mfululizo, maana bin ya kwanza inaweza kufunika vipande kutoka 512 hadi 576 baiti, wakati inayofuata inafunika 576 hadi 640 baiti. Mtindo huu unaendelea, na bin kubwa zaidi ikijumuisha vipande vyote zaidi ya 1MB.
Bins kubwa ni polepole kufanya kazi ikilinganishwa na bins ndogo kwa sababu lazima **zipange na kutafuta kupitia orodha ya saizi tofauti za vipande ili kupata saizi bora** kwa mgawo. Wakati kipande kinawekwa kwenye bin kubwa, lazima kipangwe, na wakati kumbukumbu inagawiwa, mfumo lazima upate kipande sahihi. Kazi hii ziada inawafanya kuwa **polepole**, lakini kwa kuwa mgawo wa kubwa ni nadra kuliko vipande vidogo, ni sawa kufanya hivyo.
Bins kubwa ni polepole kufanya kazi ikilinganishwa na bins ndogo kwa sababu wanapaswa **kupanga na kutafuta kupitia orodha ya saizi tofauti za vipande ili kupata saizi bora** kwa mgawo. Wakati kipande kinawekwa kwenye bin kubwa, lazima kipangwe, na wakati kumbukumbu inagawiwa, mfumo lazima upate kipande sahihi. Kazi hii ya ziada inawafanya kuwa **polepole**, lakini kwa kuwa mgawo wa kubwa ni nadra kuliko vipande vidogo, ni sawa kufanya hivyo.
Kuna:
* Bins 32 za safu ya 64B (zinagongana na bins ndogo)
* Bins 16 za safu ya 512B (zinagongana na bins ndogo)
* Bins 8 za safu ya 4096B (sehemu inagongana na bins ndogo)
* Bins 32 za safu ya 64B (zinaingiliana na bins ndogo)
* Bins 16 za safu ya 512B (zinaingiliana na bins ndogo)
* Bins 8 za safu ya 4096B (sehemu inaingiliana na bins ndogo)
* Bins 4 za safu ya 32768B
* Bins 2 za safu ya 262144B
* Bin 1 kwa saizi zilizosalia
@ -486,9 +482,9 @@ chunks[0] = malloc(0x2000);
return 0;
}
```
2 alokesheni kubwa zinafanywa, kisha moja inaachiliwa (ikiwekwa kwenye sanduku lisilo na mpangilio) na alokesheni kubwa zaidi inafanywa (ikihamisha ile iliyofunguliwa kutoka kwenye sanduku lisilo na mpangilio kwenda kwenye sanduku kubwa).
2 alokesheni kubwa zinafanywa, kisha moja inaachiliwa (ikiwekwa kwenye sanduku lisilo na mpangilio) na alokesheni kubwa zaidi inafanywa (ikihamisha ile iliyotolewa kutoka kwenye sanduku lisilo na mpangilio kwenda kwenye sanduku kubwa).
Sakinisha na uisashe na kivamizi kwenye opcode ya kurudi kutoka kwenye kazi kuu. kisha kwa gef unaweza kuona sanduku la tcache likijazwa na kipande kimoja kwenye sanduku kubwa:
Sakinisha na ukague kosa kwa kuweka kizuizi katika opcode ya `ret` kutoka kwenye kazi ya `kuu`. kisha kwa `gef` unaweza kuona kuwa sanduku la tcache limejaa na kipande kimoja kipo kwenye sanduku kubwa:
```bash
gef➤ heap bin
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -537,9 +533,9 @@ the 2 preceding words to be zero during this interval as well.)
/* Conveniently, the unsorted bin can be used as dummy top on first call */
#define initial_top(M) (unsorted_chunks (M))
```
Kimsingi, hii ni kipande kinachojumuisha kipande cha heap kinachopatikana kwa sasa. Wakati malloc inafanywa, ikiwa hakuna kipande cha bure kinachopatikana kutumika, kipande hiki cha juu kitapunguza ukubwa wake kutoa nafasi inayohitajika. Pointer kwa Kipande cha Juu hufungwa katika muundo wa `malloc_state`.
Kimsingi, hii ni kipande kinachojumuisha kipande chote cha heap kinachopatikana kwa sasa. Wakati malloc inafanywa, ikiwa hakuna kipande cha bure kinachopatikana kutumika, kipande hiki cha juu kitapunguza ukubwa wake kutoa nafasi inayohitajika. Pointer kwa Kipande cha Juu kuhifadhiwa katika muundo wa `malloc_state`.
Zaidi ya hayo, mwanzoni, ni sawa kutumia kipande kilichochanganyikiwa kama kipande cha juu.
Zaidi ya hayo, mwanzoni, ni pamoja kutumia kipande kilichochanganyika kama kipande cha juu.
<details>
@ -557,7 +553,7 @@ gets(chunk);
return 0;
}
```
Baada ya kuikusanya na kuibugia na kipengee cha kuvunja katika opcode ya ret ya main niliona kwamba malloc ilirudisha anwani: `0xaaaaaaac12a0` na hizi ni vipande:
Baada ya kuiandaa na kuisahihisha na kivunjo katika opcode ya `ret` ya `main` niliona kwamba malloc ilirudisha anwani `0xaaaaaaac12a0` na hizi ni vipande:
```bash
gef➤ heap chunks
Chunk(addr=0xaaaaaaac1010, size=0x290, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA)
@ -570,8 +566,8 @@ Chunk(addr=0xaaaaaaac16d0, size=0x410, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_
[0x0000aaaaaaac16d0 41 41 41 41 41 41 41 0a 00 00 00 00 00 00 00 00 AAAAAAA.........]
Chunk(addr=0xaaaaaaac1ae0, size=0x20530, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA) ← top chunk
```
Mahali ambapo inaweza kuonekana kuwa kipande cha juu kiko kwenye anwani `0xaaaaaaac1ae0`. Hii si mshangao kwa sababu kipande kilichotengwa hivi karibuni kilikuwa kwenye `0xaaaaaaac12a0` na ukubwa wa `0x410` na `0xaaaaaaac12a0 + 0x410 = 0xaaaaaaac1ae0`.\
Pia ni sawa kuona urefu wa kipande cha Juu kwenye kichwa chake cha kipande:
Mahali ambapo inaweza kuonekana kuwa kipande cha juu kiko kwenye anwani `0xaaaaaaac1ae0`. Hii si mshangao kwa sababu kipande kilichotengwa mwisho kilikuwa kwenye `0xaaaaaaac12a0` na ukubwa wa `0x410` na `0xaaaaaaac12a0 + 0x410 = 0xaaaaaaac1ae0`.\
Pia ni rahisi kuona urefu wa Kipande cha Juu kwenye kichwa chake cha kipande:
```bash
gef➤ x/8wx 0xaaaaaaac1ae0 - 16
0xaaaaaaac1ad0: 0x00000000 0x00000000 0x00020531 0x00000000
@ -579,11 +575,11 @@ gef➤ x/8wx 0xaaaaaaac1ae0 - 16
```
</details>
### Kumbusho la mwisho
### Kukaa na Kukaa Mwisho
Wakati malloc inapotumiwa na kipande kinagawanywa (kutoka kwenye orodha isiyofungwa au kutoka kwa kipande cha juu kwa mfano), kipande kilichoundwa kutoka kwa sehemu iliyobaki ya kipande kilichogawanywa huitwa Kumbusho la Mwisho na pointer yake hifadhiwa katika muundo wa `malloc_state`.
Wakati malloc inapotumiwa na kipande kinagawanywa (kutoka kwa sanduku lisilo na mpangilio au kutoka kwa kipande cha juu kwa mfano), kipande kilichoundwa kutoka kwa sehemu iliyobaki ya kipande kilichogawanywa huitwa Kukaa Mwisho na pointer yake hifadhiwa katika muundo wa `malloc_state`.
## Mchakato wa Kutengeneza
## Mzunguko wa Kutengwa
Angalia:
@ -591,7 +587,7 @@ Angalia:
[malloc-and-sysmalloc.md](heap-memory-functions/malloc-and-sysmalloc.md)
{% endcontent-ref %}
## Mchakato wa Kuachilia
## Mzunguko wa Kuachiliwa
Angalia:
@ -599,9 +595,9 @@ Angalia:
[free.md](heap-memory-functions/free.md)
{% endcontent-ref %}
## Uchunguzi wa Usalama wa Kazi za Heap
## Uchunguzi wa Usalama wa Kazi za Sanduku
Angalia ukaguzi wa usalama uliofanywa na kazi zinazotumiwa sana kwenye heap katika:
Angalia uchunguzi wa usalama uliofanywa na kazi zinazotumiwa sana katika sanduku katika:
{% content-ref url="heap-memory-functions/heap-functions-security-checks.md" %}
[heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md)
@ -620,8 +616,8 @@ Angalia ukaguzi wa usalama uliofanywa na kazi zinazotumiwa sana kwenye heap kati
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**swagi rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 **kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au **kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.

View file

@ -8,7 +8,7 @@ Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
@ -16,9 +16,9 @@ Njia nyingine za kusaidia HackTricks:
## Taarifa Msingi
Ikiwa unafungua kibeti cha kumbukumbu mara zaidi ya mara moja, inaweza kuharibu data ya mpangishaji na kufungua mlango kwa mashambulizi. Hapa ndivyo inavyotokea: unapofungua kibeti cha kumbukumbu, kinarudi kwenye orodha ya vipande vya bure (k.m. "fastbin"). Ikiwa unafungua kibeti kile kile mara mbili mfululizo, mpangishaji anagundua hili na kutupa kosa. Lakini ikiwa **unafungua kibeti kingine kati yake, ukaguzi wa kufungua mara mbili unapuuzwa**, kusababisha uharibifu.
Ikiwa unafungua kibodi cha kumbukumbu mara zaidi ya mara moja, inaweza kuharibu data ya mpangishaji na kufungua mlango kwa mashambulizi. Hapa ndio jinsi inavyotokea: unapofungua kibodi cha kumbukumbu, inarudi kwenye orodha ya vitengo vya bure (k.m. "fast bin"). Ikiwa unafungua kibodi hiyo mara mbili mfululizo, mpangishaji anagundua hili na kutupa kosa. Lakini ikiwa **unafungua kibodi nyingine kati yake, ukaguzi wa kufungua mara mbili unapuuzwa**, kusababisha uharibifu.
Sasa, unapoomba kumbukumbu mpya (ukitumia `malloc`), mpangishaji anaweza kukupa **kibeti ambacho kimefunguliwa mara mbili**. Hii inaweza kusababisha pointa mbili tofauti zinazoashiria eneo moja la kumbukumbu. Ikiwa mshambuliaji anadhibiti pointa moja kati ya hizo, wanaweza kubadilisha maudhui ya kumbukumbu hiyo, ambayo inaweza kusababisha masuala ya usalama au hata kuwaruhusu kutekeleza nambari.
Sasa, unapoomba kumbukumbu mpya (ukitumia `malloc`), mpangishaji anaweza kukupa **kibodi ambacho kimefunguliwa mara mbili**. Hii inaweza kusababisha pointa mbili tofauti zinazoashiria eneo moja la kumbukumbu. Ikiwa mshambuliaji anadhibiti pointa moja kati ya hizo, wanaweza kubadilisha maudhui ya kumbukumbu hiyo, ambayo inaweza kusababisha masuala ya usalama au hata kuwaruhusu kutekeleza nambari.
Mfano:
```c
@ -92,9 +92,9 @@ printf("i2: %p\n", (void *)i1);
return 0;
}
```
Katika mfano huu, baada ya kujaza tcache na vipande kadhaa vilivyofutwa, **msimbo unafuta kipande `h`, kisha kipande `i`, na kisha `h` tena, kusababisha kosa la double-free**. Hii inafungua uwezekano wa kupokea anwani za kumbukumbu zinazopishana wakati wa kurekebisha upya, maana pointers mbili au zaidi zinaweza kuelekeza kwenye eneo moja la kumbukumbu. Kudhibiti data kupitia pointer moja kunaweza kuathiri nyingine, ikiumba hatari kubwa ya usalama na uwezekano wa kutumia.
Katika mfano huu, baada ya kujaza tcache na vipande kadhaa vilivyofutwa (7), **msimbo huru wa kipande 'h', kisha kipande 'i', na kisha 'h' tena, kusababisha uhuru mara mbili** (inayojulikana pia kama Fast Bin dup). Hii inafungua uwezekano wa kupokea anwani za kumbukumbu zinazopishana wakati wa kutekeleza upya, maana pointers mbili au zaidi zinaweza kuelekeza kwenye eneo moja la kumbukumbu. Kudhibiti data kupitia pointer moja kunaweza kuathiri nyingine, ikiumba hatari kubwa ya usalama na uwezekano wa kutumia.
Ukiitekeleza, angalia jinsi **`i1` na `i2` zilipata anwani ile ile**:
Kuikimbia, angalia jinsi **`i1` na `i2` zilipata anwani ile ile**:
<pre><code>Uwekaji wa awali:
a: 0xaaab0f0c22a0
@ -106,7 +106,7 @@ f: 0xaaab0f0c2340
g: 0xaaab0f0c2360
h: 0xaaab0f0c2380
i: 0xaaab0f0c23a0
Baada ya kurekebisha upya:
Baada ya upya:
a1: 0xaaab0f0c2360
b1: 0xaaab0f0c2340
c1: 0xaaab0f0c2320
@ -119,20 +119,36 @@ h1: 0xaaab0f0c2380
</strong><strong>i2: 0xaaab0f0c23a0
</strong></code></pre>
## Mifano
* [**Dragon Army. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/dragon-army/)
* Tunaweza tu kutenga vipande vya saizi ya Fast-Bin isipokuwa saizi `0x70`, ambayo inazuia kubadilisha kawaida ya `__malloc_hook`.
* Badala yake, tunatumia anwani za PIE ambazo huanza na `0x56` kama lengo la Fast Bin dup (nafasi ya 1/2).
* Mahali moja ambapo anwani za PIE zimehifadhiwa ni katika `main_arena`, ambayo iko ndani ya Glibc na karibu na `__malloc_hook`
* Tunalenga offset maalum ya `main_arena` kutenga kipande hapo na kuendelea kutenga vipande hadi kufikia `__malloc_hook` ili kupata utekelezaji wa msimbo.
* [**zero_to_hero. PicoCTF**](https://7rocky.github.io/en/ctf/picoctf/binary-exploitation/zero_to_hero/)
* Kwa kutumia Tcache bins na kujaza kwa null-byte, tunaweza kufikia hali ya uhuru mara mbili:
* Tunatenga vipande vitatu vya saizi `0x110` (`A`, `B`, `C`)
* Tunafuta `B`
* Tunafuta `A` na kutenga tena kutumia kujaza kwa null-byte
* Sasa saizi ya `B` ni `0x100`, badala ya `0x111`, hivyo tunaweza kufuta tena
* Tunayo Tcache-bin moja ya saizi `0x110` na moja ya saizi `0x100` ambazo zinaelekeza kwenye anwani ile ile. Hivyo tuna uhuru mara mbili.
* Tunatumia uhuru mara mbili kwa kutumia [Tcache poisoning](tcache-bin-attack.md)
## Marejeo
* [https://heap-exploitation.dhavalkapil.com/attacks/double\_free](https://heap-exploitation.dhavalkapil.com/attacks/double\_free)
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kuvamia AWS kutoka mwanzo hadi kuwa shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au **kikundi cha** [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,4 +1,4 @@
# Shambulio la Fast Bin
# Shambulizi la Fast Bin
<details>
@ -6,7 +6,7 @@
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
@ -22,7 +22,7 @@ Kwa habari zaidi kuhusu ni nini fast bin angalia ukurasa huu:
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Kwa sababu fast bin ni mnyororo mmoja, kuna kinga chache sana kuliko katika mabakuli mengine na tu **kubadilisha anwani katika kipande cha fast bin kilichofutwa** ni ya kutosha kuweza **kuweka kipande baadaye katika anwani yoyote ya kumbukumbu**.
Kwa kuwa fast bin ni orodha ya viungo vya moja kwa moja, kuna kinga chache sana kuliko katika mabakuli mengine na tu **kubadilisha anwani katika kipande cha fast bin kilichofutwa** ni ya kutosha kuweza **kuweka baadaye kipande katika anwani yoyote ya kumbukumbu**.
Kwa muhtasari:
@ -134,25 +134,29 @@ printf("\n\nJust like that, we executed a fastbin attack to allocate an address
}
```
{% hint style="danger" %}
Ikiwa niwezekana kubadilisha thamani ya kigezo cha jumla **`global_max_fast`** na nambari kubwa, hii inaruhusu kuzalisha fast bin za ukubwa mkubwa, ikiruhusu kufanya mashambulizi ya fast bin katika hali ambapo hapakuwa na uwezekano hapo awali.
Ikiwa niwezekana kubadilisha thamani ya kigezo cha jumla **`global_max_fast`** na nambari kubwa, hii inaruhusu kuzalisha vipande vya fast bin vya ukubwa mkubwa, ikiruhusu kufanya mashambulizi ya fast bin katika hali ambapo hapakuwa na uwezekano hapo awali. Hali hii ni muhimu katika muktadha wa [shambulio la bin kubwa](large-bin-attack.md) na [shambulio la bin lisilo na mpangilio](unsorted-bin-attack.md)
{% endhint %}
## Mifano
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:**
* Inawezekana kutenga vipande, kuvifuta, kusoma maudhui yao na kuvijaza (kwa udhaifu wa kujaa).
* **Consolidate chunk kwa infoleak**: Mbinu hii ni kimsingi kutumia udhaifu wa kujaa ili kuunda ukubwa wa awali wa uwongo ili kipande kimoja kilichotangulia kiwekwe ndani ya kipande kikubwa, hivyo wakati wa kutenga kipande kikubwa kinachotia kipande kingine, inawezekana kuchapisha data yake na kuvuja anwani ya libc (main\_arena+88).
* **Overwrite malloc hook**: Kwa hili, na kutumia hali ya kufunika iliyopita, ilikuwa inawezekana kuwa na vipande 2 vilivyokuwa vikionyesha kwenye kumbukumbu ile ile. Kwa hiyo, kuvifuta vyote viwili (kwa kufuta kipande kingine kati yake kuepuka ulinzi) ilikuwa inawezekana kuwa na kipande kimoja katika fast bin mara 2. Kisha, ilikuwa inawezekana kutenga tena, kubadilisha anwani ya kipande kinachofuata ili ielekee kidogo kabla ya malloc\_hook (hivyo inaelekeza kwenye nambari ambayo malloc inafikiria ni ukubwa huru - kuepuka kingine), kutenga tena na kisha kutenga kipande kingine ambacho kitapokea anwani za kanzu za malloc. Hatimaye **one gadget** iliandikwa humo.
* Inawezekana kutenga vipande, kuviachilia, kusoma maudhui yao na kuvijaza (kwa udhaifu wa kujaa).
* **Konsolidisha kipande kwa infoleak**: Mbinu hii ni kimsingi kutumia udhaifu wa kujaa ili kuunda `prev_size` bandia ili kipande cha awali kiwekwe ndani ya kikubwa, hivyo wakati wa kutenga kikubwa kinachohusisha kipande kingine, inawezekana kuchapisha data yake na kuvuja anwani ya libc (`main_arena+88`).
* **Kubadilisha kitanzi cha malloc**: Kwa hili, na kutumia hali ya kufunika ya awali, ilikuwa inawezekana kuwa na vipande 2 vilivyokuwa vikionyesha kwa kumbukumbu moja. Kwa hiyo, kuviviachilia vyote (kwa kuvifungua vipande vingine kati yake kuepuka ulinzi) ilikuwa inawezekana kuwa na kipande kimoja katika fast bin mara 2. Kisha, ilikuwa inawezekana kutenga tena, kubadilisha anwani ya kipande kinachofuata ili ielekee kidogo kabla ya `__malloc_hook` (hivyo inaelekeza kwa nambari ambayo malloc inafikiria ni ukubwa huru - kuepuka kingine), kutenga tena na kisha kutenga kipande kingine ambacho kitapokea anwani za kitanzi cha malloc. Hatimaye **gadgeti moja** iliandikwa humo.
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:**
* Kuna kujaa kwa kumbukumbu na mtumiaji baada ya kufuta na kufuta mara mbili kwa sababu wakati kipande kinapofutwa inawezekana kutumia upya na kufuta tena pointi
* **Libc info leak**: Tuache vipande vichache na vitapata pointi kwa sehemu ya eneo la uwanja mkuu. Kwa kuwa unaweza kutumia upya pointi zilizofutwa, soma anwani hii.
* **Fast bin attack**: Pointi zote kwa kutenga zimehifadhiwa ndani ya safu, hivyo tunaweza kufuta vipande vichache vya fast bin na katika cha mwisho kubadilisha anwani ili ielekee kidogo kabla ya safu hii ya pointi. Kisha, kutenga vipande vichache na ukubwa sawa na tutapata kwanza halali na kisha bandia inayohusisha safu ya pointi. Sasa tunaweza kubadilisha pointi hizi za kutenga ili zielekee kwenye anwani iliyopatikana ya `free` ili ielekee kwa mfumo na kisha andika kipande 1 `"/bin/sh"` kisha `free(chunk1)` ambayo itatekeleza `system("/bin/sh")`.
* Kuna kujaa kwa kumbukumbu na matumizi baada ya kuachilia na kuachilia mara mbili kwa sababu wakati kipande kinapoachiliwa inawezekana kutumia upya na kuachilia upya viashiria
* **Leak ya habari ya Libc**: Tuachie vipande vichache na vitapata kiashiria kwa sehemu ya eneo la uwanja mkuu. Kwa kuwa unaweza kutumia upya viashiria vilivyoachiliwa, soma anwani hii.
* **Shambulio la Fast bin**: Viashiria vyote kwa kutengwa huhifadhiwa ndani ya safu, hivyo tunaweza kuachilia vipande vichache vya fast bin na katika cha mwisho kubadilisha anwani ili ielekee kidogo kabla ya safu hii ya viashiria. Kisha, kutenga vipande vichache na ukubwa sawa na tutapata kwanza halali na kisha bandia inayohusisha safu ya viashiria. Sasa tunaweza kubadilisha viashiria hivi vya kutenga ili kufanya anwani ya GOT ya `free` ielekee `system` na kisha andika `"/bin/sh"` kwenye kipande 1 kisha ite `free(chunk1)` ambayo badala yake itatekeleza `system("/bin/sh")`.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Mfano mwingine wa kutumia kujaa kwa 1B kufanya vipande kuwa imara katika unsorted bin na kupata infoleak ya libc na kisha kufanya mashambulizi ya fast bin kubadilisha malloc hook na anwani ya one gadget
* Mfano mwingine wa kutumia kujaa kwa kibayti kimoja kufanya vipande kuwa imara katika bin lisilo na mpangilio na kupata infoleak ya libc na kisha kufanya shambulio la fast bin kubadilisha kitanzi cha malloc na anwani ya gadgeti moja
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html)
* Baada ya infoleak kutumia unsorted bin na UAF kuvuja anwani ya libc na anwani ya PIE, shambulio la CTF hili lilifanya mashambulizi ya fast bin kutenga kipande mahali ambapo pointi za vipande vinavyodhibitiwa vilikuwa hivyo ilikuwa inawezekana kubadilisha pointi fulani ili kuandika one gadget katika GOT
* Unaweza kupata Fast Bin attack iliyotumiwa kupitia shambulizi la unsorted bin:
* Kumbuka kwamba ni kawaida kabla ya kufanya mashambulizi ya fast bin kutumia orodha isiyopendelewa kuvuja anwani za libc/heap (inapohitajika).
* Baada ya kuvuja kwa habari kutumia bin lisilo na mpangilio na UAF kufichua anwani ya libc na anwani ya PIE, shambulio la CTF hili lilifanya shambulio la fast bin kutenga kipande mahali ambapo viashiria kwa vipande vilivyodhibitiwa vilikuwa vimehifadhiwa hivyo ilikuwa inawezekana kubadilisha viashiria fulani ili kuandika gadgeti moja kwenye GOT
* Unaweza kupata shambulio la Fast Bin lililotumiwa kupitia shambulio la bin lisilo na mpangilio:
* Kumbuka kwamba ni kawaida kabla ya kufanya mashambulizi ya fast bin kutumia orodha za kufungua kufichua anwani za libc/kumbukumbu (inapohitajika).
* [**Kiwanda cha Roboti. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
* Tunaweza kutenga vipande vya ukubwa mkubwa kuliko `0x100`.
* Badilisha `global_max_fast` kwa kutumia shambulio la Bin lisilo na mpangilio (inafanya kazi 1/16 ya wakati kutokana na ASLR, kwa sababu tunahitaji kubadilisha biti 12, lakini lazima tubadilishe biti 16).
* Shambulio la Fast Bin kubadilisha safu ya kimataifa ya vipande. Hii hutoa msingi wa kusoma/kubadilisha wa kiholela, ambao unaruhusu kubadilisha GOT na kuweka baadhi ya kazi ielekee `system`.
{% content-ref url="unsorted-bin-attack.md" %}
[unsorted-bin-attack.md](unsorted-bin-attack.md)
@ -160,7 +164,7 @@ Ikiwa niwezekana kubadilisha thamani ya kigezo cha jumla **`global_max_fast`** n
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kuvamia AWS kutoka mwanzo hadi kuwa shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
@ -168,6 +172,6 @@ Njia nyingine za kusaidia HackTricks:
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,8 +1,8 @@
# Kujaza Kijijini
# Kujaa kwa Heap
<details>
<summary><strong>Jifunze kuhusu kuvamia AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
@ -10,58 +10,50 @@ Njia nyingine za kusaidia HackTricks:
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
## Taarifa Msingi
Kujaza kijijini ni kama [**kujaza steki**](../stack-overflow/) lakini kwenye kijijini. Kimsingi inamaanisha kuwa nafasi fulani ilireserviwa kwenye kijijini kuhifadhi data fulani na **data iliyohifadhiwa ilikuwa kubwa kuliko nafasi iliyoreserviwa.**
Kujaa kwa heap ni kama [**kujaa kwa steki**](../stack-overflow/) lakini kwenye heap. Kimsingi inamaanisha kuwa nafasi fulani ilireserviwa kwenye heap kuhifadhi data fulani na **data iliyohifadhiwa ilikuwa kubwa kuliko nafasi iliyoreserviwa.**
Kwenye kujaza steki tunajua kwamba baadhi ya rejista kama kipima maelekezo au fremu ya steki zitarudishwa kutoka kwenye steki na inaweza kuwa inawezekana kuitumia vibaya hii. Kwenye kujaza kijijini, **hakuna habari nyeti iliyohifadhiwa kwa chaguo-msingi** kwenye kipande cha kijijini kinachoweza kujazwa. Hata hivyo, inaweza kuwa habari nyeti au viashiria, hivyo **umuhimu** wa udhaifu huu **unategemea** **data gani inaweza kubadilishwa** na jinsi mshambuliaji anaweza kutumia hii.
Kwenye kujaa kwa steki tunajua kwamba baadhi ya rejista kama kipima maelekezo au fremu ya steki itarejeshwa kutoka kwenye steki na inaweza kuwa inawezekana kuitumia vibaya hii. Kwenye kujaa kwa heap, **hakuna habari nyeti iliyohifadhiwa kwa chaguo-msingi** kwenye kipande cha heap kinachoweza kujaa. Hata hivyo, inaweza kuwa habari nyeti au pointa, hivyo **umuhimu** wa udhaifu huu **unategemea** ni **data gani inaweza kubadilishwa** na jinsi mshambuliaji anaweza kutumia hii.
{% hint style="success" %}
Ili kupata vishikizo vya kujaza unaweza kutumia mifano ile ile kama kwenye [**kujaza steki**](../stack-overflow/#kupata-vishikizo-vya-kujaza-steki).
Ili kupata vishikizo vya kujaa unaweza kutumia mifano ile ile kama kwenye [**kujaa kwa steki**](../stack-overflow/#kupata-vishikizo-vya-kujaa-kwa-steki).
{% endhint %}
### Kujaza Staki vs Kujaza Kijijini
### Kujaa kwa Steki vs Kujaa kwa Heap
Kwenye kujaza steki, upangaji na data ambayo itakuwepo kwenye steki wakati udhaifu unaweza kuzinduliwa ni ya kuaminika kwa kiasi kikubwa. Hii ni kwa sababu steki ni mstari, daima inaongezeka kwenye kumbukumbu inayogongana, kwenye **maeneo maalum ya kukimbia kwa programu kumbukumbu ya steki kawaida huhifadhi aina sawa ya data** na ina muundo maalum na viashiria fulani mwishoni mwa sehemu ya steki inayotumiwa na kila kazi.
Kwenye kujaa kwa steki, upangaji na data ambayo itakuwepo kwenye steki wakati udhaifu unaweza kuzinduliwa ni wa kuaminika kwa kiasi kikubwa. Hii ni kwa sababu steki ni mstari, daima unazidi katika kumbukumbu inayogongana, kwenye **maeneo maalum ya kukimbia kwa programu kumbukumbu ya steki kawaida huhifadhi aina sawa ya data** na ina muundo maalum na pointa fulani mwishoni mwa sehemu ya steki inayotumiwa na kila kazi.
Hata hivyo, kwenye kujaza kijijini, kwa sababu kumbukumbu inayotumiwa si mstari lakini **vipande vilivyotengwa kawaida viko kwenye nafasi tofauti za kumbukumbu** (si moja karibu na nyingine) kwa sababu ya **makorongo na maeneo** yanayotenganisha ugawaji kwa ukubwa na kwa sababu **kumbukumbu iliyotolewa awali inatumika** kabla ya kutenga vipande vipya. Ni **ngumu kujua kitu ambacho kitagongana na kile kilichovunjika** kwa kujaza kijijini. Kwa hivyo, unapopata kujaza kijijini, ni muhimu kupata **njia ya kuaminika ya kufanya kitu kilichotaka kiwe karibu kwenye kumbukumbu** na kile kinachoweza kujazwa.
Hata hivyo, kwenye kujaa kwa heap, kumbukumbu inayotumiwa sio mstari lakini **vipande vilivyotengwa kawaida viko katika nafasi tofauti za kumbukumbu** (sio moja karibu na nyingine) kwa sababu ya **makorongo na maeneo** yanayotenganisha ugawaji kwa ukubwa na kwa sababu **kumbukumbu iliyotolewa hapo awali inatumika** kabla ya kutenga vipande vipya. Ni **ngumu kujua kitu ambacho kitagongana na kile kilichovunjika** kwa kujaa kwa heap. Kwa hivyo, unapopata kujaa kwa heap, ni muhimu kupata njia **ya kuaminika ya kufanya kitu kilichotaka kiwe kifuatacho kwenye kumbukumbu** kutoka kile kinachoweza kujaa.
Moja ya mbinu zinazotumiwa kwa hili ni **Kupamba Kijijini** ambayo hutumiwa kwa mfano [**kwenye chapisho hili**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Kwenye chapisho inaelezea jinsi wakati wa kernel wa iOS unapokosa kumbukumbu ya kuhifadhi vipande vya kumbukumbu, inapanua kwa ukurasa wa kernel, na ukurasa huu unagawanywa katika vipande vya ukubwa uliotarajiwa ambavyo vitatumika kwa mpangilio (hadi toleo la iOS 9.2, kisha vipande hivi hutumiwa kwa njia iliyochanganyikiwa ili kufanya ugunduzi wa mashambulizi haya kuwa mgumu).
Moja ya mbinu zinazotumika kwa hili ni **Kupamba kwa Heap** ambayo hutumiwa kwa mfano [**kwenye chapisho hili**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Katika chapisho hilo inaelezea jinsi wakati wa kernel wa iOS unapokosa kumbukumbu ya kuhifadhi vipande vya kumbukumbu, inapanua kwa ukurasa wa kernel, na ukurasa huu unagawanywa katika vipande vya ukubwa uliotarajiwa ambavyo vitatumika kwa mpangilio (hadi toleo la iOS 9.2, kisha vipande hivi hutumiwa kwa njia iliyochanganyikiwa ili kufanya ugunduzi wa mashambulizi haya kuwa mgumu).
Kwa hivyo, kwenye chapisho lililopita ambapo kujaza kijijini kunatokea, ili kulazimisha kitu kilichovunjika kugongana na mpangaji, **`kallocs` kadhaa zinalazimishwa na nyuzi kadhaa kujaribu kuhakikisha kuwa vipande vyote vilivyotolewa vimejazwa na ukurasa mpya unatengenezwa**.
Kwa hivyo, kwenye chapisho la awali ambapo kujaa kwa heap inatokea, ili kulazimisha kitu kilichovunjika kigongane na mpangaji, **`kallocs` kadhaa zinalazimishwa na nyuzi kadhaa kujaribu kuhakikisha kuwa vipande vyote vilivyotolewa vimejazwa na ukurasa mpya unatengenezwa**.
Ili kulazimisha kujaza hii na vitu vya ukubwa maalum, **ugawaji wa nje wa kuhusishwa na mlango wa iOS mach** ni mgombea bora. Kwa kutengeneza ukubwa wa ujumbe, inawezekana kubainisha kwa usahihi ukubwa wa ugawaji wa `kalloc` na wakati mlango wa mach unaohusiana unapoharibiwa, ugawaji unaohusiana utarejeshwa mara moja kwa `kfree`.
Ili kulazimisha kujazwa na vitu vya ukubwa maalum, **ugawaji wa nje wa kuhusishwa na mlango wa iOS mach** ni mgombea bora. Kwa kutengeneza ukubwa wa ujumbe, inawezekana kubainisha kwa usahihi ukubwa wa ugawaji wa `kalloc` na wakati mlango wa mach unaohusiana unapoharibiwa, ugawaji unaohusiana utarejeshwa mara moja kwa `kfree`.
Kisha, baadhi ya hizi nafasi za kuhifadhi zinaweza **kuachiliwa**. **Orodha ya kufungua ya `kalloc.4096` inaweka vipengee kwa mpangilio wa mwisho kuingia kwanza**, ambayo kimsingi inamaanisha kwamba ikiwa baadhi ya nafasi zimeachiliwa na shambulizi jaribu kugawa vitu vingi waathiriwa wakati wa kujaribu kugawa kitu kilichovunjika, ni uwezekano kwamba kitu hiki kitafuatwa na kitu waathiriwa.
Kisha, baadhi ya hizi nafasi zinaweza **kuachiliwa**. **Orodha ya kufungua ya `kalloc.4096` inaweka vipengee kwa mpangilio wa mwisho kuingia kwanza**, ambayo kimsingi inamaanisha kwamba ikiwa baadhi ya nafasi zimeachiliwa na shambulizi linajaribu kuweka vitu vingi waathiriwa wakati ikijaribu kutenga kitu kilichovunjika, ni uwezekano kwamba kitu hiki kitafuatwa na kitu waathiriwa.
### Mfano wa libc
[**Kwenye ukurasa huu**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) inawezekana kupata uigaji wa kujaza kijijini wa msingi unaonyesha jinsi ya kubadilisha biti ya awali inayotumiwa ya kipande kinachofuata na nafasi ya ukubwa wa awali inawezekana **kuunganisha kipande kilichotumiwa** (kwa kufanya ionekane kama haijatumika) na **kisha kutenga tena** ikiwa ni pamoja na kubadilisha data inayotumiwa kwenye kipande tofauti pia.
[Kwenye ukurasa huu](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) inawezekana kupata uigaji wa kujaa kwa Heap wa msingi unaonyesha jinsi ya kubadilisha biti ya awali inayotumiwa ya kipande kinachofuata na nafasi ya ukubwa wa awali inawezekana **kuunganisha kipande kilichotumiwa** (kwa kufanya ionekane kama haijatumika) na **kisha kutenga tena** ikiwa inawezekana kubadilisha data inayotumiwa kwenye pointa tofauti pia.
Mfano mwingine kutoka [**protostar kijijini 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) unaonyesha mfano wa msingi sana wa CTF ambapo **kujaza kijijini** inaweza kutumiwa kuita kazi ya mshindi kupata bendera.
Mfano mwingine kutoka [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) unaonyesha mfano wa msingi sana wa CTF ambapo **kujaa kwa heap** inaweza kutumiwa kuita kazi ya mshindi kupata **bendera**.
Kwenye [**protostar kijijini 1**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap1/index.html) mfano inawezekana kuona jinsi ya kutumia kujaza kijijini niwezekane **kubadilisha kwenye kipande karibu anwani** ambapo **data ya kupindukia kutoka kwa mtumiaji** itaandikwa.
Kwenye [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap1/index.html) mfano inawezekana kuona jinsi ya kutumia kujaa kwa buffer inawezekana **kubadilisha kwenye kipande karibu anwani** ambapo **data ya kupindukia kutoka kwa mtumiaji** itaandikwa.
### Mfano wa ARM64
Kwenye ukurasa [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) unaweza kupata mfano wa kujaza kijijini ambapo amri itakayotekelezwa imehifadhiwa kwenye kipande kinachofuata kutoka kwenye kipande kilichojazwa kupindukia. Kwa hivyo, inawezekana kubadilisha amri inayotekelezwa kwa kuipindukia kwa shambulizi rahisi kama vile:
Kwenye ukurasa [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) unaweza kupata mfano wa kujaa kwa heap ambapo amri itakayotekelezwa imehifadhiwa kwenye kipande kinachofuata kutoka kwenye kipande kilichojaa. Kwa hivyo, inawezekana kubadilisha amri inayotekelezwa kwa kuiandika upya kwa shambulizi rahisi kama vile:
```bash
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
```
<details>
### Mifano mingine
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
* [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/)
* Tunatumia udhaifu wa Kuzidisha Kwa Nambari ya Integer kupata Kujazwa kwa Heap.
* Tunaharibu pointa kwa kazi ndani ya `struct` ya kipande kilichojazwa ili kuweka kazi kama vile `system` na kupata utekelezaji wa nambari.

View file

@ -2,11 +2,11 @@
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya HackTricks AWS)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
@ -19,53 +19,41 @@ Njia nyingine za kusaidia HackTricks:
### Kanuni
* Angalia mfano kutoka [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
* Au ule kutoka [https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation](https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation) (inaweza kuhitaji kujaza tcache)
* Au kutoka [https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation](https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation) (inaweza kuhitaji kujaza tcache)
### Lengo
* Lengo ni kutenga kumbukumbu karibu na anwani yoyote maalum.
* Lengo ni kutenga kumbukumbu katika anwani karibu yoyote maalum.
### Mahitaji
* Unda kikundi bandia tunapotaka kutenga kikundi:
* Weka pointers kuelekeza kwenyewe ili kuepuka ukaguzi wa usalama
* Kosa moja kwa moja kutoka kikundi kimoja hadi kingine kurekebisha prev inatumika
* Eleza katika `prev_size` ya kikundi kilichotumiwa kwa kosa moja kwa moja tofauti kati yake na kikundi bandia
* Weka pointers kuelekeza kwake ili kuepuka ukaguzi wa usalama
* Mwaga kwa byte moja na byte tupu kutoka kikundi kimoja hadi kingine kurekebisha bendera ya `PREV_INUSE`.
* Eleza katika `prev_size` ya kikundi kilichotumiwa kwa njia ya null tofauti kati yake na kikundi bandia
* Ukubwa wa kikundi bandia lazima pia uwe umewekwa ukubwa sawa kuepuka ukaguzi wa usalama
* Kwa kujenga vikundi hivi, utahitaji uvujaji wa kumbukumbu ya kitalu.
### Shambulio
* Kikundi bandia `A` kinatengenezwa ndani ya kikundi kinachodhibitiwa na mshambuliaji kwa kuelekeza na `fd` na `bk` kwenye kikundi cha asili kuepuka ulinzi
* Kikundi bandia `A` kinajengwa ndani ya kikundi kinachodhibitiwa na mshambuliaji kwa kuelekeza na `fd` na `bk` kwenye kikundi cha asili kuepuka ulinzi
* Vikundi vingine 2 (`B` na `C`) vinatengwa
* Kwa kutumia kosa moja katika `B` moja, biti ya `prev inatumika` inasafishwa na data ya `prev_size` inaandikwa upya na tofauti kati ya mahali ambapo kikundi cha `C` kinatengwa, hadi kikundi bandia cha `A` kilichozalishwa awali
* Hii `prev_size` na ukubwa katika kikundi bandia `A` lazima iwe sawa kuepuka ukaguzi.
* Kwa kutumia mbali moja katika `B` moja, biti ya `prev in use` inasafishwa na data ya `prev_size` inabadilishwa na tofauti kati ya mahali ambapo kikundi cha `C` kinatengwa, na kikundi bandia cha `A` kilichozalishwa awali
* `prev_size` hii na ukubwa katika kikundi bandia `A` lazima iwe sawa kuepuka ukaguzi.
* Kisha, tcache inajazwa
* Kisha, `C` inaachiliwa ili iungane na kikundi bandia `A`
* Kisha, kikundi kipya `D` kinatengenezwa ambacho kitakuwa kuanzia kwenye kikundi bandia cha `A` na kufunika kikundi cha `B`
* Kisha, kikundi kipya `D` kinajengwa ambacho kitakuwa kuanzia kwenye kikundi cha bandia cha `A` na kufunika kikundi cha `B`
* Nyumba ya Einherjar inamalizika hapa
* Hii inaweza kuendelea na shambulio la benki ya haraka:
* Fungua `B` kuiongeza kwenye benki ya haraka
* `fd` ya `B` inaandikwa upya ikifanya ielekee kwenye anwani ya lengo ikidukua kikundi cha `D` (kwani ina `B` ndani)&#x20;
* Hii inaweza kuendelea na shambulio la taka bin au sumu ya Tcache:
* Fungua `B` kuiongeza kwenye taka bin / Tcache
* `fd` ya `B` inabadilishwa ikifanya ielekee kwenye anwani ya lengo ikidukua kikundi cha `D` (kwani ina `B` ndani)&#x20;
* Kisha, malloc 2 zinafanywa na ya pili itakuwa **kutenga anwani ya lengo**
## Marejeo na mifano mingine
* [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c)
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad)
* Baada ya kuachilia pointi, hazifutwi, kwa hivyo bado inawezekana kufikia data zao. Kwa hivyo kikundi kimoja kimewekwa kwenye benki isiyosortiwa na kuvuja pointi inayojumuisha (uvujaji wa libc) na kisha kitalu kipya kimepangwa kwenye benki isiyosortiwa na kuvuja anwani ya kitalu kutoka kwa pointi inayopata.
*
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya HackTricks AWS)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
* **CTF** [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad)
* Baada ya kuachilia pointers hawajafutwa, kwa hivyo bado inawezekana kufikia data zao. Kwa hivyo kikundi kinawekwa kwenye taka bin na kuvuja pointers inayojumuisha (uvujaji wa libc) na kisha kitalu kipya kinawekwa kwenye taka bin na kuvuja anwani ya kitalu kutoka kwa pointer inayopata.
* [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/)
* Kosa la kumwaga byte tupu katika `strtok`.
* Tumia Nyumba ya Einherjar kupata hali ya vikundi vinavyolingana na kumaliza na sumu ya Tcache kupata msingi wa kuandika wa kiholela.

View file

@ -20,19 +20,19 @@ Njia nyingine za kusaidia HackTricks:
### Kanuni
* Mbinu hii ilisahihishwa ([**hapa**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) na husababisha kosa hili: `malloc(): corrupted top size`
* Mbinu hii ilifanyiwa marekebisho ([**hapa**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) na kutoa kosa hili: `malloc(): corrupted top size`
* Unaweza jaribu [**kanuni kutoka hapa**](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html) kuitumia kwa majaribio.
### Lengo
* Lengo la shambulio hili ni kuweza kutenga kipande katika anwani maalum.
* Lengo la shambulizi hili ni kuweza kutenga kipande katika anwani maalum.
### Mahitaji
* Kuzidi ambayo inaruhusu kubadilisha ukubwa wa kichwa cha kipande cha juu (k.m. -1).
* Kuweza kudhibiti ukubwa wa kutengwa kwa rundo
### Shambulio
### Shambulizi
Ikiwa mshambuliaji anataka kutenga kipande katika anwani P ili kubadilisha thamani hapa. Anza kwa kubadilisha ukubwa wa kichwa cha kipande cha juu na `-1` (labda kwa kuzidi). Hii inahakikisha kwamba malloc haitatumia mmap kwa kutengwa yoyote kwani Kipande cha Juu kitakuwa na nafasi ya kutosha.
@ -49,7 +49,7 @@ Kisha, kuhesabu umbali kati ya anwani ya kipande cha juu na nafasi ya lengo ya k
* req = target - old_top - 4*sizeof(long)
*/
```
Kwa hivyo, kwa kualloca ukubwa wa `target - old_top - 4*sizeof(long)` (long 4 ni kwa sababu ya metadata ya kipande cha juu na kipande kipya kilichoalokwa) kutahamisha kipande cha juu kwenye anwani tunayotaka kubadilisha. Kisha, fanya malloc nyingine kupata kipande kinachohusisha mwanzoni mwa data ya kuandika anwani ya lengo.
Kwa hivyo, kutenga ukubwa wa `lengo - old_top - 4*sizeof(long)` (long 4 ni kwa sababu ya metadata ya kipande cha juu na ya kipande kipya wakati wa kutengwa) kutahamisha kipande cha juu kwa anwani tunayotaka kubadilisha. Kisha, fanya malloc nyingine kupata kipande kwenye anwani ya lengo.
### Marejeo & Mifano Mingine
@ -60,14 +60,14 @@ Kwa hivyo, kwa kualloca ukubwa wa `target - old_top - 4*sizeof(long)` (long 4 ni
* [https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html)
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11)
* Lengo la hali hii ni ret2win ambapo tunahitaji kubadilisha anwani ya kazi ambayo itaitwa na anwani ya kazi ya ret2win
* Binary ina overflow ambayo inaweza kutumika kubadilisha ukubwa wa kipande cha juu, ambacho kimebadilishwa kuwa -1 au p64(0xffffffffffffffff)
* Kisha, inahesabiwa anwani ya mahali ambapo kidole cha kubadilisha kipo, na tofauti kutoka kwa nafasi ya sasa ya kipande cha juu hadi hapo ina alokwa na `malloc`
* Hatimaye kipande kipya kina alokwa ambacho kitahusisha lengo lililotaka ndani yake ambalo linabadilishwa na kazi ya ret2win
* Binary ina kipeperushi ambacho kinaweza kutumiwa kubadilisha ukubwa wa kipande cha juu, ambacho kimebadilishwa kuwa -1 au p64(0xffffffffffffffff)
* Kisha, inahesabiwa anwani ya mahali ambapo kidole cha kubadilisha kipo, na tofauti kutoka kwa nafasi ya sasa ya kipande cha juu hadi hapo inatengwa na `malloc`
* Hatimaye kipande kipya kinatengwa ambacho kitahusisha lengo lililohitajika ndani yake ambalo limebadilishwa na kazi ya ret2win
* [https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp](https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp)
* Katika `Ingiza jina lako:`, kuna udhaifu wa awali ambao unaruhusu kuvuja kwa anwani kutoka kwa rundo
* Kisha katika `Org:` na `Host:` utendaji ni rahisi kujaza 64B ya kidole cha `s` wakati unaulizwa kwa **jina la org**, ambayo kwenye rundo inafuatwa na anwani ya v2, ambayo kisha inafuatwa na **jina la mwenyeji** ulioonyeshwa. Kwa hivyo, strcpy itakuwa inakopi yaliyomo ya s kwa kipande cha ukubwa wa 64B, inawezekana **kubadilisha ukubwa wa kipande cha juu** na data iliyowekwa ndani ya **jina la mwenyeji**.
* Sasa kwamba kuandika kiholela kunawezekana, GOT ya `atoi` ilibadilishwa na anwani ya printf. basi inawezekana kuvuja anwani ya `IO_2_1_stderr` _na_ `%24$p`. Na kuvuja huku kwa libc ilikuwa inawezekana kubadilisha tena GOT ya `atoi` na anwani ya `system` na kuipiga kwa paramu `/bin/sh`
* Njia mbadala [iliyopendekezwa katika andiko hili lingine](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud), ni kubadilisha `free` na `puts`, kisha ongeza anwani ya `atoi@got`, kwenye kidole ambacho baadaye kitafutwa ili kuvuja na kwa kuvuja hii kubadilisha tena `atoi@got` na `system` na kuipiga na `/bin/sh`.
* Katika `Ingiza jina lako:` kuna udhaifu wa awali ambao unaruhusu kuvuja kwa anwani kutoka kwa kipande cha heap
* Kisha katika kazi za `Org:` na `Host:`, ni rahisi kujaza 64B ya kidole cha `s` wakati unaulizwa **jina la shirika**, ambalo kwenye steki linafuatwa na anwani ya v2, ambayo kisha inafuatwa na **jina la mwenyeji** lililotajwa. Kisha, strcpy itakuwa inakopi yaliyomo ya s kwa kipande cha ukubwa wa 64B, ni rahisi **kubadilisha ukubwa wa kipande cha juu** na data iliyowekwa ndani ya **jina la mwenyeji**.
* Sasa kwamba andika ya kiholela inawezekana, GOT ya `atoi` ilibadilishwa na anwani ya printf. basi inawezekana kuvuja anwani ya `IO_2_1_stderr` _na_ `%24$p`. Na kuvuja huku kwa libc ilikuwa inawezekana kubadilisha tena GOT ya `atoi` na anwani ya `system` na kuipiga kama paramu `/bin/sh`
* Njia mbadala [iliyopendekezwa katika andiko lingine hili](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud), ni kubadilisha `free` na `puts`, na kisha ongeza anwani ya `atoi@got`, kwenye kidole ambacho baadaye kitafutwa ili kuvuja na kwa kuvuja hii kubadilisha tena `atoi@got` na `system` na kuipiga na `/bin/sh`.
* [https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html)
* Kuna UAF inayoruhusu kutumia tena kipande kilichofutwa bila kufuta kidole. Kwa sababu kuna njia za kusoma, inawezekana kuvuja anwani ya libc kwa kuandika kidole kwa kazi ya bure katika GOT hapa na kisha kuita kazi ya kusoma.
* Kisha, House of force ilitumiwa (kwa kudhuru UAF) kubadilisha ukubwa wa nafasi iliyobaki na -1, aloka kipande kikubwa cha kutosha kufikia kitanzi cha bure, na kisha aloka kipande kingine ambacho kitahusisha kitanzi cha bure. Kisha, andika kwenye kitanzi anwani ya `system`, andika kwenye kipande `"/bin/sh"` na mwishowe fungua kipande na yaliyomo ya herufi hizo.
* Kisha, House of force ilitumiwa (kwa kudhuru UAF) kubadilisha ukubwa wa nafasi iliyobaki na -1, kutenga kipande kikubwa cha kutosha kufikia kitanzi cha bure, na kisha kutenga kipande kingine ambacho kitahusisha kitanzi cha bure. Kisha, andika kwenye kitanzi anwani ya `system`, andika kwenye kipande `"/bin/sh"` na hatimaye fungua kipande na yaliyomo ya herufi hiyo.

View file

@ -1,4 +1,4 @@
# Nyumba ya Hadithi | Shambulizi la Bin Dogo
# Nyumba ya Hadithi | Shambulizi la Bin Ndogo
<details>
@ -6,7 +6,7 @@
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
@ -22,33 +22,33 @@ Njia nyingine za kusaidia HackTricks:
* Hii haifanyi kazi
* Au: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c)
* Hii haifanyi kazi hata kama inajaribu kukiuka baadhi ya ukaguzi ikipata kosa: `malloc(): unaligned tcache chunk detected`
* Mfano huu bado unafanya kazi**:** [**https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html**](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)&#x20;
* Mfano huu bado unafanya kazi: [**https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html**](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)&#x20;
### Lengo
* Ingiza **kipande bandia kidogo kwenye bin dogo ili kisha kiwezekane kukitenga**.\
Tambua kuwa kipande kidogo kilichoongezwa ni kipande bandia ambacho muhusika anachagua sio kipande bandia katika nafasi ya kupita.
* Ingiza **kipande bandia kidogo kwenye bin ndogo ili kisha kiwezekane kukitenga**.\
Tambua kuwa kipande kidogo kilichoongezwa ni kipande bandia ambacho muhusika anajenga na sio kipande bandia kwenye nafasi ya kupita.
### Mahitaji
* Unda vipande 2 bandia na uwalinganishe na wao na na kipande halali kwenye bin dogo:
* Unda vipande 2 bandia na uwalinganishe pamoja na kipande halali kwenye bin ndogo:
* `fake0.bk` -> `fake1`
* `fake1.fd` -> `fake0`
* `fake0.fd` -> `legit` (unahitaji kurekebisha kiashiria katika kipande cha bin dogo kilichofutwa kupitia kasoro nyingine)
* `fake0.fd` -> `legit` (unahitaji kurekebisha kipande cha pointa kilichofutwa kwenye bin ndogo kupitia kasoro nyingine)
* `legit.bk` -> `fake0`
Kisha utaweza kutenga `fake0`.
### Shambulizi
* Kipande kidogo (`legit`) kinatengwa, kisha kingine kinatengwa kuzuia kulinganisha na kipande cha juu. Kisha, legit inafutwa (ikihamisha kwenye orodha isiyopangwa) na kipande kikubwa zaidi kinatengwa, **ikihamisha `legit` kwenye bin dogo.**
* Mshambuliaji anazalisha vipande vidogo vya bandia, na kufanya uhusiano wa lazima kukiuka ukaguzi wa akili:
* Kipande kidogo (`legit`) kinatengwa, kisha kingine kinatengwa kuzuia kulinganisha na kipande cha juu. Kisha, `legit` inafutwa (ikihamisha kwenye orodha ya bin isiyosortiwa) na kipande kikubwa kinatengwa, **ikihamisha `legit` kwenye bin ndogo.**
* Mshambuliaji anazalisha vipande vya bandia vya bin ndogo, na kufanya uunganishaji unaohitajika kukiuka ukaguzi wa akili:
* `fake0.bk` -> `fake1`
* `fake1.fd` -> `fake0`
* `fake0.fd` -> `legit` (unahitaji kurekebisha kiashiria katika kipande cha bin dogo kilichofutwa kupitia kasoro nyingine)
* `fake0.fd` -> `legit` (unahitaji kurekebisha kipande cha pointa kilichofutwa kwenye bin ndogo kupitia kasoro nyingine)
* `legit.bk` -> `fake0`
* Kipande kidogo kinatengwa kupata legit, ikifanya **`fake0`** kuwa kwenye orodha ya juu ya vipande vidogo
* Kipande kingine kidogo kinatengwa, kupata fake0 kama kipande, kuruhusu uwezekano wa kusoma/kuandika viashiria ndani yake.
* Kipande kidogo kinatengwa kupata legit, ikifanya **`fake0`** kuwa kwenye orodha ya juu ya mabakuli madogo
* Kipande kingine kidogo kinatengwa, kupata `fake0` kama kipande, kuruhusu uwezekano wa kusoma/kuandika pointa ndani yake.
## Marejeo
@ -62,7 +62,7 @@ Kisha utaweza kutenga `fake0`.
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**

View file

@ -2,41 +2,41 @@
<details>
<summary><strong>Jifunze kuhusu kuvamia AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
### Mahitaji
1. **Uwezo wa Kurekebisha Kiashiria au Ukubwa wa Fastbin**: Hii inamaanisha unaweza kubadilisha kiashiria cha mbele cha kipande katika fastbin au ukubwa wake.
2. **Uwezo wa Kuzindua `malloc_consolidate`**: Hii inaweza kufanywa kwa kutoa kipande kikubwa au kufunga kipande cha juu, ambacho hulazimisha rundo kufanya kazi ya kufunga vipande.
1. **Uwezo wa kubadilisha kidole cha mbele cha fast bin au ukubwa**: Hii inamaanisha unaweza kubadilisha kidole cha mbele cha kipande katika fastbin au ukubwa wake.
2. **Uwezo wa kuzindua `malloc_consolidate`**: Hii inaweza kufanywa kwa kutenga kipande kikubwa au kufunga kipande cha juu, ambacho hulazimisha rundo kufanya kazi.
### Malengo
1. **Kuunda Vipande Vinavyopishana**: Ili kuwa na kipande kimoja kikizidi kingine, kuruhusu mabadiliko zaidi ya rundo.
2. **Kufanya Vipande Bandia**: Kudanganya mpangishaji ili atambue kipande bandia kama kipande halali wakati wa shughuli za rundo.
1. **Kuunda vipande vinavyolingana**: Ili kuwa na kipande kimoja kifanane na kingine, kuruhusu manipulations zaidi za rundo.
2. **Kufanya vipande vya uwongo**: Kudanganya allocator kutibu kipande cha uwongo kama kipande halali wakati wa shughuli za rundo.
## Hatua za Shambulio
## Hatua za shambulio
### POC 1: Badilisha Ukubwa wa Kipande cha Fastbin
### POC 1: Badilisha ukubwa wa kipande cha fast bin
**Lengo**: Kuunda kipande kinachopishana kwa kubadilisha ukubwa wa kipande cha fastbin.
**Lengo**: Unda kipande kinacholingana kwa kubadilisha ukubwa wa kipande cha fastbin.
* **Hatua 1: Kutenga Vipande**
* **Hatua 1: Tenga Vipande**
```cpp
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x40); // Allocates another chunk of 0x40 bytes at 0x602050
malloc(0x10); // Allocates a small chunk to change the fastbin state
```
### Hatua ya 2: Fungua Vipande
* **Hatua ya 2: Fungua Vipande**
```cpp
free(chunk1); // Frees the chunk at 0x602000
free(chunk2); // Frees the chunk at 0x602050
@ -47,44 +47,46 @@ free(chunk2); // Frees the chunk at 0x602050
```cpp
chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1])
```
Tunabadilisha metadata ya ukubwa wa `chunk1` kuwa 0xa1. Hii ni hatua muhimu ya kudanganya mpangishaji wakati wa kujumuisha.
Tunabadilisha metadata ya ukubwa wa `chunk1` kuwa 0xa1. Hii ni hatua muhimu ya kudanganya mpangishaji wakati wa kufanya ujumuishaji.
* **Hatua 4: Chochote `malloc_consolidate`**
```cpp
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
```
Kutenga kipande kikubwa kinasababisha kazi ya `malloc_consolidate`, ikimegesha vipande vidogo kwenye fastbin. Ukubwa uliobadilishwa wa `chunk1` unasababisha kufunika na `chunk2`.
Kutenga kipande kikubwa kunaanzisha kazi ya `malloc_consolidate`, ikimegesha vipande vidogo kwenye bakuli la haraka. Ukubwa uliobadilishwa wa `chunk1` unasababisha kufunika na `chunk2`.
Baada ya kusongesha, `chunk1` inafunika na `chunk2`, kuruhusu udukuzi zaidi.
Baada ya kumegeshwa, `chunk1` inafunika na `chunk2`, ikiruhusu kwa uchimbaji zaidi.
### POC 2: Badilisha Mshale wa FD
### POC 2: Badilisha kidude cha `fd`
**Lengo**: Unda kipande bandia kwa kubadilisha mshale wa fd wa fastbin.
**Lengo**: Unda kipande bandia kwa kubadilisha kidude cha `fd` kwenye bakuli la haraka.
* **Hatua 1: Kutenga Vipande**
```cpp
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
```
**Maelezo**: Tunatenga vipande viwili, kimoja kidogo na kingine kikubwa, ili kuweka kiwango cha rundo kwa kipande bandia.
**Maelezo**: Tunatenga vipande viwili, kimoja kidogo na kingine kikubwa, ili kuweka kiwango cha rundo kwa ajili ya kipande bandia.
* **Hatua 2: Unda Kipande Bandia**
* **Hatua 2: Unda kipande bandia**
```cpp
chunk2[1] = 0x31; // Fake chunk size 0x30
chunk2[7] = 0x21; // Next fake chunk
chunk2[11] = 0x21; // Next-next fake chunk
```
### Hatua ya 3: Fungua Chunk1
### Hatua ya 3: Fungua `chunk1`
Tunachapisha metadata bandia ya kipande ndani ya `chunk2` ili kusimuliza vipande vidogo.
```cpp
free(chunk1); // Frees the chunk at 0x602000
```
**Maelezo**: Tunafuta `chunk1`, tukiiongeza kwenye orodha ya fastbin.
* **Hatua 4: Badilisha FD ya Chunk1**
* **Hatua 4: Badilisha `fd` ya `chunk1`**
```cpp
chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk within chunk2
```
**Maelezo**: Tunabadilisha kielekezi cha mbele (fd) cha `chunk1` ili kielekeze kwa kipande bandia ndani ya `chunk2`.
**Maelezo**: Tunabadilisha kiashiria cha mbele (`fd`) cha `chunk1` ili kielekee kwa kipande chetu bandia ndani ya `chunk2`.
* **Hatua 5: Chochote `malloc_consolidate`**
```cpp
@ -96,4 +98,4 @@ Kipande bandia huingizwa kwenye orodha ya fastbin, ikifanya iwe kipande halali k
### Muhtasari
Mbinu ya **Nyumba ya Sungura** inahusisha kubadilisha ukubwa wa kipande cha fastbin ili kuunda vipande vinavyolingana au kudhibiti pointer ya fd ili kuunda vipande bandia. Hii inaruhusu wachomozaji kuunda vipande halali kwenye rundo, kuruhusu aina mbalimbali za uchunguzi. Kuelewa na kufanya mazoezi ya hatua hizi kutaboresha ujuzi wako wa uchunguzi wa rundo.
Mbinu ya **House of Rabbit** inahusisha kubadilisha ukubwa wa kipande cha fast bin ili kuunda vipande vinavyolingana au kudanganya kiashiria cha `fd` ili kuunda vipande bandia. Hii inaruhusu wachomozaji kuunda vipande halali kwenye rundo, kuruhusu aina mbalimbali za uchunguzi. Kuelewa na kufanya mazoezi ya hatua hizi kutaboresha ujuzi wako wa uchunguzi wa rundo.

View file

@ -69,18 +69,18 @@ return 0;
### Lengo
* Kuweza kuongeza anwani kwenye tcache / sanduku la haraka ili baadaye iwezekane kuialloka
* Kuweza kuongeza anwani kwenye tcache / sanduku la haraka ili baadaye iwezekane kuialoketi
### Mahitaji
* Shambulizi hili linahitaji mshambuliaji aweze kuunda vipande vya bandia vya haraka vinavyoonyesha kwa usahihi thamani ya ukubwa wake na kisha aweze kufuta kipande cha kwanza cha bandia ili kipate kwenye sanduku.
* Shambulio hili linahitaji mshambuliaji kuweza kuunda vipande vya uwongo vya haraka vinavyoonyesha kwa usahihi thamani ya ukubwa wake na kisha kuweza kufuta kipande cha kwanza cha uwongo ili kipate kwenye sanduku.
### Shambulizi
### Shambulio
* Unda vipande vya bandia vinavyopita ukaguzi wa usalama: utahitaji vipande vya bandia 2 kimsingi vikiashiria kwa usahihi thamani sahihi za ukubwa
* Kwa njia fulani, fanikiwa kufuta kipande cha kwanza cha bandia ili kipate kwenye sanduku la haraka au tcache na kisha kialloke ili kubadilisha anwani hiyo
* Unda vipande vya uwongo vinavyopita vipimo vya usalama: utahitaji vipande vya uwongo 2 kimsingi vikiashiria kwa usahihi thamani sahihi za ukubwa
* Kwa njia fulani hakikisha kufuta kipande cha kwanza cha uwongo ili kipate kwenye sanduku la haraka au tcache na kisha kialoketi ili kubadilisha anwani hiyo
**Msimbo kutoka** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **ni mzuri kuelewa shambulizi.** Ingawa muhtasari huu kutoka kwenye msimbo unafupisha vizuri:
**Msimbo kutoka** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **ni mzuri kuelewa shambulio.** Ingawa muhtasari huu kutoka kwenye msimbo unafupisha vizuri:
```c
/*
this will be the structure of our two fake chunks:
@ -110,10 +110,14 @@ Tafadhali kumbuka ni muhimu kuunda kipande cha pili ili kuepuka ukaguzi fulani w
## Mifano
* CTF [https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html)
* **Libc infoleak**: Kupitia kwa kujaza kwingi niwezekanavyo kubadilisha kielekezi ili kielekee kwenye anwani ya GOT ili kuvuja anwani ya libc kupitia hatua ya kusoma ya CTF
* **CTF** [**https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html**](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html)
* **Libc infoleak**: Kupitia kwa kujaza kwingi niwezekanavyo kubadilisha kielekezi ili kuelekeza kwa anwani ya GOT ili kuvuja anwani ya libc kupitia hatua ya kusoma ya CTF
* **House of Spirit**: Kwa kudanganya kuhesabu ambayo inahesabu idadi ya "bunduki" niwezekanavyo kuzalisha ukubwa bandia wa kipande cha kwanza bandia, kisha kwa kudanganya "ujumbe" niwezekanavyo kudanganya ukubwa wa pili wa kipande na hatimaye kwa kudanganya kujaza niwezekanavyo kubadilisha kielekezi ambacho kitafutwa ili kipande chetu cha kwanza bandia kifutwe. Kisha, tunaweza kukitenga na ndani yake kutakuwa na anwani ambapo "ujumbe" unahifadhiwa. Kisha, niwezekanavyo kufanya hii ielekee kuingia kwa `scanf` ndani ya jedwali la GOT, hivyo tunaweza kuibadilisha na anwani ya mfumo.\
Wakati `scanf` inaitwa tena, tunaweza kutuma kuingia `"/bin/sh"` na kupata kasha.
Wakati `scanf` inaitwa tena, tunaweza kutuma kuingia `"/bin/sh"` na kupata kabati.
* [**Gloater. HTB Cyber Apocalypse CTF 2024**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/gloater/)
* **Glibc leak**: Kijisanduku cha stack kisichojazwa.
* **House of Spirit**: Tunaweza kurekebisha index ya kwanza ya safu ya kimataifa ya pointa za rundo. Kwa marekebisho ya herufi moja, tunatumia `free` kwenye kipande bandia ndani ya kipande halali, ili tupate hali ya vipande vinavyolingana baada ya kutenga tena. Kwa hivyo, shambulio rahisi la sumu ya Tcache hufanya kazi kupata msingi wa kuandika wa kupendelea.
## Marejeo
@ -128,7 +132,7 @@ Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au **kikundi cha** [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,16 +1,16 @@
# Shambulizi la Benki Kubwa
# Shambulio la Benki Kubwa
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
@ -22,9 +22,9 @@ Kwa habari zaidi kuhusu ni nini benki kubwa angalia ukurasa huu:
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Inawezekana kupata mfano mzuri katika [**how2heap - shambulizi la benki kubwa**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
Inawezekana kupata mfano mzuri katika [**how2heap - shambulio la benki kubwa**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
Kimsingi hapa unaweza kuona jinsi, katika "toleo" la hivi karibuni la glibc (2.35), hakijakaguliwa: **`P->bk_nextsize`** kuruhusu kubadilisha anwani ya aina kubwa ya benki ikiwa hali fulani zinakutana.
Kimsingi hapa unaweza kuona jinsi, katika "toleo" la hivi karibuni la glibc (2.35), haikaguliwi: **`P->bk_nextsize`** kuruhusu kubadilisha anwani ya aina kubwa ya benki ikiwa hali fulani zinakutana.
Katika mfano huo unaweza kupata hali zifuatazo:
@ -32,16 +32,16 @@ Katika mfano huo unaweza kupata hali zifuatazo:
* Kipande kikubwa kidogo kuliko cha kwanza lakini katika index ile ile kinatengwa
* Lazima kiwe kidogo ili kwenye benki iende kwanza
* (Kipande cha kuzuia kuunganishwa na kipande cha juu kinajengwa)
* Kisha, kipande kikubwa cha kwanza kinatolewa na kipande kipya kikubwa kuliko hicho kinatengwa -> Kipande1 kinakwenda kwenye benki kubwa
* Kisha, kipande kikubwa cha pili kinatolewa
* Kisha, kipande kikubwa cha kwanza kinawekwa huru na kipande kipya kikubwa kuliko hicho kinatengwa -> Kipande1 kinakwenda kwenye benki kubwa
* Kisha, kipande kikubwa cha pili kinawekwa huru
* Sasa, udhaifu: Mshambuliaji anaweza kubadilisha `chunk1->bk_nextsize` kuwa `[lengo-0x20]`
* Kisha, kipande kikubwa kuliko kipande 2 kinatengwa, hivyo kipande2 kinaingizwa kwenye benki kubwa kwa kubadilisha anwani `chunk1->bk_nextsize->fd_nextsize` na anwani ya kipande2
{% hint style="success" %}
Kuna mazingira mengine yanayowezekana, jambo ni kuongeza kwenye benki kubwa kipande ambacho ni **kidogo** kuliko kipande cha sasa X kwenye benki, hivyo inahitaji kuwekwa kabla yake kwenye benki, na tunahitaji kuweza kubadilisha **`bk_nextsize`** ya X kwani hapo ndipo anwani ya kipande kidogo itaandikwa.
Kuna mazingira mengine yanayowezekana, jambo ni kuongeza kwenye benki kubwa kipande ambacho ni **kidogo** kuliko kipande X cha sasa kwenye benki, hivyo inahitaji kuwekwa kabla yake kwenye benki, na tunahitaji kuweza kubadilisha **`bk_nextsize`** ya X kwani hapo ndipo anwani ya kipande kidogo itaandikwa.
{% endhint %}
Hii ni nambari inayohusiana kutoka kwa malloc. Maoni yameongezwa ili kuelewa vizuri jinsi anwani ilibadilishwa:
Hii ni nambari inayofaa kutoka malloc. Maoni yameongezwa ili kuelewa vizuri jinsi anwani ilibadilishwa:
{% code overflow="wrap" %}
```c
@ -59,20 +59,27 @@ fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_
```
{% endcode %}
Hii inaweza kutumika **kubadilisha kipengele cha kimataifa cha `global_max_fast`** cha libc kisha kutumia shambulio la sanduku la haraka na vipande vikubwa.
Hii inaweza kutumika **kubadilisha `global_max_fast` kwenye kumbukumbu ya libc** kisha kutumia shambulio la sanduku la haraka na vipande vikubwa.
Unaweza kupata maelezo mengine mazuri ya shambulio hili katika [**guyinatuxedo**](https://guyinatuxedo.github.io/32-largebin\_attack/largebin\_explanation0/index.html).
### Mifano Mingine
* [**La casa de papel. HackOn CTF 2024**](https://7rocky.github.io/en/ctf/other/hackon-ctf/la-casa-de-papel/)
* Shambulio la sanduku kubwa katika hali ile ile inavyoonekana katika [**how2heap**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
* Msingi wa kuandika ni ngumu zaidi, kwa sababu `global_max_fast` haifai hapa.
* FSOP inahitajika kumaliza shambulio.
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,33 +1,34 @@
# Kujaza kwa kosa la moja
# Kujaza kwa kosa moja
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
## Taarifa Msingi
Kwa kupata ufikiaji tu wa kujaza 1B, mshambuliaji anaweza kuhariri biti ya `pre_in_use` kutoka kwa kipande kinachofuata na kwa kuwa kipande cha sasa hakitatumika, mwisho wa kipande unakuwa habari ya metadata ya ukubwa wa kipande kilichopita.\
Hii inaruhusu kuhariri ni vipande vipi vilivyofutwa kweli, ikisababisha uwezekano wa kuzalisha kipande kinachojumuisha kipande kingine halali.
Kwa kupata tu kujaza kwa 1B, mshambuliaji anaweza kubadilisha uga wa `size` kutoka kwa kikundi kinachofuata. Hii inaruhusu kuharibu ni vikundi vipi vilivyofutwa kwa kweli, ikisababisha uundaji wa kikundi kinachojumuisha kikundi kingine halali. Udukuzi huu ni sawa na [kufutwa mara mbili](double-free.md) au vikundi vinavyopishana.
Kuna aina 2 za udhaifu wa kujaza kwa kosa la moja:
Kuna aina 2 za udhaifu wa kujaza kwa kosa moja:
* Bayti isiyo na kikomo: Aina hii inaruhusu kubadilisha bayti hiyo na thamani yoyote
* Null off by one: Aina hii inaruhusu kubadilisha bayti hiyo tu na 0x00
* Mfano wa kawaida wa udhaifu huu unaweza kuonekana katika nambari ifuatayo ambapo tabia ya strlen na strcpy ni tofauti, ambayo inaruhusu kuweka bayti ya 0x00 mwanzoni mwa kipande kinachofuata.
* Bayti ya Null (kosa la null): Aina hii inaruhusu kubadilisha bayti hiyo tu na 0x00
* Mfano wa kawaida wa udhaifu huu unaweza kuonekana kwenye nambari ifuatayo ambapo tabia ya `strlen` na `strcpy` ni tofauti, ambayo inaruhusu kuweka bayti ya 0x00 mwanzoni mwa kikundi kinachofuata.
* Hii inaweza kudukuliwa na [House of Einherjar](house-of-einherjar.md).
* Ikiwa unatumia Tcache, hii inaweza kutumika kwa hali ya [kufutwa mara mbili](double-free.md).
<details>
<summary>Null off by one</summary>
<summary>Kujaza kwa kosa la Null</summary>
```c
// From https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off_by_one/
int main(void)
@ -46,7 +47,7 @@ return 0;
```
</details>
Miongoni mwa ukaguzi mwingine, sasa wakati kipande kinaachiliwa, ukubwa wa awali unalinganishwa na ukubwa ulioconfigure katika kipande cha metadata, hii inafanya shambulio hili kuwa ngumu kutoka kwa toleo la 2.28.
Miongoni mwa ukaguzi mwingine, sasa wakati kipande kinaachiliwa, ukubwa wa awali unalinganishwa na ukubwa uliowekwa katika metadata ya kipande, hii inafanya shambulio hili kuwa ngumu kutoka toleo la 2.28.
### Mfano wa Kanuni:
@ -56,69 +57,70 @@ Miongoni mwa ukaguzi mwingine, sasa wakati kipande kinaachiliwa, ukubwa wa awali
### Lengo
* Kufanya kipande kiwe kimejumuishwa ndani ya kipande kingine ili upatikanaji wa kuandika juu ya kipande cha pili kuruhusu kubadilisha kile kilichomo
* Fanya kipande kiwe kimejumuishwa ndani ya kipande kingine ili upate ufikiaji wa kuandika juu ya kipande cha pili kuruhusu kubadilisha kile kilichomo
### Mahitaji
* Kuvuja kwa kipande kimoja ili kurekebisha habari ya metadata ya ukubwa wa awali
* Kuvuja kwa kipande kimoja ili kubadilisha habari ya metadata ya ukubwa
### Shambulio
### Shambulio la kawaida la off-by-one
* Vipande 3 vya kumbukumbu (a, b, c) vinahifadhiwa mfululizo. Kisha kipande cha katikati kinachiliwa. Cha kwanza kina kasoro ya kuvuja kwa kipande kimoja na muhusika anaitumia na 0x00 (ikiwa byte ya awali ilikuwa 0x10 itafanya kipande cha katikati kiashiria kuwa ni kubwa kwa 0x10 kuliko ilivyo kweli).
* Kisha, vipande vidogo 2 zaidi vinatengwa katika kipande kilichotiwa huru katikati (b), hata hivyo, kwa sababu `b + b->size` kamwe haifanyi c chunk kwa sababu anwani iliyolengwa ni ndogo kuliko inavyopaswa.&#x20;
* Kisha, b1 na c vinatiwa huru. Kwa sababu `c - c->prev_size` bado inaelekeza kwa b (sasa b1), vyote viunganyishwa katika kipande kimoja. Hata hivyo, b2 bado iko ndani kati ya b1 na c.
* Tenga vipande vitatu `A`, `B` na `C` (semakipimo 0x20), na kingine kuzuia kujumuishwa na kipande cha juu.
* Acha huru `C` (imeingizwa kwenye orodha ya Tcache ya 0x20).
* Tumia kipande `A` kumwaga kwenye `B`. Tumia off-by-one kubadilisha uga wa `ukubwa` wa `B` kutoka 0x21 hadi 0x41.
* Sasa tuna `B` inayomiliki kipande huru `C`
* Acha huru `B` na tenganisha kipande cha 0x40 (kitawekwa hapa tena)
* Tunaweza kubadilisha kielekezi cha `fd` kutoka kwa `C`, ambayo bado iko huru (Tcache poisoning)
### Shambulio la Off-by-null
* Vipande 3 vya kumbukumbu (a, b, c) vinahifadhiwa mmoja baada ya mwingine. Kisha wa kati aachiliwa huru. Cha kwanza kina kasoro ya kumwaga kwa kipande kimoja na muhusika anaitumia na 0x00 (ikiwa kibambo cha awali kilikuwa 0x10 itafanya kipande cha kati kiashiria kuwa kidogo kwa 0x10 kuliko ilivyo kweli).
* Kisha, vipande vidogo 2 zaidi vinatengwa katika kipande kilichofunguliwa katikati (b), hata hivyo, kwani `b + b->ukubwa` kamwe haifanyi kipande c kwa sababu anwani iliyoelekezwa ni ndogo kuliko inavyopaswa.
* Kisha, b1 na c vinawekwa huru. Kwani `c - c->ukubwa_uliotangulia` bado inaelekeza kwa b (sasa b1), vyote viunganishwa katika kipande kimoja. Hata hivyo, b2 bado iko ndani kati ya b1 na c.
* Hatimaye, malloc mpya inafanywa kurudisha eneo hili la kumbukumbu ambalo kimsingi litakuwa na b2, kuruhusu mmiliki wa malloc mpya kudhibiti maudhui ya b2.
Picha hii inaelezea shambulio kikamilifu:
<figure><img src="../../.gitbook/assets/image (1247).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/shrinking_free_chunks">https://heap-exploitation.dhavalkapil.com/attacks/shrinking_free_chunks</a></p></figcaption></figure>
## Mifano Mingine & Marejeo
## Mifano na Marejeo Mengine
* [**https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks**](https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks)
* [**Bon-nie-appetit. HTB Cyber Apocalypse CTF 2022**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/bon-nie-appetit/)
* Off-by-one kwa sababu ya `strlen` inayozingatia uga wa `ukubwa` wa kipande cha pili.
* Tcache inatumika, hivyo mashambulio ya kawaida ya off-by-one yanafanya kazi kupata msingi wa kuandika wa kiholela na Tcache poisoning.
* [**Asis CTF 2016 b00ks**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#1-asis-ctf-2016-b00ks)
* Inawezekana kutumia kuvuja kwa kipande kimoja kuvuja anwani kutoka kwa kumbukumbu kwa sababu byte 0x00 mwishoni mwa string inaandikwa upya na uga ufuatao.
* Kuandika kiholela inapatikana kwa kutumia kuvuja kwa kipande kimoja ili kufanya pointer ielekee mahali pengine ambapo muundo bandia na pointa bandia zitajengwa. Kisha, ni rahisi kufuata pointer wa muundo huu ili kupata andika kiholela.
* Anwani ya libc inavuja kwa sababu ikiwa kumbukumbu inaongezwa kwa kutumia mmap, kumbukumbu iliyotengwa na mmap ina mbadala wa kudumu kutoka kwa libc.
* Hatimaye andika kiholela kinatumika kuandika kwenye anwani ya \_\_free\_hook na one gadget.
* Inawezekana kutumia off-by-one kuvuja anwani kutoka kwa kumbukumbu kwa sababu ya baiti 0x00 mwishoni mwa mfuatano wa herufi inayobadilishwa na uga unaofuata.
* Kuandika kiholela kunapatikana kwa kutumia off-by-one kuunda kielekezi kionyeshe mahali pengine ambapo muundo wa uwongo na kielekezi cha uwongo vitajengwa. Kisha, inawezekana kufuata kielekezi cha muundo huu ili kupata kuandika kiholela.
* Anwani ya libc inavuja kwa sababu ikiwa kumbukumbu inaongezwa kwa kutumia mmap, kumbukumbu iliyotengwa na mmap ina mbadala wa kudumu kutoka libc.
* Hatimaye kuandika kiholela kunatumika kuandika kwenye anwani ya \_\_free\_hook na kifaa cha moja.
* [**plaidctf 2015 plaiddb**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#instance-2-plaidctf-2015-plaiddb)
* Kuna kuvuja kwa kipande kimoja cha NULL katika kazi ya `getline` inayosoma mistari ya mwingiliano wa mtumiaji. Kazi hii hutumiwa kusoma "funguo" ya maudhui na sio maudhui.
* Katika mwongozo wa 5 wa awali vipande vinavyoanzishwa ni:
* Kuna udhaifu wa off-by-one wa NULL katika kazi ya `getline` inayosoma mistari ya mwingiliano wa mtumiaji. Kazi hii hutumika kusoma "ufunguo" wa maudhui na sio maudhui.
* Katika mwongozo, vipande 5 vya awali vinajengwa:
* kipande1 (0x200)
* kipande2 (0x50)
* kipande5 (0x68)
* kipande3 (0x1f8)
* kipande4 (0xf0)
* ulinzi wa kipande (0x400) ili kuepuka kuunganishwa na kipande cha juu
* Kisha kipande 1, 5 na 3 vinatiwa huru, hivyo:
* ulinzi wa kipande (0x400) ili kuepuka kujumuishwa na kipande cha juu
* Kisha kipande 1, 5 na 3 vinaachiliwa huru, hivyo:
* ```python
[ 0x200 Kipande 1 (huru) ] [ 0x50 Kipande 2 ] [ 0x68 Kipande 5 (huru) ] [ 0x1f8 Kipande 3 (huru) ] [ 0xf0 Kipande 4 ] [ 0x400 Kipande la ulinzi ]
[ 0x200 Kipande 1 (huru) ] [ 0x50 Kipande 2 ] [ 0x68 Kipande 5 (huru) ] [ 0x1f8 Kipande 3 (huru) ] [ 0xf0 Kipande 4 ] [ 0x400 Ulinzi wa Kipande ]
```
* Kisha kwa kutumia kipande3 (0x1f8) kuvuja kwa kipande kimoja cha NULL kunatumika kuandika prev\_size kuwa `0x4e0`.
* Angalia jinsi vipande vilivyotengwa awali vya kipande1, 2, 5 na 3 pamoja na vichwa vya 4 vya vipande hivyo vinavyolingana na `0x4e0`: `hex(0x1f8 + 0x10 + 0x68 + 0x10 + 0x50 + 0x10 + 0x200) = 0x4e0`
* Kisha, kipande 4 kinatiwa huru, kuzalisha kipande kinachotumia vipande vyote hadi mwanzo:
* Kisha kwa kutumia kipande3 (0x1f8) udhaifu wa off-by-null unatumika kuandika prev\_size kuwa `0x4e0`.
* Angalia jinsi vipimo vya vipande vilivyotengwa awali vya 1, 2, 5 na 3 pamoja na vichwa vya 4 vya vipande hivyo vinavyolingana na `0x4e0`: `hex(0x1f8 + 0x10 + 0x68 + 0x10 + 0x50 + 0x10 + 0x200) = 0x4e0`
* Kisha, kipande 4 kinaachiliwa huru, kuzalisha kipande kinachotumia vipande vyote hadi mwanzo:
* ```python
[ 0x4e0 Kipande 1-2-5-3 (huru) ] [ 0xf0 Kipande 4 (haribika) ] [ 0x400 Kipande la ulinzi ]
[ 0x4e0 Kipande 1-2-5-3 (huru) ] [ 0xf0 Kipande 4 (haribika) ] [ 0x400 Ulinzi wa Kipande ]
```
* ```python
[ 0x200 Kipande 1 (huru) ] [ 0x50 Kipande 2 ] [ 0x68 Kipande 5 (huru) ] [ 0x1f8 Kipande 3 (huru) ] [ 0xf0 Kipande 4 ] [ 0x400 Kipande la ulinzi ]
[ 0x200 Kipande 1 (huru) ] [ 0x50 Kipande 2 ] [ 0x68 Kipande 5 (huru) ] [ 0x1f8 Kipande 3 (huru) ] [ 0xf0 Kipande 4 ] [ 0x400 Ulinzi wa Kipande ]
```
* Kisha, `0x200` byte zinatengwa kujaza kipande cha awali 1
* Na byte nyingine 0x200 zinatengwa na kipande2 kuharibiwa na hivyo hakuna kuvuja na hii haifanyi kazi? Labda hii haipaswi kufanywa
* Kisha, inatenga kipande kingine na "a" 0x58 (ikiandika juu ya kipande2 na kufikia kipande5) na kurekebisha `fd` ya kipande cha fast bin cha kipande5 ikielekeza kwa `__malloc_hook`
* Kisha, kipande cha 0x68 kinatengwa hivyo kipande bandia cha fast bin katika `__malloc_hook` ni kipande cha fast bin kinachofuata
* Kisha, vipande `0x200` vinatengwa kujaza kipande cha awali 1
* Na vipande vingine 0x200 vinatengwa na kipande2 kuharibiwa na hivyo hakuna uvujaji wa kufanya kazi na hii haifanyi kazi? Labda hii haipaswi kufanywa
* Kisha, inatenga kipande kingine na "a" 0x58 (ikiandika juu ya kipande2 na kufikia kipande5) na kubadilisha `fd` ya kipande cha fast bin cha kipande5 ikielekeza kwa `__malloc_hook`
* Kisha, kipande cha 0x68 kinatengwa hivyo kipande cha fast bin cha uwongo katika `__malloc_hook` ni kipande cha fast bin kinachofuata
* Hatimaye, kipande kipya cha fast bin cha 0x68 kinatengwa na `__malloc_hook` inaandikwa upya na anwani ya `one_gadget`
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>

View file

@ -2,7 +2,7 @@
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalamu wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
@ -18,23 +18,23 @@ Baadhi ya mbinu zilizopendekezwa za kutumia kipande cha heap zinahitaji uwezo wa
### Matumizi Rahisi Baada ya Kufutwa
Ikiwa ni rahisi kwa mshambuliaji **kuandika habari kwenye kipande kilichofutwa**, anaweza kutumia hii kubadilisha pointers zinazohitajika.
Ikiwa ni rahisi kwa mshambuliaji **kuandika habari kwenye kipande kilichofutwa**, wanaweza kutumia hii kubadilisha pointers zinazohitajika.
### Kufuta Mara Mbili
Ikiwa mshambuliaji anaweza **`kufuta` mara mbili kipande kimoja** (kufuta vipande vingine kati yake kwa uwezekano) na kufanya iwe **mara 2 kwenye bakuli moja**, itawezekana kwa mtumiaji **kuweka upya kipande baadaye**, **kuandika pointers zinazohitajika** na kisha **kuweka upya** kuzindua vitendo vya kipande kikizinduliwa (k.m. shambulio la bakuli la haraka, shambulio la tcache...)
Ikiwa mshambuliaji anaweza **`kufuta` mara mbili kipande kimoja** (kufuta vipande vingine kati yake pia) na kufanya iwe **mara 2 kwenye bakuli moja**, itawezekana kwa mtumiaji **kuweka upya kipande baadaye**, **kuandika pointers zinazohitajika** na kisha **kuweka upya** kuzindua vitendo vya kipande kikihesabiwa (k.m. shambulio la bakuli la haraka, shambulio la tcache...)
### Kujaa Kipande cha Heap
Inaweza kuwa iwezekanavyo kufanya **kujaa kwa kipande kilichotengwa kikiwa na kipande kilichofutwa kando yake** na kubadilisha vichwa/viashiria fulani vyake.
Inaweza kuwa iwezekanavyo kufanya **kujaa kwa kipande kilichotengwa kikiwa na kipande kilichofutwa** na kubadilisha vichwa/viashiria fulani.
### Kujaa Kwa 1 Zaidi
### Kujaa kwa Kimo cha Moja
Katika kesi hii ingewezekana **kubadilisha ukubwa** wa kipande kinachofuata kwenye kumbukumbu. Mshambuliaji anaweza kutumia hii **kuweka ukubwa mkubwa** kwa kipande kilichotengwa, kisha **`kufuta`** hiyo, kufanya kipande kiwe **kimeongezwa kwenye bakuli la ukubwa tofauti** (mkubwa), kisha kutenga **ukubwa bandia**, na shambulio litakuwa na ufikiaji wa **kipande chenye ukubwa mkubwa** kuliko ilivyo kweli, **hivyo kutoa kujaa kwa kipande cha heap** (angalia sehemu iliyotangulia).
Katika kesi hii ingewezekana kubadilisha **ukubwa** wa kipande kinachofuata kwenye kumbukumbu. Mshambuliaji anaweza kutumia hii kufanya **kipande kilichotengwa kiwe na ukubwa mkubwa**, kisha **`kifute`**, kufanya kipande kiwe **kimeongezwa kwenye bakuli la ukubwa tofauti** (mkubwa), kisha kutenga **ukubwa bandia**, na shambulio litakuwa na ufikiaji wa **kipande chenye ukubwa mkubwa** kuliko ilivyo kweli, **hivyo kutoa hali ya vipande vinavyolingana**, ambayo inaweza kutumiwa kwa njia ile ile kama **kujaa kwa kipande cha heap** (angalia sehemu iliyotangulia).
<details>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalamu wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:

View file

@ -1,66 +1,59 @@
# Shambulizi la Tcache Bin
# Shambulio la Tcache Bin
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
## Taarifa Msingi
Kwa habari zaidi kuhusu ni nini tcache bin angalia ukurasa huu:
Kwa habari zaidi kuhusu ni nini Tcache bin angalia ukurasa huu:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Kwanza kabisa, kumbuka kuwa Tcache iliingizwa katika toleo la glibc 2.26.
Kwanza kabisa, kumbuka kuwa Tcache ilitambulishwa katika toleo la Glibc 2.26.
Shambulizi la **Tcache** lililopendekezwa katika [**ukurasa wa guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) ni sawa sana na shambulizi la fast bin ambapo lengo ni kubadilisha pointer kwenda kwa kipande kinachofuata kwenye bin ndani ya kipande kilichofutwa kwenda kwa anwani isiyojulikana ili baadaye iwezekane **kuweka anwani hiyo maalum na labda kubadilisha pointes**.
**Shambulio la Tcache** (pia inajulikana kama **Tcache poisoning**) lililopendekezwa katika [**ukurasa wa guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) ni sawa sana na shambulio la fast bin ambapo lengo ni kubadilisha pointer kwa kipande kinachofuata kwenye bin ndani ya kipande kilichofutwa kwa anwani isiyojulikana ili baadaye iwezekane **kuweka anwani hiyo maalum na labda kubadilisha pointi**.
Hata hivyo, siku hizi, ukikimbia nambari iliyotajwa utapata kosa: **`malloc(): unaligned tcache chunk detected`**. Kwa hivyo, ni muhimu kuandika anwani iliyolingana katika pointer mpya (au kutekeleza mara za kutosha nambari ili anwani iliyoandikwa iwe kweli imeunganishwa).
Hata hivyo, siku hizi, ukikimbia nambari iliyotajwa utapata kosa: **`malloc(): unaligned tcache chunk detected`**. Kwa hivyo, ni muhimu kuandika anwani iliyolingana katika pointer mpya (au kutekeleza mara za kutosha nambari ili anwani iliyoandikwa iwe kweli imeambatanishwa).
### Shambulizi la vitambulisho vya Tcache
### Shambulio la vitambulisho vya Tcache
Kawaida inawezekana kupata mwanzoni mwa kipande cha heap kikichukua **idadi ya vipande kwa kila kielelezo** ndani ya tcache na anwani ya **kipande cha kichwa cha kila kielelezo cha tcache**. Ikiwa kwa sababu fulani inawezekana kubadilisha habari hii, itakuwa inawezekana **kuweka kipande cha kichwa cha kielelezo fulani kuelekea kwenye anwani inayotakiwa** (kama kitanzi cha malloc) kisha baadaye kuweka kipande cha ukubwa wa kielelezo na kubadilisha maudhui ya kitanzi cha malloc katika kesi hii.
Kawaida inawezekana kupata mwanzoni mwa rundo kipande kinachohifadhi **idadi ya vipande kwa kila kitambulisho** ndani ya tcache na anwani ya **kipande cha kichwa cha kila kitambulisho cha tcache**. Ikiwa kwa sababu fulani inawezekana kubadilisha habari hii, ingewezekana **kuweka kipande cha kichwa cha kitambulisho fulani kiashiria anwani inayotakiwa** (kama vile `__malloc_hook`) kisha kuweka kipande cha ukubwa wa kitambulisho na kubadilisha maudhui ya `__malloc_hook` katika kesi hii.
## Mifano
* CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html)
* **Uvuvi wa habari za Libc**: Inawezekana kujaza tcaches, kuongeza kipande kwenye orodha isiyopangwa, kufuta tcache na **kuweka upya kipande kutoka kwenye bin isiyopangwa** ikibadilisha tu 8B za kwanza, ikiiacha **anwani ya pili ya libc kutoka kwa kipande ikiwa bado tunaweza kuisoma**.
* **Shambulizi la Tcache**: Programu ina mapungufu ya 1B ya kujaa kwa kipande cha heap. Hii itatumika kubadilisha **kichwa cha ukubwa** cha kipande kilichopewa kufanya iwe kubwa zaidi. Kisha, kipande hiki kitafutwa, kikiwekwa kwenye tcache ya vipande vya ukubwa wa bandia. Kisha, tutapata kipande cha ukubwa wa bandia, na kipande kilichopita kitajulikana kuwa **kidogo zaidi** na hii itatoa fursa ya **kubadilisha kipande kinachofuata kwenye kumbukumbu**.\
Tutatumia hii kubadilisha **kidole cha FD cha kipande kinachofuata** kuelekea **`malloc_hook`**, kisha ni rahisi kuweka 2 pointi: kwanza pointi halali tuliyobadilisha, na kisha alokesheni ya pili itarudisha kipande kwa **`malloc_hook`** ambayo inawezekana kutumia kuandika **gadget moja**.
* **Uvuvi wa habari za Libc**: Inawezekana kujaza tcaches, kuongeza kipande kwenye orodha isiyopangwa, kufuta tcache na **kuweka upya kipande kutoka kwenye rundo lisilopangwa** ikibadilisha tu 8B za kwanza, ikiiacha **anwani ya pili ya libc kutoka kwa kipande ikiwa bado tunaweza kuisoma**.
* **Shambulio la Tcache**: Programu ina mapungufu ya 1B ya kumwaga rundo. Hii itatumika kubadilisha **kichwa cha ukubwa** wa kipande kilichoombwa kufanya iwe kubwa zaidi. Kisha, kipande hiki kitafutwa, kikiwekwa kwenye tcache ya vipande vya ukubwa wa bandia. Kisha, tutapata kipande na ukubwa wa bandia, na kipande kilichopita kitajulikana kuwa **kidogo kweli** na hii itatoa fursa ya **kubadilisha kipande kinachofuata kwenye kumbukumbu**.\
Tutatumia hii kudukua **kubadilisha pointer ya FD ya kipande kinachofuata** ili iashirie **`malloc_hook`**, kisha niwezekane kuweka alama 2: kwanza pointer halali tuliyobadilisha, na kisha alokesheni ya pili itarudisha kipande kwa **`malloc_hook`** ambayo inawezekana kudukua kuandika **gadget moja**.
* CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html)
* **Uvuvi wa habari za Libc**: Kuna matumizi baada ya kufuta na kufuta mara mbili. Katika mwongozo huu mwandishi alifichua anwani ya libc kwa kusoma anwani ya kipande kilichowekwa kwenye bin ndogo (kama kuvuja kutoka kwa bin isiyopangwa lakini kutoka kwa ile ndogo).
* **Shambulizi la Tcache**: Tcache inafanywa kupitia **kufuta mara mbili**. Kipande kimoja kinafutwa mara mbili, kwa hivyo ndani ya Tcache kipande kitaelekeza kwake yenyewe. Kisha, kinalokeshwa, kidole chake cha FD kinabadilishwa kuelekea **kitanzi cha bure** na kisha kinalokeshwa tena ili kipande kinachofuata kwenye orodha iwe kwenye kitanzi cha bure. Kisha, hii pia inalokeshwa na inawezekana kuandika anwani ya `system` hapa ili wakati malloc inayotumia `"/bin/sh"` inapofutwa tupate kibao.
* **Uvuvi wa habari za Libc**: Kuna matumizi baada ya kufuta na kufuta mara mbili. Katika mwongozo huu mwandishi alifichua anwani ya libc kwa kusoma anwani ya kipande kilichowekwa kwenye rundo dogo (kama kuvuja kutoka kwa rundo lisilopangwa lakini kutoka kwa rundo dogo)
* **Shambulio la Tcache**: Tcache inafanywa kupitia **kufuta mara mbili**. Kipande kimoja kinafutwa mara mbili, kwa hivyo ndani ya Tcache kipande kitaiashiria yenyewe. Kisha, kinaombwa, pointer yake ya FD inabadilishwa ili iashirie **kukata kwa bure** na kisha kinaombwa tena ili kipande kinachofuata kwenye orodha iwe kwenye kukata kwa bure. Kisha, hii pia inaombwa na inawezekana kuandika anwani ya `system` hapa ili wakati malloc inayotia ndani `"/bin/sh"` inafutwa tunapata kabati.
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html)
* Udhaifu kuu hapa ni uwezo wa `kufuta` anwani yoyote kwenye heap kwa kuonyesha kisanduku chake
* **Shambulizi la vitambulisho vya Tcache**: Inawezekana kugawa na kufuta kipande cha ukubwa ambao unapohifadhiwa ndani ya kipande cha tcache (kipande chenye habari za mabano ya tcache) itazalisha **anwani yenye thamani ya 0x100**. Hii ni kwa sababu tcache inahifadhi idadi ya vipande kwa kila bin katika byte tofauti, kwa hivyo kipande kimoja katika kielelezo maalum kinazalisha thamani ya 0x100.
* Kisha, thamani hii inaonekana kama kuna kipande cha ukubwa wa 0x100. Kuruhusu kutumia kwa kufuta anwani hii. Hii itaongeza anwani hiyo kwenye kielelezo cha vipande vya ukubwa wa 0x100 katika tcache.
* Kisha, **kugawa** kipande cha ukubwa wa **0x100**, anwani ya awali itarudishwa kama kipande, kuruhusu kuandika vitambulisho vingine vya tcache.\
Kwa mfano kuweka anwani ya kitanzi cha malloc katika moja yao na kugawa kipande cha ukubwa wa kielelezo hicho kutatoa kipande katika kitanzi cha calloc, ambacho kinaruhusu kuandika kifaa kimoja kupata ganda la s.
* Udhaifu kuu hapa ni uwezo wa `kufuta` anwani yoyote kwenye rundo kwa kuonyesha kisanduku chake
* **Shambulio la vitambulisho vya Tcache**: Inawezekana kuomba na kufuta kipande cha ukubwa ambao unapohifadhiwa ndani ya kipande cha tcache (kipande chenye habari za vikasha vya tcache) itazalisha **anwani yenye thamani ya 0x100**. Hii ni kwa sababu tcache inahifadhi idadi ya vipande kwa kila kikasha katika baiti tofauti, kwa hivyo kipande kimoja katika kikasha maalum kinazalisha thamani ya 0x100.
* Kisha, thamani hii inaonekana kama kuna kipande cha ukubwa wa 0x100. Kuruhusu kudukua kwa `kufuta` anwani hii. Hii itaongeza anwani hiyo kwenye kikasha cha vipande vya ukubwa wa 0x100 katika tcache.
* Kisha, **kuomba** kipande cha ukubwa wa **0x100**, anwani ya awali itarudishwa kama kipande, kuruhusu kudukua vitambulisho vingine vya tcache.\
Kwa mfano kuweka anwani ya kitanzi cha malloc katika moja yao na kuomba kipande cha ukubwa wa kikasha hicho kutatoa kipande katika kitanzi cha calloc, ambacho kinaruhusu kuandika kifaa kimoja kupata kabati.
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html)
* Udhaifu sawa na hapo awali na kizuizi kimoja zaidi
* **Shambulizi la vitambulisho vya Tcache**: Shambulizi sawa na lile lililopita lakini likitumia hatua chache kwa **kufuta kipande kinachohifadhi habari za tcache** ili anwani yake iongezwe kwenye kielelezo cha tcache cha ukubwa wake ili iwezekane kugawa ukubwa huo na kupata habari za tcache kama kipande, kuruhusu kuongeza kitanzi cha bure kama anwani ya kielelezo, kugawa, na kuandika kifaa kimoja juu yake.
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
* **Shambulio la vitambulisho vya Tcache**: Shambulio sawa na lile lililopita lakini kwa kutumia hatua chache kwa **kufuta kipande kinachohifadhi habari za tcache** ili anwani yake iongezwe kwenye kikasha cha tcache cha ukubwa wake ili iwezekane kuomba ukubwa huo na kupata habari za kipande cha tcache kama kipande, ambacho kuruhusu kuongeza kitanzi cha bure kama anwani ya kikasha kimoja, kuialokesheni, na kuandika kifaa kimoja juu yake.
* [**Math Door. HTB Cyber Apocalypse CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/)
* **Andika Baada ya Kufuta** ili kuongeza nambari kwa pointer ya `fd`.
* Kuna **heap feng-shui** nyingi inahitajika katika changamoto hii. Mwongozo unaonyesha jinsi **kudhibiti kichwa cha orodha ya bure ya Tcache** ni muhimu sana.
* **Kuvuja kwa Glibc** kupitia `stdout` (FSOP).
* **Tcache poisoning** kupata msingi wa kuandika wa kiholela.
* **Jiunge na** 💬 [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwenye** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.

View file

@ -2,21 +2,21 @@
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
## Taarifa Msingi
Wakati shambulio hili lilipogunduliwa kwa kiasi kikubwa iliruhusu WWW (Andika Nini Wapi), hata hivyo, **uchunguzi fulani uliongezwa** kufanya toleo jipya la shambulio liwe la kuvutia zaidi na **ngumu zaidi na **hakina maana**.
Wakati shambulio hili lilipogunduliwa kwa kiasi kikubwa liliruhusu WWW (Andika Nini Wapi), hata hivyo, **uchunguzi fulani uliongezwa** kufanya toleo jipya la shambulio liwe la kuvutia zaidi na **ngumu zaidi na **batili**.
### Mfano wa Kanuni:
@ -93,24 +93,24 @@ return 0;
### Lengo
Shambulizi hili linaruhusu **kubadilisha kipande cha kielekezi ili kielekee anwani 3 kabla yake**. Ikiwa eneo hili jipya (mazingira ya kielekezi kilipokuwa) lina vitu vya kuvutia, kama alokesheni zingine zinazoweza kudhibitiwa / stack..., inawezekana kusoma/kuandika juu yao kusababisha madhara makubwa zaidi.
Shambulizi hili linaruhusu **kubadilisha kipande cha kielekezi ili kielekee anwani 3 kabla yake**. Ikiwa eneo hili jipya (mazingira ya kielekezi kilipo) lina vitu vya kuvutia, kama alokesheni zingine zinazoweza kudhibitiwa / stack..., inawezekana kusoma/kuandika juu yao kusababisha madhara makubwa zaidi.
* Ikiwa kielekezi hiki kilikuwa kwenye stack, kwa sababu sasa kinakielekeza anwani 3 kabla yake na mtumiaji anaweza kusoma na kukiweka, itawezekana kuvuja habari nyeti kutoka kwenye stack au hata kubadilisha anwani ya kurudi (labda) bila kugusa canary
* Katika mifano ya CTF, kielekezi hiki kipo katika safu ya kielekezi kwa alokesheni zingine, hivyo, kufanya kielekezi hicho kielekee 3 anwani kabla na kuweza kusoma na kuandika, inawezekana kufanya kielekezi kingine kielekee anwani zingine.\
Kwa kuwa mtumiaji anaweza kusoma/kuandika pia alokesheni zingine, anaweza kuvuja habari au kuandika anwani mpya katika maeneo ya kiholela (kama kwenye GOT).
* Ikiwa kielekezi hiki kilikuwa kipo kwenye stack, kwa sababu sasa kinakielekeza anwani 3 kabla yake na mtumiaji anaweza kusoma na kukiweka, itawezekana kuvuja habari nyeti kutoka kwenye stack au hata kubadilisha anwani ya kurudi (labda) bila kugusa canary
* Katika mifano ya CTF, kielekezi hiki kipo katika safu ya kielekezi kwa alokesheni zingine, hivyo, kufanya kielekezi hicho kielekee anwani 3 kabla na kuweza kusoma na kuandika, inawezekana kufanya kielekezi kingine kielekee anwani zingine.\
Kwa kuwa mtumiaji anaweza kusoma/kuandika pia alokesheni zingine, anaweza kuvuja habari au kuandika anwani mpya kwenye maeneo ya kiholela (kama kwenye GOT).
### Mahitaji
* Udhibiti fulani katika kumbukumbu (k.m. stack) ili kuunda vikundi viwili vikitoa thamani kwa baadhi ya sifa.
* Udhibiti fulani kwenye kumbukumbu (k.m. stack) ili kuunda vikundi viwili vikitoa thamani kwa baadhi ya sifa.
* Kuvuja kwa stack ili kuweza kuweka kielekezi cha kipande bandia.
### Shambulizi
* Kuna vikundi viwili (kikundi1 na kikundi2)
* Mshambuliaji anadhibiti maudhui ya kikundi1 na vichwa vya kikundi2.
* Katika kikundi1 mshambuliaji anaunda muundo wa kipande bandia:
* Ili kukiuka ulinzi anahakikisha kuwa uga wa `ukubwa` ni sahihi ili kuepuka kosa: `corrupted size vs. prev_size while consolidating`
* na uga wa `fd` na `bk` wa kipande bandia unaelekeza mahali ambapo kielekezi cha kikundi1 kimehifadhiwa kwa kuzingatia vipimo vya -3 na -2 mtawalia hivyo `kielekezi_bandia->fd->bk` na `kielekezi_bandia->bk->fd` vinakielekeza eneo kwenye kumbukumbu (stack) ambapo anwani halisi ya kikundi1 ilipo:
* Mshambulizi anadhibiti maudhui ya kikundi1 na vichwa vya kikundi2.
* Kwenye kikundi1 mshambulizi anaunda muundo wa kipande bandia:
* Ili kukiuka ulinzi anahakikisha kuwa uga wa `ukubwa` ni sahihi ili kuepuka kosa: `ukubwa ulioharibika dhidi ya ukubwa uliopita wakati wa kufanya kazi`
* na uga wa `fd` na `bk` wa kipande bandia unaelekeza mahali ambapo kielekezi cha kikundi1 kimehifadhiwa kwa kutumia offsets ya -3 na -2 mtawalia hivyo `kielekezi_bandia->fd->bk` na `kielekezi_bandia->bk->fd` vinakielekeza mahali kwenye kumbukumbu (stack) ambapo anwani halisi ya kikundi1 ilipo:
<figure><img src="../../.gitbook/assets/image (1245).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>
@ -118,9 +118,9 @@ Kwa kuwa mtumiaji anaweza kusoma/kuandika pia alokesheni zingine, anaweza kuvuja
* Wakati kikundi cha pili kinapofutwa basi kipande bandia hiki kinatenganishwa kufanyika:
* `kielekezi_bandia->fd->bk` = `kielekezi_bandia->bk`
* `kielekezi_bandia->bk->fd` = `kielekezi_bandia->fd`
* Awali ilifanywa kuwa `kielekezi_bandia->fd->bk` na `kielekezi_bandia->fd->bk` vinakielekeza mahali sawa (eneo kwenye stack ambapo `kikundi1` kilihifadhiwa, hivyo ilikuwa orodha halali). Kwa kuwa **vyote vinakielekeza eneo moja** ni lile la mwisho (`kielekezi_bandia->bk->fd = kielekezi_bandia->fd`) litakalokuwa na **athari**.
* Hii ita**andika upya kielekezi cha kikundi1 kwenye stack kuelekea anwani (au baite) iliyohifadhiwa anwani 3 kabla kwenye stack**.
* Hivyo, ikiwa mshambuliaji angeweza kudhibiti maudhui ya kikundi1 tena, ataweza **kuandika ndani ya stack** akiruhusu kwa uwezekano wa kuandika upya anwani ya kurudi akiruka canary na kubadilisha thamani na kielekezi cha vipengele vya ndani. Hata kubadilisha tena anwani ya kikundi1 iliyohifadhiwa kwenye stack kwenda eneo tofauti ambapo ikiwa mshambuliaji angeweza kudhibiti tena maudhui ya kikundi1 ataweza kuandika popote.
* Awali ilifanywa kuwa `kielekezi_bandia->fd->bk` na `kielekezi_bandia->bk->fd` vinakielekeza mahali sawa (eneo kwenye stack ambapo `kikundi1` kilihifadhiwa, hivyo ilikuwa orodha halali). Kwa kuwa **vyote vinakielekeza mahali sawa** ni mwisho mmoja tu (`kielekezi_bandia->bk->fd = kielekezi_bandia->fd`) utachukua **athari**.
* Hii ita**andika upya kielekezi cha kikundi1 kwenye stack kwenye anwani (au baits) zilizohifadhiwa anwani 3 kabla kwenye stack**.
* Hivyo, ikiwa mshambulizi angeweza kudhibiti tena maudhui ya kikundi1, ataweza **kuandika ndani ya stack** akiruhusu kwa uwezekano wa kuandika upya anwani ya kurudi akiruka canary na kubadilisha thamani na kielekezi cha vipengele vya ndani. Hata kubadilisha tena anwani ya kikundi1 iliyohifadhiwa kwenye stack kwenda eneo tofauti ambapo ikiwa mshambulizi angeweza kudhibiti tena maudhui ya kikundi1 ataweza kuandika popote.
* Tafadhali elewa kuwa hili lilikuwa linawezekana kwa sababu **anwani zilikuwa zimehifadhiwa kwenye stack**. Hatari na unyonyaji inaweza kutegemea **anwani za kipande bandia zinahifadhiwa wapi**.
<figure><img src="../../.gitbook/assets/image (1246).png" alt=""><figcaption><p><a href="https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit">https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit</a></p></figcaption></figure>
@ -130,11 +130,11 @@ Kwa kuwa mtumiaji anaweza kusoma/kuandika pia alokesheni zingine, anaweza kuvuja
* [https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit](https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit)
* Ingawa itakuwa ajabu kupata shambulizi la unlink hata katika CTF hapa kuna baadhi ya maandishi ambapo shambulizi hili lilikuwa limeitwa:
* Mfano wa CTF: [https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html)
* Katika mfano huu, badala ya stack kuna safu ya anwani za malloc'ed. Shambulizi la unlink linatekelezwa ili kuweza kuweka kipande hapa, hivyo kuweza kudhibiti kielekezi cha safu ya anwani za malloc'ed. Kisha, kuna utendaji mwingine unaoruhusu kubadilisha maudhui ya vikundi katika anwani hizi, ambayo inaruhusu kuelekeza anwani kwenye GOT, kubadilisha anwani za kazi kupata uvujaji wa libc, na kisha kubadilisha GOT ya atoi na anwani ya kifaa cha moja.
* Katika mfano huu, badala ya stack kuna safu ya anwani za malloc'ed. Shambulizi la unlink linatekelezwa ili kuweza kuweka kipande hapa, hivyo kuweza kudhibiti kielekezi cha safu ya anwani za malloc'ed. Kisha, kuna utendaji mwingine unaoruhusu kubadilisha maudhui ya vipande katika anwani hizi, ambayo inaruhusu kuelekeza anwani kwenye GOT, kubadilisha anwani za kazi kupata vuvuzela na RCE.
* Mfano mwingine wa CTF: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html)
* Kama ilivyokuwa katika mfano uliopita, kuna safu ya anwani za alokesheni. Inawezekana kutekeleza shambulizi la unlink ili kufanya anwani ya alokesheni ya kwanza ielekee machache kabla ya kuanza safu na kisha kuandika alokesheni hii kwenye nafasi mpya. Hivyo, inawezekana kuandika upya kielekezi cha alokesheni zingine ili kielekee GOT ya atoi, kuchapisha kwa kupata uvujaji wa libc, na kisha kuandika tena GOT ya atoi na anwani ya kifaa cha moja.
* Kama ilivyokuwa katika mfano uliopita, kuna safu ya anwani za alokesheni. Inawezekana kutekeleza shambulizi la unlink ili kufanya anwani ya alokesheni ya kwanza ielekee machache kabla ya kuanza safu na kisha kuandika alokesheni hii kwenye nafasi mpya. Hivyo, inawezekana kuandika upya kielekezi cha alokesheni zingine ili kielekee GOT ya atoi, kuchapisha kupata uvujaji wa libc, na kisha kuandika atoi GOT na anwani ya kifaa cha moja.
* Mfano wa CTF na kazi za malloc na free za desturi ambazo zinatumia udhaifu kama shambulizi la unlink: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html)
* Kuna kipeperushi kinachoruhusu kudhibiti FD na BK pointers za malloc ya desturi ambayo itakuwa huru (desturi). Zaidi ya hayo, heap ina biti ya exec, hivyo inawezekana kuvuja anwani ya heap na kuelekeza kazi kutoka kwa GOT kwenye kipande cha heap na shellcode kutekelezwa.
* Kuna kipeperushi kinachoruhusu kudhibiti FD na BK pointers za malloc ya desturi ambayo itakuwa huru (desturi). Zaidi ya hayo, alokesheni ina biti ya exec, hivyo inawezekana kuvuja anwani ya alokesheni na kuelekeza kazi kutoka kwa GOT kwenye kipande cha alokesheni na shellcode kutekelezwa.
<details>
@ -145,7 +145,7 @@ Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,4 +1,4 @@
# Shambulio la Bin isiyo na Mpangilio
# Shambulio la Benki Isiyopangwa
<details>
@ -6,7 +6,7 @@
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
@ -16,52 +16,52 @@ Njia nyingine za kusaidia HackTricks:
## Taarifa Msingi
Kwa habari zaidi kuhusu ni nini bin isiyo na mpangilio angalia ukurasa huu:
Kwa habari zaidi kuhusu ni nini benki isiyopangwa angalia ukurasa huu:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
Orodha zisizopangiliwa zinaweza kuandika anwani kwa `unsorted_chunks (av)` katika anwani ya `bk` ya kipande. Kwa hivyo, ikiwa mshambuliaji anaweza **kurekebisha anwani ya kielekezi cha bk** katika kipande ndani ya benki isiyo na mpangilio, anaweza kuwa na uwezo wa **kuandika anwani hiyo katika anwani ya kupendelea** ambayo inaweza kusaidia kuvuja anwani ya libc au kuepuka ulinzi fulani.
Orodha zisizopangwa zinaweza kuandika anwani kwa `unsorted_chunks (av)` kwenye anwani ya `bk` ya kipande. Kwa hivyo, ikiwa mshambuliaji anaweza **kurekebisha anwani ya kielekezi cha `bk`** katika kipande ndani ya benki isiyopangwa, anaweza kuwa na uwezo wa **kuandika anwani hiyo kwenye anwani isiyojulikana** ambayo inaweza kusaidia kuvuja anwani ya Glibc au kuepuka ulinzi fulani.
Kwa hivyo, kimsingi, shambulio hili liliruhusu **kubadilisha anwani isiyo ya kawaida na nambari kubwa** (anwani ambayo inaweza kuwa anwani ya rundo au anwani ya libc) kama anwani ya rundo ambayo inaweza kuvuja au kizuizi kama kipengee cha kipekee cha **`global_max_fast`** kuruhusu kuunda benki za haraka zenye saizi kubwa (na kupita kutoka kwa shambulio la benki isiyo na mpangilio hadi shambulio la benki ya haraka).
Kwa hivyo, kimsingi, shambulio hili linaruhusu **kuweka nambari kubwa kwenye anwani isiyojulikana**. Nambari kubwa hii ni anwani, ambayo inaweza kuwa anwani ya rundo au anwani ya Glibc. Lengo la kawaida ni **`global_max_fast`** kuruhusu kuunda benki za haraka zenye saizi kubwa (na kupita kutoka shambulio la benki isiyopangwa hadi shambulio la benki ya haraka).
{% hint style="success" %}
Kwa kuangalia mfano uliotolewa katika [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) na kutumia 0x4000 na 0x5000 badala ya 0x400 na 0x500 kama saizi za kipande (kuepuka tcaches) inawezekana kuona kwamba **leo** kosa **`malloc(): unsorted double linked list corrupted`** linasababishwa.
Kwa kuangalia mfano uliotolewa katika [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) na kutumia 0x4000 na 0x5000 badala ya 0x400 na 0x500 kama saizi za vipande (kuepuka Tcache) inawezekana kuona kwamba **leo** kosa **`malloc(): unsorted double linked list corrupted`** linasababishwa.
Kwa hivyo, shambulio la benki isiyo na mpangilio sasa (pamoja na ukaguzi mwingine) pia inahitaji kuweza kurekebisha orodha iliyodoubli ili hii ipuuzwe `victim->bck->fd == victim` au sivyo `victim->fd == av (arena)`. Hii inamaanisha kwamba anwani ambapo tunataka kuandika lazima iwe na anwani ya kipande bandia katika nafasi yake ya `fd` na kwamba kipande bandia `fd` inaelekeza kwenye uwanja.
Kwa hivyo, shambulio la benki isiyopangwa sasa (miongoni mwa ukaguzi mwingine) pia inahitaji kuweza kurekebisha orodha iliyodoubli ili hii ipuuzwe `victim->bk->fd == victim` au sivyo `victim->fd == av (arena)`, ambayo inamaanisha kwamba anwani ambapo tunataka kuandika lazima iwe na anwani ya kipande bandia katika nafasi yake ya `fd` na kwamba kipande bandia `fd` inaelekeza kwenye uwanja.
{% endhint %}
{% hint style="danger" %}
Tafadhali kumbuka kuwa shambulio hili linaharibu benki isiyo na mpangilio (hivyo ndogo na kubwa pia). Kwa hivyo tunaweza **kutumia mgawo kutoka kwa benki ya haraka sasa** (programu yenye utata zaidi inaweza kufanya mgawo mwingine na kugonga), na kuzindua hii lazima **tugawe saizi ile ile au programu itaanguka.**
Tafadhali kumbuka kuwa shambulio hili linaharibu benki isiyopangwa (hivyo ndogo na kubwa pia). Kwa hivyo tunaweza **kutumia vipangi kutoka kwa benki ya haraka sasa** (programu yenye utata zaidi inaweza kufanya vipangi vingine na kugonga), na kuzindua hii tunapaswa **kutenga saizi sawa au programu itaanguka.**
Tafadhali kumbuka kwamba kufanya **`global_max_fast`** inaweza kusaidia katika kesi hii kwa kuamini kwamba benki ya haraka itaweza kushughulikia mgawo wote mwingine hadi kudukuliwa kukamilika.
Tafadhali kumbuka kwamba kubadilisha **`global_max_fast`** kunaweza kusaidia katika kesi hii kwa kuamini kwamba benki ya haraka itaweza kushughulikia vipangi vingine vyote hadi kudukua kukamilika.
{% endhint %}
Msimbo kutoka [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) unaelezea vizuri, ingawa ikiwa utabadilisha mallocs kuweka kumbukumbu kubwa ya kutosha ili isimalize katika tcache unaweza kuona kosa lililotajwa hapo awali linalozuia mbinu hii: **`malloc(): unsorted double linked list corrupted`**
Msimbo kutoka [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) unaelezea vizuri, ingawa ikiwa utabadilisha mallocs kuweka kumbukumbu kubwa ya kutosha ili isimalize kwenye Tcache unaweza kuona kosa lililotajwa hapo awali linalozuia mbinu hii: **`malloc(): unsorted double linked list corrupted`**
## Shambulio la Unsorted Bin Infoleak
## Shambulio la Kuvuja Taarifa la Benki Isiyopangwa
Hii ni dhana ya msingi sana. Vipande katika benki isiyo na mpangilio vitakuwa na viashiria vya mara mbili kujenga benki. Kipande cha kwanza katika benki isiyo na mpangilio kwa kweli kitakuwa na **FD** na **BK** viungo **vinavyoelekeza sehemu ya uwanja kuu (libc)**.\
Kwa hivyo, ikiwa unaweza **kuweka kipande ndani ya benki isiyo na mpangilio na kusoma** (tumia baada ya kufuta) au **kuialokata tena bila kubadilisha angalau 1 ya viashiria** kisha **kusoma** hiyo, unaweza kuwa na **vuvuzela ya libc**.
Hii ni dhana ya msingi sana. Vipande katika benki isiyopangwa vitakuwa na viunganishi. Kipande cha kwanza katika benki isiyopangwa kimsingi kitakuwa na viungo vya **`fd`** na **`bk`** **vinaelekeza sehemu ya uwanja mkuu (Glibc)**.\
Kwa hivyo, ikiwa unaweza **kuweka kipande ndani ya benki isiyopangwa na kusoma** (tumia baada ya kufuta) au **kuipanga tena bila kubadilisha angalau 1 ya viunganishi** kisha **kusoma** hiyo, unaweza kupata **uvujaji wa taarifa ya Glibc**.
[**Shambulio linalotumiwa katika andiko hili**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), lilikuwa kutumia muundo wa vipande 4 (A, B, C na D - D ni kuzuia konsolidisheni na kipande cha juu) hivyo kuzidi kwa herufi sifuri katika B kulitumika kufanya C ionyeshe kuwa B haikutumiwa. Pia, katika B data ya `prev_size` ilibadilishwa ili saizi badala ya kuwa saizi ya B ilikuwa A+B.\
Kisha C ilifutwa, na konsolidishwa na A+B (lakini B ilikuwa bado inatumika). Kipande kipya cha saizi ya A kilialokata na kisha anwani zilizovuja za libc ziliandikwa kwenye B kutoka ambapo zilivuja.
[**Shambulio linalotumiwa katika andiko hili**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), lilikuwa kutumia muundo wa vipande 4 (A, B, C na D - D ni kuzuia konsolidisheni na kipande cha juu) hivyo kuzidi kwa herufi sifuri katika B kulitumika kufanya C ionyeshe kuwa B haikutumiwa. Pia, katika B data ya `prev_size` ilibadilishwa ili saizi badala ya kuwa saizi ya B iwe A+B.\
Kisha C ilifutwa, na konsolidisheni na A+B (lakini B ilikuwa bado inatumika). Kipande kipya cha saizi ya A kilipangiwa na kisha anwani zilizovuja za libc ziliandikwa kwenye B kutoka ambapo zilivuja.
## Marejeo & Mifano Mingine
## Marejeo & Mifano Nyingine
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap)
* Lengo ni kubadilisha kipengee la kipekee na thamani kubwa kuliko 4869 ili iwezekane kupata bendera na PIE haijashughulikiwa.
* Inawezekana kuzalisha vipande vya saizi za kiholela na kuna kipindupindu cha rundo na saizi inayotakiwa.
* Shambulio linaanza kwa kuunda vipande 3: kipande0 kutumia kipindupindu, kipande1 kufanyiwa kipindupindu na kipande2 ili kipande cha juu kisikonsolidishwe na vingine.
* Kisha, kipande1 kinafutwa na kipande0 kinafanyiwa kipindupindu ili kielekezi cha `bk` cha kipande1 kiashirie: `bk = magic - 0x10`
* Kisha, kipande3 kinalokatawa na saizi sawa na kipande1, ambacho kitazindua shambulio la benki isiyo na mpangilio na kurekebisha thamani ya kipengee la kipekee, ikifanya iwezekane kupata bendera.
* Lengo ni kubadilisha kigezo la jumla na thamani kubwa kuliko 4869 ili iwezekane kupata bendera na PIE haipo.
* Inawezekana kuzalisha vipande vya saizi za kiholela na kuna kovu la rundo na saizi inayotakiwa.
* Shambulio linaanza kwa kuunda vipande 3: kipande0 kutumia kovu, kipande1 kufanyiwa kovu na kipande2 ili kuzuia konsolidisheni na vipande vilivyotangulia.
* Kisha, kipande1 kinafutwa na kipande0 kinafanyiwa kovu kwenye kielekezi cha `bk` cha kipande1 kinachoelekeza: `bk = magic - 0x10`
* Kisha, kipande3 kinapangiwa saizi sawa na kipande1, ambacho kitazindua shambulio la benki isiyopangwa na kurekebisha thamani ya kigezo la jumla, kuruhusu kupata bendera.
* [**https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html)
* Kazi ya kufunga ina mapungufu kwa sababu ikiwa viashiria vyote viwili vilivyopitishwa ni sawa itarealloc juu yake na kisha kuifuta lakini kurudisha kielekezi kwa eneo hilo lililofutwa ambalo linaweza kutumika.
* Kwa hivyo, **vipande 2 vinavyoundwa**: **kipande0** ambacho kitakusanywa na yenyewe na kipande1 kuzuia konsolidisheni na kipande cha juu. Kisha, **kazi ya kufunga inaitwa na kipande0** mara mbili ambayo itasababisha matumizi baada ya kufuta.
* Kisha, **kazi ya `view`** inaitwa na index 2 (ambayo ni index ya kipande cha matumizi baada ya kufuta), ambayo ita **vujisha anwani ya libc**.
* Kwa kuwa binary ina ulinzi wa tu malloc saizi kubwa kuliko **`global_max_fast`** hivyo hakuna fastbin inayotumiwa, shambulio la benki isiyo na mpangilio litatumika kurekebisha kipengee cha kipekee `global_max_fast`.
* Kisha, inawezekana kuita kazi ya hariri na index 2 (kielekezi cha matumizi baada ya kufuta) na kurekebisha kielekezi cha `bk` kuelekeza kwa `p64(global_max_fast-0x10)`. Kisha, kwa kuzalisha kipande kipya kutatumia anwani ya bure iliyoharibiwa hapo awali (0x20) itazindua shambulio la benki isiyo na mpangilio kurekebisha `global_max_fast` na thamani kubwa sana, kuruhusu sasa kuunda vipande katika benki za haraka.
* Kwa hivyo, **vipande 2 vinavyoundwa**: **kipande0** ambacho kitafungwa na yenyewe na kipande1 kuzuia konsolidisheni na kipande cha juu. Kisha, **kazi ya kufunga inaitwa na kipande0** mara mbili ambayo itasababisha matumizi baada ya kufuta.
* Kisha, **kazi ya `view`** inaitwa na index 2 (ambayo ni index ya kipande baada ya kutumia baada ya kufuta), ambayo ita **vujisha anwani ya libc**.
* Kwa kuwa binary ina ulinzi wa kutoa malloc tu saizi kubwa kuliko **`global_max_fast`** hivyo hakuna fastbin inatumika, shambulio la benki isiyopangwa litatumika kurekebisha kigezo cha jumla `global_max_fast`.
* Kisha, inawezekana kuita kazi ya hariri na index 2 (kielekezi baada ya kutumia baada ya kufuta) na kubadilisha kielekezi cha `bk` kuonyesha `p64(global_max_fast-0x10)`. Kisha, kuunda kipande kipya kutatumia kielekezi kilichofutwa hapo awali (0x20) kutazindua shambulio la benki isiyopangwa kurekebisha `global_max_fast` na thamani kubwa sana, kuruhusu sasa kuunda vipande katika benki za haraka.
* Sasa shambulio la **benki ya haraka** linatekelezwa:
* Kwanza kabisa inagundulika kwamba inawezekana kufanya kazi na **vipande vya haraka vya saizi 200** kwenye eneo la **`__free_hook`**:
* <pre class="language-c"><code class="lang-c">gef➤ p &#x26;__free_hook
@ -73,23 +73,13 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6077f &#x3C;_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
</code></pre>
* Ikiwa tutafanikiwa kupata kipande cha haraka cha ukubwa wa 0x200 katika eneo hili, itakuwa inawezekana kubadilisha pointer ya kazi ambayo itatekelezwa
* Kwa hili, kipande kipya cha ukubwa wa `0xfc` huzalishwa na kazi iliyochanganywa huitwa mara mbili na pointer hiyo, kwa njia hii tunapata pointer kwa kipande kilichofutwa cha ukubwa wa `0xfc*2 = 0x1f8` katika bakuli la haraka.
* Kwa hili, kipande kipya cha ukubwa wa `0xfc` hujengwa na kazi iliyochanganywa huitwa mara mbili na pointer hiyo, njia hii tunapata pointer kwa kipande kilichofutwa cha ukubwa wa `0xfc*2 = 0x1f8` katika bakuli la haraka.
* Kisha, kazi ya kuhariri inaitwa katika kipande hiki kurekebisha anwani ya **`fd`** ya bakuli hili la haraka ili ielekee kwenye kazi ya awali ya **`__free_hook`**.
* Kisha, kipande chenye ukubwa wa `0x1f8` huzalishwa ili kupata kutoka kwa bakuli la haraka kipande cha hapana kinachofuata kwa hivyo kipande kingine cha ukubwa wa `0x1f8` huzalishwa ili kupata kipande cha bakuli la haraka katika **`__free_hook`** ambayo inabadilishwa na anwani ya kazi ya **`system`**.
* Na hatimaye kipande kinachohifadhi string `/bin/sh\x00` hurudishwa kwa kuita kazi ya kufuta, ikichochea kazi ya **`__free_hook`** ambayo inaelekeza kwa mfumo na `/bin/sh\x00` kama parameta.
* Kisha, kipande chenye ukubwa wa `0x1f8` hujengwa ili kupata kutoka kwa bakuli la haraka kipande kisichofaa cha awali hivyo kipande kingine cha ukubwa wa `0x1f8` hujengwa ili kupata kipande cha bakuli la haraka katika **`__free_hook`** ambayo inabadilishwa na anwani ya kazi ya **`system`**.
* Na hatimaye kipande kinachohifadhi string `/bin/sh\x00` huru kwa kuita kazi ya kufuta, kuzindua kazi ya **`__free_hook`** ambayo inaelekeza kwa mfumo na `/bin/sh\x00` kama parameter.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Mfano mwingine wa kutumia kipeperushi cha 1B kufanya kipande kuwa imara katika bakuli lisilo na mpangilio na kupata libc infoleak na kisha kufanya shambulio la bakuli la haraka kubadilisha kitanzi cha malloc na anwani ya kifaa cha moja kwa moja
<details>
<summary><strong>Jifunze AWS hacking kutoka sifuri hadi shujaa na</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Njia nyingine za kusaidia HackTricks:
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**swag rasmi wa PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
* Mfano mwingine wa kutumia kipeperushi cha 1B kufanya kipande cha unsorted bin na kupata libc infoleak na kisha kufanya shambulio la bakuli la haraka kubadilisha kitanzi cha malloc na anwani ya one gadget
* [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
* Tunaweza tu kutenga vipande vya ukubwa zaidi ya `0x100`.
* Badilisha `global_max_fast` kwa kutumia shambulio la Unsorted Bin (inafanya kazi 1/16 ya wakati kutokana na ASLR, kwa sababu tunahitaji kurekebisha bits 12, lakini lazima tuweke bits 16).
* Shambulio la Fast Bin kubadilisha safu ya kimataifa ya vipande. Hii hutoa msingi wa kusoma/ku