- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
Le **déni de service par expression régulière (ReDoS)** est une attaque de [déni de service](https://owasp.org/www-community/attacks/Denial\_of\_Service) qui exploite le fait que la plupart des implémentations d'expressions régulières peuvent atteindre des situations extrêmes qui les font fonctionner très lentement (exponentiellement lié à la taille de l'entrée). Un attaquant peut alors amener un programme utilisant une expression régulière à entrer dans ces situations extrêmes et à rester bloqué pendant très longtemps.
L'algorithme naïf d'expression régulière construit un [Automate Fini Non-Déterministe (AFND)](https://en.wikipedia.org/wiki/Nondeterministic\_finite\_state\_machine), qui est une machine à états finis où pour chaque paire d'état et de symbole d'entrée, il peut y avoir plusieurs états suivants possibles. Ensuite, le moteur commence à effectuer des transitions jusqu'à la fin de l'entrée. Comme il peut y avoir plusieurs états suivants possibles, un algorithme déterministe est utilisé. Cet algorithme essaie un par un tous les chemins possibles (si nécessaire) jusqu'à ce qu'une correspondance soit trouvée (ou que tous les chemins soient essayés et échouent).
Pour l'entrée `aaaaX`, il y a 16 chemins possibles dans le graphe ci-dessus. Mais pour `aaaaaaaaaaaaaaaaX`, il y a 65536 chemins possibles, et le nombre double pour chaque `a` supplémentaire. C'est un cas extrême où l'algorithme naïf est problématique, car il doit passer sur de nombreux chemins, puis échouer.
Remarquez que tous les algorithmes ne sont pas naïfs, et que les algorithmes d'expression régulière peuvent en fait être écrits de manière efficace. Malheureusement, la plupart des moteurs d'expression régulière aujourd'hui essaient de résoudre non seulement les expressions régulières "pures", mais aussi les expressions régulières "élargies" avec des "ajouts spéciaux", tels que des références arrière qui ne peuvent pas toujours être résolues efficacement (voir **Patterns for non-regular languages** dans [Wiki-Regex](https://en.wikipedia.org/wiki/Regular\_expression) pour plus de détails). Ainsi, même si l'expression régulière n'est pas "élargie", un algorithme naïf est utilisé.
Tous les exemples ci-dessus sont susceptibles de l'entrée `aaaaaaaaaaaaaaaaaaaaaaaa!` (la longueur d'entrée minimale peut varier légèrement en fonction des machines plus rapides ou plus lentes).
Dans un CTF (ou une prime de bug), vous **contrôlez l'expression régulière avec laquelle une information sensible (le drapeau) est mise en correspondance**. Ensuite, si cela peut être utile, vous pouvez faire **geler la page (temps d'attente ou temps de traitement plus long)** si une **expression régulière correspond** et **pas si elle ne correspond pas**. De cette façon, vous pourrez **exfiltrer** la chaîne **caractère par caractère** :
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.