- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
La **Denegación de Servicio de Expresiones Regulares (ReDoS)** es un ataque de [Denegación de Servicio](https://owasp.org/www-community/attacks/Denial\_of\_Service), que explota el hecho de que la mayoría de las implementaciones de Expresiones Regulares pueden llegar a situaciones extremas que les hacen trabajar muy lentamente (relacionado exponencialmente con el tamaño de la entrada). Un atacante puede hacer que un programa que utiliza una Expresión Regular entre en estas situaciones extremas y luego se cuelgue durante mucho tiempo.
El algoritmo ingenuo de Expresiones Regulares construye un [Autómata Finito No Determinista (NFA)](https://en.wikipedia.org/wiki/Nondeterministic\_finite\_state\_machine), que es una máquina de estados finitos donde para cada par de estado y símbolo de entrada puede haber varios posibles estados siguientes. Luego, el motor comienza a hacer transiciones hasta el final de la entrada. Dado que puede haber varios posibles estados siguientes, se utiliza un algoritmo determinista. Este algoritmo intenta uno por uno todos los posibles caminos (si es necesario) hasta que se encuentra una coincidencia (o se prueban todos los caminos y fallan).
Para la entrada `aaaaX` hay 16 posibles caminos en el gráfico anterior. Pero para `aaaaaaaaaaaaaaaaX` hay 65536 posibles caminos, y el número se duplica por cada `a` adicional. Este es un caso extremo en el que el algoritmo ingenuo es problemático, porque debe pasar por muchos caminos y luego fallar.
Tenga en cuenta que no todos los algoritmos son ingenuos, y de hecho los algoritmos de Regex pueden escribirse de manera eficiente. Desafortunadamente, la mayoría de los motores de Regex hoy en día intentan resolver no solo Regex "puros", sino también Regex "expandidos" con "adiciones especiales", como referencias inversas que no siempre se pueden resolver de manera eficiente (consulte **Patrones para lenguajes no regulares** en [Wiki-Regex](https://en.wikipedia.org/wiki/Regular\_expression) para obtener más detalles). Por lo tanto, incluso si la Regex no está "expandida", se utiliza un algoritmo ingenuo.
Todos los anteriores son susceptibles a la entrada `aaaaaaaaaaaaaaaaaaaaaaaa!` (la longitud mínima de entrada podría cambiar ligeramente al usar máquinas más rápidas o más lentas).
En un CTF (o recompensa por errores) tal vez **controles la Regex con la que se empareja una información sensible (la bandera)**. Entonces, si puede ser útil hacer que la **página se congele (tiempo de espera o tiempo de procesamiento más largo)** si se **empareja una Regex** y **no si no lo hace**. De esta manera, podrás **exfiltrar** la cadena **carácter por carácter**:
* En [**esta publicación**](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets) puedes encontrar esta regla de ReDoS: `^(?=<flag>)((.*)*)*salt$`
* Ejemplo: `^(?=HTB{sOmE_fl§N§)((.*)*)*salt$`
* En [**esta solución**](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html) puedes encontrar esta: `<flag>(((((((.*)*)*)*)*)*)*)!`
* En [**esta solución**](https://ctftime.org/writeup/25869) utilizó: `^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$`
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.