Translated ['binary-exploitation/heap/unlink-attack.md', 'binary-exploit

This commit is contained in:
Translator 2024-06-11 23:19:53 +00:00
parent 8a4273a269
commit 82216241aa
2 changed files with 50 additions and 51 deletions

View file

@ -2,21 +2,21 @@
<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 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 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 [**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 kudukua 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
Wakati shambulio hili lilipogunduliwa kwa kiasi kikubwa liliruhusu WWW (Andika Nini Wapi), hata hivyo, baadhi ya **uchunguzi uliongezwa** kufanya toleo jipya la shambulio liwe la kuvutia zaidi na **ngumu zaidi na **isiyofaa**.
Wakati shambulio hili lilipogunduliwa kwa kiasi kikubwa iliruhusu WWW (Andika Nini Wapi), hata hivyo, **uchunguzi fulani uliongezwa** ukifanya toleo jipya la shambulio kuwa la kuvutia zaidi na **ngumu zaidi na **hakina maana**.
### Mfano wa Kanuni:
@ -93,52 +93,43 @@ return 0;
### Lengo
* Badilisha kipande cha kidole kwenye steki ili kielekee steki hivyo ni rahisi kubadilisha maudhui ya steki kwa kuandika kwenye kipande
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 vile 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 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 katika maeneo ya kiholela (kama kwenye GOT).
### Mahitaji
* Udhibiti fulani kwenye kumbukumbu (k.m. steki) ili uweze kuunda vikundi vya thamani kwa baadhi ya sifa.
* Kuvuja kwa steki ili kuweza kuweka viashiria vya kipande bandia.
* Udhibiti fulani katika kumbukumbu (k.m. stack) ili kuunda vikundi vichache vya vipande 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.
* Kwenye kikundi1 mshambuliaji anaunda muundo wa kipande bandia:
* Ili kuepuka ulinzi anahakikisha kuwa uga `ukubwa` ni sahihi ili kuepuka kosa: `ukubwa ulioharibika dhidi ya ukubwa uliopita wakati wa kufanya kazi`
* na maeneo `fd` na `bk` ya kipande bandia yanalingana na mahali pointer wa kikundi1 unahifadhiwa kwa vipimo vya -3 na -2 mtawalia hivyo `kikundi_bandia->fd->bk` na `kikundi_bandia->bk->fd` inaelekeza kwenye nafasi kwenye kumbukumbu (steki) ambapo anwani halisi ya kikundi1 inapatikana:
* Kuna vikundi vichache vya vipande (kipande1 na kipande2)
* Mshambuliaji anadhibiti maudhui ya kipande1 na vichwa vya kipande2.
* Katika kipande1 mshambuliaji anaunda muundo wa kipande bandia:
* Ili kuzidi kinga 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 unakielekeza mahali ambapo kielekezi cha kipande1 kimehifadhiwa kwa kutumia offsets ya -3 na -2 mtawalia hivyo `kipande_bandia->fd->bk` na `kipande_bandia->bk->fd` vinakielekeza mahali kwenye kumbukumbu (stack) ambapo anwani halisi ya kipande1 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>
* Vichwa vya kikundi2 vinabadilishwa kuonyesha kuwa kipande kilichopita hakijatumika na ukubwa ni ukubwa wa kipande bandia kilichomo.
* Wakati kipande cha pili kinapofutwa basi kipande bandia hiki kinatenganishwa kutokea:
* `kikundi_bandia->fd->bk` = `kikundi_bandia->bk`
* `kikundi_bandia->bk->fd` = `kikundi_bandia->fd`
* Awali ilifanywa kuwa `kikundi_bandia->fd->bk` na `kikundi_bandia->fd->bk` inaelekeza kwenye mahali sawa (eneo kwenye steki ambapo `kikundi1` ilihifadhiwa, hivyo ilikuwa orodha halali). Kwa kuwa **zote zinaelekeza kwenye mahali sawa** ni ile ya mwisho (`kikundi_bandia->bk->fd = kikundi_bandia->fd`) itakayochukua **athari**.
* Hii ita**badilisha pointer wa kikundi1 kwenye steki kwenda kwenye anwani (au herufi) iliyohifadhiwa nyuma ya anwani 3 kwenye steki**.
* Hivyo, ikiwa mshambuliaji anaweza kudhibiti maudhui ya kikundi1 tena, ataweza **kuandika ndani ya steki** na uwezo wa kubadilisha anwani ya kurudi akiruka canary na kubadilisha thamani na viashiria vya mchanganyiko wa ndani. Hata kubadilisha tena anwani ya kikundi1 iliyohifadhiwa kwenye steki kwenda mahali tofauti ambapo ikiwa mshambuliaji anaweza kudhibiti tena maudhui ya kikundi1 ataweza kuandika mahali popote.
* Tafadhali elewa kuwa hili lilikuwa linawezekana kwa sababu **anwani zilizohifadhiwa ziko kwenye steki**. Hatari na unyonyaji inaweza kutegemea **anwani za kipande bandia zinahifadhiwa wapi**.
* Vichwa vya kipande2 vinabadilishwa kuonyesha kuwa kipande kilichotangulia hakijatumika na ukubwa ni ukubwa wa kipande bandia kilichomo.
* Wakati kipande cha pili kinapofutwa basi kipande bandia hiki kinatenganishwa kikifanyika:
* `kipande_bandia->fd->bk` = `kipande_bandia->bk`
* `kipande_bandia->bk->fd` = `kipande_bandia->fd`
* Awali ilifanywa kuwa `kipande_bandia->fd->bk` na `kipande_bandia->fd->bk` vinakielekeza mahali moja (eneo kwenye stack ambapo `kipande1` ilihifadhiwa, hivyo ilikuwa orodha halali). Kwa kuwa **vyote vinakielekeza mahali moja** ni mmoja wa mwisho (`kipande_bandia->bk->fd = kipande_bandia->fd`) tu ndio utachukua **athari**.
* Hii ita**andika upya kielekezi cha kipande1 kwenye stack kwenye anwani (au baits) zilizohifadhiwa anwani 3 kabla kwenye stack**.
* Hivyo, ikiwa mshambuliaji angeweza kudhibiti maudhui ya kipande1 tena, ataweza **kuandika ndani ya stack** akiruhusu uwezekano wa kuandika upya anwani ya kurudi akiruka canary na kubadilisha thamani na kielekezi cha vipengele vya ndani. Hata kubadilisha tena anwani ya kipande1 iliyohifadhiwa kwenye stack kwenda eneo tofauti ambapo ikiwa mshambuliaji angeweza kudhibiti tena maudhui ya kipande1 ataweza kuandika mahali popote.
* Tafadhali elewa kuwa hili lilikuwa linawezekana kwa sababu **anwani zilizohifadhiwa ziko 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>
## Marejeo
* [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 limefanyiwa:
* 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 steki kuna safu ya anwani za malloc'ed. Shambulizi la unlink linatekelezwa ili kuweza kuweka kipande hapa, hivyo kuweza kudhibiti viashiria vya safu ya anwani za malloc'ed. Kisha, kuna utendaji mwingine unaoruhusu kubadilisha maudhui ya vikundi katika anwani hizi, ambayo inaruhusu kuashiria anwani kwa GOT, kubadilisha anwani za kazi kupata vuvuli na RCE.
*
<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 **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.
</details>
* Katika mfano huu, badala ya stack kuna safu ya anwani zilizopewa malloc. Shambulizi la unlink linafanywa ili kuweza kuweka kipande hapa, hivyo kuweza kudhibiti kielekezi cha safu ya anwani zilizopewa malloc. 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 kufanya 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.

View file

@ -1,8 +1,8 @@
# First Fit
# Kwanza Fiti
<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 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,24 +10,24 @@ Njia nyingine za kusaidia HackTricks:
* 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
* **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>
## **First Fit**
## **Kwanza Fiti**
Wakati unafuta kumbukumbu katika programu ukitumia glibc, "bins" tofauti hutumiwa kusimamia vipande vya kumbukumbu. Hapa kuna maelezo rahisi ya hali mbili za kawaida: unsorted bins na fastbins.
Unapofuta kumbukumbu katika programu ukitumia glibc, "bins" tofauti hutumiwa kusimamia vipande vya kumbukumbu. Hapa kuna maelezo rahisi ya hali mbili za kawaida: unsorted bins na fastbins.
### Unsorted Bins
Unapofuta kipande cha kumbukumbu ambacho sio kipande cha haraka, kinaenda kwenye bin isiyopangwa. Bin hii inafanya kazi kama orodha ambapo vipande vipya vilivyofutwa huongezwa mbele (kwenye "kichwa"). Unapoomba kipande kipya cha kumbukumbu, mpangishaji huangalia bin isiyopangwa kutoka nyuma (kwenye "mkia") ili kupata kipande kikubwa cha kutosha. Ikiwa kipande kutoka kwenye bin isiyopangwa ni kikubwa kuliko unachohitaji, kinagawanywa, sehemu ya mbele ikirudishwa na sehemu iliyobaki ikibaki kwenye bin.
Unapofuta kipande cha kumbukumbu ambacho sio kipande cha haraka, kinaenda kwenye bin isiyopangwa. Bin hii inafanya kazi kama orodha ambapo vipande vipya vilivyofutwa huongezwa mbele (kwenye "kichwa"). Unapohitaji kipande kipya cha kumbukumbu, mpangishaji huangalia bin isiyopangwa kutoka nyuma (kwenye "mkia") ili kupata kipande kikubwa cha kutosha. Ikiwa kipande kutoka kwenye bin isiyopangwa ni kikubwa kuliko unachohitaji, kinagawanywa, sehemu ya mbele ikirudishwa na sehemu iliyobaki ikibaki kwenye bin.
Mfano:
* Unatenga bayti 300 (`a`), kisha bayti 250 (`b`), kisha unafuta `a` na kuomba tena bayti 250 (`c`).
* Unapofuta `a`, inaenda kwenye bin isiyopangwa.
* Ikiwa kisha unaomba tena bayti 250, mpangishaji anapata `a` kwenye mkia na kugawanya, kurudisha sehemu inayofaa ombi lako na kuiweka iliyobaki kwenye bin.
* `c` itakuwa inaelekeza kwa `a` ya awali na kujazwa na `a's`.
* Ikiwa kisha unaomba tena bayti 250, mpangishaji anapata `a` kwenye mkia na kugawanya, kurudisha sehemu inayofaa ombi lako na kubaki sehemu iliyobaki kwenye bin.
* `c` itakuwa ikielekeza kwa `a` ya awali na kujazwa na `a's`.
```c
char *a = malloc(300);
char *b = malloc(250);
@ -36,13 +36,13 @@ char *c = malloc(250);
```
### Fastbins
Fastbins hutumiwa kwa vipande vidogo vya kumbukumbu. Tofauti na vyungu visivyopangwa, fastbins huongeza vipande vipya kichwani, ikiumba tabia ya mwisho-mwanzo (LIFO). Ikiwa unahitaji kipande kidogo cha kumbukumbu, mpangishaji atachukua kutoka kichwani mwa fastbin.
Fastbins hutumiwa kwa vipande vidogo vya kumbukumbu. Tofauti na vyombo visivyopangwa, fastbins huongeza vipande vipya kichwani, ikiumba tabia ya mwisho kuingia kwanza (LIFO). Ikiwa unahitaji kipande kidogo cha kumbukumbu, mpangishaji atatoa kutoka kichwani mwa fastbin.
Mfano:
* Unagawa vipande vinne vya baiti 20 kila kimoja (`a`, `b`, `c`, `d`).
* Unapovifuta kwa mpangilio wowote, vipande vilivyofutwa vinaongezwa kichwani mwa fastbin.
* Ikiwa baadaye unahitaji kipande cha baiti 20, mpangishaji atarudisha kipande kilichofutwa hivi karibuni zaidi kutoka kichwani mwa fastbin.
* Unapofungua kwa mpangilio wowote, vipande vilivyofunguliwa huongezwa kichwani mwa fastbin.
* Ikiwa baadaye unahitaji kipande cha baiti 20, mpangishaji atarudisha kipande kilichofunguliwa hivi karibuni zaidi kutoka kichwani mwa fastbin.
```c
char *a = malloc(20);
char *b = malloc(20);
@ -59,6 +59,14 @@ d = malloc(20); // a
```
## Marejeo Mengine & Mifano
* [https://heap-exploitation.dhavalkapil.com/attacks/first\_fit](https://heap-exploitation.dhavalkapil.com/attacks/first\_fit)
* [https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/)
* ARM64. Matumizi baada ya kuachiliwa: Unda kitu cha mtumiaji, kiachie, unda kitu ambacho kinapata kipande kilichoachiliwa na kuruhusu kuandika kwake, **kubadilisha nafasi ya nenosiri la mtumiaji** kutoka kwa ile ya awali. Tumia mtumiaji tena ili **kipuuze ukaguzi wa nenosiri**
* [**https://heap-exploitation.dhavalkapil.com/attacks/first\_fit**](https://heap-exploitation.dhavalkapil.com/attacks/first\_fit)
* [**https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/**](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/)
* ARM64. Matumizi baada ya kuachilia: Unda kitu cha mtumiaji, acha, unda kitu ambacho kinapata kipande kilichoachiliwa na kuruhusu kuandika kwake, **kubadilisha nafasi ya nywila ya mtumiaji** kutoka kwa ile iliyotangulia. Tumia tena mtumiaji kwa **kupita kwa ukaguzi wa nywila**
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example)
* Programu inaruhusu kuunda maelezo. Maelezo yatakuwa na habari ya maelezo katika malloc(8) (na pointer kwa kazi inayoweza kuitwa) na pointer kwa malloc nyingine(\<size>) na maudhui ya maelezo.
* Shambulio litakuwa kuunda maelezo 2 (maelezo0 na maelezo1) na maudhui makubwa ya malloc kuliko saizi ya habari ya maelezo na kisha kuyafuta ili yapate kwenye sanduku la haraka (au tcache).
* Kisha, unda maelezo mengine (maelezo2) yenye saizi ya maudhui 8. Maudhui yatakuwa kwenye maelezo1 kwani kipande kitatumika tena, ambapo tunaweza kubadilisha pointer ya kazi ili ielekee kwenye kazi ya ushindi na kisha Tumia-Baada-ya-Kuachilia maelezo1 kuita pointer ya kazi mpya.
* [**https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html)
* Ni rahisi kuweka kumbukumbu fulani, andika thamani inayotakiwa, ifute, ibadilishe na kwa kuwa data ya awali bado ipo, itashughulikiwa kulingana na muundo mpya unaotarajiwa katika kipande hicho, ikifanya iwezekane kuweka thamani au kupata bendera.
* [**https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html)
* Katika kesi hii ni lazima kuandika 4 ndani ya kipande maalum ambacho ni cha kwanza kuwa allocated (hata baada ya kufuta kwa nguvu vyote). Kwenye kila kipande kipya kilicho allocated, namba yake katika index ya safu inahifadhiwa. Kisha, allocate vipande 4 (+ cha kwanza kilicho allocated), cha mwisho kitakuwa na 4 ndani yake, kifute na kulazimisha upya wa kipande cha kwanza, ambacho kitatumia kipande kilichofutwa mwisho ambacho ni kile kilicho na 4 ndani yake.